Spacy lemmatizer 突然 returns 比三个月前的其他值,单词不再转换为单数形式

Spacy lemmatizer suddenly returns other value than three months ago, words are not transformed into the singular form anymore

几个月前我使用 spacy 对大量文本进行词形还原。 今天我不得不重新运行写好的脚本,spacy 的输出发生了变化,主要是单词的复数形式不再转换为单数形式。 我试图用一个更简单的用例和 queen 这个词来重现这个问题,它分解为以下内容:

import spacy

nlp = spacy.load('en_core_web_lg')

sentence = "queen queenhat queens queen"

test = nlp(sentence)

for word in test:
    print(word.lemma_)

这个输出是:queen, queenhat, queens, queen

如果我删除最后一个女王(“queen queenhat queens”),输出为:queen, queenhat, queen

在这种情况下,s 会像三个月前一样被删除。

我由此假设只有当女王在末尾时才会删除 s,因为输入“queen queenhat queens queens”也 returns: queen queenhat queens queen

但如果我在另一个皇后区,输出将变为:queen queenhat queens queens queens 在这种情况下,即使是最后一个皇后也不会再转换为单数形式。

我假设发生这种情况是因为我在今天和三个月前重新安装了 spacy 并获得了更新的版本,我通过只给 spacy 提供单个单词而不提供完整文本来解决问题,但这确实使整个脚本从几秒开始变慢到小时。这也发生在换句话说上,queen 只是我选择用来测试 spacy 的例子。

有什么办法可以解决这个问题吗?提前致谢

听起来 spaCy 的版本肯定变了,可能从 v2 到 v3。

首先,如果 spaCy 很慢,请参阅 speed FAQ

接下来,请注意 spaCy 的词形还原器很聪明,因此它依赖于单词的词性,因为这会影响词条。这就是为什么改变字符串的内容会改变你的引理——spaCy 认为这是一个奇怪的句子,并试图预测每个词的词性,但可能做得不好,因为它实际上不是一个句子。 spaCy 旨在将自然语言(如完整的句子)作为输入,而不是任意的单词列表。

如果你只需要对独立的单词进行词形还原,你最好使用 spaCy 中的词形还原器作为一个独立的组件,甚至直接使用底层数据文件。没有这方面的指南,但如果您查看 spacy-lookups-data,您可以很容易地访问它。