【问题标题】:SpaCy similarity score makes no senseSpaCy 相似度得分没有意义
【发布时间】:2019-02-02 02:41:34
【问题描述】:

我想弄清楚我是否信任 SpaCy 的相似函数,但我感到很困惑。这是我的玩具示例:

import spacy
nlp = spacy.load('en')
doc1 = nlp(u'Unsalted butter')
doc2 = nlp(u'babi carrot peel babi carrot grim french babi fresh babi roundi fresh exot petit petit peel shred carrot dole shred')

doc1.similarity(doc2)

我得到 0.64 的相似度。两个没有重叠标记的句子怎么会这么高?有人可以向我解释一下吗?谢谢!

【问题讨论】:

  • 你用的是哪个英文型号?
  • 相似性使用词向量,而不仅仅是标记。看起来 SpaCy 可能发现了一些相似之处,因为这两个句子都谈论了一些食物。
  • 查看how the .similarity() method in SpaCy is computed上关于stackexchange交叉验证的相关讨论
  • 它们都包含食物,因此在这方面它们是相似的。试试“唐纳德特朗普是美国总统。想一想”。应该得到一个较低的分数...

标签: spacy


【解决方案1】:

问题是您使用的en 模型很可能与en_core_web_sm 相关联。

en_core_web_sm 模型没有预训练的手套向量,因此您使用 NER、PoS 和 DEP 标记器生成的向量来计算相似度。 这些向量编码结构信息,例如在句子中具有相同的 PoS 标签或 DEP 角色。这些向量中没有编码语义信息,所以你得到的结果和预期的一样,很奇怪。

也看看here

【讨论】:

  • 是的,使用 'sm' 太糟糕了,所以 OP 没有使用词向量。但是,即使使用词向量,我也发现这些值太高了。我对两个文档集合进行了成对相似性,没有任何东西低于 0.5。即使我只在文档中使用所有带有 POS 标记的名词也是如此。
猜你喜欢
  • 2022-12-19
  • 2011-08-30
  • 2019-01-10
  • 1970-01-01
  • 2013-06-06
  • 2018-03-03
  • 2019-03-12
  • 2019-04-26
  • 1970-01-01
相关资源
最近更新 更多