Spacy 词形还原器 issue/consistency

Spacy lemmatizer issue/consistency

我目前正在将 spaCy 用于 NLP 目的(主要是词形还原和标记化)。使用的模型是 en-core-web-sm (2.1.0)。

以下代码是 运行 从查询 "cleansed" 中检索单词列表

import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp(query)
list_words = []
for token in doc:
    if token.text != ' ':
        list_words.append(token.lemma_)

然而,当 运行 这段代码时,我遇到了一个主要问题。 例如,当查询为 "processing of tea leaves" 时。 存储在 list_words 中的结果可以是 ['processing'、'tea'、'leaf'] 或 ['processing'、'tea'、'leave' ].

好像结果不太一致。我无法更改我的 input/query(不可能为上下文添加另一个词)而且我真的需要每次都找到相同的结果。我认为模型的加载可能是问题。

为什么结果不同?我可以每次都以 "same" 方式加载模型吗?我是否遗漏了一个参数来为不明确的查询获得相同的结果?

感谢您的帮助

spaCy 团队分析了这个问题,他们提出了解决方案。 这是修复:https://github.com/explosion/spaCy/pull/3646

基本上,当应用词形还原规则时,一个集合用于 return 一个词条。由于集合没有顺序,returned 引理可能会在 python 会话之间发生变化。


例如在我的例子中,对于名词 "leaves",潜在的词元是 "leave" 和 "leaf"。没有排序,结果是随机的——可能是 "leave" 或 "leaf".