我已经下载 en_core_web_lg
模型并试图找到两个句子之间的相似性:
nlp = spacy.load('en_core_web_lg')
search_doc = nlp("This was very strange argument between american and british person")
main_doc = nlp("He was from Japan, but a true English gentleman in my eyes, and another one of the reasons as to why I liked going to school.")
print(main_doc.similarity(search_doc))
返回非常奇怪的值:
0.9066019751888448
这两个句子不应该有 90% 的相似度,它们的含义截然不同。
为什么会这样?我是否需要添加某种额外的词汇以使相似度结果更合理?
原文由 Mr.D 发布,翻译遵循 CC BY-SA 4.0 许可协议
向量相似性的 Spacy 文档 解释了它的基本思想:
每个单词都有一个向量表示,通过上下文嵌入 ( Word2Vec ) 学习,上下文嵌入是在语料库上训练的,如文档中所述。
现在,一个 完整句子 的词嵌入只是所有不同词的平均值。如果你现在有很多词在语义上位于同一区域(例如填充词,如“he”、“was”、“this”……),并且额外的词汇“抵消”了,那么你最终可能会与您的情况相似。
问题是你能做些什么:从我的角度来看,你可以想出一个更复杂的相似性度量。由于
search_doc
和main_doc
有额外的信息,就像原始句子一样,您可以通过长度差异惩罚修改向量,或者尝试比较较短的句子片段,并计算成对相似性(话又说回来,问题是要比较哪些部分)。遗憾的是,目前还没有简单的方法来简单地解决这个问题。