摘要
大型語言模型(LLMs)能夠通過生成中間推理步驟來執行復雜的推理任務。為提示演示提供這些步驟的過程被稱為思維鏈(CoT)提示。CoT提示有兩種主要范式。一種使用簡單的提示語,如“讓我們一步一步思考”,在回答問題之前促進逐步思考。另一種則逐個使用一些手動示范,每個示范包含一個問題和一個推理鏈,最終得出答案。第二種范式的優越性能依賴于逐個手工制作任務特定的示范。我們展示了通過利用帶有“讓我們一步一步思考”提示的LLMs生成推理鏈來逐個構建示范,這樣可以消除手動制作的工作。即,讓我們不僅僅是一步一步思考,還要逐個思考。然而,這些生成的推理鏈往往會出現錯誤。為了減輕這些錯誤的影響,我們發現多樣性對于自動構建示范至關重要。我們提出了一種自動化CoT提示方法:AutoCoT。它通過多樣化的問題采樣來生成推理鏈,從而構建示范。在十個公共基準推理任務中,使用GPT-3,Auto-CoT始終與需要手動設計示范的CoT范式表現相當,甚至超越了它。代碼可以在 https://github.com/amazon-research/auto-cot
獲取。
1 引言
大型語言模型(LLMs)[Brown et al., 2020, Thoppilan et al., 2022, Rae et al., 2021, Chowdhery et al., 2022]通過將多步驟問題分解為中間步驟,再給出答案,已在復雜推理任務中取得了令人矚目的表現。這一推理過程是通過一種非常新的技術——思維鏈(CoT)提示[Wei et al., 2022a]激發的。
CoT提示可以分為兩種主要范式。一種是在測試問題后添加一個單一的提示,如“讓我們一步一步思考”,以促進LLMs中的推理鏈[Kojima et al., 2022]。由于這一提示范式與任務無關,且不需要輸入輸出示范,因此被稱為zero-shot CoT(圖1左)。使用零-shot CoT,LLMs已經顯示出不錯的 zero-shot推理能力。另一種范式是少量示范的提示,通過手動逐個展示推理鏈[Wei et al., 2022a]。每個示范包含一個問題和一個推理鏈。推理鏈由一系列中間推理步驟和期望的答案組成。由于所有示范都是手工設計的,這一范式被稱為手動CoT(圖1右)。
在實際應用中,手動CoT的表現比零-shot CoT更強[Wei et al., 2022a, Kojima et al., 2022]。然而,這一優越表現依賴于手工制作有效示范的工作。具體而言,手工設計需要大量的努力來構思問題及其推理鏈。此外,任務特定示范的設計工作量更大:不同的任務,如算術[Roy and Roth, 2015]和常識推理[Talmor et al., 2019],需要不同方式的示范。為了消除這種手工設計,我們提倡另一種Auto-CoT范式,通過自動化構建帶有問題和推理鏈的示范。具體而言,Auto-CoT利用帶有“讓我們一步一步思考”提示的LLMs來逐個生成推理鏈,從而逐步構建示范。也就是說,讓我們不僅僅是一步一步思考,還要逐個思考。
然而,我們發現這個挑戰不能通過簡單的解決方案有效應對。例如,對于一個數據集中的測試問題,檢索語義相似的問題并調用zero-shot CoT來生成推理鏈會失敗。盡管LLMs在零-shot推理上表現不錯,但它們并不完美:zero-shot CoT仍然可能在推理鏈中犯錯。
為了減輕zero-shot CoT推理鏈錯誤的影響,我們的分析表明,示范問題的多樣性是關鍵。基于這一見解,我們提出了一種Auto-CoT方法來自動構建示范。Auto-CoT包括兩個主要步驟。首先,將給定數據集中的問題劃分為若干個簇。其次,從每個簇中選擇一個代表性問題,并使用簡單啟發式方法,通過零-shot CoT生成其推理鏈。
我們在十個基準推理任務上評估了Auto-CoT,包括:(i)算術推理(MultiArith [Roy and Roth, 2015],GSM8K [Cobbe et al., 2021],AQUA-RAT [Ling et al., 2017],SVAMP [Patel et al., 2021]);(ii)常識推理(CSQA [Talmor et al., 2019],StrategyQA [Geva et al., 2021]);(iii)符號推理(最后字母拼接,硬幣翻轉)[Wei et al., 2022a]。實驗結果表明,使用GPT-3時,Auto-CoT始終與需要手動設計的Manual-CoT相當或更好。這表明,LLMs可以通過自動構建示范來執行CoT推理。
2 相關工作
本節回顧了兩條為本研究奠定基礎的研究線索:鏈式思維(CoT)提示用于多步推理和上下文學習用于引導LLMs從示范中學習。
2.1 鏈式思維提示
CoT提示是一種無梯度的技術,通過生成中間推理步驟來引導LLMs產生最終答案。Wei等人[2022a]正式研究了語言模型中的CoT提示技術。這項技術促使LLMs生成一系列連貫的中間推理步驟,最終得出問題的答案。研究表明,LLMs可以通過zero-shot提示(Zero-Shot-CoT)[Kojima等人,2022]或手動編寫的少量示范(Manual-CoT)[Wei等人,2022a]來進行CoT推理。
Zero-Shot-CoT。Kojima等人[2022]展示了LLMs作為zero-shot推理者的優秀能力,其生成的推理過程已經反映了CoT推理。這一發現啟發了我們利用自生成的推理過程來構建示范。LLMs生成推理過程在最近的研究中被證明是可行的[Zelikman等人,2022]。在他們的研究中,LLM被提示生成推理過程,選擇那些生成正確答案的推理過程。然而,這需要一個帶有標注答案的訓練數據集。與此不同,我們的研究考慮的是一個更具挑戰性的場景,即僅給出一組測試問題(沒有訓練數據集),這與Wei等人[2022a]和Kojima等人[2022]的CoT提示研究相一致。
Manual-CoT。Manual-CoT通過有效的手動示范激發CoT推理能力,取得了更強的性能。推理過程的示范是手動設計的。然而,設計問題及其推理過程的人工工作量是相當大的。近期的研究主要集中在手動編寫更復雜的示范,或利用類似集成的方法來解決這一限制。一種趨勢是問題分解。在最小到最多提示方法[Zhou等人,2022]中,復雜問題被分解為子問題,然后順序解決這些子問題。另一種趨勢是對測試問題的多個推理路徑進行投票。Wang等人[2022a]提出了一種自一致性解碼策略,通過對LLMs生成的多個輸出進行采樣,然后對最終答案進行多數投票。Wang等人[2022b]和Li等人[2022]通過在輸入空間中引入隨機性來產生更多樣化的輸出以進行投票。他們使用手動設計的示范作為種子集,并為這些示范生成額外的推理過程:從種子集中留下一個問題,使用其余示范生成該問題的推理過程,而LLM則完成這一過程。與上述依賴手動設計示范的研究不同,我們的工作旨在通過具有競爭力的性能消除手動設計。
2.2 上下文學習
CoT提示與上下文學習(ICL)[Radford等人,2019;Brown等人,2020]密切相關。ICL通過將一些提示示范作為輸入的一部分,促使LLMs執行目標任務。ICL不需要梯度更新,可以讓單個模型普適地執行多種任務。為提高ICL的性能,存在多種研究方向:(i)為測試實例檢索相關示范,當前流行的做法是動態檢索給定測試輸入的相關訓練示范[Rubin等人,2022;Su等人,2022];(ii)通過細粒度信息增強,如加入任務說明[Mishra等人,2022;Wei等人,2022b;Sanh等人,2022];(iii)操作LLMs輸出概率,而不是直接計算目標標簽的概率[Holtzman等人,2021;Zhao等人,2021;Min等人,2022a]。
盡管ICL取得了成功,研究表明[劉等人,2022a;陸等人,2022]ICL的效果可能因上下文示范的選擇而存在很大差異[劉等人,2022b]。具體來說,提示格式(例如措辭或示范的順序)可能導致性能波動[Webson和Pavlick,2022;Zhao等人,2021]。最近的研究[Min等人,2022b]甚至質疑了標準輸入輸出映射的必要性:使用不正確的標簽作為示范例子,性能只會略微下降。然而,現有的ICL分析主要基于標準的分類和多選數據集,這些數據集只有簡單的<input!output>映射。我們發現這些發現可能不適用于具有更復雜<input!rationale!output>映射的CoT提示場景。例如,在<input!rationale>映射或<rationale!output>映射中出現錯誤,會導致性能大幅下降(附錄A.1)。
3 自動化鏈式思維的挑戰
如前所述,ICL的性能依賴于手工設計的示范。根據Manual-CoT[Wei等人,2022a]的報告,使用不同注釋員編寫的示范會導致符號推理任務中最多28.2%的準確性差異,而改變示范的順序則在大多數任務中導致不到2%的變化。這表明,Auto-CoT的關鍵挑戰在于如何自動構造包含良好問題和推理鏈的示范。
回想一下,Manual-CoT手工設計了少量(例如8個)問題作為示范。由于基于相似性的檢索方法在提示LLMs時得到了廣泛應用[Rubin等人,2022;Su等人,2022],一個有前景的解決方案是使用相似性檢索來采樣示范問題。我們遵循CoT研究中更具挑戰性的假設[Wei等人,2022a;Kojima等人,2022],即僅提供一組測試問題(沒有訓練數據集)。參考Liu等人[2022a],我們使用Sentence-BERT[Reimers和Gurevych,2019]對問題進行編碼。對于測試數據集中的每個問題 q t e s t q ^ { \mathrm { t e s t } } qtest,我們從其余問題中采樣示范問題 q i d e m o ( i = 1 , … , k ) q _ { i } ^ { \mathrm { d e m o } } \, ( i = 1 , \ldots , k ) qidemo?(i=1,…,k)。
我們設計了一種Retrieval-Q-CoT方法,通過余弦相似度檢索出前k個(例如k = 8)相似問題。為了與這種基于相似性的方法進行比較,我們還測試了一種相對更具多樣性的方法:Random-Q-CoT,該方法為每個測試問題隨機采樣k個其他測試問題。
Retrieval-Q-CoT和Random-Q-CoT都調用Zero-Shot-CoT[Kojima等人,2022]來為每個采樣的示范問題 q i d e m o q _ { i } ^ { \mathrm { d e m o } } qidemo?生成推理鏈 c i d e m o c _ { i } ^ { \mathrm { d e m o } } cidemo?(推理過程和答案),因為LLMs是優秀的zero-shot推理者[Kojima等人,2022]。除非另有說明,我們使用175B參數的GPT-3[Brown等人,2020](text-davinci-002)作為LLM。總體而言,Retrieval-Q-CoT和Random-Q-CoT都將 q i d e m o , c i d e m o p a i r s ( i = 1 , … ; k ) q _ { i } ^ { \mathrm { d e m o } } , c _ { i } ^ { \mathrm { d e m o } } \, \mathsf { p a i r s } \, ( i = 1 , \ldots ; k ) qidemo?,cidemo?pairs(i=1,…;k)和 q t e s t q ^ { \mathrm { t e s t } } qtest的拼接作為輸入,預測 q t e s t q ^ { \mathrm { t e s t } } qtest的推理鏈,最終包含答案(如圖1右側所示)。
令我們感到意外的是,在算術數據集MultiArith [Roy 和 Roth,2015] 上,Retrieval-Q-CoT 的表現不如 Random-Q-CoT(見表1)。需要注意的是,檢索方法最初是在帶有標注標簽的任務中提出的 [Rubin 等人,2022;Su 等人,2022],然而,調用 Zero-Shot-CoT 并不能保證生成的推理鏈完全正確。因此,我們假設 Retrieval-Q-CoT 表現不佳的原因是由于 Zero-Shot-CoT 生成了錯誤的推理鏈。
為了驗證這一假設,我們在另外兩個數據集 GSM8K [Cobbe 等人,2021] 和 AQuA [Ling 等人,2017] 上對 Retrieval-Q-CoT 進行了實驗,這兩個數據集具有帶有標注推理鏈的訓練集。帶“√”的結果如表1所示。在使用標注推理鏈的設置下,Retrieval-Q-CoT 的表現甚至超過了 Manual-CoT。該結果表明,Retrieval-Q-CoT 在有人類標注時是有效的。
盡管人類標注很有價值,但這種手動工作是非常費力的。然而,通過 Zero-Shot-CoT 自動生成推理鏈的效果仍然不如 Manual-CoT,尤其是在沒有解決問題采樣策略挑戰的情況下。為了設計出更有效的 Auto-CoT,我們需要更深入地理解其所面臨的挑戰。
3.1 Retrieval-Q-CoT 因相似性誤導而失敗
由于 Retrieval-Q-CoT 與 Manual-CoT 一樣使用少量提示性示例,因此理應具備相當的表現。然而,在 Retrieval-Q-CoT 中,推理鏈(包括中間推理過程和最終答案)是通過 Zero-Shot-CoT 生成的:這可能導致錯誤,從而產生錯誤答案。我們將這類帶有錯誤答案的示例稱為錯誤示例(wrong demonstrations)。
直覺上,在從測試問題中檢索出相似問題后,由 Zero-Shot-CoT 生成的錯誤示例可能會誤導同一個大型語言模型(LLM)以類似的錯誤方式進行推理(例如復刻錯誤),從而導致測試問題也出錯。我們將這種現象稱為相似性誤導(misleading by similarity)。我們將進一步分析相似性誤導是否是 Retrieval-Q-CoT 表現不佳的原因之一。
首先,我們在 MultiArith 數據集的全部 600 個問題上調用 Zero-Shot-CoT。結果中,有 128 個問題(記作集合 Q)被錯誤回答(錯誤率:21.3% = 128/600)。正如前文所述,Retrieval-Q-CoT 和 Random-Q-CoT 是在 Zero-Shot-CoT 基礎上添加額外示例,因此理論上應該表現更優。在這 128 個 Zero-Shot-CoT 失敗的問題 Q 中,我們將 Retrieval-Q-CoT 或 Random-Q-CoT 依然失敗的子集稱為未解決問題(unresolved questions)。
我們通過將未解決問題的數量除以 128 來計算未解決率(unresolving rate)。未解決率越高,說明該方法越可能像 Zero-Shot-CoT 那樣犯錯。
如圖2所示,Retrieval-Q-CoT 的未解決率為 46.9%,遠高于 Random-Q-CoT 的 25.8%。這表明,當為測試問題采樣相似問題時,Retrieval-Q-CoT 更容易受到相似性誤導的負面影響。
為了進一步說明 Retrieval-Q-CoT 的未解決問題更容易“相似”,我們在表2中展示了一個案例分析。在左側部分,檢索出的示例問題與測試問題非常相似,均問及“他還需要多長時間來完成烹飪剩下的食物?”。Zero-Shot-CoT 所生成的推理鏈卻錯誤地將“the rest”理解為“總共需要的時間”。由于受到這些錯誤示例的影響,Retrieval-Q-CoT 也誤解了“the rest”的含義,因而失敗。
相反,Random-Q-CoT 并未從類似問題中引入錯誤推理,而是使用了更為多樣化(隨機)的示例,從而正確理解了“the rest”的含義,避免了相似錯誤。
3.2 錯誤頻繁集中在同一簇中
受到表 2 中觀察結果的啟發,我們使用 k-means 將全部 600 個測試問題劃分為 k=8k = 8 個簇,其中每個簇包含語義相似的問題1。結合第 3.1 節中通過 Zero-Shot-CoT 生成的推理鏈,我們接下來關心的是:是否某些簇中的問題更容易被 Zero-Shot-CoT 錯誤解答。因此,我們為每個簇計算其錯誤率,即:
錯誤率=Zero-Shot-CoT 產生錯誤答案的問題數該簇中的總問題數 錯誤率 = Zero-Shot-CoT?產生錯誤答案的問題數 該簇中的總問題數 \text{錯誤率} = \frac{\text{Zero-Shot-CoT 產生錯誤答案的問題數}}{\text{該簇中的總問題數}} 錯誤率=該簇中的總問題數Zero-Shot-CoT?產生錯誤答案的問題數?
如圖 3 所示,存在一個錯誤頻發的簇(Cluster 2),其 Zero-Shot-CoT 錯誤率高達 52.3%。這一現象可能具有普遍性,因為 Zero-Shot-CoT 在目標任務中可能缺乏解決某些常見問題的能力1。為便于描述,我們將錯誤率最高的簇稱為高錯誤簇(例如圖 3 中的 Cluster 2)。因此,以 zero-shot 方式生成的推理鏈存在不完善之處,這使得基于相似度的方法容易從高錯誤簇中檢索出多個相似問題。
對于高錯誤簇中的測試問題,Retrieval-Q-CoT 更容易構造出帶有多個相似錯誤的 demonstration,從而導致它重復 Zero-Shot-CoT 的錯誤。這一點也通過圖 2 中 Retrieval-Q-CoT 更高的未解決率再次得到了印證。
溫馨提示:
閱讀全文請訪問"AI深語解構" 大型語言模型中的自動化思維鏈提示