Doc2Vec:与model.docvecs.most_similar的奇怪结果

时间:2019-02-18 20:11:41

标签: python gensim doc2vec

我尝试训练模型以获得句子相似性(以我的组织名称为例)

我用来训练模型

name = word_tokenize(name.lower())
infer_v = model.infer_vector(name)
results = model.docvecs.most_similar([infer_v]))

我得到

的结果
Филип Моррис Продактс С.А.

它为所有测试返回奇怪的结果。我已经尝试过使用火车数据中的示例,但还没有相似之处。例如Найк Инноувейт С.В.: 0.9336682558059692 СОСЬЕТЕ ДЕ ПРОДЮИ НЕСТЛЕ С.А.: 0.9370058178901672 Юнилевер Н.В.: 0.9347286224365234 Мерк Шарп и Доум Корп.: 0.9339677095413208 我得到下一个结果

{{1}}

我不明白为什么要得到这个。 我有18万个火车数据示例。 如何改善模型的结果?

1 个答案:

答案 0 :(得分:0)

看起来您的相似性代码没有任何明显的错误,但是请注意,由于您没有在模型创建时提供epochs参数,因此它将在内部配置为仅使用5次推理。 (通常Doc2Vec的工作使用10到20或更多,并且推理有时可以从中受益,特别是对于较小的文本。)

此外,您的问题没有显示您的培训代码-许多在线示例在处理epochsalpha时包含严重错误。

我看不懂您的姓名文字-我猜是俄语,也许是公司名称?但正如我的评论所述,Doc2Vec确实适用于较长的文本。我只希望它在较小的文本中有用,如果存在有用的各种令牌到令牌的相关性,它们也反映了您要寻找的“相似性”。

但不清楚您要寻找哪种相似性。如果纯粹是表面的/形态的,则可以通过子标记片段(字符n-gram)而不是空格分隔的单词来分析名称。如果这是更细微的用途相似性,行业或公众认知,那么元数据名称以外的元数据可能会更有用,例如:

  • 在自然语言环境中使用名称
  • 实体的自由形式或分类为受控分类法的自我描述
  • 实体的第三方说明

甚至保留仅出现一次的标记-min_count=1也会削弱单词向量/文档向量,因为几乎没有可概括的含义,可以从可能是特质的单次出现中学习,但是所有内容的总和这些稀有词会干扰周围其他较常见词的训练。对于大型自然语言语料库,例如带有大量相关单词标记的示例,通常增加min_count可以提高模型质量。