CDA数据分析师
本文章转载公众号:机器之心 作者:符尧、 何俊贤
本项目由上海交通大学,清华大学,爱丁堡大学共同完成。
本项目由上海交通大学,清华大学,爱丁堡大学共同完成。
ChatGPT 的出现,使中文社区意识到与国际领先水平的差距。近期,中文大模型研发如火如荼,但中文评价基准却很少。
在 OpenAI GPT 系列 / Google PaLM 系列 / DeepMind Chinchilla 系列 / Anthropic Claude 系列的研发过程中,MMLU / MATH / BBH 这三个数据集发挥了至关重要的作用,因为它们比较全面地覆盖了模型各个维度的能力。最值得注意的是 MMLU 这个数据集,它考虑了 57 个学科,从人文到社科到理工多个大类的综合知识能力。DeepMind 的 Gopher 和 Chinchilla 这两个模型甚至只看 MMLU 的分数,因此我们想要构造一个中文的,有足够区分度的,多学科的基准榜单,来辅助开发者们研发中文大模型。
我们花了大概三个月的时间,构造了一个覆盖人文,社科,理工,其他专业四个大方向,52 个学科(微积分,线代 …),从中学到大学研究生以及职业考试,一共 13948 道题目的中文知识和推理型测试集,我们管它叫 C-Eval,来帮助中文社区研发大模型。
这篇文章是把我们构造 C-Eval 的过程记下来,与开发者们分享我们的思考和我们视角下的研发重点。我们的最重要 目标是辅助模型开发,而不是打榜。一味地追求榜单排名高会带来诸多不利后果,但如果能够科学地使用 C-Eval 帮助模型迭代的话,则可以最大化地利用 C-Eval。因此我们 推荐从模型研发的视角来对待 C-Eval 数据集和榜单。
目录
1 - 模型强弱的核心指标
首先,把一个模型调成一个对话机器人这件事情并不难,开源界已经有了类似于 Alpaca, Vicuna, RWKV 这样的对话机器人,跟它们随便聊聊感觉都还不错;但要真正希望这些模型成为生产力,随便聊聊是不够的。所以构造评价基准的第一个问题是要找到区分度,弄明白什么样的能力才是区分模型强弱的核心指标。我们考虑 知识和 推理这两项核心。
1.1 - 知识
为什么说知识性的能力是核心能力?有以下几点论点:
因此,知识型能力可以很好地衡量底座模型的潜力。
1.2 - 推理
推理能力是在知识的基础上进一步上升的能力,它代表着模型是否能做很困难,很复杂的事情。一个模型要强,首先需要广泛的知识,然后在知识的基础上做推理。
推理很重要的论点是:
这里我们还需要厘清推理和知识的关系:
2 - C-Eval 的目标
有了上述对于知识和推理的阐述,我们决定从知识型的任务出发,构造数据集测试模型的知识能力,相当于对标一下 MMLU 这个数据集;同时,我们也希望带一点推理相关的内容,进一步衡量模型的高阶能力,所以我们把 C-Eval 中需要强推理的学科(微积分,线性代数,概率 …)专门抽出来,命名为 C-Eval Hard 子集,用来衡量模型的推理能力,相当于对标一下 MATH 这个数据集。
在 C-Eval Hard 上面,模型首先需要有数学相关知识,然后需要有逐步解题的思路,然后需要在解题过程中调用 Wolfram Alpha/ Mathematica/ Matlab 进行数值和符号 / 微分和积分计算的能力,并把计算过程和结果以 Latex 的格式表示出来,这部分的题目非常难。
C-Eval 希望可以在整体上对标 MMLU (这个数据集被用于 GPT-3.5, GPT-4, PaLM, PaLM-2, Gopher, Chinchilla 的研发),希望在 Hard 的部分对标 MATH (这个数据集被用于 GPT-4, PaLM-2, Minerva, Galactica 的研发)。
这里需要注意的是,我们的最重要目标是 辅助模型开发,而不是打榜。一味地追求榜单排名高会带来诸多不利后果,这个我们马上会阐述;但如果能够科学地使用 C-Eval 帮助模型迭代的话,则会得到巨大收益。我们 推荐从模型研发地视角来对待 C-Eval 数据集和榜单。
2.1 - 目标是辅助模型开发
在实际研发的过程中,很多时候我们需要知道某种方案的好坏或者某种模型的好坏,这个时候我们需要一个数据集帮助我们测试。以下是两个经典场景:
2.2 - 打榜不是目标
我们需要强调一下为什么不应该以榜单排名作为目标:
因此,如果把 C-Eval 作为辅助开发的工具,那么可以最大程度上的发挥它的积极作用;但是如果把它作为一个榜单排名,则存在极大的误用 C-Eval 的风险,最终也大概率不会有很好的结果。
所以再一次,我们推荐从模型研发地视角来对待 C-Eval 数据集和榜单。
2.3 - 从开发者反馈中持续迭代
因为我们希望模型可以最大程度的支持开发者,所以我们选择直接跟开发者交流,从开发者的反馈中持续学习迭代 — 这也让我们学到了很多东西;就像大模型是 Reinforcement Learning from Human Feedback 一样,C-Eval 的开发团队是 Continue Learning from Developers’ Feedback.
具体来说,我们在研发的过程中,邀请了字节跳动,商汤,深言等企业将 C-Eval 接入到他们自己的工作流中做测试,然后相互沟通测试过程中存在哪些比较有挑战的点。这个过程让我们学习到很多开始时没想到的内容:
以上的这些问题都是我们在跟开发者的交互过程中,从开发者反馈里发现的。在现在 C-Eval 的公开版本的文档和 github 代码中,这些问题都有解决。
上面的这些过程也证明了,从模型研发的视角来对待 C-Eval 数据集和榜单,可以非常好地帮助大家开发中文大模型。
我们欢迎所有的开发者们给我们的 GitHub 提 issue 和 pull request,让我们知道如何更好地帮助你,我们希望可以更好地帮助你 :)
3 - 如何保证质量
这个章节我们讨论在制作的过程中,我们用了哪些方法来保证数据集的质量。这里我们最重要的参考是 MMLU 和 MATH 这两个数据集,因为 OpenAI, Google, DeepMind, Anthropic 这四个最重要的大模型团队都重点参考了 MMLU 和 MATH,所以我们希望可以向这两个数据集看齐。在我们初步的调研和一系列的讨论之后,我们做了两个重要的决策,一个是 从头开始手工制做数据集,另一个是在此过程中重点 防止题目被爬虫爬到训练集里。
3.1 - 手工制作
GPT 的开发过程的一个重要启发是,人工智能这行,有多少人工就有多少智能,这个在我们建立 C-Eval 的过程中也有很好地体现,具体来说,从题目来源看:
然后是处理题目:
左边是同学自己做的,然后写成了 Markdown - Latex 格式;右边是渲染出来的效果
大家也能感受到为什么题目很难,chain-of-thought prompt 很长,为什么模型需要有能力做微积分的符号和数值计算
3.2 - 防止混入训练集
为了评测的科学性,我们考虑了一系列机制来防止我们的题目被混入训练集
当然,尽管我们做出了这些努力,但可能也会不可避免的发生某个网页里能搜到题库里的题目,但我们相信这种情况应该不多。且从我们已有的结果看,C-Eval 的题目还是有足够区分度的,特别是 Hard 的部分。
4 - 提升排名的方法
接下来我们分析有哪些方法可以提升模型的排名。我们先把捷径给大家列出来,包括使用不能商用的 LLaMA 和使用 GPT 产生的数据,以及这些方法的坏处;然后我们讨论什么是 困难但正确的路。
4.1 - 有哪些捷径可以走?
以下是可以走的捷径:
很多时候,看似是捷径的道路,其实在暗中标好了价格。
4.2 - 困难但正确的路
最好的方法是自立自强,从头研发。这件事情很难,需要时间,需要耐心,但这是正确的路。
具体来说,需要重点关注以下机构的论文
如果读者在里经验不足,那么可以先不要看其他的地方的文章。先培养判断力,再去读其他地方的文章,这样才能分清好坏。在学术上,要分清好坏,而不是不加判断一味接受。
在研发的过程中,建议关注以下内容:
4.3 - 不着急
大模型就是一件花时间的事情,它是对人工智能工业能力的全方位大考:
因此,不用着急打榜,不用明天就看结果,不用后天上线 — 慢慢来,一步一步来。很多时候,困难但正确的路,反而是最快的路。
5 - 结论
在这篇文章中,我们介绍了 C-Eval 的开发目标,过程,和重点考量的因素。我们的目标是帮助开发者更好地开发中文大模型,促进学术界和产业界科学地使用 C-Eval 帮助模型迭代。我们不着急看结果,因为大模型本身就是一件非常困难的事情。我们知道有哪些捷径可以走,但也知道困难但正确的路反而是最快的路。我们希望这份工作可以促进中文大模型的研发生态,让人们早一点体验到这项技术带来的便利。
附录 1:C-Eval 包含的科目
附录 2:项目成员的贡献
注:文中所提论文可以在原文页面找到相应网址。
原文链接:https://yaofu.notion.site/C-Eval-6b79edd91b454e3d8ea41c59ea2af873