結論不應該如此被誇大。
這兩天,一篇關於 GPT-4 滿分通過 MIT EECS 和數學本科考試的論文在Twitter上瘋傳。
論文地址:https://arxiv.org/pdf/2306.08997.pdf
簡單概括,一個來自 MIT 的研究團隊從自己學校的數學、電氣工程和電腦科學 (EECS) 專業的課程問題、期中考試和期末考試中,整理出了一個包含 4550 個問題和解決方案的綜合資料集。
然後,研究團隊讓各種大語言模型去完成這個資料集的題目,結果太嚇人:GPT-3.5 能做對 1/3,GPT-4 幾乎滿分通過。
論文作者表示,提升模型表現主要靠「四件套」:Few-shot learning、CoT、Self-critique、Expert。
就像上表中所示,加持 GPT-4 的手法越多,模型的答題正確率就越高。原始的 GPT-4 本來就能拿到 90% 的正確率得分,一番運作之後,甚至直接拿到滿分。
但大部分討論得很激烈的網友可能沒注意到,這個分數本身就是用 GPT-4 打的……
三位同樣來自 MIT 的學生第一時間發現了這篇論文,作為險些被 GPT-4 趕超的群體,他們想立即領會一下爆款論文的方法論。
研究了一小時後,他們對該論文的方法產生了懷疑。
兩小時後,他們意識到:資料集本身有問題。
儘管原論文的作者宣稱已手動審查了發佈的資料集質量,但三人發現,有明顯的跡象表明,測試資料集的很大一部分被汙染了。
也就是說,模型就像一個學生在考試前被告知了答案,這是赤裸裸的「作弊」。
產生質疑後,他們立即著手在資料集上完成了零樣本 GPT-4 的運行,並對資料的前 30% 進行了手動評分,結果與原論文相差甚遠,應該說是一個天上、一個地下。
「作為麻省理工學院的本科生,至少根據我們的經驗,這個測試集並不能準確地代表在麻省理工學院獲得 EECS 學位所需的理解廣度和深度。」三人在部落格中這麼寫道。
最新進展:零樣本 GPT-4 的準確率能達到 62.5% 了,但還是和論文裡宣稱的 90% 差很多。
三人還質疑了「過度宣傳」的風潮:「這些論文通常在任何合法的同行評審之前就被上傳到 Arxiv,並在 Twitter 上廣泛分享。在這種情況下,可能會傳播不良資訊,併為未來的工作樹立一個糟糕的先例。」
「深度學習」鬥士 Gary Marcus 也不出意料地聲援了這波質疑:
同時,三人也在部落格中指出一點:《Exploring the MIT Mathematics and EECS Curriculum Using Large Language Models》論文上列出的幾個作者都是本科生研究人員,讓這些人對工作中出現的任何失誤負責是不合適的。相反,責任應該在指導作者身上 —— 他們才是被期望確保工作符合其領域內公共學術標準的人。
接下來讓我們看下,這篇「爆火」論文都有哪些問題。
資料集到底有什麼問題?
首先,從原論文中得知,研究者收集的資料集包含獲得 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% 的準確率,也是難以置信。要麼是在某個階段出現了答案洩漏到 prompt 中,要麼是問題沒有被正確打分。
這些初步的發現促使他們從少樣本示例開始進一步調查(如果模型在零樣本正確率方面失敗的話),最終發現,既有解題資訊的洩露,也有用於對模型輸出進行分級的方法問題。具體情況如下:
少樣本示例中的資訊洩露
值得注意的是,原論文中還提到了「少樣本示例」這個事。
簡而言之,論文對 OpenAI 嵌入的資料集內的類似問題進行餘弦相似度搜尋,並將這些問題和解決方案作為額外的上下文納入模型的 prompt,幫助模型解決問題。
這個方法本身是沒問題的,只要這些示例與有關問題有足夠的差異,且避免暴露不公平的資訊。
只是隨機掃描已發佈的測試資料集時,三人注意到一些奇怪的事情:許多提供給模型的「少樣本示例」與問題本身幾乎一字不差。
為了進一步了解這一點,他們寫了一個簡單的腳本,查看了所提供的幾個示例的問題陳述和所列出的問題之間的重疊情況,並繪出了直方圖:
許多提供的少樣本與問題本身幾乎相同,這意味著模型得到的是問題的答案或與問題非常相似的問題。通常情況下,這來自於大量的共享背景的多環節問題的重複。
他們認為,為了正確評估 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 自己的答案,作為分級 prompt 中的參數。
在更多的技術領域,GPT 更有可能出現隱性誤解,這種自動評分更有可能出現「自我欺騙」的結果。
此外,雖然 prompt 級聯是最近許多 GPT 論文中常見的技術,但這裡有大量資料洩漏的可能性。每一級不僅提供基於 ground truth 的二元資訊,而且還在繼續 prompt,直到達到正確答案。
儘管這些創建的 prompt 並沒有看到實際的答案,但重新 prompt 直到達到正確答案的形式已經足夠了,尤其是在佔測試集 16% 的多選題中,無限次的嘗試(幾乎)保證了正確答案一定會出現。
這就好比有人拿著答題紙,告訴正在考試的學生答得對不對,一直提示到學生得到正確答案。
總結
在部落格的最後,三位這樣寫道:
這篇論文道出了最近人工智慧領域研究的一個更大趨勢。隨著該領域的進展越來越快,新發現的時間節奏似乎在縮短,這往往伴隨著捷徑。一個特別令人擔憂的趨勢是使用像 GPT-4 這樣基於語言的模型來評估一個模型的準確性的技術。
雖然是一個有用的工具,但它的結論絕不應該被誇大,也不應該被當作 ground truth。最近的工作表明,如果沒有準確的 ground truth 資訊,GPT-4 評估器就不能可靠地用於驗證。至少,應該選擇一個隨機的資料集子集,將 GPT-4 的性能與人類的評估進行比較。語言模型還不能被當作產生 ground truth 的神諭。
此外,在使用資料之前,無論是用於訓練、推理、基準測試還是其他方面,重新評估每一個資料點並進行基本的檢查是極其重要的。鑑於有關資料集的規模較小,簡單的人工驗證很容易在工作範圍內完成。
我們的批評主要是針對這項研究的方法和嚴謹性,而不是針對其內容。我們對大型語言模型實際解決麻省理工學院課程的能力沒有任何意見,只是認為本文未能以科學嚴謹的方式證明這一點。
參考連結:https://flower-nutria-41d.notion.site/No-GPT4-can-t-ace-MIT-b27e6796ab5a48368127a98216c76864#c49f4b29e01745de9bf1ffdf2170b067