如何查看space NER softmax值?



我试图从空间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"]下。

相关线程:

  • https://github.com/explosion/spaCy/issues/831
  • https://github.com/explosion/spaCy/discussions/9189

最新更新