我尝试训练模型以获得句子相似性(以我的组织名称为例)
我用来训练模型
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万个火车数据示例。 如何改善模型的结果?
答案 0 :(得分:0)
看起来您的相似性代码没有任何明显的错误,但是请注意,由于您没有在模型创建时提供epochs
参数,因此它将在内部配置为仅使用5次推理。 (通常Doc2Vec的工作使用10到20或更多,并且推理有时可以从中受益,特别是对于较小的文本。)
此外,您的问题没有显示您的培训代码-许多在线示例在处理epochs
和alpha
时包含严重错误。
我看不懂您的姓名文字-我猜是俄语,也许是公司名称?但正如我的评论所述,Doc2Vec
确实适用于较长的文本。我只希望它在较小的文本中有用,如果存在有用的各种令牌到令牌的相关性,它们也反映了您要寻找的“相似性”。
但不清楚您要寻找哪种相似性。如果纯粹是表面的/形态的,则可以通过子标记片段(字符n-gram)而不是空格分隔的单词来分析名称。如果这是更细微的用途相似性,行业或公众认知,那么元数据名称以外的元数据可能会更有用,例如:
甚至保留仅出现一次的标记-min_count=1
也会削弱单词向量/文档向量,因为几乎没有可概括的含义,可以从可能是特质的单次出现中学习,但是所有内容的总和这些稀有词会干扰周围其他较常见词的训练。对于大型自然语言语料库,例如带有大量相关单词标记的示例,通常增加min_count
可以提高模型质量。