逐次提示分解復雜問題(EMNLP2022) 原創 精華
?摘要:回答需要做出潛在決策的復雜問題是一項具有挑戰性的任務,特別是在監督數據有限的情況下。最近的研究利用大型語言模型(LM)的能力,通過在單次推理過程中演示如何輸出中間推理步驟,以少量示例解決復雜問題。我們提出了“逐次提示”方法,通過迭代將復雜任務分解為簡單任務,逐步解決,直到得到最終答案。逐次提示將復雜問題分解的監督與簡單問題回答的監督解耦,使我們能夠(1)在每個推理步驟有多次機會查詢上下文示例,(2)獨立于問題回答來學習問題分解,包括使用合成數據,以及(3)在大型語言模型表現不佳的推理步驟中使用定制組件。通常情況下,中間監督是人工編寫的,這可能會導致高昂的成本。我們介紹了一種生成合成數據集的方法,可以用于引導模型分解和回答中間問題。我們的最佳模型(使用逐次提示)在DROP數據集的少量示例版本上與最先進的模型相比,絕對F1得分提高了約5%。
(注釋:這篇論文提出了一種叫做“逐次提示”(Successive Prompting)的方法,用來解決復雜的問題。想象一下,你在做一道難題,這道題需要你先解決一系列的小問題才能最終得到答案。逐次提示的方法就像是在解難題時,每一步都問自己一個簡單的問題,回答了這個簡單的問題后,再繼續問下一個,直到最終解決整個難題。
傳統的方法可能會試圖直接解決這個復雜問題,但這往往很難,而且可能會出錯。逐次提示的方法則是先把復雜問題分解成多個簡單的小問題,一個一個地解決,這樣更容易得到正確的答案。
舉個例子:
假設你正在看一場足球比賽,有人問你:“誰在上半場踢了最遠的射門?” 這其實是一個復雜的問題,因為你不僅需要知道所有的射門距離,還要找出其中最遠的那一個,并且確定是誰踢的。
用逐次提示的方法,你會這樣一步步來解決這個問題:
1. 第一步:找出所有射門的距離
你先問自己:“上半場有哪些射門?” 然后你發現,有三個射門分別是12碼、42碼和33碼。
2. 第二步:找出最遠的射門
接下來,你問自己:“這三個射門中哪個最遠?” 答案是42碼。
3. 第三步:確定是誰踢的最遠射門
然后,你再問:“是誰踢的42碼的射門?” 答案是Matt Bryant。
4. 最后一步:得出最終答案
你現在已經知道了所有必要的信息,所以你得出了最終答案:“在上半場踢了最遠射門的人是Matt Bryant。”
這個例子展示了逐次提示如何通過分解問題,將一個復雜問題一步步解決,直到得到正確的答案。)
1 引言
諸如HotpotQA (Yang et al., 2018) 和 DROP (Dua et al., 2019) 等組合閱讀理解數據集激發了一系列模型架構,這些架構旨在通過從最終答案中進行弱監督學習來回答復雜問題。最近的一個研究方向是利用大型語言模型(LM)的能力,通過在回答復雜問題之前生成潛在的推理步驟,僅需少量示例即可解決組合任務(Wei et al., 2022; Nye et al., 2021; Karpas et al., 2022)。給定一個復雜的問題,這種方法首先從一個(問題、推理、答案)三元組數據集中找到最近的訓練示例,然后將它們拼接起來以創建用于LM的輸入。然后,使用大型語言模型對該輸入進行提示,以生成所需的中間推理步驟,同時在一次運行中回答復雜問題。
盡管這種方法很有前景,但它放棄了該任務的許多現有方法的優勢(Khot et al., 2021; Karpas et al., 2022),因為它將問題分解的監督與執行中間步驟的監督耦合在一起。此外,其非模塊化特性使其無法在LM表現不佳的情況下使用替代的符號推理引擎。此外,模型僅接觸到基于復雜問題近似度選擇的一組上下文示例,而這些示例可能不包含針對所需中間步驟的最佳監督。
我們提出了“逐次提示”,通過這種方法,我們將復雜問題逐步分解為下一個簡單問題進行回答,然后重復該過程,直到回答完復雜問題(圖1)。這些步驟中的每一步都通過對LM的獨立查詢來完成。由于分解和回答步驟是分開執行的,我們可以將每個步驟的監督解耦,從而帶來兩個主要好處。首先,在進行上下文學習時,我們有多次機會選擇不同的上下文示例,這些示例可以針對所執行的特定分解或回答步驟量身定制,而不是僅基于復雜問題選擇一組示例。其次,在微調(無論是否使用上下文示例(Chen et al., 2022))時,我們可以獨立提供每個步驟的訓練示例,因此模型只需學習執行一個步驟。
圖1:逐次提示在DROP示例上的問題分解和問題回答階段的分解示例。模型在預測要詢問的簡單問題和回答簡單問題之間迭代。
(注釋:圖1展示了逐次提示(Successive Prompting)方法在復雜問題解答中的運作原理。通過這個圖,我們可以理解逐次提示是如何將一個復雜問題分解成一系列更簡單的問題,并逐步解決,直到獲得最終答案。以下是該圖片所表達原理的詳細講解:
圖1中的步驟解析:
1. 復雜問題的提出:
圖中展示的復雜問題是:“誰在上半場踢了最遠的射門?” 這類問題通常涉及多個子問題,并且直接回答可能很困難。
2. 問題分解(Question Decomposition, QD):
使用逐次提示方法,模型首先會將這個復雜問題分解為更簡單的子問題。例如,第一個子問題是:“上半場有哪些射門?” 這是一個較簡單的問題,可以直接從給定的上下文中找到答案。
3. 回答簡單問題(Question Answering, QA):
對于每個分解后的簡單問題,模型會提供一個回答。例如,“上半場的射門分別是12碼、42碼和33碼。” 這個回答成為下一步操作的基礎。
4. 進一步分解:
之后,模型會繼續根據之前的答案分解出下一個簡單問題,例如:“在12碼、42碼和33碼中,哪一個是最大的?” 這個問題又更進一步,將原始復雜問題簡化為可以直接處理的內容。
5. 回答最終問題:
模型最終通過回答“誰踢了42碼的射門?”得出了答案——“Matt Bryant”。這時模型判斷已經沒有更多的問題需要提出,因此輸出最終答案。
圖1中的關鍵原理:
- 逐步分解與解決:
逐次提示的核心思想是通過迭代分解復雜問題,將其逐步轉化為多個可以獨立解決的簡單問題。每一步的分解和回答都是獨立執行的,這使得模型能夠在每個步驟中利用不同的上下文信息,從而提高復雜問題的解答準確性。
- 獨立的監督與解耦:
通過將問題分解和問題回答的監督解耦,模型能夠分別學習每個步驟的最佳解決方式。這意味著即使某些復雜問題的子問題非常相似,模型也能夠根據具體的任務在每一步選擇最相關的上下文示例進行學習和回答。
- 模塊化與可插拔組件:
由于分解和回答步驟是分開的,這種方法允許在需要時使用專門設計的子模塊。例如,對于某些簡單問題,符號推理引擎可能比語言模型更有效,這樣的組件可以在逐次提示的框架下被利用。)
這種解耦還使我們能夠謹慎地將合成數據注入到學習過程中,例如幫助模型回答它以前無法回答的特定類型的簡單問題,或幫助模型分解它以前不知道如何分解的新推理組合。由于這些步驟是獨立的,我們可以隔離模型的失敗并開發合成方法來彌補這些不足。它還允許我們在適當的時候,用其他專門設計的組件替換LM,以執行符號推理(Khot et al., 2021; Segal et al., 2020; Jin et al., 2021)。
我們使用DROP數據集的少量示例變體(Dua et al., 2019)演示了逐次提示的效用,選擇了300個示例進行訓練(無論是微調還是上下文示例選擇)。這300個示例手動標注了簡單的問答對作為分解。我們發現,在這種少量示例環境下,所有模型的表現都相當低,因此我們開發了一個合成數據生成器,它從半結構化的維基百科表格中生成復雜問題及其分解(Yoran et al., 2021)。這些合成數據不僅提供了復雜問題的監督,還提供了中間步驟的監督。我們將這些數據與來自DROP的300個(復雜)訓練示例及其分解進行整合。在這種少量示例環境中,我們表現最好的逐次提示模型與同等監督下的最先進模型相比,F1分數提高了約5%。
2 分解復雜問題
組合性閱讀理解的目標是通過潛在的順序決策 z = z_1, z_2, ..., z_s 來回答在上下文段落 p 中給定的復雜問題 q(合稱為 x),以得出最終答案 y。許多模型已經被提出用來實現這一目標,并且這些模型在監督和可解釋性方面有不同的程度。在像Chain-of-Thought (CoT, Wei et al., 2022) 這樣的提示方法中,潛在步驟是被監督的、可解釋的句子;在其他模型中,這些潛在步驟可能是一個程序(Gupta et al., 2020; Chen et al., 2020),甚至只是模型中的(無監督的)隱藏狀態(Segal et al., 2020; Andor et al., 2019)。
我們專注于那些采用上下文示例并生成離散的、語言編碼的 z 的模型,CoT是其中的主要代表。我們將CoT的一般形式表示為,給定輸入 x、語言模型編碼器 L 和從查詢索引 I 中獲得的 N 個上下文示例——每個示例都包含一個包含復雜問題的段落 x_n、潛在步驟 z_n 和最終答案 y_n 這一三元組:
2.1 逐次提示
在逐次提示中,我們將每個潛在步驟表示為一對簡單的問題和答案 z_k = (q_k, a_k)(見圖1中的示例問答對),這與CoT中將每個潛在步驟表示為陳述句不同。此外,CoT只查詢索引 I 來獲取上下文示例,并僅提示語言模型 L 一次來生成輸出。然而,在逐次提示中,我們將 z 分解為多個問題和回答步驟,這使得我們有許多機會提示 L,并可能使用不同的、更適合每個步驟的上下文示例來生成簡單問題。這也使我們能夠在給定中間狀態 z_k 的情況下重新編碼上下文,這在需要長鏈引用的某些問題中非常有用(例如,圖3中的排序計數示例)。我們可以將逐次提示的一般形式寫為:
在這個一般形式中有三種模型輸出:中間問題 q_k、中間答案 a_k 和最終答案 y。我們將第一種輸出類型稱為問題分解(QD),第二種稱為問題回答(QA)。我們將最終答案預測視為問題分解的一種特殊情況,其中模型決定不再需要進一步分解,并輸出最終答案,因此我們在問題分解和問題回答之間迭代交替,直到模型終止。
2.2 訓練范式
我們迄今為止描述的逐次提示是在僅提供上下文示例的情況下進行的,因此不進行模型訓練。然而,逐次提示也可以與模型微調相結合,在這種情況下,每個中間輸出都被視為 L 的訓練示例。在本節中,我們首先描述了如何在每個步驟選擇上下文示例,然后詳細說明如何使用這些示例進行模型微調。
上下文學習
在上下文學習中,一小部分訓練示例直接作為提示提供給大型語言模型,然后再進行測試輸入。這些示例是根據它們與測試輸入的相似性從索引中選擇的。對于逐次提示,我們創建了兩個索引:I_D 用于查找與問題分解(QD)相關的示例,I_A 用于查找與問題回答(QA)相關的示例。索引 I_D 包含在每一步 k 的部分分解鏈,用于展示如何為每個復雜問題生成下一個問題。索引 I_A 包含訓練數據中所有復雜問題的所有簡單問答對。
在QD階段,索引 I_D 會根據復雜的測試問題 q 和當前的步驟編號 k 進行查詢,以選擇與生成下一步問題相關的演示。在QA階段,索引 I_A 會根據在QD階段生成的簡單問題 q_k 進行查詢,以選擇相關的簡單問答對。圖2展示了在每個步驟如何逐步執行上下文學習,直到QD輸出特殊短語“沒有更多問題需要問”,并給出最終答案。
逐次提示允許QA階段訪問從復雜問題中派生的簡單問題,這些問題本來不會被Chain-of-Thought提示檢索到,因為從表面上看它們與留出的復雜問題不相似,盡管它們共享相似的子問題。
圖2:使用上下文學習的逐次提示示例。用于監督和回答復雜問題的選擇示例,以及預置上下文段落(為簡化說明省略)由模型編碼,以在問題分解(QD)和問題回答(QA)階段生成問題和答案。在微調期間,僅以獨立同分布(i.i.d.)的方式使用訓練監督來學習QD和QA模型。
(注釋:圖2展示了逐次提示(Successive Prompting)方法如何通過上下文學習來逐步分解和回答復雜問題的具體操作過程。這張圖通過具體示例,說明了在上下文學習和模型微調中的逐次提示是如何工作的。以下是圖2所表達原理的詳細講解:
圖2中的步驟解析:
1. 復雜問題的提出:
逐次提示方法首先接收一個復雜問題,并且還會預置相關的上下文段落(在圖示中為了簡化說明,這些段落被省略)。復雜問題可能涉及多個子任務或步驟,無法通過一次查詢直接回答。
2. 問題分解階段(Question Decomposition, QD):
在這個階段,模型會根據當前的復雜問題選擇相關的上下文示例,并生成第一個簡單問題。例如,假設復雜問題是“巴斯的第二次射門比第一次長多少碼?”模型可能首先提出一個簡單問題:“巴斯的第二次射門是多少碼?”這是整個解答過程中的第一個子問題。
3. 回答簡單問題(Question Answering, QA):
一旦模型生成了簡單問題,它會進一步利用相關的上下文信息,生成該簡單問題的答案。在這個例子中,答案可能是“39碼”。這個回答會成為下一步操作的基礎。
4. 迭代分解與解答:
在生成并回答了第一個簡單問題后,模型會繼續進行下一輪的分解和解答。例如,在確定了第二次射門是39碼之后,模型會生成下一個問題:“巴斯的第一次射門是多少碼?”并回答它。這個過程不斷迭代,直到所有簡單問題被解答,最終復雜問題被完全解決。
5. 最終答案的生成:
當模型認為沒有更多問題需要提出時,它會結合之前的所有答案,生成最終答案。例如,當模型得出第一次射門是28碼時,它會計算出差值(39碼-28碼=11碼),并將其作為最終答案。
圖2中的關鍵原理:
- 逐步迭代解答:
逐次提示的核心思想是通過迭代步驟逐步解答問題。在每一個步驟中,模型僅處理一個簡單的問題,而不是試圖直接解決整個復雜問題。這種方法允許模型在每一步利用新的上下文信息,從而提高解答的準確性。
- 上下文學習中的示例選擇:
在問題分解和問題回答的每個階段,模型都會查詢一個索引來選擇最相關的上下文示例。這些示例并不是一開始就固定的,而是根據每個簡單問題動態選擇的。這種靈活性使得模型可以更好地適應具體問題的分解和解答需求。
- 獨立同分布的監督(i.i.d.):
在模型微調期間,問題分解(QD)和問題回答(QA)的學習是分開進行的,并且是以獨立同分布的方式進行監督的。這意味著模型在每個步驟都僅關注當前步驟的任務,而不需要考慮全局的復雜性。
總結:
圖2的原理展示了逐次提示方法在上下文學習和模型微調中的操作流程。通過將復雜問題分解為多個簡單問題,并在每個階段動態選擇相關示例進行學習,模型能夠更準確地逐步解答復雜問題。)
模型微調
在模型微調中,我們使用基于T5(Raffel et al., 2020)的序列到序列模型。這些模型通常使用控制代碼在多任務設置中訓練,以在QD和QA任務之間切換,并共享模型參數。我們采用并擴展了文本模塊化網絡(TMNs,Khot et al., 2021)中引入的控制代碼,用于訓練我們的合成數據。TMNs在其可處理的操作類型方面有所限制,因為它們無法處理超出一階推理的問題。我們使用合成生成的數據,允許我們處理DROP中更高階推理問題。因為我們正在微調模型,所以我們可以使用特殊的標記來表示問題分解和其他分隔符,而不是圖2中顯示的自然語言提示,盡管內容相同。每個步驟使用的特定標記列在附錄A中。
專用模塊
逐次提示還允許我們使用專門的子模塊來解決不同的QA任務,因為我們不再以端到端的方式執行QD和QA任務。像計數、差異、排序等算術運算對語言模型來說可能很有挑戰性。因此,我們遵循Khot等人(2021年)的做法,構建了一個簡單的數學子模塊用于QA,它解析生成的簡單問題的符號運算類型及其參數,然后以確定的方式執行它們。如果生成的簡單問題無法解析為數學運算,我們會應用語言模型來解決它。
3 合成數據集
任何提示大型語言模型(LM)生成中間推理步驟來回答復雜問題的方法都需要一定量的這些推理步驟的監督數據。這類標注可能非常昂貴,并且通常需要專家知識。之前的工作通常依賴于少量手工編寫的示例分解。我們發現,對于像DROP這樣復雜多樣的數據集,這樣的小規模集合會導致模型表現非常差,即使對于大型模型也是如此。
為了緩解這些數據問題,我們提出了一種方法,使用易于解析的半結構化數據來合成生成復雜問題及其分解。我們展示了如何使用這些領域外的合成數據來啟動模型的學習過程,以便它在使用有限的領域內監督數據進行微調時表現得更好。
生成過程:受到Yoran等人(2021年)的啟發,我們使用了來自英文維基百科的半結構化數據表格,這些數據表格非常豐富。我們采用精心設計的模板,將表格中的行轉換為段落,并使用單列標題來創建一階簡單問題,使用多列組合來生成更高階的復雜問題。我們為10種簡單操作生成了數據:計數(COUNT)、前k項(TOP(k))、后k項(BOTTOM(k))、過濾(FILTER)、求和(SUM)、比較(COMPARISON)、差異(DIFFERENCE)、否定(NEGATION)、收集(GATHER)和交集(INTERSECTION)。
我們在可能的情況下生成了一階操作的更高階組合。圖3展示了使用表1作為上下文的幾個簡單操作的更高階組合示例。完整的所有分解列表見附錄A。根據模型的不同,我們使用算術操作的符號或自然語言版本。如果我們使用的是LM來執行算術操作,我們會輸出自然語言;如果我們使用的是單獨的符號推理引擎,我們會輸出符號操作。我們總共生成了大約141K個復雜問題,這些問題生成了525K個用于問題分解(QD)的示例和257K個用于問題回答(QA)的示例。詳見附錄A的更多數據集統計信息。
4 實驗與結果
DROP數據集包含多種推理組合,這些組合的分布并不均勻。為了公平地表示DROP示例,我們首先使用在QQP數據集(Reimers和Gurevych, 2019)上訓練的句子嵌入方法對這些示例進行嵌入。然后,我們使用余弦相似性為每個訓練示例找到最接近的50個鄰居問題。每個訓練問題與其鄰居之間的連接圖被用來通過頂點覆蓋算法獲得300個問題,這些問題覆蓋了大多數訓練數據。我們手動標注了這300個示例,使用與我們的合成數據相同的格式分解成問答對(見圖3)。對于合成示例,由于我們已經知道推理類型,因此我們從每種推理類型中均勻抽樣示例進行演示。
4.1 上下文學習
設置
我們使用帶有基于QQP的句子嵌入(Reimers和Gurevych, 2019)的Faiss索引來索引所有問題。我們使用GPT-J(6B)模型,這是我們可以用包含6個上下文示例的提示進行使用的最大公開可用模型。
結果
在表2中,我們比較了不帶任何提示的語言模型(標準方法)、帶有鏈式思維提示(CoT)和逐次提示的性能。我們觀察到,當只有合成數據可用時,逐次提示比CoT提高了3.5%的F1分數,而當有合成數據和DROP的300個注釋時,逐次提示的F1分數提高了4.3%。在開發集上的最佳逐次提示版本(合成+DROP)在測試集上的F1分數為30.6%。我們還進行了一個消融實驗,將符號計算器替換為語言模型,結果發現性能下降了1.5%的F1分數。這進一步表明,模塊化方法優于試圖解決所有任務的單一模型。
4.2 模型微調
設置
我們使用基于T5的序列到序列模型,這是UnifiedQA(Khashabi et al., 2020)的大型版本,并以多任務方式訓練了共享的問題分解(QD)和回答模型(QA)。我們使用附錄A中描述的格式來提示UnifiedQA。對于符號問題,我們使用一個簡單的計算器,它解析生成問題中的運算符和參數,并對檢測到的參數執行離散運算。
為了防止模型學習錯誤的步驟,我們使用對比估計(Smith和Eisner, 2005)。特別是,我們首先訓練模型兩個周期,通過交叉熵損失生成輸出序列(簡單問題或答案)。然后我們繼續訓練,添加一個輔助損失項,這一損失項增加生成正確子答案的中間子問題的可能性,而減少生成錯誤子答案的可能性(Dua et al., 2021)。我們在每一步最多采樣3個負樣本。我們使用HuggingFace的transformers庫來訓練我們的模型,學習率為5e-5,最大輸入長度為768。
由于維基百科中的上下文表格類型不同,合成數據集在不同推理類型中的分布不均勻。為了使不同推理類型的問題有一個平衡的表示,我們采用動態采樣策略(Gottumukkala等,2020),即在每個周期開始時,從所有推理類型中選擇80,000個實例,按其在上一周期中的表現下降比例分配實例數量。對于第一個周期,我們按照每種推理類型的原始大小進行采樣。在推理期間,我們使用大小為5的束搜索來生成分解,在QD和QA階段之間切換,直到QD達到分解結束標記“EOQ”或達到我們設置的最大步驟數(10步)。
基線模型
我們與多種符號和非符號模型進行了比較。作為非符號基線模型,我們使用了UnifiedQA(Khashabi等,2020),該模型在大量現有問答數據集上進行了預訓練,還包括了在合成生成的組合QA對上預訓練的PReasM模型(Yoran等,2021)。我們還包括了一個帶有符號組件的基線模型,TASE(Segal等,2020)。該模型(以及類似的其他模型,如Jin等,2021;Andor等,2019)能夠執行連續和離散運算的組合,這是DROP所必需的。TASE無需以特定語法表達分解,并且可以處理自然語言。我們選擇了這個模型,因為它在完整的DROP數據集上接近最先進的性能,并且有公開的代碼。
結果
在表3中,我們使用DROP開發集比較了在三種設置下不同符號和非符號模型的表現:(1)不使用DROP的任何訓練數據(0-shot),(2)僅使用300個DROP示例中的問答監督,和(3)同時使用300個DROP示例的問答監督和分解。在這些設置中的每一個中,我們可以選擇是否使用我們生成的合成數據進行訓練。
我們觀察到,領域外合成數據普遍提高了模型性能,而這種提高在TASE模型中最為顯著,接近20%的絕對提升。在沒有合成數據的情況下,PReasM是表現最好的基線模型,但在有合成數據時,TASE超過了PReasM。此外,毫無疑問,從0-shot到復雜QA對,再到分解的監督量增加,模型表現也普遍提高。
最終,我們的方法,即結合符號推理引擎的微調逐次提示模型,取得了最佳表現,與具有類似監督的最先進模型相比(即TASE+合成數據加分解),F1分數提高了5.4。在我們最終的最佳模型(帶分解的逐次提示)的測試集中,我們觀察到F1分數為50.2,超過了具有類似監督的最先進模型(45.1 F1)5.1%。
總的來說,學會將復雜問題分解為簡單QA對的方法在處理新領域的復雜問題時適應性很好,即使在沒有領域內分解監督(帶分解的逐次提示:51.3 F1)或僅有少量復雜QA監督(沒有任何分解)的情況下也是如此。如果我們僅有有限的復雜QA監督(沒有任何分解),則不可解釋的符號模型表現最好(TASE + 合成數據沒有分解:44.1)。這有兩個原因。首先,這類模型可以捕獲領域特定的答案先驗,這可能導致不錯的留出集表現(Dua等,2020;Agrawal等,2018)。其次,根據上下文,有時將復雜問題分解為QA對并不容易。
4.3 上下文學習與微調的比較
為了理解逐次提示方法在上下文學習和微調之間的性能差距,我們對QD和QA模塊分別進行了上下文學習和微調的消融實驗。我們發現,在回答結果為列表的簡單問題時,上下文學習表現較差——這對于DROP數據集尤其重要,因為符號聚合通常應用于答案列表。當使用經過微調的QA模型時,我們看到與上下文QD模型相比,F1分數提高了約10%。此外,由于最終答案的表現依賴于QA模型的表現,因此除非QA模型能夠處理QD模型生成的分解,否則使用更好的QD模型(微調的)對整體表現的提升不大。
4.4 定性示例
為了評估分解后的問答對的正確性,我們手動分析了在開發集上使用上下文學習(僅DROP)和模型微調(少量樣本)生成的部分預測結果。我們通過隨機抽取50個正確的預測來確定不正確的分解結果在何種情況下仍能產生正確的答案。我們觀察到,QD階段的準確率為上下文學習88%,微調模型為96%。分解錯誤的主要原因是分解后的問題與原始問題相同。例如,“誰踢了最長的射門?”有時可以在不分解問題的情況下直接回答,如果段落中只提到了一次射門的話。
我們還抽取了50個錯誤的預測,以確定上下文學習和微調設置下預測錯誤的原因。我們發現,最終預測錯誤主要有三類原因:錯誤的QA模型預測、錯誤的下一個問題預測(QD)以及超出范圍的推理類型。對于上下文學習和微調模型,QA模型對簡單問題輸出錯誤答案的比例分別為40%和22%。第二類錯誤,由于分解不正確導致的,在上下文學習和微調設置下分別占30%。最后一類錯誤,由于合成生成的注釋未覆蓋的組合問題,在上下文學習和微調設置下分別占28%和46%。
在圖4中,我們展示了一些正確和錯誤的預測,并指出了逐次提示方法的優點和缺點。逐次提示的主要優點是通過分解問題,我們能夠為QA模型提供更好的監督。因此,在回答“上半場雙方共踢了多少次射門?”時,它能夠正確識別出上半場的射門,而不是像CoT那樣返回整個比賽的射門次數。
逐次提示相對于微調模型(無論使用何種提示方式)的一個局限性是,示例的選擇僅基于問題本身,而忽略了上下文。例如,DROP中有“百分比上有多少人不是德國人?”這樣的問題,我們首先需要回答“百分比上有多少人是德國人?”,然后進行取反操作(即從100中減去)。單詞“不是”會影響示例查找,選擇涉及否定的分解,即使問題本身需要的是不同的操作。
逐次提示的另一個局限性是,有時難以分解問題,尤其是當問題涉及從段落中進行隱含推理時。例如,對于“韓國移民首先從哪一個港口出發,是仁川港還是韋拉克魯斯港?”來說,從句子“之后他們乘火車前往韋拉克魯斯港”中顯式定義比較風格的分解是困難的。
5 相關工作
提示方法
提示作為測試大型語言模型(LM)推理能力的一種方法被引入(Brown et al., 2020)。在隨后的工作中(Schick, 2022;Chowdhery等, 2022;Marasovi?等, 2021),提示技術被用作監督模型決策的一種機制,通過提供少量示例作為條件上下文來引導其對未見過的樣本進行預測。諸如鏈式思維推理(Chain-of-Thought reasoning, Wei等, 2022;Zelikman等, 2022)等工作,尤其專注于組合性問題,在這些工作中,它們提供了推理鏈作為演示。在同期的工作中,最少到最多提示(Least-to-Most prompting, Zhou等, 2022)與我們的觀點相似,即將問題分解為子問題。然而,在逐次提示中,問題分解和回答階段是交替進行的,而不是像“最少到最多”那樣先將問題分解成子問題,然后按順序執行。在我們的方法中,下一個問題的預測可以訪問之前已回答的子問題,這在需要長鏈引用的問題中非常有用。其他同時期的工作(Press等, 2022;Khot等, 2022)使用了非常大的語言模型(其規模是我們使用的模型的兩倍多),并展示了更好的少樣本泛化能力。像Perez等人(2021年)的工作展示了擁有合適的上下文示例對下游任務表現的重要性,進而促使了學習檢索相關上下文示例的工作(Rubin等, 2021)。
非符號方法
大多數非符號方法是基于大量問答數據訓練的序列到序列模型(Khashabi等, 2020;Yoran等, 2021)。
符號方法
神經模塊網絡等方法將復雜問題解析為預先設定的語法,并學習神經組件來處理符號數學運算(Gupta等, 2020;Chen等, 2020;Nye等, 2021),這些組件會被遞歸執行。在DROP數據集上,最先進的模型使用了BERT-based上下文模型與一個計算器相結合,這個計算器執行離散運算(Andor等, 2019;Segal等, 2020;Hu等, 2019)。類似于文本模塊化網絡(TMNs, Khot等, 2021)和MRKL(Karpas等, 2022)的工作與我們的方法最為接近。然而,它們在能夠回答的簡單問題類型(僅限單跨度)和能夠執行的推理復雜度(僅限一階)方面有所限制。此外,TMNs使用一個分類器來對生成的鏈模塊進行評分并過濾掉不正確的問題分解,而我們使用對比估計來學習更好的問題分解器,因此不需要鏈評分器。
6 結論
我們提出了一種逐次分解復雜問題為簡單問答對的方法,這種方法允許模塊化的QD和QA系統可以獨立進行訓練和查詢。在進行上下文學習時,我們展示了逐次提示比鏈式思維提示提高了4.6%的F1分數。當僅用一個能夠處理列表類型問題的微調QA模塊替換上下文QA模塊時,我們進一步將整體表現提高了9.5%的F1分數。我們認為,將任務分解并分配給最合適的模型,無論是大型語言模型還是量身定制的組件,都比試圖讓一個大型語言模型獨立解決整個任務更為有效。逐次提示展示了這種分解和分配任務的一種實現方式。
局限性
我們提出了一種通過迭代查找并填充信息需求來分解復雜問題為可解釋的簡單問答對的方法。這種執行復雜任務的概念非常通用,但我們僅展示了在一個特定環境下的一個具體版本的適用性。在更廣泛地應用逐次提示時可能會面臨許多挑戰。最大的挑戰是,這種方法至少需要一些分解數據,而這些數據可能難以甚至不可能獲得。有些復雜問題并不容易被分解,而某些領域可能很難為其編寫合成數據生成器。我們能夠生成覆蓋DROP大多數推理類型的合成數據,但其他類型的復雜問題可能不在我們的生成器覆蓋范圍內(例如,涉及常識或因果推理的問題)。
選擇分解的粒度也是一個重要的難點。如果一個大型預訓練模型可以直接回答“巴斯的第二次射門是多少碼?”這樣的復雜問題,我們應當讓模型直接回答,而不是試圖進一步分解它。因此,分解的合適粒度取決于基礎模型的能力,而這些能力隨著更新和更大的預訓練模型的推出而迅速變化。有可能未來的模型版本不再需要分解來回答我們合成數據生成器覆蓋的復雜問題,這將使我們的生成器過時。然而,預訓練模型在不久的將來可能仍無法處理所有復雜場景,因此逐次提示和生成合成數據以彌補推理差距的想法仍應具有適用性,即使我們的具體應用可能變得過時。
此外,這種方法也增加了回答復雜問題的計算要求,因為它不再只對一個大型語言模型發出一次查詢,而是多次查詢才能回答一個問題。
?
本文轉載自公眾號AIRoobt ,作者:AIRoobt
