Spacy中的命名实体识别

12

我正在尝试为以下句子查找命名实体:

import spacy.lang.en
parser = spacy.lang.en.English()
ParsedSentence = parser(u"Alphabet is a new startup in China")
for Entity in  ParsedSentence.ents:  
    print (Entity.label, Entity.label_, ' '.join(t.orth_ for t in Entity))

我希望得到“Alphabet”和“China”的结果,但是我得到了一个空集合。我在这里做错了什么?

2
NER基于训练输入数据。因此,对于您的示例,它可能无法从有限的上下文中知道“Alphabet”是一个“命名实体”。请尝试更多的例子。 - Nathan McCoy
2个回答

24

根据spacy的文档,以下是提取命名实体的方法

import spacy
nlp = spacy.load('en') # install 'en' model (python3 -m spacy download en)
doc = nlp("Alphabet is a new startup in China")
print('Name Entity: {0}'.format(doc.ents))

结果
命名实体: (中国,)

要将“Alphabet”变成名词,请在其后加上“The”。

doc = nlp("The Alphabet is a new startup in China")
print('Name Entity: {0}'.format(doc.ents))

名称实体:(Alphabet,中国)


1
但是,如果输入的句子是“我喜欢饼干、巧克力和自行车。”,那么“PRODUCT”实体不应该被识别出来吗(对于“饼干”、“巧克力”和“自行车”)?文档表明,“PRODUCT”适用于食品、车辆等。然而,doc.ents并没有识别出任何实体。 - John M.

1
在Spacy版本3中,Hugging Face的Transformer进行了微调,以适应先前版本中Spacy提供的操作,但结果更好。

目前(2020年),Transformer是自然语言处理中的最新技术,即通常我们有(one-hot-encode -> word2vec -> glove | fast text),然后是(循环神经网络、递归神经网络、门控循环单元、长短期记忆、双向长短期记忆等),现在则是Transformer + Attention(BERT、RoBERTa、XLNet、XLM、CTRL、AlBERT、T5、Bart、GPT、GPT-2、GPT-3)——这只是为“为什么”您应该考虑Transformer提供背景信息。我知道还有很多东西我没提到,比如Fuzz、知识图谱等

安装依赖项:

sudo apt install libncurses5

pip install spacy-transformers --pre -f https://download.pytorch.org/whl/torch_stable.html

pip install spacy-nightly # I'm using 3.0.0rc2

下载一个模型:

python -m spacy download en_core_web_trf # English Transformer pipeline, Roberta base

这是可用模型的列表

然后按照正常方式使用它:

import spacy


text = 'Type something here which can be related to something, e.g Stack Over Flow organization'

nlp = spacy.load('en_core_web_trf')

document = nlp(text)

print(document.ents)

参考文献:

了解Transformer和Attention

阅读有关不同Transformer架构的摘要。

了解Spacy进行的Transformer微调


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