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

如何在Hugging Face Trainer中调用Macro-Precision指标?

Hugging Face Datasets未内置Macro-Precision的解决方案

你在老版datasets库的list_metrics里找不到宏精确率是正常的——datasets的指标模块早就拆分到独立的evaluate库了,老版本内置的指标覆盖本来就不全,要满足DEFT-2015数据集的结果对比需求,选以下任意一种方案都可以,优先选和你参考的公开研究口径一致的实现:

  • 方案1:调用scikit-learn内置的宏精确率接口
    这是和2015年前后研究使用的计算逻辑对齐度最高的方案,绝大多数早年NLP分类论文的宏精确率都是用这个接口算的,基本不会出现口径偏差。
    示例代码:
    from sklearn.metrics import precision_score
    # 传入真实标签序列、模型预测标签序列,指定average='macro'即为宏精确率
    macro_p = precision_score(y_true=gold_labels, y_pred=model_preds, average='macro', zero_division=0)
    
    提示:多分类/多标签场景下加zero_division=0参数,是为了匹配DEFT-2015官方的计算规则,遇到没有预测样本的类别时直接记该类别精确率为0,不会触发计算报错。
  • 方案2:用Hugging Face官方的evaluate库加载精确率指标计算
    如果你用的是Hugging Face Trainer做训练,这个方案和训练流程的兼容性最好,不需要额外做预测结果的格式转换。计算时只要指定平均模式为宏平均即可,不需要自己写计算逻辑。
    示例代码:
    import evaluate
    precision = evaluate.load("precision")
    macro_p = precision.compute(
        predictions=model_preds,
        references=gold_labels,
        average="macro",
        zero_division=0
    )["precision"]
    
  • 方案3:手动实现宏精确率计算逻辑
    如果你参考的公开研究对边缘类别(无真实样本/无预测样本的类别)有特殊的计算规则,自己写逻辑可以100%对齐口径,避免第三方库默认规则带来的数值差。计算步骤很简单:
    1. 遍历所有类别,分别统计每个类别的真阳性(预测为该类且真实标签为该类的样本数)、假阳性(预测为该类但真实标签不是该类的样本数)
    2. 逐类计算单类精确率:单类P = 真阳性 / (真阳性 + 假阳性),分母为0时按参考研究的规则赋值(一般为0)
    3. 所有类别的单类精确率求和,除以总类别数,得到最终的宏精确率

口径校验提示:拿到计算结果后,可以先抽1-2个类别手动算下精确率,核对和代码输出的单类值是否一致,避免标签编码错位(比如标签id和类别名映射错)导致的结果偏差,和公开结果对比时这点尤其重要。

内容的提问来源于stack exchange,提问作者Eliott Thomas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:33:18