【问题标题】:Get wrong noun chunks using spacy doc.noun_chunks使用 spacy doc.noun_chunks 获取错误的名词块
【发布时间】:2022-01-27 16:07:49
【问题描述】:

我使用 spacy en_core_web_trfdoc.noun_chunks 来获取名词块。以前,它运行良好,我可以正确获取名词块。但最近,从 12 月中旬左右开始。 2021(我猜),我使用相同的方式,相同的脚本,但我无法正确获取名词块。例如,在以下脚本中:

import spacy
from spacy import displacy

nlp = spacy.load("en_core_web_trf")
test_sen = "a label on a box that ensures that the status of a parcel can be traced uniquely "
doc = nlp(test_sen)
# ---------------------get initial noun chunks---------------------
for chunks in doc.noun_chunks:
    print(chunks)
# displacy.serve(doc, style='dep')

我得到以下结果:

a label
a box
that
the status
a parcel

但是,根据依赖图(见下文),文本that(第一个)不应该是名词块,而是打印为名词块。另外,根据来自here 的名词块的描述,它表示Doc.noun_chunks: Yields base noun-phrase Span objects。无论哪种情况,that都不能是所谓的noun chunk,而是在这里识别为名词块,给我后面的处理带来很大的麻烦。

有人对如何修复它有提示吗?谢谢!

【问题讨论】:

  • 使用[chunks for chunks in doc.noun_chunks],我得到[a label, a box, the status, a parcel] 作为输出,没有that
  • @WiktorStribiżew 谢谢,我刚刚尝试过你的方式,“chunk = [chunks for chunks in doc.noun_chunks] print(chunk)”,但“那个”仍然打印出来,我有不知道原因

标签: python nlp dependencies spacy


【解决方案1】:

差异可能是由于使用了不同版本的en_core_web_trf。每个 spaCy 次要版本都有一个新的模型版本,因此有模型版本:v3.0.0、v3.1.0、v3.2.0。您可以使用spacy validate查看当前安装的模型版本。

如果您需要针对特定​​任务使用完全相同的注释,请在您的要求中指定确切的模型版本:

https://github.com/explosion/spacy-models/releases/download/en_core_web_trf-3.1.0/en_core_web_trf-3.1.0-py3-none-any.whl

我认为您看到的差异是由于 v3.2.0 模型中的更新改进了 POS 标记,这些标记与来自细粒度标记和依赖项解析的规则进行映射。一些名词块错误来自标记器/解析器错误,但这看起来像是正确的标记、解析和 POS。名词块的确切定义可能会有所不同,但在我能找到的示例中(主要来自 CoNLL 2003 共享任务),像这样的相对代词被包含为名词块。

【讨论】:

  • 感谢@aab,并感谢您提供指向 3.1.0 版的链接。我还有另一个非常基本的问题,我如何在安装 en_core_web_trf 时指定这个确切的版本?我只找到了安装命令“python -m spacy download en_core_web_trf”,而且这个命令只能安装3.2.0版本。我试图在最后添加“==3.1.0”,它不起作用。我可以先从链接下载包,然后在本地手动安装吗?再次感谢!
  • "python -m spacy download en_core_web_trf-3.1.0" 也不起作用
  • spacy download 仅下载最新的兼容版本。 pip install URL 是如何从该规范安装。您也可以下载它,然后使用pip 直接安装.whl 文件。如有必要,pip 将在您的 venv 中升级/降级 spacy 以匹配模型。 v3 模型在很大程度上是向前兼容的,但如果你真的希望每次都得到完全相同的结果,那么你也应该每次都使用相同的 spacy 版本。
  • 谢谢@aab,你的解释很清楚。现在可以了,是的,我必须使用那个旧版本,因为如果我使用最新版本,它会对结果产生很大影响。
猜你喜欢
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-30
  • 2017-11-23
  • 2019-01-12
相关资源
最近更新 更多