GPT-4計算能力差怎么破?把它當小學生,保證結果跟計算器一樣準
本文經AI新媒體量子位(公眾號ID:QbitAI)授權轉載,轉載請聯系出處。
大語言模型的數學能力到底怎么破?
一位數學本科生發(fā)現:
實際上,咱們只需像一年級小學生一樣教它們“掰著手指頭算”,就能讓它立馬變身數學小能手。
圖片
比如像“34756918247632 + 7934619867453210082”這樣的大數加法,任你丟給哪個大模型,即使強如GPT-4,都算不明白。
但如果你按照他說的做,保證結果跟用計算器摁出來的一模一樣。
具體怎么操作?
像小學生一樣教GPT-4
我們就以上面的加法題為例,要想讓GPT-4算對,需要給它舉兩個例子。
但只需非常簡單的那種就行,重點是把計算過程給它“掰開了揉碎了”講出來。
第一個例子如下:
我們要教會它算379+64。
具體而言,先讓GPT-4分別捋清兩個加數的位數有幾位,每位都是幾。
然后告訴它如果第一個加數的位數比第二個多1位就補1個0。
在哪補?補在位數少的那個加數。于是64變成064。
這件事做完之后,再重復一遍第一個步驟。
接著,設定一些表示進位、連接等意思的變量和初始值,再從高位一位一位的相加數字,把每一位結果組合起來,就得出了最終答案。
從下面的提示詞模版可以看到,一定要寫的非常詳細,把對方當作小學生一樣看待。
(ps. 可以看到計算第二位的7+6+c時作者寫錯了,應該等于14,導致最終結果也錯了,但這壓根不影響,只要思想是對的,模型就能get到?。?/span>
對于第二個例子,步驟也一樣,主要不同之處在于這次不需要補0——把人家當作小學生,就得把每種情況都講明白。
把以上兩個例子作為模版喂給GPT-4后,我們要做的就是“千叮嚀萬囑咐”:
這是你必須用來進行加法運算時使用的模板,你必須使用同樣的關鍵字。
記住按照模版所寫的那樣,該有空格的地方都得有。不要用大寫字母,因為模版里沒用。
在計算之前和之后都不要要添加任何解釋或填充詞,因為你唯一的任務就是照著上面的模板來做。
最后將答案格式化為純文本。
然后告訴它:
現在,我將提供兩個新的操作數,你必須使用模版來計算答案。懂了嗎?
(英文提示語如下:This is a template you must use to do addition. You must use the same keywords. You must use whitespace wherever it is used above.
Do not use uppercase letters, since they’re not present in the template. Do not add any explanations or filler words before and after doing the computation. Your sole task is to follow the template above.
Format the answer as plaintext.
I’ll provide a new set operands and you must use the template to compute the answer. Got it?)
這時,GPT-4就會告訴你:懂了,嚴格按照你提供的模版來算兩個數字的加法。
然后,你把“34756918247632”和“7934619867453210082”輸入進去,記住一定每個數字進行空格(原因后面說):
3 4 7 5 6 9 1 8 2 4 7 6 3 2 + 7 9 3 4 6 1 9 8 6 7 4 5 3 2 1 0 0 8 2
GPT-4就能開始照貓畫虎完成下面這一系列的計算:
最后告訴你正確答案:
0 7 9 3 4 6 5 4 6 2 4 3 7 1 4 5 7 7 1 4.
嗯,和計算器結果一樣:
而我們也隨便挑了一個模型實測了一下,計算:376900+12678922(等于13055822)。
原來算不對:
套用以上方法之后,就OK了:
所以說,大語言模型還是很聰明的,只要你會教,數學計算能力壓根沒問題。
為什么算不對?
想必大家也會好奇,為什么要像小學生這樣教它們才能做對這樣的數學題呢?
作者分析,有兩大原因:
一是模型在處理文本輸入時會進行的tokenization操作,導致數字被多個組合在一起變成一個個token。
比如咱們今天算的這道,在GPT-4眼里它看到的其實是這樣的:
這也就是為什么我們需要用空格將每個數字隔開,GPT-4才不會進行拆分,才有算對的可能性。
當然,如果你僅僅是加了空格不用上面的方法教它,它也算不對。
這就引出第二個原因:沒有給夠它上下文學習的空間來進行計算。
GPT-4是一種自回歸語言模型,這意味著它某個時間步的輸出以所有先前的輸出為條件,就像小學生做題一樣,我們需要一種方法讓我們的模型能夠一步一步地檢索到任何位置的數字。
因此,就需要給它設定如上的模版,讓它“有跡可循”。
最后作者表示,語言模型不同于我們以前構建的任何類型的軟件。所以需要一些特別的耐心。
那么,理解了以上這兩個原因,大家是不是也就能更好地理解上面一系列如教小學生似的提示詞操作了?
作者介紹
本方法作者名叫Karthik Balaji,是滑鐵盧大學數學本科生。
據個人主頁介紹,他對大語言模型非常感興趣,最近正在開始研究生成模型,尤其是擴散類型,并已經有一些小小的產出,大家感興趣的可以去翻閱。
圖片