论文:HellaSwag: Can a Machine Really Finish Your Sentence? (ACL 2019)
作者:Rowan Zellers, Ari Holtzman, Yonatan Bisk, Ali Farhadi, Yejin Choi
代码与数据:GitHub | 官网
HellaSwag 是一个用于评估大语言模型(LLM)常识推理能力的基准测试,其名称是 "Harder Endings, Longer contexts, and Low-shot Activities for Situations With Adversarial Generations" 的递归缩写。该基准测试于 ACL 2019 由华盛顿大学 Zellers 等人提出,旨在衡量模型对日常物理场景的理解——能否从四个候选选项中选出最合理的句子续写。
HellaSwag 的核心贡献在于提出了对抗过滤(Adversarial Filtering, AF) 数据构建范式。这一机制使得 HellaSwag 成为当时存在最大"人机差距"的基准测试之一:
这意味着即使是最优秀的模型,在常识推理上的表现也比人类差了将近 50 个百分点,这直接引发了后续对预训练模型"理解能力"的广泛质疑。用更直观的方式来理解这个差距:在一个包含 10,000 道题目的基准测试中,人类平均答对 9,560 道题,而当时的 BERT-Large 只能答对 4,730 道——连一半都不到。再做一个更具体的类比:如果这个测试是关于"判断一个人从客厅走到厨房后最可能做什么",人类会立即明白"可能是去喝水或做饭",但 BERT-Large 有超过一半的概率认为"他可能去洗澡或睡觉"。
截至 2025-2026 年,GPT-4、Claude 3 Opus 等顶级闭源模型在 HellaSwag 上已达到或超越人类水平(95%以上),但该基准仍然是评估中小型模型和微调变体的重要基线。
HellaSwag 的前身是 SWAG(Situations With Adversarial Generations) 数据集(Zellers et al., 2018)。SWAG 同样是一个句子补全的常识推理数据集,但其构建存在一个根本性问题:
SWAG 的错误选项由人类标注者手工生成,而人类在生成看似合理但实际错误的选项时,会不自觉地引入"人为痕迹"——这些痕迹(如词汇选择偏好、句式模式)会被 NLI 模型利用,导致模型获得虚假的高分。
具体来说,Zellers 等人发现一个"诡异"的现象:在 SWAG 上表现最好的模型,并不是因为真的"理解"了场景,而是因为学会了利用数据中的表层统计特征(surface-level statistical artifacts)。例如:
这个现象被 Zellers 等人称为"假阳性推理"(spurious inference)。当研究者将这些表层特征去除后,模型的准确率立刻大幅下降。
HellaSwag 的设计团队意识到:为了让机器真正学会常识推理,必须让错误选项足够"逼真"——即需要由机器自身生成错误选项。只有当生成和判别能力同步提升时,基准测试才能真正衡量推理能力。
这就引出了 HellaSwag 的核心创新:对抗过滤(Adversarial Filtering, AF)。
对抗过滤是一个迭代式数据构建流程,它利用"生成器-判别器"的对抗博弈来产生高质量、高难度的错误选项:
┌──────────────┐ ┌──────────────────┐ ┌──────────────┐
│ 上下文获取 │────>│ Generator LM │────>│ Discriminator│
│ (ActivityNet/ │ │ (批量生成候选) │ │ (筛选最难) │
│ WikiHow) │ │ │ │ │
└──────────────┘ └──────────────────┘ └──────┬───────┘
│ │
▼ ▼
┌──────────────────────────────────────────────────────────┐
│ 迭代优化循环 │
│ 1. 用当前 Discriminator 筛选 Generator 生成的候选选项 │
│ 2. 保留 Discriminator 误判率最高的候选选项 │
│ 3. 将筛选后的样本加入训练集,重新训练 Generator+Discri- │
│ minator,重复步骤 1-2 │
└──────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────┐
│ 最终人类验证 │
│ 人类标注者检查: │
│ - 正确选项是否确实合理 │
│ - 错误选项对人类是否明显荒谬 │
│ - 如果人类准确率 > 95% 则通过 │
└──────────────────────────────────┘
具体步骤分解:
步骤 1:获取上下文
从 ActivityNet 和 WikiHow 中提取自然场景的文本描述,经过预处理后作为每个题目的"上下文"。
步骤 2:用 Generator 生成大量候选错误选项
使用预训练语言模型(如 GPT)为每个上下文生成 N 个候选错误续写。N 通常取 100-1000,形成一个庞大的候选池。比如对于一个"如何做龙舟"的上下文,生成器会产出大量的候选句子:
Generator 输入:"如何做龙舟。将一张大纸对折..."
Generator 输出候选池(共 100 条):
- "然后将纸翻转过来,重复上述步骤。"(✅ 看起来合理——折纸的标准流程)
- "然后把纸撕成碎片。"(❌ 看起来不合理——没有人在折纸途中撕纸)
- "然后拿起笔在纸上画画。"(❌ 不合理——折纸不同于绘画)
- "然后在纸上涂上胶水。"(⚠️ 有些折纸确实需要胶水,但龙舟折纸不需要)
...
步骤 3:用 Discriminator 筛选最难选项
有一组判别器模型对所有候选错误选项打分。判别器的输出是"这个结尾看起来有多合理"。只有那些判别器认为最合理(即最容易被误判)的选项才被保留。
步骤 4:人类验证
让人类标注者验证生成的样本。标准是:人类准确率必须超过 95%。如果人都会选错,说明生成的样本太难或标注不清晰。
步骤 5:迭代优化
将新筛选出的样本加入训练集,重新训练生成器和判别器,重复整个过程。
训练目标:模型的训练目标是最大化正确结尾的对数似然:
其中 是第 个样本的上下文, 是正确的结尾, 是模型预测的结尾。
过滤条件:候选错误选项 被保留的条件是它能成功"骗过"判别器:
其中 是判别器输出的合理度评分(0 到 1 之间的概率值), 是预设阈值(通常取 0.5 或根据验证集确定)。
迭代的对抗博弈可以形式化为:
其中 是生成器(Generator), 是判别器(Discriminator),这与 GAN 的思想一脉相承。
AF 的核心洞察是寻找一个 "金发姑娘区"——生成的错误选项对人类来说荒谬可笑(人类准确率 95% 以上),却经常被最先进模型误判(模型准确率低于 50%)。
为什么这个区域如此重要?
用一个具体的数值例子来说明模型在不同层面的处理:
假设我们要评估三个模型在 HellaSwag 上的表现。对于每个问题,模型需要考虑三个层面:
| 处理层面 | 模型能力要求 | 示例对比 |
|---|---|---|
| L1:语法层面 | 判断句子是否合语法 | "他拿出一个锅" ✅ vs "他拿出一个锅快乐" ❌ |
| L2:语义层面 | 判断是否符合常识 | "锅里炒菜" ✅ vs "锅里放手机" ❌ |
| L3:场景层面 | 判断是否符合上下文 | "锅→炉灶→开火→打鸡蛋" ✅ vs "锅→炉灶→放进冰箱" ❌ |
不同能力的模型在这三个层面上的差异如下:
| 模型类型 | L1 语法 | L2 语义 | L3 场景 | HellaSwag 得分 | 失败原因 |
|---|---|---|---|---|---|
| 随机猜测 | ❌ | ❌ | ❌ | 25% | 根本不会选择 |
| 基础语言模型(如 LSTM 和 ELMo) | ✅ | ❌ | ❌ | 31-36% | 只能判断语法对错,无法区分语义是否合理 |
| 预训练模型(BERT-Base) | ✅ | ✅ | ❌ | 40.5% | 能判断"放手机进锅"不合理,但无法理解"锅放冰箱"为何违反场景常识 |
| 微调大模型(BERT-Large) | ✅ | ✅ | ⚠️ | 47.3% | 能在已知场景中做部分推理,但新场景很不稳定 |
| 人类 | ✅ | ✅ | ✅ | 95.6% | 具备完整的物理常识和场景理解 |
传统数据集中的错误选项通常在 L2 层面就被排除了,所以模型只需要通过 L2 就能获得不错的分数。但在 HellaSwag 中,错误选项经过了精心筛选——它们通过了 L1 和 L2,只会在 L3 层面露出破绽。模型必须进入第三个层面才能做出正确判断,这就将问题从"模式匹配"提升到了"真正推理"。
| 维度 | 传统数据集构建 | HellaSwag 的对抗过滤 |
|---|---|---|
| 错误选项来源 | 人类手工编写 | 机器(LM)大量生成 + 对抗筛选 |
| 难度控制 | 依赖人类直觉(不稳定) | 依赖判别器自动迭代筛选 |
| 人机差距 | 小(人类标注有痕迹) | 极大(错误选项高度逼真) |
| 可扩展性 | 受限于人工成本 | 可大规模自动生成 |
| 抗"作弊"能力 | 弱(模型可学习标注痕迹) | 强(错误选项动态生成,无固定模式) |
| 数据量 | 依赖人工标注数量 | 理论上可无限生成 |
算法:对抗过滤数据构建(Adversarial Filtering)
输入:
Contexts = {c₁, c₂, ..., cₙ} // n 个上下文例句
CorrectEndings = {e₁, e₂, ..., eₙ} // n 个正确结尾
Generator = GPT // 生成器语言模型
Discriminator = BERT // 判别器语言模型
HumanAnnotators // 人类标注者
θ = 0.5 // 过滤阈值
K = 100 // 每个上下文生成候选数
T = 5 // 迭代轮数
输出:
Dataset = {(c, e_correct, [e₁, e₂, e₃])} // 每条数据 = 上下文 + 1个正确 + 3个错误
for iteration = 1 to T do:
Dataset = []
for each context cᵢ in Contexts do:
// --- 生成阶段 ---
// 用 Generator 为上下文生成 K 个候选错误结尾
Candidates = Generator.generate(cᵢ, n=K)
// --- 筛选阶段 ---
// 用 Discriminator 对每个候选打分
Scores = []
for each candidate in Candidates do:
score = Discriminator.score(cᵢ, candidate)
Scores.append((candidate, score))
// 筛选出 Discriminator 最容易误判的 3 个
Top3 = sort_desc_by_score(Scores)[0:3]
// --- 人类验证 ---
if HumanAnnotators.check(cᵢ, correct=eᵢ, candidates=Top3) > 0.95:
Dataset.append((cᵢ, eᵢ_correct, Top3))
// 这一步至关重要:随着迭代进行,Discriminator 变得越来越强,
// 只有那些真正有挑战性的错误选项才能存活下来。
// --- 重新训练 ---
// 用新筛选出的数据集重新训练 Discriminator
Discriminator = retrain(Dataset)
// 如果数据集大小稳定,提前终止
if change_in_size(Dataset) < 1%:
break
return Dataset
对抗过滤的效果高度依赖于几个关键参数的选择:
| 参数 | 取值范围 | 对数据集的影响 | 推荐值 |
|---|---|---|---|
| 候选数 K | 10-1000 | 越大越容易选出高质量错误选项,但计算成本线性增长 | 100-200 |
| 过滤阈值 θ | 0.3-0.9 | 越低越严格(选项更逼真),但可能选不出足够样本 | 0.5-0.7 |
| 判别器数量 | 1-3 | 多个判别器可以消除单个模型的偏见 | 2-3 |
| 迭代轮数 T | 1-10 | 更多迭代使对抗性更强,但可能过拟合 | 3-5 |
参数影响的具体示例:
假设上下文 c = "一个人在厨房切菜。他把菜刀放在案板上,然后...",生成器产出了以下候选错误选项:
| 候选错误 | Discriminator 评分 | θ=0.5 时 | θ=0.7 时 |
|---|---|---|---|
| "拿起电话叫外卖" | 0.12 | ❌ 淘汰 | ❌ 淘汰 |
| "把菜刀放进冰箱" | 0.48 | ❌ 淘汰 | ❌ 淘汰 |
| "用菜刀打开啤酒瓶" | 0.55 | ✅ 保留 | ❌ 淘汰 |
| "把菜刀在水槽里冲洗" | 0.72 | ✅ 保留 | ✅ 保留 |
| "用菜刀削苹果皮" | 0.85 | ✅ 保留 | ✅ 保留 |
当 θ=0.5 时,"用菜刀打开啤酒瓶"会被保留为错误选项。这确实是个不错的干扰项——它语法完全正确、动作合理(用菜刀开啤酒在现实中确实存在),但与"切菜"这个特定场景不相关。但如果 θ 设为 0.7,这个「够好」的错误项就被淘汰了,只会留下更强的干扰项。
HellaSwag 的上下文来自两个主要来源:
| 来源 | 类型 | 描述 | 特点 | 占比 |
|---|---|---|---|---|
| ActivityNet | 视频描述 | YouTube 视频的密集字幕描述,涵盖 200 种日常活动 | 自然语言描述,有动作时序信息 | ~50% |
| WikiHow | 文本教程 | WikiHow 网站的"如何做"指导文章 | 结构化步骤,有层次关系 | ~50% |
ActivityNet 数据示例:
原始视频字幕(ActivityNet 视频 "Riding a bike"):
[0-5s] 一个人走向停在路边的自行车
[5-10s] 他跨坐在自行车座上
[10-15s] 他双手握着车把
[15-20s] 他踩下踏板
[20-25s] 自行车开始向前移动
提取为 HellaSwag 上下文:
"一个人跨坐在自行车座上。他双手握着车把,然后踩下踏板,自行车开始向前移动。"
拆解为题目:
上下文: "一个人跨坐在自行车座上。他双手握着车把,然后..."
✅ 正确结尾: "踩下踏板,自行车开始向前移动。"
❌ 错误选项A: "用脚撑着地面向后滑行。" (与前进动作矛盾)
❌ 错误选项B: "拿出手机开始打电话。" (与骑车场景无关)
❌ 错误选项C: "弯腰系鞋带,虽然他现在在骑车。" (违反身体姿态常识)
WikiHow 数据示例:
原始 WikiHow 文章 "How to make a paper airplane":
步骤1:取一张长方形纸
步骤2:沿中心对折后展开,形成折痕
步骤3:将上两角向中心线折叠
步骤4:将纸翻转,重复折叠
步骤5:最后折出机翼形状
提取为 HellaSwag 上下文:
"如何做纸飞机。取一张长方形纸,沿中心对折。然后展开,形成折痕。接着..."
两种数据源的差异在于:ActivityNet 来自自然环境中的视听描述,包含更多视觉细节和时间流信息;WikiHow 来自经编辑的文本教程,结构更清晰但缺乏视觉丰富度。
| 划分 | 样本数 | 说明 |
|---|---|---|
| 训练集 | 39,905 | 包含 ID(in-domain)类别样本 |
| 验证集 | 10,042 | 用于模型调优和评估 |
| 测试集 | ~10,000 | 用于最终排名(2024 年 11 月起已关闭提交) |
| 总计 | ~60,000 | 每个问题包含 1 个上下文和 4 个候选选项 |
论文中还提到了一些重要的预处理步骤:
HellaSwag 将活动划分为类别和子类别两个层级:
| 大类 | 包含的子类别 | 示例上下文 |
|---|---|---|
| 艺术与娱乐 | 演奏乐器、舞蹈、绘画、摄影 | "一个人在弹钢琴。他按下白色琴键,然后..." |
| 运动与健身 | 骑自行车、游泳、攀岩、跑步 | "一个运动员站在起跑线上。枪响后..." |
| 家庭与生活 | 烹饪、清洁、维修、园艺 | "一个人在厨房切洋葱。他流着泪..." |
| 手工艺与制作 | 木工、编织、折纸、陶艺 | "她用毛线编织一条围巾。她..." |
| 户外与自然 | 园艺、露营、钓鱼、观鸟 | "露营者在树林里搭帐篷。他们..." |
| 技术与科学 | 编程、实验、机械维修 | "科学家在实验室里给试管加温。..." |
| 个人护理 | 穿衣、洗漱、化妆、理发 | "她在镜子前梳头。她拿起..." |
| 饮食烹饪 | 做饭、切菜、烘焙、泡茶 | "厨房里,水烧开了。她拿起..." |
HellaSwag 的测试集分为两个关键子集:
实验结果对比(2019):
| 模型 | ID 准确率(%) | OOD 准确率(%) | 差距 |
|---|---|---|---|
| BERT-Large | 49.7 | 45.0 | -4.7 |
| GPT-1 | 44.0 | 39.3 | -4.7 |
| BERT-Base | 42.8 | 38.3 | -4.5 |
| ESIM+ELMo | 34.2 | 32.3 | -1.9 |
| FastText | 32.9 | 30.2 | -2.7 |
这说明模型在新类别上的泛化能力显著弱于见过的类别,差距大约在 2-5 个百分点。最值得关注的是 OOD 准确率——当面对完全没见过的活动类别时,最强模型 BERT-Large 的 OOD 准确率仅 45%,比人类(95.7%)低了超过 50 个百分点。
HellaSwag 是一个多项选择的句子补全任务:
给定:一个描述活动或场景的上下文(Context)
要求:从 4 个候选结尾中选出最合理的那个
任务属于常识自然语言推理(Commonsense NLI) 范畴。模型需要理解上下文描述的场景,并基于物理常识和日常经验推断出最可能的后续。
示例 1:如何抓蜻蜓
| 角色 | 内容 |
|---|---|
| 上下文 | 如何抓蜻蜓。使用一个长柄的空中网,开口要宽。选择一个直径 18 英寸(46 厘米)或更大的空中网。找一个有长柄的网。 |
| A | 然后你把网举到空中,等待蜻蜓飞过,然后快速挥动网子把它抓住。 |
| B | 然后你把网放进水里,等待鱼游过来。 |
| C | 然后你拿起电话,叫外卖。 |
| D | 然后你把网放在地上,踩上去。 |
✅ 正确答案:A
分析:A 符合"抓蜻蜓"的语境——用网在空中挥动抓取飞虫。B 是在抓鱼而非抓蜻蜓。C 和 D 则完全不合理。虽然 B、C、D 都是语法正确的英语句子,但与"抓蜻蜓"这一上下文的核心意图矛盾。
示例 2:一个人坐在屋顶上
| 角色 | 内容 |
|---|---|
| 上下文 | 一个人坐在屋顶上。他 |
| A | 正在用保鲜膜包裹滑雪板 |
| B | 正在掀起屋顶上的瓦片 |
| C | 正在拿着魔方 |
| D | 开始在屋顶上拉防水布 |
✅ 正确答案:B
分析:B 是最符合"屋顶修理"常识的续写。A 虽然包含"一个物体+一个动作",但缺乏"屋顶→修理"的深层语义推理。早期模型在这个问题上经常选 A,因为"包裹"和"滑雪板"看起来是一个合理的动宾搭配。
示例 3:如何做龙舟
| 角色 | 内容 |
|---|---|
| 上下文 | 如何做龙舟。将一张大纸对折,然后展开,折出中心线。将纸的上两角向中心线折叠。 |
| A | 然后将纸翻转过来,重复上述步骤。 |
| B | 然后把纸撕成碎片。 |
| C | 然后拿起笔在纸上画画。 |
| D | 然后把纸放进水里看它漂不漂。 |
✅ 正确答案:A
分析:折纸(折龙舟)的核心步骤是重复对称折叠。A 中的"翻转重复"是折纸的标准流程。B-D 虽然语法正确,但违背了"折纸"的基本常识。对人类来说这个问题非常简单,但 2019 年的模型在类似问题上的准确率不到 50%。
以下是 HellaSwag 中几个典型难度的例子,从简单到困难排列:
难度 1:物理因果关系(简单)
| 角色 | 内容 |
|---|---|
| 上下文 | 一个人端着一杯热水走过走廊,不小心绊倒了。 |
| A | 杯子掉在地上摔碎了,热水洒了一地。 |
| B | 杯子飞到了天花板上。 |
| C | 杯子里的水变成了冰。 |
| D | 杯子开始自己唱歌。 |
✅ A。这是基本的物理因果推理:绊倒 → 失去平衡 → 杯子掉落 → 摔碎。B-D 明显违反物理常识。
难度 2:社会常识(中等)
| 角色 | 内容 |
|---|---|
| 上下文 | 两个人在咖啡厅见面。他们互相握手,然后坐在椅子上。其中一个人说:"最近怎么样?" |
| A | 另一个人微笑着回答:"还不错,你呢?" |
| B | 另一个人站起来开始唱歌。 |
| C | 另一个人爬到了桌子底下。 |
| D | 另一个人拿出了锤子开始钉钉子。 |
✅ A。这需要理解社会互动的常识——问候后的典型回应。"还不错,你呢?"是标准的社交应答。
难度 3:专业知识应用(较难)
| 角色 | 内容 |
|---|---|
| 上下文 | 一个园丁在花园里修剪玫瑰丛。他戴上厚手套,拿起修剪剪刀,仔细观察枝条,然后 |
| A | 选择在 45 度角处斜剪,去除枯枝和交叉枝,促进新枝生长。 |
| B | 把所有的玫瑰都连根拔起。 |
| C | 用剪刀在空气中乱剪。 |
| D | 把整个玫瑰丛都染成蓝色。 |
✅ A。这需要园艺领域的常识——修剪玫瑰的正确方法。
当使用 HellaSwag 评估一个模型时,典型的流程如下:
步骤一:准备模型和数据
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "meta-llama/Llama-2-7b-hf"
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
步骤二:构建评估循环
对于每个 HellaSwag 样本,我们需要计算模型对四个选项(A、B、C、D)的得分。具体做法是:将上下文和每个选项拼接起来,计算整个序列的困惑度(perplexity),选择困惑度最低的选项作为模型的预测。
其中 是结尾部分的 token 长度, 是第 个 token。
步骤三:汇总得分
total = 0
correct = 0
for sample in hellaswag_dataset:
ctx = sample["context"]
endings = [sample["ending0"], sample["ending1"],
sample["ending2"], sample["ending3"]]
scores = []
for ending in endings:
score = model.score(ctx + ending)
scores.append(score)
pred = scores.index(min(scores)) # 最小困惑度
if pred == sample["label"]:
correct += 1
accuracy = correct / total
print(f"HellaSwag Accuracy: {accuracy:.4f}")
这个流程看似简单,但实际实现中需要注意:要使用 acc_norm(长度归一化的准确率)而非原始 acc,因为模型天然倾向于给短选项更低的困惑度。### 5.3 评估方式
评估指标为标准准确率(Accuracy),即模型选对正确结尾的比例:
此外,HellaSwag 还支持更细粒度的分析,包括按活动类别、数据来源(ActivityNet vs WikiHow)以及 ID vs OOD 分别计算准确率,方便定位模型的强项和弱点。
以下是 HellaSwag 测试集的完整官方排行榜数据:
| 排名 | 模型 | 机构 | 总分(%) | ID(%) | OOD(%) | ActNet(%) | WikiHow(%) |
|---|---|---|---|---|---|---|---|
| 🥇 | GPT-4 (10-shot, 2023年3月) | OpenAI | 95.3 | 94.8 | 95.7 | 90.1 | 98.0 |
| 🥈 | ALUM (2020年3月) | Microsoft | 85.6 | 86.5 | 84.6 | 77.1 | 90.1 |
| 🥉 | RoBERTa (2019年7月) | Facebook AI | 85.2 | 87.3 | 83.1 | 74.6 | 90.9 |
| 4 | G-DAug-inf (2020年2月) | - | 83.7 | 85.6 | 81.8 | 73.0 | 89.6 |
| 5 | HighOrderGN+RoBERTa (2020年1月) | USC | 82.2 | 84.3 | 80.2 | 71.5 | 88.1 |
| 6 | Grover-Mega (2019年7月) | UW | 75.4 | 79.1 | 71.7 | 64.8 | 81.2 |
| 7 | Grover-Large (2019年7月) | UW | 57.2 | 60.7 | 53.6 | 53.3 | 59.2 |
| 8 | BERT-Large (2019年5月) | 47.3 | 49.7 | 45.0 | 51.7 | 45.0 | |
| 9 | GPT-1 (2019年5月) | OpenAI | 41.7 | 44.0 | 39.3 | 43.8 | 40.5 |
| 10 | BERT-Base (2019年5月) | 40.5 | 42.8 | 38.3 | 45.7 | 37.7 | |
| — | 人类 (2019) | UW | 95.6 | 95.6 | 95.7 | 94.0 | 96.5 |
| — | 随机猜测 | — | 25.0 | 25.0 | 25.0 | 25.0 | 25.0 |
| 模型 | 机构 | HellaSwag(%) | 发布时间 | 参数量 |
|---|---|---|---|---|
| Claude 3 Opus | Anthropic | 95.4 | 2024-03 | 未公开 |
| GPT-4 | OpenAI | 95.3 | 2023-03 | 未公开 |
| Gemini 1.5 Pro | 93.3 | 2024-02 | 未公开 | |
| GPT-4o | OpenAI | 92.7 | 2024-05 | 未公开 |
| Claude 3 Sonnet | Anthropic | 89.0 | 2024-03 | 未公开 |
| Qwen2 72B Instruct | Alibaba | 87.6 | 2024-06 | 72B |
| Command R+ | Cohere | 88.6 | 2024-04 | 104B |
| Gemma 2 27B | 86.4 | 2024-06 | 27B | |
| Llama 3 8B | Meta | 82.0 | 2024-04 | 8B |
| Phi-3.5-MoE | Microsoft | 83.8 | 2024-08 | 60B(MoE) |
| Llama 3.1 405B | Meta | 88.6 | 2024-07 | 405B |
从 2019 年到 2026 年,HellaSwag 的得分走势大致如下:
准确率(%)
100 │ 人类 95.6%
90 │ GPT-4→95.3% ────────
80 │ RoBERTa→85.2%
70 │
60 │
50 │ BERT-Large→47.3%
40 │ GPT-1→41.7%
30 │ 随机→25%
20 │
└────────────────────────────────────────────
2019 2020 2021 2022 2023 2024
1. 巨大的人机差距已被缩小
从 2019 年 BERT-Large 的 47.3%(仅比随机好 22 个百分点),到 2023 年 GPT-4 的 95.3%(已接近人类 95.6%),HellaSwag 对前沿模型已基本饱和。推动进步的主要因素包括:训练数据规模的增长、模型架构的改进和微调策略的优化。
2. 模型规模与性能正相关
同一模型家族内,更大的模型几乎总是取得更好的成绩:
| 模型家族 | 小模型 | 大模型 | 提升幅度 |
|---|---|---|---|
| BERT | Base 40.5% | Large 47.3% | +6.8 |
| Grover | Large 57.2% | Mega 75.4% | +18.2 |
| Gemma 2 | 9B 81.9% | 27B 86.4% | +4.5 |
| Llama 3 | 8B 82.0% | 70B 88%+ | +6+ |
3. WikiHow 比 ActivityNet 更容易
几乎所有模型在 WikiHow 上的得分都显著高于 ActivityNet:
| 模型 | ActivityNet | WikiHow | 差距 |
|---|---|---|---|
| GPT-4 | 90.1 | 98.0 | +7.9 |
| RoBERTa | 74.6 | 90.9 | +16.3 |
| BERT-Large | 51.7 | 45.0 | -6.7 |
| 错误类型 | 描述 | 典型示例 | 出现频率 |
|---|---|---|---|
| 表面语义匹配 | 选择与上下文词汇有表面重合的错误选项 | 上下文含"桌",选项含"桌子" | 高 |
| 典型性偏差 | 倾向于"最常见的"结尾而非场景特异的 | "离开"、"停止"等通用动作 | 高 |
| 因果混淆 | 混淆原因和结果的时间顺序 | "摔倒" vs "被绊倒" | 中 |
| 时间顺序错误 | 搞错动作先后顺序 | "先穿鞋再穿袜子" | 中 |
| 物体功能误用 | 对物体功能理解错误 | "用锤子切面包" | 低 |
案例:表面语义匹配陷阱
上下文(ActivityNet 来源):
"一个人在厨房里准备早餐。他拿出一个平底锅,放在炉灶上,然后..."A 打开炉子,等锅热了后打入鸡蛋(✅ 正确)
B 把锅放进冰箱(❌ 动作颠倒)
C 打开炉子,然后把手机放进去煮(❌ 对象错误)
D 把锅拿到水槽边,用锅浇花(❌ 功能错配)
对早期模型,这个问题的挑战在于:模型可能只是根据"放在炉灶上"匹配"打开炉子",而不理解"平底锅放在炉灶上"的隐含意图是加热烹饪。BERT-Base 给 A 和 C 的得分差距经常非常小。
在机器学习中,随机种子(random seed)控制着模型初始化的随机性。通常我们认为,一个真正学到"知识"的模型不会因为初始化的不同而产生巨大差异。但在 HellaSwag 上,论文发现了一个令人不安的现象:
论文中做了一个重要的消融实验:
| 模型 | 平均准确率(%) | 标准差(%) | 最好-最坏(%) |
|---|---|---|---|
| GPT (with finetuning) | 41.7 | 4.2 | 13.5 |
| BERT-Large | 47.3 | 2.8 | 8.1 |
GPT 不同随机种子之间的准确率波动高达 13.5 个百分点,远超出正常范围。这意味着模型并非在学习"稳定的推理能力",而是在某些随机初始化下偶然学对了模式。
1. "共建破坏"范式(Build-and-Break)
HellaSwag 提出了一种全新的评估理念:基准测试不应是静态的,而应随着模型能力的提升共同演化:
传统范式: 数据集 → 模型训练 → 评估 → 结束
HellaSwag 范式: 创建 → 模型突破 → 找到弱点 → 创建更难数据集 → 循环
这个理念直接影响了 BIG-Bench、HELM 等综合性评估框架。
2. 对抗过滤方法的广泛采用
许多后续数据集借鉴了对抗过滤或类似方法:
| 数据集 | 领域 | 借鉴机制 |
|---|---|---|
| WinoGrande | 指代消解 | 对抗过滤筛选难以通过词汇匹配解决的样本 |
| Social IQa | 社会常识 | 多项选择 + 对抗选项 |
| ANLI | 自然语言推理 | 迭代式难例生成 |
| HellaSwag-Pro | 双语常识推理 | 人机协同对抗过滤 |
3. 对"真正推理"的拷问
HellaSwag 提出了一个至今仍在讨论的问题:模型的高分是否真正意味着"理解"了常识?到 2025 年的 HellaSwag-Pro 研究,答案更加清晰——不是真正理解。因为只要轻微改变提问方式(如否定变换),模型的准确率就急剧下降(RLA 高达 14-20 个百分点),而人类几乎没有变化(RLA ≈ 1%)。
2025 年,Li et al. 提出了 HellaSwag-Pro,一个大规模的中英双语常识推理鲁棒性基准测试。
构造方法:
第一阶段:初始数据集生成
- 基于 HellaSwag 格式构建
- 覆盖 56 个细粒度常识类别
- 使用 Qwen-Max 生成中文题目
- 共 12,000 道中英文题目
第二阶段:困难样本替换
- 人机协同对抗过滤
- 用 LLM 重写简单错误选项为更难版本
- 用多个判别器 LLM 筛选
- 人工校验替换结果
第三阶段:7 种问法变体生成
- 否定变换、问题重述、选项重排序
- 上下文扩展、答案类型变更
- 场景细化、逻辑推理
关键实验结果:
| 指标 | GPT-4o | Claude-3.5 | Gemini-1.5-Pro | 人类 |
|---|---|---|---|---|
| 原始准确率 OA(%) | 90.00 | 90.24 | 89.19 | ~95 |
| 变体准确率 ARA(%) | 76.07 | 73.09 | 69.55 | ~94 |
| 鲁棒性损失 RLA(%) | 13.93 | 17.15 | 19.63 | ~1 |
| 一致准确率 CRA(%) | 69.31 | 66.12 | 64.38 | ~93 |
7 种变体的难度排序:
| 变体类型 | 平均准确率(%) | 难度 |
|---|---|---|
| 否定变换(Negative) | 9.01 | 🔴 最难 |
| 场景细化(Scenario Refinement) | 58.7 | 🟡 较难 |
| 逻辑推理(Logic Reasoning) | 62.3 | 🟡 较难 |
| 答案类型变更(Answer Type Change) | 74.1 | 🟢 中等 |
| 上下文扩展(Context Extend) | 78.5 | 🟢 中等 |
| 选项重排序(Reorder) | 82.3 | 🟢 较易 |
| 问题重述(Restatement) | 86.9 | 🟢 最易 |
核心发现:否定变换(Negative)是难度最大的变体,平均准确率仅 9.01%。这意味着当问题被改写成否定形式时,几乎所有 LLM 都表现为"随机水平"(25% 以下)。这强烈表明 LLM 的"常识推理"高度依赖特定的问题表述方式,而非真正的底层理解。
| 对比维度 | HellaSwag | MMLU | BBH |
|---|---|---|---|
| 考察能力 | 常识推理 | 知识广度 | 复杂推理 |
| 数据来源 | ActivityNet + WikiHow | 教科书/考试 | 23 认知任务 |
| 题目格式 | 句子补全(多选) | 知识问答(多选) | 多样化 |
| 人类基线 | 95.6% | ~89% | ~80% |
| 2024 年最高 | 95.4% | ~90%+ | ~90%+ |
| 饱和状态 | ✅ 已饱和 | ✅ 接近饱和 | ⚠️ 部分饱和 |
1. 语言覆盖单一:原始 HellaSwag 仅覆盖英语,直到 2025 年扩展到中英双语,但其他主要语言仍未被覆盖。
2. 已近饱和:前沿模型已达到或超越人类水平,2025 年起大多数前沿模型的技术报告通常只将 HellaSwag 作为"检查标记"报告。
3. 多项选择的局限性:选项排序偏差(模型倾向选择 A 或 B)、标记预测偏差(不同 tokenizer 对字母的处理不同)、选项间统计泄露等问题仍然存在。
4. 文化偏置:部分场景基于西方日常生活,对非西方模型可能不够公平。
# 安装
git clone https://github.com/EleutherAI/lm-evaluation-harness
cd lm-evaluation-harness
pip install -e .
# 评估标准 HellaSwag(0-shot)
lm_eval --model hf \
--model_args pretrained=meta-llama/Llama-2-7b-hf \
--tasks hellaswag \
--batch_size 8 \
--num_fewshot 0
# 评估 HellaSwag(10-shot)
lm_eval --model hf \
--model_args pretrained=meta-llama/Llama-2-7b-hf \
--tasks hellaswag \
--batch_size 8 \
--num_fewshot 10
输出示例:
| Tasks | Version | Filter | n-shot | Metric | | Value | | Stderr |
|-------|------|--------|--------|--------|---|-------|---|--------|
| hellaswag | Yaml | none | 0 | acc | ↑ | 0.756 | ± | 0.0043 |
| hellaswag | Yaml | none | 0 | acc_norm | ↑ | 0.762 | ± | 0.0042 |
acc_norm 是标准评估指标——对每个选项的长度进行归一化,避免模型偏好短选项的偏差。
from evaluate import load
hellaswag = load("hellaswag")
predictions = [0, 2, 1, 3, 0, ...] # 选项索引 0=A, 1=B, 2=C, 3=D
references = [0, 3, 1, 3, 2, ...] # 正确答案
results = hellaswag.compute(
model_predictions=predictions,
references=references
)
print(f"Accuracy: {results['accuracy']:.2%}")
| HellaSwag 准确率 | 对应水平 | 典型模型 | 建议 |
|---|---|---|---|
| < 50% | 基础模式匹配 | GPT-1、BERT-Base | ❌ 不具备常识推理 |
| 50-70% | 有部分推理能力 | GPT、BERT-Large | ⚠️ 模式匹配为主 |
| 70-85% | 具备一定常识理解 | Grover-Mega(2019) | ✅ 合格的常识 |
| 85-93% | 接近熟练水平 | RoBERTa 到 LLaMA 2 70B | ✅ 良好的常识推理 |
| 93-96% | 接近/达到人类水平 | GPT-4、Claude 3 Opus | ✅ 已用 HellaSwag-Pro 区分 |
| > 96% | 超过人类基线 | - | ✅ 已饱和,换基准 |
在报告 HellaSwag 分数时,为了确保结果的可靠性和可复现性,需要注意以下细节:
acc_norm 而非 acc,以消除选项长度偏差除了 HellaSwag 之外,AI 评估领域还有几个重要的常识推理基准:
| 基准 | 年份 | 任务类型 | 题目数量 | 数据来源 | 人机差距(2019) | 是否已饱和 |
|---|---|---|---|---|---|---|
| SWAG | 2018 | 句子补全 | 113k | 视频描述 | 小(~10%) | ✅ 已饱和 |
| HellaSwag | 2019 | 句子补全 | 70k | ActivityNet + WikiHow | 极大(~48%) | ✅ 已饱和 |
| WinoGrande | 2019 | 代词消解 | 44k | 维基百科 | 中(~20%) | ✅ 已饱和 |
| Social IQa | 2019 | 社会常识 | 38k | 社交故事 | 中(~15%) | ⚠️ 正在接近 |
| PIQA | 2020 | 物理常识 | 16k | 众包 | 大(~30%) | ⚠️ 正在接近 |
| ARC (Challenge) | 2018 | 科学问答 | 2.6k | 科学试题 | 大(~35%) | ❌ 仍有空间 |
从对比中可以清晰看到:HellaSwag 在发布时创造了最大的"人机差距",这正是对抗过滤设计目标的体现——让机器难以通过简单的模式匹配或表面特征来获得高分数。
HellaSwag 与 WinoGrande 的区别在于:WinoGrande 专注于代词指代消解(如"The trophy would not fit in the brown suitcase because it was too big"中的 it 指代什么),而 HellaSwag 专注于物理场景的句子续写,两者互为补充。
HellaSwag 的高分意味着模型理解日常物理世界的"基本规律"——这在以下场景中至关重要:
如果一个模型在 HellaSwag 上得分很低,那它在上述场景中很可能会做出反直觉或危险的建议。## 十、总结
HellaSwag 是 AI 评估史上的一个里程碑式基准测试。它不仅量化了机器与人类在常识推理上的差距,更开创了“共建破坏”的数据构建范式,深刻影响了 NLP 领域的评估方法论。
| 贡献 | 影响 | 证据 |
|---|---|---|
| ✅ 对抗过滤(AF)范式 | 成为后续难例数据集的构建模板 | WinoGrande、Social IQa、ANLI 借鉴 |
| ✅ "金发姑娘区"概念 | 揭示了表面积相似性和真正理解之间的鸿沟 | 人类 95.6% vs 模型 < 50% |
| ✅ "共建破坏"评估理念 | 推动 NLP 基准的动态演化 | 影响 BIG-Bench、HELM 等框架 |
| ✅ 学术影响力 | 被引超过 9,000 次 | Google Scholar 数据持续增长 |
当前状态:
未来方向:
HellaSwag 的核心问题——"机器真的能完成你的句子吗?"——在今天仍未被完全回答。虽然 GPT-4 和 Claude 3 在原始测试上达到了人类水平,但 HellaSwag-Pro 的大量实验结果表明,它们在面对问法变化时仍然脆弱且不稳定。正如作者在论文中写的:"Until generation is solved, commonsense NLI will remain unsolved."
此页面为 AI 知识体系 的一部分,内容持续更新中。