C-Eval: 構(gòu)造中文大模型的知識(shí)評(píng)估基準(zhǔn)
這篇文章是把我們構(gòu)造 C-Eval 的過(guò)程記下來(lái),與開(kāi)發(fā)者們分享我們的思考和我們視角下的研發(fā)重點(diǎn)。我們的最重要目標(biāo)是輔助模型開(kāi)發(fā),而不是打榜。一味地追求榜單排名高會(huì)帶來(lái)諸多不利后果,但如果能夠科學(xué)地使用 C-Eval 幫助模型迭代的話,則可以最大化地利用 C-Eval。因此我們推薦從模型研發(fā)的視角來(lái)對(duì)待 C-Eval 數(shù)據(jù)集和榜單。
首先,把一個(gè)模型調(diào)成一個(gè)對(duì)話機(jī)器人這件事情并不難,開(kāi)源界已經(jīng)有了類似于 Alpaca, Vicuna, RWKV 這樣的對(duì)話機(jī)器人,跟它們隨便聊聊感覺(jué)都還不錯(cuò);但要真正希望這些模型成為生產(chǎn)力,隨便聊聊是不夠的。所以構(gòu)造評(píng)價(jià)基準(zhǔn)的第一個(gè)問(wèn)題是要找到區(qū)分度,弄明白什么樣的能力才是區(qū)分模型強(qiáng)弱的核心指標(biāo)。我們考慮知識(shí)和推理這兩項(xiàng)核心。
為什么說(shuō)知識(shí)性的能力是核心能力?有以下幾點(diǎn)論點(diǎn):
- 我們希望模型可以通用,可以在不同領(lǐng)域都貢獻(xiàn)生產(chǎn)力,這自然需要模型知道各個(gè)領(lǐng)域的知識(shí)。
- 我們同時(shí)希望模型不要胡說(shuō)八道,不知為不知,這也需要擴(kuò)大模型的知識(shí),讓它可以在更少的時(shí)候說(shuō)它不知道。
- 斯坦福的 HELM 英文評(píng)價(jià)榜單中,一個(gè)重要的結(jié)論是,模型大小與知識(shí)密集型任務(wù)的效果顯著正相關(guān),這是因?yàn)槟P偷膮?shù)量可以被用來(lái)儲(chǔ)存知識(shí)。
- 上文已經(jīng)提到,已有的重要模型,比如 DeepMind 的 Gopher / Chinchilla,在評(píng)價(jià)的時(shí)候幾乎只看 MMLU,MMLU 的核心就是測(cè)模型的知識(shí)覆蓋面。
- GPT-4 的發(fā)布博客中,首先就是列出模型在各個(gè)學(xué)科考試上的效果,作為模型能力的衡量標(biāo)準(zhǔn)。
因此,知識(shí)型能力可以很好地衡量底座模型的潛力。
推理能力是在知識(shí)的基礎(chǔ)上進(jìn)一步上升的能力,它代表著模型是否能做很困難,很復(fù)雜的事情。一個(gè)模型要強(qiáng),首先需要廣泛的知識(shí),然后在知識(shí)的基礎(chǔ)上做推理。
推理很重要的論點(diǎn)是:
- GPT-4 的發(fā)布博客中,OpenAI 明確寫(xiě)道 “The difference comes out when the complexity of the task reaches a sufficient threshold” (GPT-3.5 和 GPT-4 的區(qū)別只在任務(wù)復(fù)雜到一定程度之后才會(huì)顯現(xiàn))。這說(shuō)明推理是很顯著的強(qiáng)的模型有,弱一點(diǎn)的模型不大有的能力。
- 在 PaLM-2 的 Tech Report 中,BBH 和 MATH 這兩個(gè)推理數(shù)據(jù)集被專門(mén)列出來(lái)討論劃重點(diǎn)。
- 如果希望模型成為新一代的計(jì)算平臺(tái),并在上面孕育出全新的應(yīng)用生態(tài)的話,就需要讓模型能夠做足夠強(qiáng)的完成復(fù)雜任務(wù)的能力。
這里我們還需要厘清推理和知識(shí)的關(guān)系:
- 知識(shí)型的能力是模型能力的基礎(chǔ),推理能力是進(jìn)一步的升華 — 模型要推理也是基于現(xiàn)有的知識(shí)圖里。
- 知識(shí)性任務(wù)的榜單上,模型大小和模型分?jǐn)?shù)一般是連續(xù)變化的,不大會(huì)因?yàn)槟P托【统霈F(xiàn)斷崖式下跌 — 從這個(gè)角度來(lái)說(shuō)知識(shí)型的任務(wù)更有區(qū)分度一點(diǎn)。
- 推理型任務(wù)的榜單上,模型大小和模型分?jǐn)?shù)可能存在相變,只有當(dāng)模型大到一定程度之后(大概是 50B 往上,也就是 LLaMA 65B 這個(gè)量級(jí)),模型推理能力才會(huì)上來(lái)。
- 對(duì)于知識(shí)性的任務(wù),Chain-of-thought (CoT) prompting 和 Answer-only (AO) prompting 的效果是差不多的;對(duì)于推理型任務(wù),CoT 顯著好于 AO.
- 所以這邊需要記住一下,CoT 只加推理效果不加知識(shí)效果。在 C-Eval 數(shù)據(jù)集中,我們也觀察到了這個(gè)現(xiàn)象。
有了上述對(duì)于知識(shí)和推理的闡述,我們決定從知識(shí)型的任務(wù)出發(fā),構(gòu)造數(shù)據(jù)集測(cè)試模型的知識(shí)能力,相當(dāng)于對(duì)標(biāo)一下 MMLU 這個(gè)數(shù)據(jù)集;同時(shí),我們也希望帶一點(diǎn)推理相關(guān)的內(nèi)容,進(jìn)一步衡量模型的高階能力,所以我們把 C-Eval 中需要強(qiáng)推理的學(xué)科(微積分,線性代數(shù),概率 …)專門(mén)抽出來(lái),命名為 C-Eval Hard 子集,用來(lái)衡量模型的推理能力,相當(dāng)于對(duì)標(biāo)一下 MATH 這個(gè)數(shù)據(jù)集。在 C-Eval Hard 上面,模型首先需要有數(shù)學(xué)相關(guān)知識(shí),然后需要有逐步解題的思路,然后需要在解題過(guò)程中調(diào)用 Wolfram Alpha/ Mathematica/ Matlab 進(jìn)行數(shù)值和符號(hào) / 微分和積分計(jì)算的能力,并把計(jì)算過(guò)程和結(jié)果以 Latex 的格式表示出來(lái),這部分的題目非常難。
C-Eval 希望可以在整體上對(duì)標(biāo) MMLU (這個(gè)數(shù)據(jù)集被用于 GPT-3.5, GPT-4, PaLM, PaLM-2, Gopher, Chinchilla 的研發(fā)),希望在 Hard 的部分對(duì)標(biāo) MATH (這個(gè)數(shù)據(jù)集被用于 GPT-4, PaLM-2, Minerva, Galactica 的研發(fā))。
這里需要注意的是,我們的最重要目標(biāo)是輔助模型開(kāi)發(fā),而不是打榜。一味地追求榜單排名高會(huì)帶來(lái)諸多不利后果,這個(gè)我們馬上會(huì)闡述;但如果能夠科學(xué)地使用 C-Eval 幫助模型迭代的話,則會(huì)得到巨大收益。我們推薦從模型研發(fā)地視角來(lái)對(duì)待 C-Eval 數(shù)據(jù)集和榜單。
在實(shí)際研發(fā)的過(guò)程中,很多時(shí)候我們需要知道某種方案的好壞或者某種模型的好壞,這個(gè)時(shí)候我們需要一個(gè)數(shù)據(jù)集幫助我們測(cè)試。以下是兩個(gè)經(jīng)典場(chǎng)景:
- 場(chǎng)景1,輔助超參數(shù)搜索:我們有多種預(yù)訓(xùn)練數(shù)據(jù)混合方案,不確定哪種更好,于是我們?cè)?C-Eval 上相互比較一下,來(lái)確定最優(yōu)預(yù)訓(xùn)練數(shù)據(jù)混合方案。
- 場(chǎng)景2,比較模型的訓(xùn)練階段:我有一個(gè)預(yù)訓(xùn)練的 checkpoint ,也有一個(gè) instruction-tuned checkpoint,然后我想要衡量我的 instruction-tuning 的效果如何,這樣可以把兩個(gè) checkpoint 在 C-Eval 上相互比較,來(lái)衡量預(yù)訓(xùn)練和 instruction-tuning 的相對(duì)質(zhì)量。
2.2 - 打榜不是目標(biāo)
我們需要強(qiáng)調(diào)一下為什么不應(yīng)該以榜單排名作為目標(biāo):
- 如果把打榜作為目標(biāo),則容易為了高分而過(guò)擬合榜單,反而丟失通用性 — 這是 GPT-3.5 之前 NLP 學(xué)術(shù)界在 finetune Bert 上學(xué)到的一個(gè)重要教訓(xùn)。
- 榜單本身只測(cè)模型潛力,不測(cè)真實(shí)用戶感受 — 要模型真的被用戶喜好,還是需要大量的人工評(píng)價(jià)的
- 如果目標(biāo)是排名,則容易為了高分想走捷徑,失去了踏實(shí)科研的品質(zhì)與精神。
因此,如果把 C-Eval 作為輔助開(kāi)發(fā)的工具,那么可以最大程度上的發(fā)揮它的積極作用;但是如果把它作為一個(gè)榜單排名,則存在極大的誤用 C-Eval 的風(fēng)險(xiǎn),最終也大概率不會(huì)有很好的結(jié)果。
所以再一次,我們推薦從模型研發(fā)地視角來(lái)對(duì)待 C-Eval 數(shù)據(jù)集和榜單。
因?yàn)槲覀兿MP涂梢宰畲蟪潭鹊闹С珠_(kāi)發(fā)者,所以我們選擇直接跟開(kāi)發(fā)者交流,從開(kāi)發(fā)者的反饋中持續(xù)學(xué)習(xí)迭代 — 這也讓我們學(xué)到了很多東西;就像大模型是 Reinforcement Learning from Human Feedback 一樣,C-Eval 的開(kāi)發(fā)團(tuán)隊(duì)是 Continue Learning from Developers’ Feedback.
具體來(lái)說(shuō),我們?cè)谘邪l(fā)的過(guò)程中,邀請(qǐng)了字節(jié)跳動(dòng),商湯,深言等企業(yè)將 C-Eval 接入到他們自己的工作流中做測(cè)試,然后相互溝通測(cè)試過(guò)程中存在哪些比較有挑戰(zhàn)的點(diǎn)。這個(gè)過(guò)程讓我們學(xué)習(xí)到很多開(kāi)始時(shí)沒(méi)想到的內(nèi)容:
- 很多測(cè)試團(tuán)隊(duì),即使是在同一個(gè)公司,也無(wú)法知道被測(cè)試模型的任何相關(guān)信息(黑盒測(cè)試),甚至不知道這個(gè)模型有沒(méi)有經(jīng)過(guò) instruction-tuning ,所以我們需要同時(shí)支持 in-context learning 和 zero-shot prompting.
- 因?yàn)橛行┠P褪呛诤袦y(cè)試,沒(méi)辦法拿到 logits,但是小模型沒(méi)有 logits 就比較難確定答案,所以我們需要確定一套小模型定答案的方案。
- 模型的測(cè)試模型有多種,比如in-context learning 和 zero-shot prompting;prompt 的格式有多種,比如 answer-only 和 chain-of-thought;模型本身有多種類型,比如 pretrained checkpoint 和 instruction-finetuned checkpoint,因此我們需要明確這些因素各自的影響以及相互作用。
- 模型的對(duì)于 prompt 的敏感度很高,是否需要做 prompt engineering,以及 prompt engineering 是否有礙公平。
- GPT-3.5 / GPT-4 / Claude / PaLM 的 prompt engineering 應(yīng)該怎么做,然后如果從中學(xué)習(xí)到他們的經(jīng)驗(yàn)。
以上的這些問(wèn)題都是我們?cè)诟_(kāi)發(fā)者的交互過(guò)程中,從開(kāi)發(fā)者反饋里發(fā)現(xiàn)的。在現(xiàn)在 C-Eval 的公開(kāi)版本的文檔和 github 代碼中,這些問(wèn)題都有解決。
上面的這些過(guò)程也證明了,從模型研發(fā)的視角來(lái)對(duì)待 C-Eval 數(shù)據(jù)集和榜單,可以非常好地幫助大家開(kāi)發(fā)中文大模型。
我們歡迎所有的開(kāi)發(fā)者們給我們的 GitHub 提 issue 和 pull request,讓我們知道如何更好地幫助你,我們希望可以更好地幫助你 :)
這個(gè)章節(jié)我們討論在制作的過(guò)程中,我們用了哪些方法來(lái)保證數(shù)據(jù)集的質(zhì)量。這里我們最重要的參考是 MMLU 和 MATH 這兩個(gè)數(shù)據(jù)集,因?yàn)?OpenAI, Google, DeepMind, Anthropic 這四個(gè)最重要的大模型團(tuán)隊(duì)都重點(diǎn)參考了 MMLU 和 MATH,所以我們希望可以向這兩個(gè)數(shù)據(jù)集看齊。在我們初步的調(diào)研和一系列的討論之后,我們做了兩個(gè)重要的決策,一個(gè)是從頭開(kāi)始手工制做數(shù)據(jù)集,另一個(gè)是在此過(guò)程中重點(diǎn)防止題目被爬蟲(chóng)爬到訓(xùn)練集里。
GPT 的開(kāi)發(fā)過(guò)程的一個(gè)重要啟發(fā)是,人工智能這行,有多少人工就有多少智能,這個(gè)在我們建立 C-Eval 的過(guò)程中也有很好地體現(xiàn),具體來(lái)說(shuō),從題目來(lái)源看:
- C-Eval里面的題目大多是來(lái)源于pdf和word格式的文件,這類題目需要額外的處理和(人工)清洗才能使用。這是因?yàn)榫W(wǎng)上各種題目太多了,直接是網(wǎng)頁(yè)文本形式存在的題目很可能已經(jīng)被用于模型的預(yù)訓(xùn)練中
然后是處理題目:
- 收集到題目之后,先把pdf文件做 OCR 來(lái)電子化,然后把格式統(tǒng)一成 Markdown,其中數(shù)理的部分統(tǒng)一用 Latex 格式來(lái)表示;
- 公式的處理是一件麻煩的事情:首先 OCR 不一定能識(shí)別對(duì),然后 OCR 也不能直接識(shí)別成 Latex;這里我們的做法是能自動(dòng)轉(zhuǎn) Latex 就自動(dòng)轉(zhuǎn),不能自動(dòng)轉(zhuǎn)就同學(xué)自己手動(dòng)敲;
- 最終的結(jié)果是,13000多 道題目里面所有跟符號(hào)相關(guān)的內(nèi)容(包括數(shù)學(xué)公式和化學(xué)式,H2O 這種)都是被我們項(xiàng)目組的同學(xué)一一驗(yàn)證過(guò)的,我們大概有十來(lái)位同學(xué)花了將近兩周的時(shí)間做這個(gè)事情;
- 所以現(xiàn)在我們的題目可以非常漂亮地用 markdown 的形式呈現(xiàn),這里我們給一個(gè)微積分的例子,這個(gè)例子可以直接在我們的網(wǎng)站中,explore 的部分看到:
- 接下來(lái)的難點(diǎn)就是如何構(gòu)造官方的 chain-of-thought prompt ,這個(gè)地方的重點(diǎn)在于,我們需要保證我們的 CoT 是對(duì)的。我們一開(kāi)始的做法是對(duì)于每個(gè) in-context example ,我們讓 GPT-4 生成一個(gè) Chain-of-thought,但后來(lái)發(fā)現(xiàn)這個(gè)不大行,一來(lái)是生成的太長(zhǎng)了 (超過(guò) 2048 個(gè) token),有些模型的輸入長(zhǎng)度不一定支持;另一個(gè)是錯(cuò)誤率太高了,一個(gè)個(gè)檢查不如自己做一遍
- 所以我們的同學(xué)們就基于GPT-4生成的CoT,把微積分,線代,概率,離散這些 prompt 的題目(每個(gè)科目5道題作為in-context examples),真的自己做了一遍,以下是一個(gè)例子:
左邊是同學(xué)自己做的,然后寫(xiě)成了 Markdown - Latex 格式;右邊是渲染出來(lái)的效果
3.2 - 防止混入訓(xùn)練集
為了評(píng)測(cè)的科學(xué)性,我們考慮了一系列機(jī)制來(lái)防止我們的題目被混入訓(xùn)練集
- 首先,我們的測(cè)試集只公開(kāi)題目不公開(kāi)答案,大家可以拿自己的模型在本地把答案跑出來(lái)然后在網(wǎng)站提交,然后后臺(tái)會(huì)給出分?jǐn)?shù);
- 然后,C-Eval的所有題目都是模擬題,從中學(xué)到考研到職業(yè)考試我們都沒(méi)有用過(guò)任何真題,這是因?yàn)槿珖?guó)性考試的真題廣泛存在于網(wǎng)上,非常容易被爬取到模型訓(xùn)練集里。
當(dāng)然,盡管我們做出了這些努力,但可能也會(huì)不可避免的發(fā)生某個(gè)網(wǎng)頁(yè)里能搜到題庫(kù)里的題目,但我們相信這種情況應(yīng)該不多。且從我們已有的結(jié)果看,C-Eval 的題目還是有足夠區(qū)分度的,特別是 Hard 的部分。
接下來(lái)我們分析有哪些方法可以提升模型的排名。我們先把捷徑給大家列出來(lái),包括使用不能商用的 LLaMA 和使用 GPT 產(chǎn)生的數(shù)據(jù),以及這些方法的壞處;然后我們討論什么是困難但正確的路。
以下是可以走的捷徑:
- 使用 LLaMA 作為基座模型:在我們另一個(gè)相關(guān)的英文模型評(píng)測(cè)項(xiàng)目 Chain-of-thought Hub 中,我們指出了 65B 的 LLaMA 模型是一個(gè)稍弱于 GPT-3.5 的基礎(chǔ)模型,它有著很大的潛力,如果把它用中文的數(shù)據(jù)訓(xùn)練,其強(qiáng)大的英文能力可以自動(dòng)遷移到中文。
- 但這樣做的壞處,一來(lái)是研發(fā)能力的上限被 LLaMA 65B 鎖死,不可能超過(guò) GPT-3.5,更何況 GPT-4 了,另一方面是 LLaMA 不可商用,使用它商業(yè)化會(huì)直接違反條例
- 使用 GPT-4 生成的數(shù)據(jù):特別是 C-Eval Hard 的部分,直接讓 GPT-4 做一遍,然后 GPT-4 的答案喂給自己的模型就可以了
- 但這樣做的壞處,一來(lái)是赤裸裸作弊,得到的結(jié)果并不能泛化,不能代表模型真實(shí)能力;二來(lái)是如果商業(yè)化,就直接違反了 OpenAI 的使用條例;三來(lái)是從 GPT-4 做蒸餾會(huì)加劇模型胡說(shuō)八道的現(xiàn)象,這是因?yàn)?RLHF 在微調(diào)模型拒絕能力的時(shí)候,是鼓勵(lì)模型知之為知之,不知為不知;但是直接抄 GPT-4 的話,GPT-4 知道的東西,其他的模型不一定知道,這樣反而鼓勵(lì)模型胡說(shuō)八道。這個(gè)現(xiàn)象在 John Schulman 近期在伯克利的一個(gè)演講中被重點(diǎn)討論了。
很多時(shí)候,看似是捷徑的道路,其實(shí)在暗中標(biāo)好了價(jià)格。
最好的方法是自立自強(qiáng),從頭研發(fā)。這件事情很難,需要時(shí)間,需要耐心,但這是正確的路。
具體來(lái)說(shuō),需要重點(diǎn)關(guān)注以下機(jī)構(gòu)的論文
- OpenAI - 這個(gè)毋庸置疑,所有文章都要全文背誦
- Anthropic - OpenAI 不告訴你的東西,Anthropic 會(huì)告訴你
- Google DeepMind - Google 比較冤大頭,什么技術(shù)都老實(shí)告訴你,不像 OpenAI 藏著掖著
如果讀者在里經(jīng)驗(yàn)不足,那么可以先不要看其他的地方的文章。先培養(yǎng)判斷力,再去讀其他地方的文章,這樣才能分清好壞。在學(xué)術(shù)上,要分清好壞,而不是不加判斷一味接受。
在研發(fā)的過(guò)程中,建議關(guān)注以下內(nèi)容:
- 如何組 pretraining 的數(shù)據(jù),比如 DoReMi 這個(gè)方法
- 如何增加 pretraining 的穩(wěn)定性,比如 BLOOM 的方法
- 如何組 instruction tuning 的數(shù)據(jù),比如 The Flan Collection
- 如何做 instruction tuning ,比如 Self-instruct
- 如何做 RL,比如 Constitutional AI
- 如何增加 reasoning 的能力,比如我們先前的博客
- 如何增加 coding 能力,比如 StarCoder
- 如何增加工具使用的能力 (C-Eval Hard 需要模型能調(diào)用工具做科學(xué)計(jì)算),比如 toolformer
大模型就是一件花時(shí)間的事情,它是對(duì)人工智能工業(yè)能力的全方位大考:
- OpenAI 的 GPT 系列從 GPT-3 走到 GPT-4,從 2019 到 2023,一共花了四年的時(shí)間。
- Anthropic 原班人馬從 OpenAI 剝離之后,即使有 GPT-3 的經(jīng)驗(yàn),重新做一遍 Claude 也花了一年的時(shí)間。
- LLaMA 的團(tuán)隊(duì),即使有 OPT 和 BLOOM 的教訓(xùn),也花了六個(gè)月的時(shí)間。
- GLM-130B 從立項(xiàng)到發(fā)布,花了兩年的時(shí)間。
- MOSS 的 alignment 的部分,在 RL 之前的內(nèi)容,也花了將近半年的時(shí)間,這還是沒(méi)算 RL 的。
因此,不用著急打榜,不用明天就看結(jié)果,不用后天上線 — 慢慢來(lái),一步一步來(lái)。很多時(shí)候,困難但正確的路,反而是最快的路。
在這篇文章中,我們介紹了 C-Eval 的開(kāi)發(fā)目標(biāo),過(guò)程,和重點(diǎn)考量的因素。我們的目標(biāo)是幫助開(kāi)發(fā)者更好地開(kāi)發(fā)中文大模型,促進(jìn)學(xué)術(shù)界和產(chǎn)業(yè)界科學(xué)地使用 C-Eval 幫助模型迭代。我們不著急看結(jié)果,因?yàn)榇竽P捅旧砭褪且患浅@щy的事情。我們知道有哪些捷徑可以走,但也知道困難但正確的路反而是最快的路。我們希望這份工作可以促進(jìn)中文大模型的研發(fā)生態(tài),讓人們?cè)缫稽c(diǎn)體驗(yàn)到這項(xiàng)技術(shù)帶來(lái)的便利。
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。