我目前正在将spaCy用于NLP(主要是词法化和令牌化)。使用的模型是en-core-web-sm(2.1.0)。
运行以下代码以从查询中检索“已清除”的单词列表
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中的结果可以是['processing','tea','leaf']或['processing','tea','leave']。
结果似乎不一致。我无法更改输入/查询(无法为上下文添加另一个单词),并且确实需要每次都找到相同的结果。我认为可能是模型的加载。
为什么结果不同?我可以每次以“相同”方式加载模型吗?我是否错过了为模棱两可的查询获得相同结果的参数?
感谢您的帮助
答案 0 :(得分:0)
spaCy团队分析了此问题,并提出了解决方案。 解决方法如下:https://github.com/explosion/spaCy/pull/3646
基本上,当应用了消词规则时,将使用一个集合返回一个引理。由于集合没有顺序,因此返回的引理可以在python会话之间改变。
例如,在我的案例中,名词“ leaves”的潜在引理是“ leave”和“ leaf”。没有排序,结果是随机的-可能是“离开”或“叶子”。