爆火的“GPT-4 MIT本科學數學滿分”論文作弊 數據集合本身有問題
這兩天,一篇關於 GPT-4 滿分通過 MIT EECS 和數學本科考試的論文在 Twitter 上瘋傳。簡單概括,一個來自 MIT 的研究小組來自自己學學校的數學、電氣工程和計算機科學 (EECS) 專業的課程問題、期中考試和期末考試中,整理出了一個包含4550個問題和解決方案的綜合數據集。
論文地址:https://arxiv.org/pdf/2306.08997.pdf
然後,研究小組讓各種語言模型去完成這個數據集的題目,結果太棒了:GPT-3.5能做對1/3,GPT-4幾乎滿分通過。
論文作者表現,提升模型表現主要靠“四件套”:Few-shot learning、CoT、Self-critique、Expert。
就像上面表示的那樣,加持GPT-4的手法越多,模型的回答正確率就越高。最初的GPT-4本來就能拿到90 %的正確率,一次運行之後,甚至直連拿到滿分。
但大部分討論得非常激烈的網友可能沒有註意到,這個分位數就是用GPT-4打的……
三位相同來自麻省理工學院的學生第一時間發現了這篇論文,作為冒險者被GPT-4赶超的群體,他們想立即領會下一篇論文的方法論。
研究了一小會兒後,他們對論文的方法產生了疑惑。
兩小時後,他們意識到:數據集本身有問題。
雖然管原論文的作者宣布已經手動審查了發布的數據集質量,但三人發現,有明顯的圖像表現,測試數據集的很大一部分被污染了。
也就是說,模型就像一個學生在考試前被告知答案,這是赤裸裸的“作弊”。
產品質量質疑後,他們立 即著手在數據集上完成了零樣 GPT-4 的運行,並針對數據的前 30% 進行了手動評分,結果與原論文相差甚遠,應該說是一個天上,一個地下。
“作為麻省理工學院的本科生,至少根據我們的經驗,這個測試集並不能準確地代表在麻省理工學院獲得EECS院校需要的理解廣度和深度。”三人在博客中這麼寫。
最新進展:零樣本 GPT-4 的準確率能達到 62.5% 了,但還是和論文裡宣稱的 90% 差很多。
三人還質疑了“過度宣傳”的風潮:“這些論文通告在任何合法的同行評審之前就被上傳到Arxiv,並在Twitter上廣泛分享。在這種情況下,可能會傳播不良信息,並為未來的工作樹立一個糕點的先例。”
“深度學習”鬥士 Gary Marcus 也不出意料地提出了這個質疑:
同時,三人也在博客中指出一點:《使用大型語言模型探索MIT數學和EECS課程》論文上列的幾個作者都是本科生研究人員,讓這些人對工作中出現的任何失敗責任是不合適的。相反,責任應該在指導者身上——他們才是被期望確保工作符合其領導領域內公學標準的人。
接下來讓我們看看下面,這篇“爆火”論文都有哪些問題。
數據集到底有什麼問題?
首先,從論文中得知,研究者收集的數據集包含獲得MIT學位考試所需要的30門數學和EECS課程的4550個題和相應的解決方案,涵蓋核心課程和選擇修改課程。
論文中寫道:“在沒有圖像和有解決方案的問題中隨機選了288個問題的測試集。”
這個數據集(不包括用於微調開發的LLM的培訓集)隨著論文的公開也被發佈到GitHub上,同時發布的還有用於生成報告的測試性能力的代碼。然而,作者 Drori 教授在最近的一次提交中已將其刪除。
經過檢查、對比,三人確認這個被刪掉的文件代表了論文中分析的測試集,因為評價代碼中的所有數據的文件路徑都指向向它,沒有提供任何修改其內容的代碼,而且它在最開始發布的GitHub庫中是可用的。另外,該文件已經滿足了論文中規定的所有模式要求(行數等)。這些證明似乎非常有實力支持下面的所有主張,
“但我們要承認,這個文件有可能被替換成了一個用於測試的不同文件。如果是這樣的話,我們認為證明的責任在於作者公開發布這個數據和使用它做的所有分析。”
那麼,被遮蓋的問題研究究竟是什麼呢?三人給出了自己的分析。
無法解決的問題(約佔測試集的4%)
鑑於原論文表示,任何形式的GPT-4都能在測試集上產生一個完美分數,三人開始檢查各個數據點。他們很快就發現,根據本不可能有滿分,因為數據集中至少有 10 個問題是無法使用所提供的信息解決的,另外幾個問題在這種情況下根本就不是有效的問題。
像這種“有問題的問題”,至少佔了測試集的4%。
在一個擴展的excel文檔裡,三人對已發現有問題的數據集示例進行了註解。“紅色”代表使用提供的信息無法解決的問題題目,“黃色”代表一部分不太合理的問題。
頁面地址:https://docs.google.com/spreadsheets/d/1FZ58hu-lZR-e70WP3ZPNjp9EK_4RgrQvQfsvjthQh_Y/edit?usp=sharing
重複的問題(約佔測試集的 5%)
使用文本相似性測試,三人發現有14個問題(7對)在288個問題的測試集中是重新的,在這些情況下,問題串之間的唯一區別是極小的字母級靜音,甚至完整相同。
針對這些無法解決的問題,GPT-4能夠通過任何方式獲得100%的準確率,也是難以置信。要不就是在某個階段出現了答案案洩到提示中,或者是問題沒有被正確打分。
這些初步的發現促使他們從最小的樣子開始舉例調查(如果模型在零樣正確率方面失敗的話語),最最終發現,既有解題信息的洩露,也有用於對模型輸入進行分級的方法問題。具體情況如下:
少量示例中的信息洩露
值得注意的是,原文中還提到了“少量示例”這個事。
簡而言之,論文對OpenAI填入的數據集內的類似問題進行餘弦似度搜索,並將這些問題和解決方案作為頭部外的上下文納入模型的提示,幫助模型解決問題。
這個方法本身是沒有問題的,只要這些示例與相關問題有足夠的差異,並且避免暴露不公的信息。
只是隨機掃描已經發布的測試數據集時,三人注意到一些奇怪的事情:許多提供給模型的“少量示例”與問題本身幾乎一個字不差。
為了進一步了解這一點,他們寫了一個簡單的腳本,查看了所提供的幾個展示示例的問題陳述和所有列出的問題之間的重複情況,並繪出了直播圖:
許多提供的少量類型本與問題本身幾乎相同,這意味著模型得到的是問題的答案或與問題非常相似的問題。通常情情況下,這來自於大量的共享背景景的多環節問題的複原。
他們認為,為了正確評價 GPT 的解題能力,多節問題的其他部分應該被完全排除在某個問題的少量示例之外。實際上,他們發現了這些很多節假日問題的解決方案,趨向於直接提示到或者給出了模型被要求解決的另一部分問題的答案。
不僅如此,在對這些數據的挖掘中,他們還發現了整個問題被重新修復的樣例。例如:
在這兩種情況下,答案是完全相同的。很難說信息洩露了。
GPT-4 自動打分,有問題
另外,三人還在原論文開源的分解機製作中發現了問題:
def repeat_grading(input_path, output_path, num_experts = 3, num_fs = 3, most_recent_q = 0):
df = pd.read_csv(input_path)
df = df.iloc[most_recent_q:]
for index, row in df.iterrows():
print('Completing question', index)
question_output = row.values.tolist()
course_name = row['Course Name']
question = row['Question']
solution = row['Solution']
fs_qs = [[row['Few shot question 1'], row['Few shot solution 1']], [row['Few shot question 2'], row['Few shot solution 2']], [row['Few shot question 3'], row['Few shot solution 3']]]
experts = get_experts(course_name, question, num_experts).split(', ')
prompts = [lambda expert: zero_shot_response(question, expert),
lambda expert: few_shot_response(expert, question, fs_qs),
lambda expert: few_shot_response(expert, question, fs_qs, True)
]
critiques = [["Review your previous answer and find problems with your answer.","Based on the problems you found, improve your answer."], ["Please provide feedback on the following incorrect answer.","Given this feedback, answer again."]]
for expert in experts:
print("Using expert", expert)
question_output.append(expert)
crit = True
for prompt in prompts:
prompt_response = prompt(expert) # calls fresh ChatCompletion.create
prompt_grade = grade(course_name, question, solution, prompt_response) # GPT-4 auto-grading comparing answer to solution
question_output+=[prompt_response, prompt_grade]
if correct(prompt_grade):
crit = False
break
if crit:
for critique in critiques:
crit_response = self_critique_response(expert, course_name, question, question_output[-2], critique) # calls fresh ChatCompletion.create
crit_grade = grade(course_name, question, solution, crit_response) # GPT-4 auto-grading comparing answer to solution
question_output+=[crit_response,crit_grade]
if correct(crit_grade):
break
repeat_grading('MIT_test_set.csv', 'MIT_test_set_graded.csv')
在代碼中,能看到流出流程上的處理分級存在於嚴重的問題:論文是用GPT-4去評估檢查的,包括a)原始問題,b)解決方案,c)GPT自自己的答案,作為分級提示中的參數。
在更多的技術領域,GPT更有可能出現隱性誤解,這種自主評分更有可能出現“我欺騙”的結果。
除此之外,雖然提示等級是最近許多GPT論文中經常見到的技術,但這裡有大量數據洩漏的可能性。每一級不僅僅提供基於ground truth的二元信消息,而還在繼續提示,直達正確答案。
儘管管這些創建的提示並沒有看到現實的答案,但是重新提示 到正確答案的形式已經足夠了,尤其在佔測集16 %的多選題中,無限次的嘗試(幾乎)保證了正確答案一定會出現。
這就好比有人拿著答題紙,告訴正在考試的學生回答得對不對,直接提示學生得到正確答案。
總結
在博客的最後,三位這樣寫:
這篇論文道出了最近人類智能領域研究的一個更大趨勢。隨著該領域的發展越來越快,新發現的時間節點似乎在縮小短,這走向伴隨著捷徑。一個特別令人憂慮的趨勢使用類似 GPT-4 這種基於語言的模型來評價一個模型的準確技術。
雖然是一個有用的工具,但它的結論不應該被誇大,也不應該被當做ground truth。最近的工作表現,如果沒有準確的ground truth 信息,GPT -4 評價器就不能靠地用於試驗證明。至少,應該選擇一個隨機的數據集合,將GPT-4的性能與人類的評價進行比較。語言模型還不能被當做生成ground truth的神諭。
另外,在使用數據之前,無論是用於訓練、推論、基礎測試還是其他方面,重新評價每一個數據點並進入基礎本的檢查是極其重要的。鑑別有關於數據集的模型比較小,簡單的人工驗證很容易在工作範圍內完成。
我們的批評主要是針對這項研究的方法和嚴謹性,而不是針對其他內容。我們對大型語言模型實踐解決麻省理工學院課程的能力沒有任何意義,只是認為本文未能以科學嚴謹的方式證明這點。
來源:機械之心