spaCy中的词向量示例问题

3
from spacy.en import English
from numpy import dot
from numpy.linalg import norm

parser = English()

# you can access known words from the parser's vocabulary
nasa = parser.vocab['NASA']

# cosine similarity
cosine = lambda v1, v2: dot(v1, v2) / (norm(v1) * norm(v2))

# gather all known words, take only the lowercased versions
allWords = list({w for w in parser.vocab if w.has_repvec and w.orth_.islower() and w.lower_ != "nasa"})

# sort by similarity to NASA
allWords.sort(key=lambda w: cosine(w.repvec, nasa.repvec))
allWords.reverse()
print("Top 10 most similar words to NASA:")
for word in allWords[:10]:   
    print(word.orth_)

我尝试运行上述示例,但是遇到以下错误:

Traceback (most recent call last):
File "C:\Users\bulusu.kiran\Documents\WORK\nlp\wordVectors1.py", line 8, in <module>
nasa = parser.vocab['NASA']
File "spacy/vocab.pyx", line 330, in spacy.vocab.Vocab.__getitem__ (spacy/vocab.cpp:7708)
orth = id_or_string TypeError: an integer is required

示例来源:使用spaCy进行自然语言处理入门

导致这个错误的原因是什么?


你发表的示例很棒,如果他们的文档中有这种东西就更好了。 - cardamom
1个回答

6
你使用的是哪个版本的Python?这可能是Unicode错误的结果;我在Python 2.7中进行了替换,它可以正常工作。
nasa = parser.vocab['NASA']

使用

nasa = parser.vocab[u'NASA']

然后您将收到此错误:

AttributeError: 'spacy.lexeme.Lexeme' object has no attribute 'has_repvec'

在SpaCy存储库上有一个类似的问题, 但这两个问题都可以通过将has_repvec替换为has_vector,并将repvec替换为vector来解决。我也会在GitHub线程中发表评论。

我使用的完整更新代码:

import spacy

from numpy import dot
from numpy.linalg import norm

parser = spacy.load('en')
nasa = parser.vocab[u'NASA']

# cosine similarity
cosine = lambda v1, v2: dot(v1, v2) / (norm(v1) * norm(v2))

# gather all known words, take only the lowercased versions
allWords = list({w for w in parser.vocab if w.has_vector and w.orth_.islower() and w.lower_ != "nasa"})

# sort by similarity to NASA
allWords.sort(key=lambda w: cosine(w.vector, nasa.vector))
allWords.reverse()
print("Top 10 most similar words to NASA:")
for word in allWords[:10]:
    print(word.orth_)

希望这可以帮到你!

1
请注意,parser = spacy.load('en') 对我来说无法正常工作。相反,我必须使用 parser = spacy.load('en_core_web_lg') -- _sm 版本没有向量数据。 - Marc Maxmeister

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接