为什么我的 SpaCy v3 计分器的精度、召回率和 f1 返回 0?
Why is my SpaCy v3 scorer returing 0 for precision, recall and f1?
我有以下代码(从 SpaCy v2 迁移),我想在其中计算给定模型的精度、召回率和 f1 分数:
nlp = spacy.load("my_model")
scorer = Scorer(nlp)
examples = []
for text, annotations in TEST_DATA:
examples.append(Example.from_dict(nlp.make_doc(text), annotations))
results = scorer.score(examples)
print(
"Precision {:0.4f}\tRecall {:0.4f}\tF-score {:0.4f}".format(results['ents_p'], results['ents_r'], results['ents_f'])
)
我试图理解的奇怪事情是为什么它总是 returns
Precision 0.0000 Recall 0.0000 F-score 0.0000
我的 TEST_DATA 集与我用来训练相同模型的 TRAIN_DATA 集的形式相同。这是它的样子:
[
(
'Line 106 – for dilution times, the units should be specified', {'entities': [(51, 60, 'ACTION'), (41, 47, 'MODAL'), (11, 40, 'CONTENT'), (0, 8, 'LOCATION')]}
),
(
'It should be indicated what test was applied to verify the normality of distribution.', {'entities': [(13, 22, 'ACTION'), (28, 85, 'CONTENT'), (3, 9, 'MODAL')]}
)
]
计分器不会 运行 预测文档上的管道,因此您正在根据测试用例评估空白文档。
推荐的方法是使用nlp.evaluate
代替:
scores = nlp.evaluate(examples)
如果您出于某种原因想要直接调用记分器,另一种选择是 运行 预测文档上的管道(nlp
而不是 nlp.make_doc
),因此:
example = Example.from_dict(nlp(text), annots)
我有以下代码(从 SpaCy v2 迁移),我想在其中计算给定模型的精度、召回率和 f1 分数:
nlp = spacy.load("my_model")
scorer = Scorer(nlp)
examples = []
for text, annotations in TEST_DATA:
examples.append(Example.from_dict(nlp.make_doc(text), annotations))
results = scorer.score(examples)
print(
"Precision {:0.4f}\tRecall {:0.4f}\tF-score {:0.4f}".format(results['ents_p'], results['ents_r'], results['ents_f'])
)
我试图理解的奇怪事情是为什么它总是 returns
Precision 0.0000 Recall 0.0000 F-score 0.0000
我的 TEST_DATA 集与我用来训练相同模型的 TRAIN_DATA 集的形式相同。这是它的样子:
[
(
'Line 106 – for dilution times, the units should be specified', {'entities': [(51, 60, 'ACTION'), (41, 47, 'MODAL'), (11, 40, 'CONTENT'), (0, 8, 'LOCATION')]}
),
(
'It should be indicated what test was applied to verify the normality of distribution.', {'entities': [(13, 22, 'ACTION'), (28, 85, 'CONTENT'), (3, 9, 'MODAL')]}
)
]
计分器不会 运行 预测文档上的管道,因此您正在根据测试用例评估空白文档。
推荐的方法是使用nlp.evaluate
代替:
scores = nlp.evaluate(examples)
如果您出于某种原因想要直接调用记分器,另一种选择是 运行 预测文档上的管道(nlp
而不是 nlp.make_doc
),因此:
example = Example.from_dict(nlp(text), annots)