lm-evaluation-harness 中的 Inverse Scaling 任务评测指南:复现"Inverse Scaling: When Bigger Isn't Better"
【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness
本指南围绕 lm-evaluation-harness 仓库中
lm_eval/tasks/inverse_scaling任务族展开,系统介绍 Inverse Scaling Prize(逆缩放奖)11 个数据集在框架内的实现方式、共享的多选评测配置、可复现的 OPT 基线结果以及实际运行方法。读完本文,你将掌握如何用lm_eval命令一键评测这些逆缩放任务,理解其"模型越大、表现反而越差"的评测设计原理,并能把同类多选任务快速接入框架。
一、背景:什么是 Inverse Scaling
Inverse Scaling(逆缩放)是与经典 Scaling Laws(缩放定律)相对的一种现象。经典缩放定律认为:随着模型规模(参数量、训练数据量、计算量)的增大,大语言模型(LM)的损失与任务表现会呈现可预测的改善。而 Inverse Scaling 则相反——任务表现随模型规模增大而变差,其根源通常来自训练目标与训练数据本身的缺陷。
这一现象的证据集中体现在论文《Inverse Scaling: When Bigger Isn't Better》(Ian R. McKenzie 等,arXiv:2306.09479,2023)中。该论文通过一场奖金丰厚的公开竞赛——Inverse Scaling Prize(逆缩放奖)——收集了 11 个出现逆缩放现象的数据集,并从中归纳出四类潜在成因:
- 偏好重复记忆序列,而非遵循上下文指令(preference to repeat memorized sequences over following in-context instructions);
- 模仿训练数据中的不良模式(imitation of undesirable patterns in the training data);
- 任务中混入了一个"容易的干扰子任务",LM 可能聚焦于干扰任务而忽略真正的难题(tasks containing an easy distractor task which LMs could focus on, rather than the harder real task);
- 少样本演示本身正确但具有误导性(correct but misleading few-shot demonstrations of the task)。
这些数据集还帮助研究者发现了U 形与倒 U 形(U-shaped and inverted-U)缩放趋势——即初始趋势在更大规模下发生反转,说明仅凭小规模模型的缩放趋势来预测大模型行为并不可靠。
实现说明:本仓库中的 Inverse Scaling 任务并非 Inverse Scaling Prize 的官方实现,而是由 h-albert-lee 在论文作者许可下实现的(README 中明确注明)。原始数据集主页为 Inverse Scaling Prize 官方仓库。
二、仓库中的任务与分组结构
在 lm-evaluation-harness 中,Inverse Scaling 任务位于 lm_eval/tasks/inverse_scaling/ 目录,包含:
- 1 个共享配置模板:
_inverse_scaling_mc_yaml - 11 个任务 YAML:
inverse_scaling_hindsight_neglect.yaml、inverse_scaling_redefine_math.yaml、inverse_scaling_quote_repetition.yaml、inverse_scaling_neqa.yaml、inverse_scaling_winobias_antistereotype.yaml、inverse_scaling_into_the_unknown.yaml、inverse_scaling_memo_trap.yaml、inverse_scaling_modus_tollens.yaml、inverse_scaling_pattern_matching_suppression.yaml、inverse_scaling_repetitive_algebra.yaml、inverse_scaling_sig_figs.yaml - 1 个评测结果参考文件:
_some_results
分组(Group):inverse_scaling_mc
inverse_scaling_mc是所有这些任务的统合分组,对应 Inverse Scaling Prize 的全部任务(目前除 Prompt Injection 外),其评测设置与论文作者在OPT 模型上的多选(multiple-choice)分类评测实现保持一致。README 特别强调:
这些任务匹配的是已发布的数据集版本,与论文中的数字可能略有差异;但已针对 https://huggingface.co/inverse-scaling/opt-1.3b_eval 上报告的多个规模的 OPT 结果做了等价性测试。
任务清单(Tasks)
| 任务名 | 数据来源(dataset_path) |
|---|---|
inverse_scaling_hindsight_neglect_10shot | inverse-scaling/hindsight-neglect-10shot |
inverse_scaling_redefine_math | inverse-scaling/redefine-math |
inverse_scaling_quote_repetition | inverse-scaling/quote-repetition |
inverse_scaling_neqa | inverse-scaling/NeQA |
inverse_scaling_winobias_antistereotype | mathemakitten/winobias_antistereotype_test_v5 |
inverse_scaling_into_the_unknown | Albertmade/into-the-unknown |
inverse_scaling_memo_trap | Albertmade/memo-trap |
inverse_scaling_modus_tollens | Albertmade/modus-tollens |
inverse_scaling_pattern_matching_suppression | Albertmade/pattern-matching-suppression |
inverse_scaling_repetitive_algebra | Albertmade/repetitive-algebra |
inverse_scaling_sig_figs | Albertmade/sig-figs |
其中inverse_scaling_winobias_antistereotype比较特殊:它不是Inverse Scaling Prize 的官方获奖任务,而是反刻板印象(antistereotype)变体,其评测结果同样在 opt-1.3b_eval 中报告过,因此被纳入本任务族。
三、共享配置模板:_inverse_scaling_mc_yaml详解
除winobias_antistereotype外,其余 10 个任务均通过include: _inverse_scaling_mc_yaml继承同一份多选评测配置(模板文件)。这是理解整个任务族的关键,逐项解读如下:
tag: - inverse_scaling_mc # 将任务归入 inverse_scaling_mc 分组 output_type: multiple_choice # 评测方式:多选(计算各选项的条件对数概率) test_split: train # 使用数据集的 train 划分作为测试集 doc_to_text: prompt # 从样本中取 prompt 字段作为输入文本 doc_to_choice: classes # 从样本中取 classes 字段作为候选选项列表 doc_to_target: answer_index # 从样本中取 answer_index 字段作为正确选项下标 target_delimiter: "" # 输入文本与选项之间不加分隔符 metric_list: - metric: acc # 准确率 aggregation: mean higher_is_better: true - metric: acc_norm # 按长度归一化的准确率 aggregation: mean higher_is_better: true metadata: version: 0关键设计要点:
output_type: multiple_choice:框架会对每个候选选项分别计算续写对数概率(loglikelihood),选择概率最高的选项作为模型答案。这与论文在 OPT 上使用的多选分类评测方式一致。doc_to_text/doc_to_choice/doc_to_target:三个字段分别完成"取题面、取选项、取答案"的样本映射,无需额外 Python 处理函数即可把 HF 数据集样本转为评测实例。test_split: train:Inverse Scaling Prize 数据集没有传统意义上的 test 划分,模型未见过的样本就存放在train划分中,因此这里显式指定使用train作为评测集。target_delimiter: "":题面与答案之间不插入任何分隔符,避免引入额外 token 影响概率计算,保证与原始评测设置对齐。- 双指标:同时报告
acc与acc_norm。acc_norm按选项长度对条件对数概率做归一化,能削弱"长选项天然概率低"的偏差,在逆缩放任务中两者通常高度一致(见下文_some_results)。
特例:winobias_antistereotype 的独立配置
inverse_scaling_winobias_antistereotype.yaml 未继承共享模板,而是独立书写:
task: inverse_scaling_winobias_antistereotype dataset_path: mathemakitten/winobias_antistereotype_test_v5 output_type: multiple_choice test_split: test # 注意:使用 test 划分 doc_to_text: text # 字段名不同:text / classes / target doc_to_choice: classes doc_to_target: target metric_list: - metric: acc aggregation: mean higher_is_better: true - metric: acc_norm aggregation: mean higher_is_better: true metadata: version: 0其差异在于:数据集字段名不同(text/target而非prompt/answer_index),评测划分使用test而非train。
四、参考评测结果:_some_results
仓库提供了 _some_results 文件,记录了使用facebook/opt-2.7b(add_bos_token=True, dtype=float32, batch_size=auto(32))在 0-shot 下的实测输出,可作为复现时对拍参考:
| 任务 | acc | acc_norm |
|---|---|---|
| inverse_scaling_hindsight_neglect_10shot | 0.4476 ± 0.0281 | 0.4476 ± 0.0281 |
| inverse_scaling_neqa | 0.5300 ± 0.0289 | 0.5300 ± 0.0289 |
| inverse_scaling_quote_repetition | 0.9367 ± 0.0141 | 0.9367 ± 0.0141 |
| inverse_scaling_redefine_math | 0.7178 ± 0.0150 | 0.7178 ± 0.0150 |
| inverse_scaling_winobias_antistereotype | 0.3786 ± 0.0239 | 0.4126 ± 0.0243 |
| inverse_scaling_mc(分组聚合) | 0.6210 ± 0.0095 | 0.6273 ± 0.0096 |
可以观察到:大部分任务的acc与acc_norm数值一致,仅 winobias_antistereotype 存在明显差异(0.3786 vs 0.4126),说明该任务选项长度分布不均,归一化指标影响显著。文件中还记录了第二次运行结果(acc_norm 0.6291),数值略有波动,属正常抽样误差。
从这些数字可以直观感受逆缩放现象:例如 hindsight_neglect_10shot 的准确率约 0.45,接近随机猜测水平(二分类为 0.5),而规模更大的模型在此类任务上甚至可能更低。
五、如何运行评测
1. 运行单个任务
在仓库根目录执行lm_eval命令行接口即可评测单个任务,例如:
lm_eval --model hf \ --model_args pretrained=facebook/opt-2.7b,add_bos_token=True \ --tasks inverse_scaling_neqa \ --batch_size auto2. 运行整个分组
如需评测全部 Inverse Scaling 多选任务并得到分组聚合结果,直接指定分组名:
lm_eval --model hf \ --model_args pretrained=facebook/opt-2.7b,add_bos_token=True \ --tasks inverse_scaling_mc \ --batch_size auto框架会自动加载分组下全部任务,输出每个任务的 acc / acc_norm,并给出inverse_scaling_mc分组的聚合值(如_some_results中所示,聚合方式为各任务指标的加权平均)。
3. 运行参数说明
--model hf:使用 Hugging Face transformers 模型;--model_args pretrained=...:指定模型权重;复现仓库参考结果时建议带上add_bos_token=True(OPT 需要 BOS token 以获得正确续写概率),并使用dtype=float32;--tasks:任务名或分组名,多个用逗号分隔;--batch_size auto:自动选择批大小,仓库参考结果即在auto(32)下得到;--num_fewshot:默认 0-shot,任务名中的10shot指的是数据集内部的演示配置(hindsight-neglect-10shot 自带 10 条误导性演示),而非运行时的 fewshot 参数,这一点需要注意区分。
六、扩展:如何将新任务接入本任务族
基于共享模板的设计,接入新数据集十分轻量。只需新建 YAML 并满足以下条件:
- 数据集样本包含
prompt(题面)、classes(选项列表)、answer_index(正确下标)三个字段; - 继承共享模板(
include: _inverse_scaling_mc_yaml)并覆盖task与dataset_path,如:
include: _inverse_scaling_mc_yaml task: inverse_scaling_my_new_task dataset_path: my-org/my-dataset- 若字段命名不同,需自行书写完整配置(参照 winobias_antistereotype 的做法,映射
doc_to_text/doc_to_choice/doc_to_target)。
从源码结构看,这一机制依托于框架的 YAML 任务加载与include继承体系(任务工厂、YAML 加载器),tag字段则负责把任务归入分组以便--tasks inverse_scaling_mc批量调度。
七、总结与注意事项
- 评测口径:本任务族的多选评测实现与论文作者在 OPT 上的评测一致,匹配的是官方发布的数据集版本,复现时以 _some_results 中的 OPT 结果为对拍基准;
- 逆缩放的可复现性:通过在不同规模模型(如 OPT-1.3B、2.7B、6.7B…)上运行本任务族,即可复现论文中"规模增大、性能下降"的逆缩放曲线,以及 U 形 / 倒 U 形缩放趋势;
- 引用规范:若在论文或报告中引用该数据集,请使用 README 中给出的 BibTeX 条目(McKenzie et al., 2023, arXiv:2306.09479),并在实现层面注明本仓库任务为社区实现而非官方实现;
- 已知局限:
inverse_scaling_mc分组目前未包含 Prompt Injection 任务;winobias_antistereotype 非官方获奖任务,解读结果时需注意其定位差异。
【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考