【问题标题】:How do I view the spacy NER softmax values?如何查看 spacy NER softmax 值?
【发布时间】: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


    【解决方案1】:

    NER 组件使用基于转换的解析模型,该模型并不能真正为单个实体预测提供有用的分数。

    如果您需要对实体预测有意义的置信度得分,请训练 spancat 组件而不是 ner。分数保存在doc[spans_key].attrs["scores"] 下。

    一些相关的线程:

    【讨论】:

    • 谢谢@aab。对不起,我不完全理解(我对 NLP 和深度神经网络还是很陌生)。我认为 NER 使用深度神经网络预测(管道组件具有 Thinc 模型),在这种情况下,模型的预测(如上)不会给出 softmax 输出吗?我希望在预测中打开训练(辍学)以获得蒙特卡洛预测。
    • 底层模型为基于转换的解析器中的移动/动作提供分数,而不是为整个实体跨度提供分数。有关基于转换的解析的介绍,请参阅 Jurafsky 和 ​​Martin 的第 14.4 节语音和语言处理web.stanford.edu/~jurafsky/slp3/14.pdf。对于令牌/跨度/文本标签,组件tagger/spancat/textcat 更适合这种用途。
    猜你喜欢
    • 2022-08-24
    • 1970-01-01
    • 1970-01-01
    • 2023-01-03
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    • 1970-01-01
    相关资源
    最近更新 更多