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