如何在Spacy中找到令牌相似度?

时间:2017-12-12 15:55:25

标签: python nlp spacy

我正在尝试计算spacy中的令牌相似度。即单词令牌是多么接近彼此。我正在使用spacy版本2.0.5。这是我的琐碎例子。

import spacy
from spacy.lang.en import English
from spacy.tokenizer import Tokenizer

nlp = spacy.load('en') 

x = nlp(u'apple')
y = nlp(u'apple')

x.similarity(y)

这会返回-81216639937292144.0,但我原以为它是1.0。

另外

x = nlp(u'apple')
y = nlp(u'apples')
x.similarity(y)

返回0.0038385278814858344,这似乎也是错误的。

我应该如何做这个令牌相似性以使其有效?我真的想留在Spacy(而不是使用不同的字符串距离包),但如果这不能在spacy中完成,也会欢迎建议。

2 个答案:

答案 0 :(得分:1)

我尝试使用spacy版本0.100.7做同样的事情。它适用于我

import spacy
from spacy.en import English
from spacy.tokenizer import Tokenizer

nlp = spacy.load('en') 

x = nlp(u'apple')
y = nlp(u'apple')

print (x.similarity(y)) # prints 0.999999947205

x = nlp(u'apple')
y = nlp(u'apple')

print (x.similarity(sy)) # prints 0.6678450944

请检查您的spacy版本。另外,你只安装了deafult-en型号吗?

答案 1 :(得分:0)

我也遇到了与版本2.0.5相同的问题,你可以回滚到版本2.0.2,你会得到一个像1.0000000593284066这样的分数,用于'苹果'与'苹果'的比较。

首先,您必须卸载与Spacy版本2.0.5相关的所有库,

for dep in $(pip show spacy | grep Requires | sed 's/Requires: //g; s/,//g') ; do pip uninstall -y $dep ; done

然后安装版本2.0.2,

pip install spacy=='2.0.2'

接下来验证,

python -m spacy validate

它可能会要求您安装一些库,如ftfy或其他一些库,当您尝试安装时,它将已安装。对于那些先卸载它们然后再重新安装它们(对于不同的库,这可能会发生3-4次)。我们必须这样做,因为许多库在安装spacy 2.0.5时都会更新到最新版本。最后下载模型,

python -m spacy download en_core_web_sm