【发布时间】:2022-07-06 21:14:44
【问题描述】:
我试图从 spacy NER 模型中获取每个输出类的 softmax 预测。当我在下面的代码中的 \'preds\' 处放置一个断点并跳过管道直到在 NER 模型管道组件上调用 predict 方法时,我可以看到从 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 预测与哪些实体相关?
标签: python spacy named-entity-recognition spacy-3