【问题标题】:Spacy lemmatizer issue/consistencySpacy lemmatizer 问题/一致性
【发布时间】:2019-04-26 09:45:19
【问题描述】:

我目前正在将 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']。

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

为什么结果不同?我可以每次都以“相同”的方式加载模型吗?我是否错过了一个参数以获得相同的模糊查询结果?

感谢您的帮助

【问题讨论】:

  • 我尝试运行您的示例,我收到的结果是一致的 --> ['processing', 'of', 'tea', 'leaf']。你能分享更多细节吗?
  • 我发现了这个问题,要重现这个问题,你必须重新加载一个 python 会话(这意味着对于同一个解释器实例,它会产生相同的结果)。修复在这里解释:github.com/explosion/spaCy/pull/3646希望它会帮助其他人
  • 很有趣也很好理解——谢谢分享!

标签: python spacy lemmatization


【解决方案1】:

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

基本上,当应用词元化规则时,会使用一个集合来返回一个词元。由于集合没有排序,返回的引理可能会在 python 会话之间发生变化。


例如在我的例子中,对于名词“leaves”,潜在的词条是“leave”和“leaf”。没有排序,结果是随机的——可能是“离开”或“离开”。

【讨论】:

    猜你喜欢
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 2014-10-13
    • 2017-02-23
    • 2016-01-25
    • 1970-01-01
    相关资源
    最近更新 更多