空格注释器问题/一致性

2022-05-15 00:00:00 python spacy lemmatization

问题描述

我目前将Spacy用于NLP目的(主要是词例化和标记化)。使用的模型是en-core-web-sm(2.1.0)。

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

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_)

然而,在运行此代码时,我面临一个重大问题。 例如,当查询是"茶叶加工"时。 List_Words中存储的结果可以是[‘正在处理’,‘茶’,‘叶’]或[‘正在处理’,‘茶’,‘叶’]。

似乎结果并不一致。我不能更改我的输入/查询(不可能为上下文添加另一个单词),我真的需要每次都找到相同的结果。我认为可能是模型的加载问题。

为什么结果不同?我可以每次都以"相同"的方式加载模型吗?对于不明确的查询,我是否错过了某个参数才能获得相同的结果?

感谢您的帮助


解决方案

Spacy团队对该问题进行了分析,并提出了解决方案。 修复方法如下:https://github.com/explosion/spaCy/pull/3646

基本上,当应用词汇化规则时,使用集合来返回引理。因为集合没有顺序,所以返回的引理可能会在不同的python会话之间更改。


例如,在我的例子中,对于名词"叶子",可能的词条是"叶子"和"叶子"。在没有排序的情况下,结果是随机的-它可以是"Leave"或"Leaf"。

相关文章