1.先来瞅瞅Gensim提供的词向量长啥样(glove.6B.300d.txt):
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维向量)
4.最后看看序列化后的文件长啥样(pickled_model_300d)
【Pay师兄有话说】不要用编辑器手动改文件,因为会在文件头加上BOM,造成各种编码bug。