You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 06:53:24