我正在从word2vec C代码生成的二进制文件中加载经过预训练的向量,如下所示:
model_1 = Word2Vec.load_word2vec_format('vectors.bin', binary=True)
我正在使用这些向量来生成句子的向量表示,这些句子包含的单词可能在vectors.bin
中尚不存在向量。例如,如果vectors.bin
没有与“酸奶”相关的向量,我会尝试
yogurt_vector = model_1['yogurt']
我得到KeyError: 'yogurt'
,这很有道理。我想要的是能够接受没有相应向量的句子单词并将其表示形式添加到model_1
。我从this post知道,您不能继续训练C向量。那么有没有办法为没有向量的单词训练一个新模型,例如model_2
并合并model_2
和model_1
?
或者,是否有一种方法可以在我实际尝试检索模型之前测试模型是否包含单词,以便至少可以避免KeyError?
python大神给出的解决方案
避免密钥错误很容易:
[x for x in 'this model hus everything'.split() if x in model_1.vocab]
更为困难的问题是将一个新词合并到现有模型中。问题是word2vec计算出两个单词彼此相邻的可能性,并且如果单词“酸奶”不在模型训练的第一主体中,则该单词也不在任何一个单词的旁边,因此第二个模型不会与第一个相关。
您可以查看保存模型时的内部信息(使用numpy.save),我很想与您合作以编写允许添加词汇的代码。