Open LLM 排行榜:DROP 深度解析

发布于 2023 年 12 月 1 日
在 GitHub 上更新

最近,三项新基准测试被添加到 Open LLM 排行榜:Winogrande、GSM8k 和 DROP,它们使用了在 EleutherAI Harness 中复现的原始实现。对 DROP 分数的初步查看发现了一些奇怪的现象,绝大多数模型的 f1-分数低于 10 分(满分 100 分)!我们进行了深入探究以了解发生了什么,请随我们一起来看看我们发现了什么!

初步观察

DROP(Discrete Reasoning Over Paragraphs,段落离散推理)是一种评估,模型必须从英文段落中提取相关信息,然后对这些信息执行离散推理步骤(例如,对项目进行排序或计数以得出正确答案,参见下表中的示例)。使用的指标是自定义的 f1 和精确匹配分数。

原始文章中推理和段落的示例。

我们三周前将其添加到 Open LLM 排行榜中,并观察到预训练模型的 f1 分数呈现出意想不到的趋势:当我们将 DROP 分数与排行榜原始平均值(ARC、HellaSwag、TruthfulQA 和 MMLU 的平均值,这是衡量模型整体性能的合理指标)进行绘制时,我们期望 DROP 分数与它相关(更好的模型表现更好)。然而,这只适用于少数模型,所有其他模型的 DROP f1 分数都非常低,低于 10。

在 DROP 分数中可以观察到两个趋势:一些与平均值相关联(对角线),另一些则停留在 5 左右(图右侧的垂直线)。

标准化质疑

在对这些令人惊讶的行为进行首次深入研究时,我们发现标准化步骤可能未按预期工作:在某些情况下,当正确的数值答案后直接跟有除空格之外的空白字符(例如,换行符)时,此标准化会忽略它们。让我们看一个示例,生成的文本是 10\n\nPassage: The 2011 census recorded a population of 1,001,360,而正确答案是 10

标准化分几个步骤进行,包括生成和金标。

  1. 根据分隔符分割 |, -, 或 。生成文本的开头序列 10\n\nPassage: 不包含此类分隔符,因此在此步骤之后被视为单个实体。
  2. 去除标点符号 第一个标记随后变为 10\n\nPassage: 被去除)
  3. 数字同质化 每个可以转换为浮点数的字符串都被视为数字并转换为浮点数,然后重新转换为字符串。 10\n\nPassage 保持不变,因为它不能转换为浮点数,而金标 10 变为 10.0
  4. 其他步骤 随后进行许多其他标准化步骤(删除冠词、删除其他空白字符等),我们原始的示例变为 10 passage 2011.0 census recorded population of 1001360.0

然而,总体分数并非基于字符串计算,而是基于从字符串中提取的词袋(BOW),此处为 {'recorded', 'population', 'passage', 'census', '2011.0', '1001360.0', '10'},与金标的词袋进行比较,金标也以上述方式进行了标准化,即 {10.0}。正如您所见,它们没有交集,即使模型预测了正确的输出!

总而言之,如果一个数字后面跟着任何一种非简单空格的空白字符,它将无法通过数字标准化,因此如果它也是一个数字,将永远无法匹配金标!第一个问题很可能会严重影响分数,但显然它不是导致 DROP 分数如此之低的唯一因素。我们决定进一步调查。

深入探讨结果

在我们的调查深入进行中,我们的朋友 Zeno 加入了我们,并对结果进行了更彻底的探索,他们研究了 5 个模型,这些模型代表了我们在 DROP 分数中发现的问题:falcon-180B 和 mistral-7B 的表现低于预期,Yi-34B 和 tigerbot-70B 在 DROP 上表现非常好,与它们的平均分数相关,而 facebook/xglm-7.5B 则处于中间水平。

如果您愿意,可以在Zeno 项目中尝试分析结果!

Zeno 团队发现了两个更令人担忧的特点:

  1. 没有一个模型在浮点答案上获得正确结果。
  2. 生成长答案的高质量模型实际上获得了较低的 f1 分数。

此时,我们认为这两个失败案例实际上是由同一个根本因素造成的:使用 . 作为停用词标记(用于结束生成)。

  1. 浮点答案在生成完成之前系统地被中断。
  2. 高质量的模型会尝试匹配少样本提示格式,它们会生成 Answer\n\nPlausible prompt for the next question.,并且只在实际答案之后的可行提示延续中遇到第一个 . 时才停止,因此生成了过多的词语,导致 f1 分数很低。

我们假设通过使用 \n 代替 . 作为生成结束符,可以解决这两个问题。

更改生成结束符

所以我们尝试了一下!我们调查了在现有结果中使用 \n 作为生成结束符。如果生成的答案中包含第一个 \n,我们就根据它进行分割,并重新计算分数。 请注意,这只是对正确结果的近似,因为它无法修复过早地被 . 截断的答案(例如浮点数答案)——但它也不会给任何模型带来不公平的优势,因为所有模型都受到了这个问题的影响。然而,这是我们在不重新运行模型的情况下能做到的最好情况(因为我们希望尽快向社区发布消息)。

我们得到的结果如下——以 \n 分割与其他分数以及整体性能都高度相关。

我们可以从橙色曲线看出,基于新字符串计算的分数与平均性能的相关性更好。

那么接下来呢?

快速计算显示,重新运行所有模型的完整评估将耗费巨大(完整的更新花费了 8 年的 GPU 时间,其中很大一部分被 DROP 占用),我们估算了仅重新运行失败示例的成本。

在 10% 的情况下,正确答案是浮点数(例如 12.25),模型预测以正确的开头(例如 12)开始,但被 . 截断——如果生成继续,这些预测很可能本来是正确的。我们肯定需要重新运行它们!我们的估计没有计算以可能被中断的数字结尾的生成句子(其他生成的 40%),也没有计算任何因标准化而弄乱的预测。

为了获得正确的结果,我们将需要重新运行超过 50% 的示例,这将耗费大量的 GPU 时间!我们需要确保这次我们将运行的实现是正确的。

在与 EleutherAI 团队(在 GitHub 和内部)进行讨论后,他们指导我们查看代码并帮助我们进行调查,我们非常清楚 LM Eval Harness 的实现严格遵循“官方 DROP”代码:因此,需要开发此基准评估的新版本!因此,我们决定在出现新版本之前,将 DROP 从 Open LLM 排行榜中删除。

本次调查的一个启示是,社区集体调查基准测试以发现以前遗漏的错误具有重要价值。开源、社区和开放式开发的力量再次闪耀,它使得能够透明地调查一个已经存在多年的基准测试问题的根本原因。

我们希望感兴趣的社区成员能与研究 DROP 评估的学者们携手合作,共同修复其评分和标准化问题。我们很乐意看到它再次可用,因为数据集本身非常有趣和酷。我们鼓励您在此问题上提供关于我们应如何评估 DROP 的反馈。

感谢许多社区成员指出了 DROP 分数上的问题,也衷心感谢 EleutherAI Harness 和 Zeno 团队在此问题上提供的巨大帮助。

社区

注册登录以发表评论