2

尝试使用我的测试集获得分数时遇到以下错误Scorer

TypeError: score() 接受 2 个位置参数,但给出了 3 个

import spacy 
from spacy.tokens import Span
from spacy import displacy
from spacy.training import *
from spacy.scorer import Scorer
from spacy.util import minibatch, compounding

def evaluate(ner_model, testing_data):
    scorer = Scorer()

    for input_, annot in testing_data:
        doc_gold_text = ner_model.make_doc(input_)
        example = Example.from_dict(doc_gold_text, {"entities": annot})
        pred_value = ner_model(input_)
        
    return scorer.score(pred_value, example)

print(evaluate(nlp_updated, testing_tagged))

在哪里 testing_tagged:

testing_tagged = [
    ("Who was Hamlet?", [(8,14,'PERSON')]),
    ("Have you ever met Rome?", [(18,22,'LOC')])
]

预期输出是 where pr并且f不是 0:

{'uas': 0.0, 'las': 0.0, 'las_per_type': {'': {'p': 0.0, 'r': 0.0, 'f': 0.0}}, 'ents_p': 0.0, 'ents_r': 0.0, 'ents_f': 0.0, 'ents_per_type': {'PERSON': {'p': 0.0, 'r': 0.0, 'f': 0.0}, 'LOC': {'p': 0.0, 'r': 0.0, 'f': 0.0}}, 'tags_acc': 0.0, 'token_acc': 100.0, 'textcat_score': 0.0, 'textcats_per_cat': {}}

我最初使用该GoldParse功能而不是Example.from_dict- 但我升级到 Spacy 3.0.5,我不明白为什么会发生此错误。

4

1 回答 1

2

从 spaCy v3 开始,scorer.score只列出一个示例。每个Example对象包含两个Doc对象:

  • 一个reference带有黄金标准注释的文档,例如从给定的annot字典创建的
  • 一个predicted带有预测的文档。然后记分员将比较两者。

所以你想要这样的东西:

from spacy.training import Example
examples = []
for ...:
    example = Example.from_dict(text, {"entities": annot})
    example.predicted = ner_model(example.predicted)
    examples.append(example)
scorer.score(examples)
于 2021-04-23T11:59:37.840 回答