如何评估训练有素的 spaCy 版本 3 模型?
How to evaluate trained spaCy version 3 model?
我想使用以下代码使用内置 Scorer 函数评估我训练的 spaCy 模型:
def evaluate(ner_model, examples):
scorer = Scorer()
for input_, annot in examples:
text = nlp.make_doc(input_)
gold = Example.from_dict(text, annot)
pred_value = ner_model(input_)
scorer.score(gold)
return scorer.scores
examples = [('Brief discussion about instument replcement and Product ...confirmation', {'entities': [(48, 55, 'PRODUCT')]})('Met with special chem lead. Did not yet move assays from immulite to produc. Follow up with PhD tomorrow.', {'entities': [(57, 68, 'PRODUCT'), (45, 51, 'DATE'), (97, 105, 'DATE')]}), ('Discuss new products for ...', {'entities': [(36, 51, 'PRODUCT')]})]
ner_model = spacy.load(r'D:\temp\model') # for spaCy's pretrained use 'en_core_web_sm'
results = evaluate(ner_model, examples)
当我 运行 函数时,我收到以下错误消息:
TypeError: [E978] The Tokenizer.score method takes a list of Example objects, but got: <class 'spacy.training.example.Example'>
我已经尝试输入像 {"entities": annot} 这样的注释和它的一些其他版本。我检查了 google,但每篇文章似乎都与 spaCy 的 2.xx 版本有关。
我做错了什么?如何使用 spacy Score() 计算召回率、准确率和 F1 分数?
您应该使用 evaluate 命令行模式。
spacy evaluate my-model/ test.spacy
其中 test.spacy
是您的测试数据。
另外,关于这个错误:
TypeError: [E978] The Tokenizer.score method takes a list of Example objects, but got: <class 'spacy.training.example.Example'>
如该错误所示,您应该传递一系列示例,但您只传递了一个示例。您基本上应该使用 scorer.score([gold])
。
spaCy 3.0 (https://spacy.io/api/scorer) 仍然支持 scores 方法,我终于用下面的代码让它工作了:
nlp = spacy.load(path_to_model)
examples = []
scorer = Scorer()
for text, annotations in TEST_REVISION_DATA:
doc = nlp.make_doc(text)
example = Example.from_dict(doc, annotations)
example.predicted = nlp(str(example.predicted))
examples.append(example)
scorer.score(examples)
我没有发现命令行工具易于应用(我一直在努力处理测试数据负载)并且对于我的需求,代码版本也更加方便。这样我就可以轻松地将结果转换为视觉效果。
我想使用以下代码使用内置 Scorer 函数评估我训练的 spaCy 模型:
def evaluate(ner_model, examples):
scorer = Scorer()
for input_, annot in examples:
text = nlp.make_doc(input_)
gold = Example.from_dict(text, annot)
pred_value = ner_model(input_)
scorer.score(gold)
return scorer.scores
examples = [('Brief discussion about instument replcement and Product ...confirmation', {'entities': [(48, 55, 'PRODUCT')]})('Met with special chem lead. Did not yet move assays from immulite to produc. Follow up with PhD tomorrow.', {'entities': [(57, 68, 'PRODUCT'), (45, 51, 'DATE'), (97, 105, 'DATE')]}), ('Discuss new products for ...', {'entities': [(36, 51, 'PRODUCT')]})]
ner_model = spacy.load(r'D:\temp\model') # for spaCy's pretrained use 'en_core_web_sm'
results = evaluate(ner_model, examples)
当我 运行 函数时,我收到以下错误消息:
TypeError: [E978] The Tokenizer.score method takes a list of Example objects, but got: <class 'spacy.training.example.Example'>
我已经尝试输入像 {"entities": annot} 这样的注释和它的一些其他版本。我检查了 google,但每篇文章似乎都与 spaCy 的 2.xx 版本有关。
我做错了什么?如何使用 spacy Score() 计算召回率、准确率和 F1 分数?
您应该使用 evaluate 命令行模式。
spacy evaluate my-model/ test.spacy
其中 test.spacy
是您的测试数据。
另外,关于这个错误:
TypeError: [E978] The Tokenizer.score method takes a list of Example objects, but got: <class 'spacy.training.example.Example'>
如该错误所示,您应该传递一系列示例,但您只传递了一个示例。您基本上应该使用 scorer.score([gold])
。
spaCy 3.0 (https://spacy.io/api/scorer) 仍然支持 scores 方法,我终于用下面的代码让它工作了:
nlp = spacy.load(path_to_model)
examples = []
scorer = Scorer()
for text, annotations in TEST_REVISION_DATA:
doc = nlp.make_doc(text)
example = Example.from_dict(doc, annotations)
example.predicted = nlp(str(example.predicted))
examples.append(example)
scorer.score(examples)
我没有发现命令行工具易于应用(我一直在努力处理测试数据负载)并且对于我的需求,代码版本也更加方便。这样我就可以轻松地将结果转换为视觉效果。