GPT-3解數(shù)學(xué)題準(zhǔn)確率升至92.5%!微軟提出MathPrompter,無(wú)需微調(diào)即可打造「理科」語(yǔ)言模型
大型語(yǔ)言模型最為人詬病的缺點(diǎn),除了一本正經(jīng)地胡言亂語(yǔ)以外,估計(jì)就是「不會(huì)算數(shù)」了。
比如一個(gè)需要多步推理的復(fù)雜數(shù)學(xué)問(wèn)題,語(yǔ)言模型通常都無(wú)法給出正確答案,即便有「思維鏈」技術(shù)的加持,往往中間步驟也會(huì)出錯(cuò)。
與文科類的自然語(yǔ)言理解任務(wù)不同,數(shù)學(xué)問(wèn)題通常只有一個(gè)正確答案,在不那么開(kāi)放的答案范圍下,使得生成準(zhǔn)確解的任務(wù)對(duì)大型語(yǔ)言模型來(lái)說(shuō)更具挑戰(zhàn)性。
并且,在數(shù)學(xué)問(wèn)題上,現(xiàn)有的語(yǔ)言模型通常不會(huì)對(duì)自己的答案提供置信度(confidence),讓用戶無(wú)從判斷生成答案的可信度。
為了解決這個(gè)問(wèn)題,微軟研究院提出了MathPrompter技術(shù),可以提高 LLM 在算術(shù)問(wèn)題上的性能,同時(shí)增加對(duì)預(yù)測(cè)的依賴。
論文鏈接:https://arxiv.org/abs/2303.05398
MathPrompter 使用 Zero-shot 思維鏈提示技術(shù)生成多個(gè)代數(shù)表達(dá)式或 Python 函數(shù),以不同方式解決同一個(gè)數(shù)學(xué)問(wèn)題,從而提高輸出結(jié)果的可信度。
相比其他基于提示的 CoT 方法,MathPrompter還會(huì)檢查中間步驟的有效性。
基于175B 參數(shù) GPT,使用MathPrompter方法將MultiArith 數(shù)據(jù)集的準(zhǔn)確率從78.7%提升到了92.5%!
專攻數(shù)學(xué)的Prompt
近幾年,自然語(yǔ)言處理的發(fā)展很大程度上要?dú)w功于大型語(yǔ)言模型(LLMs)在規(guī)模上的不斷擴(kuò)展,其展現(xiàn)出了驚人的zero-shot和few-shot能力,也促成了prompting技術(shù)的發(fā)展,用戶只需要在prompt中給LLM輸入幾個(gè)簡(jiǎn)單的樣例即可對(duì)新任務(wù)進(jìn)行預(yù)測(cè)。
prompt對(duì)于單步的任務(wù)來(lái)說(shuō)可以說(shuō)相當(dāng)成功,但在需要多步驟推理的任務(wù)中,提示技術(shù)的性能仍然不夠。
人類在解決一個(gè)復(fù)雜問(wèn)題時(shí),會(huì)將其進(jìn)行分解,并嘗試一步步地解決,「思維鏈」(CoT)提示技術(shù)就是將這種直覺(jué)擴(kuò)展到LLMs中,在一系列需要推理的NLP任務(wù)中都得到了性能改進(jìn)。
這篇論文主要研究「用于解決數(shù)學(xué)推理任務(wù)」的Zero-shot-CoT方法,之前的工作已經(jīng)在MultiArith數(shù)據(jù)集上得到了顯著的準(zhǔn)確率改進(jìn),從17.7% 提升到了 78.7%,但仍然存在兩個(gè)關(guān)鍵的不足之處:
1、雖然模型所遵循的思維鏈改進(jìn)了結(jié)果,但卻沒(méi)有檢查思維鏈提示所遵循的每個(gè)步驟的有效性;
2、沒(méi)有對(duì)LLM預(yù)測(cè)結(jié)果提供置信度(confidence)。
MathPrompter
為了在一定程度上解決這些差距,研究人員從「人類解決數(shù)學(xué)題的方式」中得到啟發(fā),將復(fù)雜問(wèn)題分解為更簡(jiǎn)單的多步驟程序,并利用多種方式在每一個(gè)步驟中對(duì)方法進(jìn)行驗(yàn)證。
由于LLM是生成式模型,要確保生成的答案是準(zhǔn)確的,特別是對(duì)于數(shù)學(xué)推理任務(wù),就變得非常棘手。
研究人員觀察學(xué)生解決算術(shù)問(wèn)題的過(guò)程,總結(jié)出了學(xué)生為驗(yàn)證其解決方案而采取的幾個(gè)步驟:
遵循已知結(jié)果(Compliance with known results),通過(guò)將解決方案與已知結(jié)果進(jìn)行比較,可以評(píng)估其準(zhǔn)確性并進(jìn)行必要的調(diào)整;當(dāng)問(wèn)題是一個(gè)具有成熟解決方案的標(biāo)準(zhǔn)問(wèn)題時(shí),這一點(diǎn)尤其有用。
多重驗(yàn)證 Multi-verification,通過(guò)從多個(gè)角度切入問(wèn)題并比較結(jié)果,有助于確認(rèn)解決方案的有效性,確保其既合理又準(zhǔn)確。
交叉檢查 Cross-checking,解決問(wèn)題的過(guò)程與最終的答案同樣必要;驗(yàn)證過(guò)程中的中間步驟的正確性可以清楚地了解解決方案背后的思維過(guò)程。
計(jì)算驗(yàn)證 Compute verification,利用計(jì)算器或電腦進(jìn)行算術(shù)計(jì)算可以幫助驗(yàn)證最終答案的準(zhǔn)確性
具體來(lái)說(shuō),給定一個(gè)問(wèn)題Q,
在一家餐廳,每份成人餐的價(jià)格是5美元,兒童免費(fèi)用餐。如果有15個(gè)人進(jìn)來(lái),其中8個(gè)是孩子,那么這群人要花多少錢(qián)吃飯?
1. 生成代數(shù)模板 Generating Algebraic template
首先將問(wèn)題轉(zhuǎn)化為代數(shù)形式,通過(guò)使用鍵值映射將數(shù)字項(xiàng)替換為變量,然后得到修改后的問(wèn)題Qt
2. 數(shù)學(xué)提示 Math-prompts
基于上述多重驗(yàn)證和交叉檢查的思維過(guò)程所提供的直覺(jué)上,使用兩種不同的方法生成Qt的分析解決方案,即代數(shù)方式和Pythonic方式,給LLM提供以下提示,為Qt生成額外的上下文。
提示可以是「推導(dǎo)出一個(gè)代數(shù)表達(dá)式」或「編寫(xiě)一個(gè)Python函數(shù)」
LLM模型在響應(yīng)提示后可以輸出如下表達(dá)式。
上述生成的分析方案為用戶提供了關(guān)于LLM的「中間思維過(guò)程」的提示,加入額外的提示可以提高結(jié)果的準(zhǔn)確性和一致性,反過(guò)來(lái)會(huì)提高M(jìn)athPrompter生成更精確和有效的解決方案的能力。
3. 計(jì)算驗(yàn)證 Compute verification
使用Qt中輸入變量的多個(gè)隨機(jī)鍵值映射來(lái)評(píng)估上一步生成的表達(dá)式,使用Python的eval()方法對(duì)這些表達(dá)式進(jìn)行評(píng)估。
然后比較輸出結(jié)果,看是否能在答案中找到一個(gè)共識(shí)(consensus),也可以提供更高的置信度,即答案是正確且可靠的。
一旦表達(dá)式在輸出上達(dá)成一致,就使用輸入Q中的變量值來(lái)計(jì)算最終的答案。
4. 統(tǒng)計(jì)學(xué)意義 Statistical significance
為了確保在各種表達(dá)式的輸出中達(dá)成共識(shí),在實(shí)驗(yàn)中將步驟2和3重復(fù)大約5次,并報(bào)告觀察到的出現(xiàn)最頻繁的答案值。
在沒(méi)有明確共識(shí)的情況下,重復(fù)步驟2、3、4。
實(shí)驗(yàn)結(jié)果
在MultiArith數(shù)據(jù)集上對(duì)MathPrompter進(jìn)行評(píng)估,其中的數(shù)學(xué)問(wèn)題專門(mén)用來(lái)測(cè)試機(jī)器學(xué)習(xí)模型進(jìn)行復(fù)雜算術(shù)運(yùn)算和推理的能力,要求應(yīng)用多種算術(shù)運(yùn)算和邏輯推理才能成功地解決。
在MultiArith數(shù)據(jù)集上的準(zhǔn)確率結(jié)果顯示,MathPrompter的表現(xiàn)優(yōu)于所有的Zero-shot和Zero-shot-CoT基線,將準(zhǔn)確率從78.7% 提升到 92.5%
可以看到,基于175B參數(shù)GPT3 DaVinci的MathPrompter模型的性能與540B參數(shù)模型以及SOTA的Few-shot-CoT方法相當(dāng)。
從上表可以看到,MathPrompter的設(shè)計(jì)可以彌補(bǔ)諸如「生成的答案有時(shí)會(huì)有一步之差」的問(wèn)題,可以通過(guò)多次運(yùn)行模型并報(bào)告共識(shí)結(jié)果來(lái)避免。
此外,推理步驟可能過(guò)于冗長(zhǎng)的問(wèn)題,可以由Pythonic或Algebraic方法可以解決這個(gè)問(wèn)題,通常需要較少的token
此外,推理步驟可能是正確的,但最終的計(jì)算結(jié)果卻不正確,MathPrompter通過(guò)使用Python的eval()方法函數(shù)來(lái)解決這個(gè)問(wèn)題。
在大部分情況下,MathPrompter都能生成正確的中間和最終答案,不過(guò)也有少數(shù)情況,如表中的最后一個(gè)問(wèn)題,代數(shù)和Pythonic的輸出都是一致的,但卻有錯(cuò)誤。