我正在从 word2vec C 代码生成的二进制文件中加载预训练向量,内容如下:
model_1 = Word2Vec.load_word2vec_format('vectors.bin', binary=True)
我正在使用这些向量生成句子的向量表示,这些句子包含 vectors.bin
中可能不存在的向量的单词。例如,如果 vectors.bin
没有与单词“yogurt”相关联的向量,我尝试
yogurt_vector = model_1['yogurt']
我得到 KeyError: 'yogurt'
,这很有意义。我想要的是能够获取没有对应向量的句子单词并将它们的表示添加到 model_1
。我从this post知道你不能继续训练 C 向量。那么有没有办法为没有向量的单词训练一个新模型,比如 model_2
,并将 model_2
与 model_1
合并?
或者,有没有办法在我实际尝试检索单词之前测试模型是否包含单词,这样我至少可以避免 KeyError?
最佳答案
避免按键错误很容易:
[x for x in 'this model hus everything'.split() if x in model_1.vocab]
更困难的问题是将新词合并到现有模型中。问题是 word2vec 计算两个词彼此相邻的可能性,如果“酸奶”这个词不在模型训练的第一个 body 中,它就不在这些词中的任何一个旁边,所以第二个模型与第一个无关。
您可以在保存模型时查看内部结构(使用 numpy.save),我有兴趣与您一起编写允许添加词汇的代码。
关于python - Gensim word2vec 增强或合并预训练向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29591581/