我正在尝试从 spacy NER 模型中获取每个输出类的 softmax 预测。当我在下面的代码中的“preds”处放置断点并跳过管道直到在 NER 模型管道组件上调用预测方法时,我可以看到从 self._func 调用返回的对象是“ParserStepModel”对象.
import spacy
from thinc.model import Model, InT, OutT
def predict(self, X:InT) -> OutT:
preds = self._func(self, X, is_train=False)[0]
return preds
Model.predict = predict
nlp = spacy.load('en_core_web_sm')
def show_ents(doc):
if doc.ents:
for ent in doc.ents:
print(ent.text + ' - ' + str(ent.start_char) + ' - ' + str(ent.end) + ' - ' +
ent.label_ + ' - ' + str(spacy.explain(ent.label_)))
else:
print('No named entities found.')
doc = nlp('Apple is looking at buying U.K. startup for $1 billion')
show_ents(doc)
我假设“ParserStepModel”对象包含处理输入文本的结果,因为我可以看到该对象包含属性“tokvec”和模型“vec2scores”。因此,我假设如果要运行模型和矢量化输入,即
preds.vec2scores(preds.tokvecs, is_train = False)
生成的数组将是每个实体的 softmax 预测。但是,如果我设置 is_train = True,输出似乎不会改变。我希望有人能够解释我如何查看 NER 模型的 softmax 预测以及 softmax 预测与哪些实体相关?
最佳答案
NER 组件使用基于转换的解析模型,该模型并不能真正为单个实体预测提供有用的分数。
如果您需要有意义的实体预测置信度分数,请训练 spancat
组件而不是ner
。分数保存在 doc[spans_key].attrs["scores"]
下。
一些相关主题:
关于python - 如何查看 spacy NER softmax 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72874877/