开放 LLM 排行榜: 深入研究 DROP
最近,開放 LLM 排行榜 迎來了 3 個新成員: Winogrande、GSM8k 以及 DROP,它們都使用了 EleutherAI Harness 的原始實現。一眼望去,我們就會發現 DROP 的分數有點古怪: 絕大多數模型的 F1 分數都低于 10 分 (滿分 100 分)!我們對此進行了深入調查以一探究竟,請隨我們一起踏上發現之旅吧!
初步觀察
在 DROP (Discrete Reasoning Over Paragraphs,段落級離散推理) 評估中,模型需要先從英文文段中提取相關信息,然后再對其執行離散推理 (例如,對目標對象進行排序或計數以得出正確答案,如下圖中的例子)。其使用的指標是自定義 F1 以及精確匹配分數。
三周前,我們將 DROP 添加至開放 LLM 排行榜中,然后我們觀察到預訓練模型的 DROP F1 分數有個奇怪的趨勢: 當我們把排行榜所有原始基準 (ARC、HellaSwag、TruthfulQA 和 MMLU) 的平均分 (我們認為其一定程度上代表了模型的總體性能) 和 DROP 分數作為兩個軸繪制散點圖時,我們本來希望看到 DROP 分數與原始均分呈正相關的關系 (即原始均值高的模型,DROP 分數也應更高)。然而,事實證明只有少數模型符合這一預期,其他大多數模型的 DROP F1 分數都非常低,低于 10。
文本規范化的鍋
第一站,我們觀察到文本規范化的結果與預期不符: 在某些情況下,當正確的數字答案后面直接跟有除空格之外的其他空白字符 (如: 換行符) 時,規范化操作導致即使答案正確也無法匹配。舉個例子,假設生成的文本是 10\n\nPassage: The 2011 census recorded a population of 1,001,360 ,而對應的標準答案為 10 。
測試基準會先對生成文本和標準答案文本都進行文本規范化,整個過程分為多個步驟:
-
按分隔符 (
|、-或) 分詞
生成文本的開頭10\n\nPassage:并不包含分隔符,因此會被放進同一個詞元 (即第一個詞元) ; -
刪除標點符號
刪除標點后,第一個詞元會變為10\n\nPassage(:被刪除); -
數字均質化
每個可以轉換為浮點數的字符串都會被視為數字并轉換為浮點數,然后再重新轉回字符串。10\n\nPassage保持不變,因為它不能被轉換為浮點數,而標準答案的10變成了10.0。 -
其他步驟
隨后繼續執行其他規范化步驟 (如刪除冠詞、刪除其他空格等),最終得到的規范化文本是:10 passage 2011.0 census recorded population of 1001360.0。
最終得分并不是根據字符串計算而得,而是根據從字符串中提取的詞袋 (bag of words,BOW) 計算而得。仍用上例,規范化后的生成文本詞袋為 {'recorded', 'population', 'passage', 'census', '2011.0', ' 1001360.0', '10'} ,而規范化后的標準答案詞袋為 {10.0} ,兩者求交,正如你所看到的,即使模型生成了正確答案,兩者交集也為 0!
總之,如果一個數字后面跟著除標準空格字符外的任何其它表示空格的字符,目前的文本規范化實現就不會對該數字進行規范化,因此如果此時標準答案也是一個數字,那么兩者就永遠無法匹配了!這個問題可能給最終分數帶來嚴重影響,但顯然這并是導致 DROP 分數如此低的唯一罪魁禍首。我們決定繼續調查。
對結果進行深入研究
我們在 Zeno 的朋友加入了調查并對結果 進行了更深入的探索,他們選擇了 5 個有代表性的模型進行深入分析: falcon-180B 和 mistra-7B 表現低于預期,Yi-34B 和 Tigerbot-70B 的 DROP 分數與原始均分正相關,而 facebook/xglm-7.5B 則落在中間。
如果你有興趣的話,也可以試試在 這個 Zeno 項目 上分析一把。
Zeno 團隊發現了兩件更麻煩的事情:
- 如果答案是浮點數,沒有一個模型的結果是正確的
- 擅長生成長答案的高質量模型 F1 分數反而更低
最后,我們認為這兩件事情實際上是同一個根因引起的,即: 使用 . 作為停止詞 (以結束生成):
- 浮點數答案在生成過程中直接被截斷了 [譯者注: 小數點被當成句號直接中斷輸出了。]
- 更高質量的模型,為了嘗試匹配少樣本提示格式,其生成會像這樣
Answer\n\nPlausible prompt for the next question.,而按照當前停止詞的設定,該行為僅會在結果生成后且遇到第一個.停止,因此模型會生成太多多余的單詞從而導致糟糕的 F1 分數。
我們假設這兩個問題都可以通過使用 \n 而不是 . 來充當停止詞而得到解決。
更改生成停止詞
我們對此進行了初步實驗!我們試驗了在現有的生成文本上使用 \n 作為結束符。如果生成的答案中有 \n ,我們就在遇到第一個 \n 時截斷文本,并基于截斷文本重新計算分數。
請注意,這只能近似正確結果,因為它不會修復由于 . 而過早截斷的答案 (如浮點數答案)。但同時,它也不會給任何模型帶來不公平的優勢,因為所有模型都受這個問題的影響。因此,這是我們在不重新運行模型的情況下 (因為我們希望盡快向社區發布進展) 能做的最好的事情了。
結果如下。使用 \n 作為停止詞后,DROP 分數與原始均分的相關度提高不少,因此模型的 DROP 分數與模型原始的總體表現相關度也變高了。
那下一步咋整
快速估算一下,重新對所有模型運行完整評估的成本相當高 (全部更新需花 8 個 GPU 年,DROP 占用了其中的很大一部分)。因此,我們對僅重新運行失敗的例子所需要的成本進行了估算。
有 10% 樣本的標準答案是浮點數 (如 12.25 ),且模型輸出以正確答案開頭 (本例中為 12 ),但在 . 處被截斷 - 這種情況如果繼續生成的話,有可能答案是正確的,因此我們肯定要重新運行!但這 10% 尚不包括以數字結尾的句子,這類句子也可能會被不當截斷 (在剩下的 90% 中占 40%),也不包括被規范化操作搞亂掉的情況。
因此,為了獲得正確的結果,我們需要重新運行超過 50% 的樣本,這需要大量的 GPU 時!我們需要確保這次要運行的代碼是正確的。
于是,我們與 EleutherAI 團隊通過 GitHub 及內部渠道進行了廣泛的討論,他們指導我們理解代碼并幫助我們進行調查,很明顯,LM Eval Harness 的實現嚴格遵循了“官方 DROP 代碼”的實現,因此這不是 LM Eval Harness 的 bug,而是需要開發 DROP 基準評估的新版本!
因此,我們決定暫時從 Open LLM 排行榜中刪除 DROP,直到新版本出現為止。
從本次調查中我們學到的一點是,通過社區協作對基準測試進行檢閱,能發現以前遺漏的錯誤,這一點很有價值。開源、社區和開放式研發的力量再次閃耀,有了這些,我們甚至可以透明地調查一個已經存在數年的基準上的問題并找到根因。
我們希望有興趣的社區成員與發明 DROP 評估的學者聯手,以解決其在評分及文本規范化上的問題。我們希望能再次使用它,因為數據集本身非常有趣而且很酷。如國你對如何評估 DROP 有任何見解,請不要猶豫,告訴我們。
感謝眾多社區成員指出 DROP 分數的問題,也非常感謝 EleutherAI Harness 和 Zeno 團隊在此問題上的大力協助。
英文原文: https://hf.co/blog/leaderboard-drop-dive
原文作者: Clémentine Fourrier,Alex Cabrera,Stella Biderman,Nathan Habib,Thomas Wolf
譯者: Matrix Yao (姚偉峰),英特爾深度學習工程師,工作方向為 transformer-family 模型在各模態數據上的應用及大規模模型的訓練推理。
總結
以上是生活随笔為你收集整理的开放 LLM 排行榜: 深入研究 DROP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鸿蒙HarmonyOS实战-工具安装和H
- 下一篇: MVCC多版本并发控制和幻读问题的解决