spacy 3 NER Scorer() throws TypeError: score() takes 2 positional arguments but 3 were given
spacy 3 NER Scorer() throws TypeError: score() takes 2 positional arguments but 3 were given
运行 尝试使用 Scorer
在我的测试集上获取分数时出现以下错误
TypeError: score() takes 2 positional arguments but 3 were given
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')])
]
预期输出是 p
、r
和 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,我不明白为什么会出现这个错误。
自 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)
运行 尝试使用 Scorer
TypeError: score() takes 2 positional arguments but 3 were given
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')])
]
预期输出是 p
、r
和 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,我不明白为什么会出现这个错误。
自 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)