首页 > 解决方案 > spacy 相似性方法无法正常工作

问题描述

我正在使用spacy. 我正在通过测量单词之间的相似性来过滤掉单词。

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

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左右,但这并不是一个非常小的值。

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

我不知道如何解决它。

请帮我。

标签: pythonsimilarityword2vecspacycosine-similarity

解决方案


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

推荐阅读