【问题标题】:spacy similarity method doesn't not work correctlyspacy 相似性方法无法正常工作
【发布时间】:2019-02-22 14:11:32
【问题描述】:

我正在使用spacy 进行简单的自然语言处理。 我正在通过测量单词之间的相似度来过滤掉单词。

我编写并使用了 spacy 文档中显示的以下简单代码,但结果看起来不像 documentation

import spacy
nlp = spacy.load('en_core_web_lg')
tokens = nlp('dog cat banana')

for token1 in tokens:
    for token2 in tokens:
        sim = token1.similarity(token2)
        print("{:>6s}, {:>6s}: {}".format(token1.text, token2.text, sim))

代码的结果如下。

   dog,    dog: 1.0
   dog,    cat: 2.307269867164827e-21
   dog, banana: 0.0
   cat,    dog: 2.307269867164827e-21
   cat,    cat: 1.0
   cat, banana: -0.04468117654323578
banana,    dog: -7.828739256116838e+17
banana,    cat: -8.242222286053048e+17
banana, banana: 1.0

尤其是“狗”和“猫”之间的相似度应该在0.8左右,但这并不是一个非常小的值。

此外,“dog”和“banana”之间的相似度为 0.0,而“banana”和“dog”之间的相似度为 -7.828739256116838e+17。

我不知道如何解决它。

请帮助我。

【问题讨论】:

  • 重新安装en_core_web_lg模型后试试。
  • 我不知道如何重新安装它。我尝试在 spacy 文档网页中找到它,但它失败了。如果您知道如何重新安装它,请告诉我。感谢您的评论和帮助。
  • python -m spacy 下载 en_core_web_lg --force
  • @AjaySrivastava 感谢您的帮助,我按照您的说法进行了尝试,但遗憾的是,它仍然没有什么不同。但谢谢你的帮助。

标签: python similarity word2vec spacy cosine-similarity


【解决方案1】:

我终于解决了这个问题。

只需添加代码 import numpy as np

就是这样。

【讨论】:

  • 那个解决方案根本没有意义。你甚至没有在代码中使用 numpy
  • Ateik @Ateik 是的。正如你所说,我没有在我的代码中使用numpy。但我通过添加该代码解决了这个问题。库spacy 可能依赖于numpy
【解决方案2】:

首先安装大型 EN 型号(或所有型号)。

python3 -m spacy.en.download all

接下来,按照文档使用示例代码,

nlp = spacy.load('en_core_web_md')

如果这不起作用,请尝试加载,而不是上面,

nlp = spacy.load('en')

进行上述更改后,结果与文档一致。

python3 /tmp/c.py
   dog,    dog: 1.000000078333395
   dog,    cat: 0.8016855098942641
   dog, banana: 0.2432764518408807
   cat,    dog: 0.8016855098942641
   cat,    cat: 1.0000001375986456
   cat, banana: 0.2815436412709355
banana,    dog: 0.2432764518408807
banana,    cat: 0.2815436412709355
banana, banana: 1.000000107068369

【讨论】:

  • 感谢您的帮助。但是,使用您的解决方案无法解决。它仍然显示与您的结果不同的错误相似性结果。
猜你喜欢
  • 1970-01-01
  • 2014-01-27
  • 2017-09-04
  • 2012-05-06
  • 2013-02-17
  • 2017-10-09
  • 2017-08-03
  • 2014-05-02
  • 2011-09-11
相关资源
最近更新 更多