使用 Spacy 预测 NER 实体的置信度得分

Confidence Score of Predicted NER entities using Spacy

我正在尝试使用 spacy 使用自定义训练的 NER 模型来预测实体。我读到 https://github.com/explosion/spaCy/pull/8855 可以使用 spancat 获得每个实体的置信度分数。但是我对如何进行这项工作有点困惑。根据我的理解,我们必须使用 spancat 组件来训练管道。所以在训练时,在配置文件中有一个段,

[nlp]
lang = "en"
pipeline = ["tok2vec","ner"]
batch_size = 1000

我们是否必须将其更改为

[nlp]
lang = "en"
pipeline = ["tok2vec","ner","spancat"]
batch_size = 1000

让 spancat 工作。

那么在训练之后,在从未知文本中预测实体时,我们是否必须使用

doc = nlp(data_to_be_predicted)
spans = doc.spans["spancat"] # SpanGroup
print(spans.attrs["scores"]) # list of numbers, span length as SpanGroup

获得置信度分数。

我正在使用 spacy 3.1.3。我相信根据文档,这个功能现在已经推出了。

我不太确定你的 post 中有问题,但是是的,spancat 可用,你可以从中获得实体分数。

spancat 是与 ner 组件不同的组件。所以如果你这样做:

pipeline = ["tok2vec","ner","spancat"]

spancat 不会为您的 ner 组件预测的事情添加分数。您可能想删除 ner 组件。


关于用法,请看the docs and the example project。这是您获得分数的方式:

doc = nlp(text)
span_group = doc.spans["spans"] # default key, can be changed
scores = span_group.attrs["scores"]

# Note that `scores` is an array with one score for each span in the group
for span, score in zip(span_group, scores):
    print(score, span)