我目前正在Python3.6中学习gensim doc2model,以查看句子之间的相似性。
我创建了一个模型,但是当我输入一个明显存在于训练数据集中的单词以查找相似的单词/句子时,它返回KeyError: "word 'WORD' not in vocabulary"
。
是否会自动跳过一些对句子定义不太重要的单词?还是仅仅是一个错误或什么?
非常感谢我有什么办法可以覆盖数据集中所有出现的单词。谢谢。
答案 0 :(得分:0)
如果您希望在模型中学习的单词不在模型中,则最可能的原因是:
在模型所看到的版本中并没有真正存在,可能是因为令牌化/预处理已损坏。在INFO级别启用日志记录,并检查模型中显示的主体,以确保已按预期标记了主体
在语料库的第一个词汇调查之后,它不是尚存词汇的一部分。默认的self.keep
丢弃少于5个出现次数的单词,因为这样的单词都无法为其自身获得良好的向量,并有效地充当干扰其他向量的改进的“噪声”。
您可以将min_count=5
设置为保留所有单词,但是比改善整体矢量质量更容易造成伤害。 Word2Vec和Doc2Vec需要庞大,多样的语料库–如果您想为一个单词提供良好的向量,请在扩展的语料库中找到其用法的更多示例。
(还请注意:简单且快速的min_count=1
模式之一,通常也是效果最好的模式,尤其是在较短的文本上,是纯PV-DBOW模式:Doc2Vec
。此模式将分配/ randomly-initialize词向量,但随后忽略它们进行训练,仅仅训练文档向量。如果使用该模式,您仍然可以从模型最后请求词向量–他们只是胡说八道。)