今天小編分享的科學經驗:GPT-4計算能力差怎麼破?把它當小學生,保證結果跟計算器一樣準,歡迎閲讀。
大語言模型的數學能力到底怎麼破?
一位數學大學生發現:
實際上,咱們只需像一年級小學生一樣教它們 " 掰着手指頭算 ",就能讓它立馬變身數學小能手。
比如像 "34756918247632 + 7934619867453210082" 這樣的大數加法,任你丢給哪個大模型,即使強如 GPT-4,都算不明白。
但如果你按照他説的做,保證結果跟用計算器摁出來的一模一樣。
具體怎麼操作?
像小學生一樣教 GPT-4
我們就以上面的加法題為例,要想讓 GPT-4 算對,需要給它舉兩個例子。
但只需非常簡單的那種就行,重點是把計算過程給它" 掰開了揉碎了 "講出來。
第一個例子如下:
我們要教會它算 379+64。
具體而言,先讓 GPT-4 分别捋清兩個加數的位數有幾位,每位都是幾。
然後告訴它如果第一個加數的位數比第二個多 1 位就補 1 個 0。
在哪補?補在位數少的那個加數。于是 64 變成 064。
這件事做完之後,再重復一遍第一個步驟。
接着,設定一些表示進位、連接等意思的變量和初始值,再從高位一位一位的相加數字,把每一位結果組合起來,就得出了最終答案。
從下面的提示詞模版可以看到,一定要寫的非常詳細,把對方當作小學生一樣看待。
(ps. 可以看到計算第二位的 7+6+c 時作者寫錯了,應該等于 14,導致最終結果也錯了,但這壓根不影響,只要思想是對的,模型就能 get 到!)
對于第二個例子,步驟也一樣,主要不同之處在于這次不需要補 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,是滑鐵盧大學數學大學生。
據個人主頁介紹,他對大語言模型非常感興趣,最近正在開始研究生成模型,尤其是擴散類型,并已經有一些小小的產出,大家感興趣的可以去翻閲。
原文地址:
https://okarthikb.github.io/site/blog/detailed-prompting.html