Med*_*ede 9 named-entity-recognition spacy
我想将spaCy的NER引擎与单独的NER引擎(BoW模型)结合起来.我目前正在比较两个引擎的输出,试图找出两者的最佳组合.两者都表现得不错,但很多时候spaCy会找到BoW引擎未命中的实体,反之亦然.我想要的是每当找到BoW引擎找不到的实体时,从spaCy访问概率分数(或类似的东西).我可以让spaCy打印出自己找到的给定实体的概率分数吗?就像在,"嗨,我是spaCy.我发现这个令牌(或令牌的组合),我X%肯定是BLAH类型的实体." 每当spaCy找到一个实体时,我想知道数字X. 我想在spaCy的NER引擎内部必须有这样一个数字,加上一个阈值,低于该阈值可能的实体没有被标记为实体,我想知道如何获得这个数字.提前致谢.
实际上,有一个问题。
该库的作者(除其他外)建议以下解决方案:
- 光束搜索具有全局目标。这是标准的解决方案:使用全局目标,以便对解析器模型进行训练,使其偏爱总体上更好的解析。保留N个不同的候选人,并输出最佳候选人。通过查看光束中的替代分析,可以将其用于支持置信度。如果在每个分析中都存在一个实体,则NER更有把握地认为它是正确的。
码:
import spacy
import sys
from collections import defaultdict
nlp = spacy.load('en')
text = u'Will Japan join the European Union? If yes, we should \
move to United States. Fasten your belts, America we are coming'
with nlp.disable_pipes('ner'):
doc = nlp(text)
threshold = 0.2
(beams, somethingelse) = nlp.entity.beam_parse([ doc ], beam_width = 16, beam_density = 0.0001)
entity_scores = defaultdict(float)
for beam in beams:
for score, ents in nlp.entity.moves.get_beam_parses(beam):
for start, end, label in ents:
entity_scores[(start, end, label)] += score
print ('Entities and scores (detected with beam search)')
for key in entity_scores:
start, end, label = key
score = entity_scores[key]
if ( score > threshold):
print ('Label: {}, Text: {}, Score: {}'.format(label, doc[start:end], score))
Run Code Online (Sandbox Code Playgroud)
样本输出:
实体和分数(通过波束搜索检测到)
标签:GPE,文字:日本,得分:0.9999999999999997
标签:GPE,文字:美国,得分:0.9991664575947963
重要说明:您将在此处获得的输出可能与使用标准NER(而不是光束搜索替代品)获得的输出不同。但是,光束搜索替代方案为您提供了一种置信度,据我从您的问题中了解到,该置信度对您的情况有用。
对于此示例,输出为标准NER:
标签:GPE,文字:日本
标签:ORG,文字:欧盟
标签:GPE,文字:美国
标签:GPE,文字:美国
| 归档时间: |
|
| 查看次数: |
1785 次 |
| 最近记录: |