Spacy和Displacy输出结果不同

3
我的句子是:在这个方案之前,她有一个单独使用5-FU的化疗方案历史,没有任何显著的副作用。 当我将此输入displacy(https://demos.explosion.ai/displacy/)时,输出包含对5-FU的名词短语引用。

enter image description here

然而,当我注释文本并搜索名词块时,5-FU未被显示为名词块。 nlp = spacy.load('en') ax = nlp(mySentence) for w in ax.noun_chunks: print(w)
编辑 此外,当我使用下面的代码搜索标签时,5-FU被显示为NN。如果Spacy的注释将这个单词理解为由介词包围的名词,那么为什么这个单词不能被识别为名词短语呢? 结束编辑
我的spacy版本:enter image description here 我做错了什么?displaCy和我使用的版本之间是否有版本差异?是否有一个spaCy帮助团队来解决这个问题?
非常感谢!
3个回答

3

Displacy在展示解析树时进行了一些预处理。这是一个链接到解析服务(基于spacy构建)的displacy使用的链接: https://github.com/explosion/spacy-services/blob/master/displacy/displacy_service/parse.py#L25

if collapse_phrases:
    for np in list(self.doc.noun_chunks):
        np.merge(np.root.tag_, np.root.lemma_, np.root.ent_type_)

Spacy 合并 句子中的名词短语,而不是将它们视为单独的标记,这就是为什么输出结果不同的原因。

enter image description here

另一个区别在于您使用的模型。您可能正在使用最小的en_core_web_sm,而Spacy可能正在使用更大的en_core_web_md(虽然官方没有明确说明)。

谢谢。关于模型的信息是新的!然而,在我的Spacy版本中,5-FU被识别为NN,但它仍然没有出现在名词块中。我正在更新我的原始问题。 - mejobhoot

0

因为他们升级到了V2.0,我也遇到了类似的问题。然后我转移到了V2.0。要安装一个模型,你需要使用--direct标志下载它的完整名称:

python -m spacy download en_core_web_sm-2.0.0-alpha --direct   # English
python -m spacy download xx_ent_wiki_sm-2.0.0-alpha --direct   # Multi-language NER

你可以通过调用spaCy的加载器来加载模型。例如:nlp = spacy.load('en_core_web_sm'),或者将其作为模块导入(import en_core_web_sm)并调用其load()方法,例如:nlp = en_core_web_sm.load()
请参阅文档https://github.com/explosion/spaCy/releases/tag/v2.0.0-alpha

0

我正在尝试解决同样的问题。DisplayCy和SpaCy的输出不同(包括词性标注和单词之间的关系)。

看起来预处理合并并不是问题的原因,因为您可以在DisplayCy中禁用它 - 设置>折叠短语 - 对于我来说,输出仍然不匹配。

您可能需要使用en_core_web_md模型(而不是en_core_web_sm):

python -m spacy download en_core_web_md

不过我还没有测试过。


这是我目前研究的结果。en_core_web_md模型比默认的en_core_web_sm模型更大,准确性也更高。然而,它并不完美(事实上,没有一个模型是完美的)。然而,DisplayCy使用了一个非常不同的模型(至少根据他们在displaCy网页右上角广告中提供的模型选择:Model 0.101.0 (english))。该模型于2016年初发布。要使用此模型,您必须从源代码构建它(我还没有找到时间去做)。 - mejobhoot
所以基本上 - 我发现'md'模型已经足够好了,并学会了与它共存。 - mejobhoot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接