python - 如何查看 spacy NER softmax 值?

标签 python spacy named-entity-recognition spacy-3

我正在尝试从 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/

相关文章:

python - 将列名称与 pySpark ML 中的模型参数相关联

python - 如何判断句子中是否提到了主题? -自然语言处理

python-2.7 - 如何提高 Spacy 结果的质量?

Python - 正则表达式搜索以给定文本开头和结尾的字符串

python - 在 Pandas 中将多列与数值组合

python - 在 python 中生成嵌套元组的所有组合

spacy - 在 Rasa-NLU 训练数据中使用 spaCy 实体

java - OpenNLP 是否在引擎盖下使用 WordNet 进行命名实体识别

python - 无法在 python 模块中使用斯坦福 NER

java - 斯坦福 NER : extracting separate lists of entities?