如何为HuggingFace Evaluate组合的chrf指标指定word_order=2参数?
解决方法
要给chrf指标指定word_order=2参数,你需要在使用evaluate.combine()时,不为每个指标只传字符串名称,而是传入包含参数配置的字典。具体修改如下:
1. 修改指标初始化代码
将原来的列表式传入改为字典列表,为chrf添加参数配置:
import evaluate # 用字典列表配置每个指标,为chrf指定word_order参数 metric = evaluate.combine( [ "sacrebleu", # sacrebleu使用默认参数 {"name": "chrf", "params": {"word_order": 2}} # 为chrf指定word_order=2 ], force_prefix=True )
2. 保持compute_metrics函数不变
你的compute_metrics()函数不需要修改,因为指标的参数已经在初始化阶段完成配置,调用metric.compute()时会自动应用这些参数:
def compute_metrics(eval_preds): preds, labels = eval_preds if isinstance(preds, tuple): preds = preds[0] decoded_preds = tokenizer.batch_decode(preds, skip_special_tokens=True) labels = np.where(labels != -100, labels, tokenizer.pad_token_id) decoded_labels = tokenizer.batch_decode(labels, skip_special_tokens=True) decoded_preds, decoded_labels = postprocess_text(decoded_preds, decoded_labels) result = metric.compute(predictions=decoded_preds, references=decoded_labels) results = {"bleu": result["sacrebleu_score"], "chrf": result["chr_f_score"]} prediction_lens = [np.count_nonzero(pred != tokenizer.pad_token_id) for pred in preds] results["gen_len"] = np.mean(prediction_lens) results = {k: round(v, 4) for k, v in results.items()} return results
原理说明
evaluate.combine()支持两种传入指标的方式:
- 直接传字符串名称(使用该指标的默认参数)
- 传字典,其中
name指定指标名称,params传入该指标的自定义配置参数
这样配置后,chrf指标在计算时会自动使用word_order=2的设置,而sacrebleu保持默认参数运行。
内容的提问来源于stack exchange,提问作者Raptor
相关产品推荐
相关产品推荐

