spacy相似性方法无法正常工作

时间:2018-09-18 13:58:10

标签: python similarity word2vec spacy cosine-similarity

我总是从堆栈溢出中获得很多帮助。 一直谢谢你。

我正在使用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

特别是,“ dog”和“ cat”之间的相似度应为0.8,但这并不是一个非常小的值。

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

我不知道如何解决它。

请帮助我。

2 个答案:

答案 0 :(得分:1)

首先安装大型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

答案 1 :(得分:0)

我终于解决了这个问题。

只需添加代码import numpy as np即可。

仅此而已。