Gensim加载GloVe提供的词向量的诸多Bug之终极解决

1.先来瞅瞅Gensim提供的词向量长啥样(glove.6B.300d.txt):

 Gensim加载GloVe提供的词向量的诸多Bug之终极解决_第1张图片

2.源文件->W2V的文件->序列化 

import _pickle
from gensim.models import KeyedVectors
from gensim.scripts.glove2word2vec import glove2word2vec


# 输入文件
glove_file = './glove.6B.300d.txt'

# 输出文件
tmp_file = "./tmp_word2vec_300d.txt"

# 转换成word2vec的词向量
_ = glove2word2vec(glove_file, tmp_file)

# 加载转化后的文件
model = KeyedVectors.load_word2vec_format(tmp_file, binary=False)

# 序列化
with open('./pickled_model_300d', 'wb') as f:
    _pickle.dump(model, f)

序列化完成,以后直接用序列化的文件进行操作就行了。 

# 测试模型
f = open('./pickled_model_300d', 'rb')
model = _pickle.load(f)
print(model.wv.similarity('have','has'))

 

3.再来看看转换成Word2Vec格式的长啥样(tmp_word2vec_300d.txt):

(多了一行,第1个数400000指的是400000个单词,300指的是每个单词embedding成了300维向量)

Gensim加载GloVe提供的词向量的诸多Bug之终极解决_第2张图片 

4.最后看看序列化后的文件长啥样(pickled_model_300d)

Gensim加载GloVe提供的词向量的诸多Bug之终极解决_第3张图片

【Pay师兄有话说】不要用编辑器手动改文件,因为会在文件头加上BOM,造成各种编码bug。

你可能感兴趣的:(技术杂记)