Automatic Chain of Thought Prompting in Large Language Models
原文代碼:https://github.com/amazon-research/auto-cot
標題翻譯:大規模語言模型中的自動思維鏈提示
1. 內容介紹
在提示詞中提供思考步驟被稱為思維鏈(CoT),這一過程與情境學習(In-Context Learning)密切相關。
思維鏈提示有兩大范式:
- 一種是利用“讓我們逐步思考”這樣的簡單提示,促進LLM逐步思考
- 另一種是使用一些人工演示的例子,每個演示都由一個問題和一個通向答案的推理鏈組成,這一種一般效果好一點
作者想用第一種方式自動的生成推理鏈的演示,省去人工操作,提出了AutoCoT,它通過對具有多樣性的問題進行采樣并生成推理鏈來構建示例
2. 研究目的
左邊是第一種簡單提示,右邊是人工添加示例的。右邊的效果更好,但人工編寫在示例的問題及其推理鏈的設計上都需要花費不少精力。
所以,為了摒棄這種人工設計,作者提出自動思維鏈(Auto - CoT)范式,讓LLM自動構建包含問題和推理鏈的示例(問題與推理鏈對)
在生成這個示例的過程中,作者又發現:
- 如果這個示例太簡單,那對CoT的學習是沒有什么幫助的,比如2+3=5這種;
- 單純依賴簡單的相似性檢索生成示例也有問題:要么原本的推理鏈可能本來就是錯的,導致錯誤出現傳遞;要不就是語義太相似學不到東西
=>為了緩解這種問題,Auto-CoT強調示例問題的多樣性(示例是否覆蓋廣泛的語義空間)
3. 前序研究
論文提出了兩種基于問題采樣的自動化CoT示例構建方法,用于探討如何有效生成高質量的 CoT 示例
- Retrieval-Q-CoT:基于語義相似性檢索問題作為示例
-
語義表示:使用Sentence-BERT將問題轉化為固定大小的語義向量表示,
-
相似性檢索:對于測試問題Qtest基于余弦相似度從數據集中檢索出k個與其語義最相似的問題
-
生成推理鏈:對每個檢索到的問題,利用Zero-Shot-CoT方法生成推理鏈
-
組合輸入:將這k對問題+推理鏈作為示例,與測試問題Qtest一起輸入給LLM,讓LLM完成推理
優點:檢索問題時能聚焦于與測試問題相關的問題,提高了示例的針對性
缺點:- 如果檢索到的問題用Zero-Shot-CoT生成的推理鏈存在錯誤,錯誤容易復制到測試問題上(相似性誤導);
- 示例過于相似時,可能無法涵蓋足夠廣泛的語義特征
- Random-Q-CoT:隨機采樣問題作為示例
- 隨機選擇問題:從數據集中隨機選k個問題
- 生成推理鏈:對每個問題,利用 Zero-Shot-CoT 方法生成推理鏈
- 組合輸入:將這些隨機問題和推理鏈與測試問題組合輸入給LLM
優點:隨機采樣的問題多樣性更高,能避免Retrieval-Q-CoT中由于語義相似性導致的錯誤傳播
缺點:隨機選擇的問題可能與測試問題無關,從而降低推理鏈的針對性
Retrieval-Q-CoT在算術上沒有Random-Q-CoT好,就是因為缺點1,Zero-Shot-CoT不保證是對的
然后就在另外兩個數據集上試了一下不用Zero-Shot-CoT生成推理鏈,而用有標注的訓練,發現Retrieval-Q-CoT就變強了
更細節的研究:
600個算術問題中,普通的使用Zero-Shot-CoT后答案出錯的有128個
然后對這128個用上面兩個方法,還出錯的占比
Retrieval-Q-CoT出錯率很高,就是因為推理鏈的相似性誤導
繼續拆分,把原始的600個問題計算語義,然后用K-Means搞了8個聚類,看看到底是哪個類別的問題錯誤率最高
類別2就是錯誤頻發集群,說明Zero-Shot-CoT可能缺乏解決目標任務中一些常見問題的能力
多樣性理論支持:假設一個錯誤推理鏈會對同語義類別的問題產生重大影響。如果示例來自多個類別(增加多樣性),即使某些類別的推理鏈有誤,也不會對所有測試問題產生一致性誤導
看上去好像和Auto-CoT沒關系,實際上是在說Auto-CoT設計中面臨的挑戰,Auto-CoT的最終目標是減少對人工的依賴
-
Retrieval-Q-CoT提供了一個警示:單純依賴相似性檢索生成示例可能會因錯誤推理鏈的累積而導致性能下降。因此,Auto-CoT不僅需要考慮相似性,還必須加入多樣性
-
Random-Q-CoT 提供了一個啟發: 多樣性可以有效緩解錯誤傳播的問題,但其完全隨機的方式可能導致示例與測試問題缺乏相關性
=>質量與多樣性的平衡,基于這些前序研究,終于可以設計Auto-CoT
4. Auto-CoT
4.1. 總覽
包含兩個主要階段:
- 問題聚類:將給定數據集的問題劃分為幾個聚類;
- 示例采樣:從每個聚類中選擇一個有代表性的問題,然后使用Zero - Shot - CoT生成其推理鏈
4.1.1. 問題聚類算法
每個問題用Sentence-BERT轉化為固定大小的語義向量
然后用K-Means生成k個聚類
在每個聚類里排序每個問題
4.1.2. 示例采樣構造算法
從每個聚類中選一個代表性的問題
靠聚類中心最近的那個問題會被優先考慮,然后用Zero-Shot-CoT生成推理鏈,當作備選的示例
選擇的準則是:問題不超過60tokens,推理鏈不超過5步
5. 實驗:
5.1. 實驗設置
- LLM:使用GPT-3,text-davinci-002 version with 175B parameters
- 用了10個數據集,三項任務:(1)算術推理;(2)常識推理;(3)符號推理
- 示例數量(聚類)k默認為8個,除了AQuA和Letter(4個)、CSQA(7個)以及StrategyQA(6個)這幾個數據集
5.2. 基線:
- Zero-shot:直接讓LLM生成答案,“the answer is…”
- Zero-shot-cot:“let’s think step by step”
- Few-shot:一些問題和答案對,但沒有中間的推理過程
- Manual-cot:人工的問題-推理鏈-答案
5.3. 結果
Auto-cot總是比人工的好(本質上還是想拋棄人工編寫)
5.4. 消融
然后研究了換一下LLM,還是能和人工編寫的不相上下
前面也說了,整個過程中答案全是由Zero-shot-cot生成的,所以可能有錯誤的示例。所以研究了一下,直接從同一聚類中隨機采樣問題來構建示例
發現Auto-CoT(使用不同聚類采樣)受錯誤示例的影響更小:即使存在50%的錯誤示例,其性能仍然沒有顯著下降
5.5. 考慮一個更復雜的流數據場景:
傳統CoT的假設是測試問題的完整數據集可以提前獲得,從中采樣問題生成示例用于推理。
然而,在流數據場景中:測試問題以小批次(batch)逐步到達(初始沒有足夠多的問題用于聚類或采樣),每次只能處理當前批次的問題,并且需要動態生成示例以適應后續批次的推理需求
這種拓展的叫Auto-CoT*,有Bootstrapping的特性
初始:空集合M0
- 第一批問題到達時,直接使用 Zero-Shot-CoT 生成推理鏈,存入M
- 對于每一新的批次使用Mb-1次(上一批存儲的問題及推理鏈)的生成當前批次的示例,
- 用示例推理解決當前批次的問題后,連帶這次生成的示例一起加入Mb
300個問題,分10批
第一批和zero-shot-cot一樣,但隨著問題批次的積累,生成的示例會越來越豐富,推理質量也隨之提高
展示了實用性
6. 總結
大型語言模型(LLMs)已通過思維鏈(CoT)提示展現出推理能力。Manual-CoT的卓越性能依賴于人工設計的演示示例。為消除此類人工設計,論文提出Auto-CoT來自動構建演示樣本。該方法通過多樣性問題采樣并生成推理鏈來構建演示集。在十個公開基準推理數據集上的實驗表明:基于GPT-3的Auto-CoT始終達到或超越需要人工設計演示的CoT范式的性能表現。