在线更新Word2Vec模型时遇到问题。
我有一个文档并据此建立模型。但是此文档可以用新词进行更新,因此我通常需要更新词汇和模型。
我知道在gensim 0.13.4.1中我们可以做到
我的代码:
model = gensim.models.Word2Vec(size=100, window=10, min_count=5, workers=11, alpha=0.025, min_alpha=0.025, iter=20)
model.build_vocab(sentences, update=False)
model.train(sentences, epochs=model.iter, total_examples=model.corpus_count)
model.save('model.bin')
在此之后,我有了新词。对于e.x。:
sen2 = [['absd', 'jadoih', 'sdohf'], ['asdihf', 'oisdh', 'oiswhefo'], ['a', 'v', 'b', 'c'], ['q', 'q', 'q']]
model.build_vocab(sen2, update=True)
model.train(sen2, epochs=model.iter, total_examples=model.corpus_count)
怎么了?我该如何解决我的问题?
答案 0 :(得分:2)
您的模型设置为忽略出现次数少于5的单词:min_count=5
。实际上,它将在单个build_vocab()
调用中至少出现5次。 (它不会记住之前有3个,然后看到2个新事件,然后对所有5个进行训练。它需要一批中全部5个或更多。)
如果仅使用显示的微小数据集调用更新,则不会有新词出现。
通常,如果可能的话,您应该使用所有旧数据和新数据重新训练整个模型。这样可以确保对旧单词和新单词给予同等的影响,并且任何单词都将根据其组合频率得到适当处理。对Word2Vec
模型进行小的增量更新可能会冒着使新单词或继续出现的旧单词脱离有意义的安排的风险,而这些旧单词只能在原始(或更早)批次中进行训练。 (只有经过相同的交错训练周期的单词才能相对于彼此完全调整位置。)