Hugging Face Evaluate 库
evaluate
是 Hugging Face 提供的一个 轻量级评估库,用于 计算模型的评估指标(如准确率、精确率、召回率、F1 分数等)。它可以与 datasets
和 transformers
无缝集成,特别适用于 自然语言处理(NLP)、计算机视觉(CV)、语音任务 的模型评估。
1. 为什么使用 evaluate
?
在深度学习模型训练中,评估指标通常需要手动计算,比如:
- 文本分类:准确率(Accuracy)、F1 分数
- 机器翻译:BLEU、ROUGE
- 问答系统:SQuAD 评估指标
- 计算机视觉:IoU(交并比)
- 语音识别:WER(词错误率)
传统方法需要写大量的 NumPy 或 Scikit-learn 代码,而 evaluate
提供了开箱即用的评估指标,并且支持 并行计算、流式数据处理、可扩展自定义指标。
2. 安装 evaluate
可以使用 pip
安装:
pip install evaluate
3. 加载并计算评估指标
3.1. 计算准确率(accuracy)
import evaluate
accuracy = evaluate.load("accuracy")
# 真实标签和预测标签
references = [0, 1, 1, 0, 1, 1, 0]
predictions = [0, 1, 0, 0, 1, 1, 1]
result = accuracy.compute(predictions=predictions, references=references)
print(result) # {'accuracy': 0.714}
evaluate.load("accuracy")
加载 Hugging Face 预定义的 准确率指标compute(predictions, references)
计算准确率
3.2. 计算精确率、召回率、F1 分数
f1 = evaluate.load("f1")
precision = evaluate.load("precision")
recall = evaluate.load("recall")
result_f1 = f1.compute(predictions=predictions, references=references)
result_precision = precision.compute(predictions=predictions, references=references)
result_recall = recall.compute(predictions=predictions, references=references)
print(result_f1) # {'f1': 0.75}
print(result_precision) # {'precision': 0.8}
print(result_recall) # {'recall': 0.75}
这些指标用于 分类任务,如 情感分析、命名实体识别。
3.3. 计算 BLEU 分数(机器翻译)
适用于机器翻译任务:
bleu = evaluate.load("bleu")
predictions = ["this is a test"]
references = [["this is a test"], ["this is test"]]
result = bleu.compute(predictions=predictions, references=references)
print(result) # {'bleu': 1.0}
3.4. 计算 ROUGE 分数(文本摘要)
适用于 文本摘要任务:
rouge = evaluate.load("rouge")
predictions = ["Hugging Face is creating a tool."]
references = ["Hugging Face is making a tool."]
result = rouge.compute(predictions=predictions, references=references)
print(result) # {'rouge1': 0.83, 'rouge2': 0.67, 'rougeL': 0.83, 'rougeLsum': 0.83}
3.5. 计算 WER(语音识别)
适用于 语音识别任务:
wer = evaluate.load("wer")
predictions = ["hello world"]
references = ["hello word"]
result = wer.compute(predictions=predictions, references=references)
print(result) # {'wer': 0.5}
WER(Word Error Rate,词错误率)用于衡量 语音识别模型的性能。
4. 与 Hugging Face datasets
结合
如果你使用 datasets
进行评估:
from datasets import load_dataset
dataset = load_dataset("glue", "sst2", split="train[:100]")
accuracy = evaluate.load("accuracy")
predictions = [1] * len(dataset) # 假设所有预测都是 1
references = dataset["label"]
result = accuracy.compute(predictions=predictions, references=references)
print(result)
5. 计算多分类的 accuracy
默认 accuracy
适用于 二分类任务,如果是 多分类任务:
accuracy = evaluate.load("accuracy")
predictions = [0, 2, 1, 2, 0, 1]
references = [0, 1, 1, 2, 0, 1]
result = accuracy.compute(predictions=predictions, references=references)
print(result) # {'accuracy': 0.833}
6. 自定义评估指标
如果 evaluate
没有提供你需要的指标,你可以定义自己的评估函数:
import evaluate
def custom_metric(predictions, references):
return {"custom_score": sum(p == r for p, r in zip(predictions, references)) / len(references)}
custom_evaluate = evaluate.load("evaluate_metric", module_type="metric")
custom_evaluate._compute = custom_metric
predictions = [1, 0, 1, 1]
references = [1, 1, 0, 1]
result = custom_evaluate.compute(predictions=predictions, references=references)
print(result) # {'custom_score': 0.5}
这种方法适用于 自定义 NLP 任务的评估。
7. evaluate
与 sklearn.metrics
的对比
evaluate
适用于 Hugging Face datasets
和 transformers
,而 sklearn.metrics
更适合传统 ML 任务:
功能 | evaluate | sklearn.metrics |
---|---|---|
NLP 评估(BLEU, ROUGE, WER) | 是 | 否 |
兼容 Hugging Face datasets | 是 | 否 |
计算分类指标(accuracy, F1, precision) | 是 | 是 |
适用于大规模数据 | 是 | 否 |
多进程计算 | 是 | 否 |
如果你只需要分类指标(accuracy, precision, recall, F1),可以使用 sklearn.metrics
:
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(references, predictions)
print(accuracy)
如果需要 NLP 评估(BLEU, ROUGE, WER),建议使用 evaluate
。
8. 总结
evaluate
是 Hugging Face 提供的 轻量级评估库,适用于 NLP、CV、语音任务。- 支持多种评估指标,如 accuracy、precision、recall、F1、BLEU、ROUGE、WER。
- 兼容 Hugging Face
datasets
,可以批量计算评估指标。 - 支持流式计算,适用于大规模数据。
- 可以自定义评估指标,灵活扩展。