更新 gensim word2vec 模型
Posted
技术标签:
【中文标题】更新 gensim word2vec 模型【英文标题】:Update gensim word2vec model 【发布时间】:2014-04-02 23:34:11 【问题描述】:我在 gensim 中有一个 word2vec 模型,训练了超过 98892 个文档。对于句子数组中不存在的任何给定句子(即我训练模型的集合),我需要使用该句子更新模型,以便下次查询它会给出一些结果。我是这样做的:
new_sentence = ['moscow', 'weather', 'cold']
model.train(new_sentence)
并将其打印为日志:
2014-03-01 16:46:58,061 : INFO : training model with 1 workers on 98892 vocabulary and 100 features
2014-03-01 16:46:58,211 : INFO : reached the end of input; waiting to finish 1 outstanding jobs
2014-03-01 16:46:58,235 : INFO : training on 10 words took 0.1s, 174 words/s
现在,当我用类似的 new_sentence 查询大多数肯定(如model.most_similar(positive=new_sentence)
)时,它会给出错误:
Traceback (most recent call last):
File "<pyshell#220>", line 1, in <module>
model.most_similar(positive=['moscow', 'weather', 'cold'])
File "/Library/Python/2.7/site-packages/gensim/models/word2vec.py", line 405, in most_similar
raise KeyError("word '%s' not in vocabulary" % word)
KeyError: "word 'cold' not in vocabulary"
这表明“冷”这个词不是我训练事物的词汇的一部分(我是对的)吗?
所以问题是:如何更新模型,以便给出给定新句子的所有可能相似性?
【问题讨论】:
有人将 genism 的Word2Vec
更新为 online Word2Vec
。您可以在其中更新词汇表并使用在线学习学习新词汇。虽然我还没有尝试过,但请查看:rutumulkar.com/blog/2015/word2vec
【参考方案1】:
如果您的模型是使用 C 工具 load_word2vec_format 生成的,则无法更新该模型。请参阅在线培训Word2Vec Tutorial的word2vec教程部分:
请注意,无法使用生成的模型恢复训练 通过 C 工具 load_word2vec_format()。您仍然可以将它们用于 查询/相似性,但对培训至关重要的信息(词汇 树)在那里不见了。
【讨论】:
【参考方案2】:train()
期望输入的句子是序列,而不是一个句子。
train()
仅限 updates weights 用于基于现有词汇表的现有特征向量。您不能使用train()
添加新词汇(=新特征向量)。
【讨论】:
那么如何添加新词汇呢?绝对不可能吗?谢谢 @Nacho, "The word2vec algorithm doesn’t support adding new words dynamically." 所以,不,除非您使用新词汇重新训练整个模型,否则这是不可能的。 警告:过时的答案,所以我不赞成这个答案,以允许***.com/a/40936428/1019952 的答案上升。或者请更新您的答案。【参考方案3】:首先,您不能在预训练模型中添加新词。
但是,2014 年发布的“新”doc2vec 模型可以满足您的所有要求。您可以使用它来训练文档向量,而不是获取一组词向量然后将它们组合起来。 最好的部分是 doc2vec 可以在训练后推断出看不见的句子。虽然模型还是不能改变的,但是根据我的实验,你可以得到一个相当不错的推理结果。
【讨论】:
【参考方案4】:问题是你不能用新的句子重新训练 word2vec 模型。只有 doc2vec 允许。试试 doc2vec 模型。
【讨论】:
【参考方案5】:从gensim 0.13.3 开始,可以使用 gensim 进行 Word2Vec 的在线培训。
model.build_vocab(new_sentences, update=True)
model.train(new_sentences)
【讨论】:
由于某种原因,这实际上不起作用。 ***.com/questions/42357678/… 我没有遇到问题。这个周末我会试着看看你的 SO 帖子。 @chase 我回答了你的 SO 帖子【参考方案6】:您可以添加到模型词汇表中,并使用 FastText 添加到嵌入中。
from gensim.models import FastText
Here 你可以看到一些 FastText 的例子。 Here 你可以看到如何使用 FastText 对 Out-of-vocabulary (OOV) 实例进行评分。
【讨论】:
以上是关于更新 gensim word2vec 模型的主要内容,如果未能解决你的问题,请参考以下文章
确保 gensim 为相同数据的不同运行生成相同的 Word2Vec 模型
Gensim Word2Vec 从预训练模型中选择少量词向量