1 簡介?????????
有的工作嘗試引出中間推理步驟,通過將復雜問題顯示分解為多個子問題,從而以分而治之的方式來解決。考慮到組合泛化對于語言模型有一定的挑戰,這種遞歸方法的對于復雜任務特定有用。根據解決子問題的方式可以分為串行跟并行兩種,串行的方式每個子問題相互依賴,前面子問題的答案會加入到后續子問題的prompt中,生成后續子問題的答案,而并行的方式則各個子問題的答案生成是獨立的,最后再將多個子問題的答案融合到一起。
2 并行式?????????
DECOMPRC
在閱讀理解場景下,多跳閱讀理解要求從眾多段落中進行推理跟歸納。于是出現了新的方案DECOMPRC,將多跳閱讀理解問題分解成多個相對簡單的子問題(現有閱讀理解模型可以回復),從而提高閱讀理解準確性。
圖1:DECOMPRC示例
整個方案分為三個部分
a)將原始的多跳閱讀理解問題分解為多個單跳子問題。可以根據多個不同的推理類型得到多種分解方式,這里需要根據不同推理類型分別訓練多個用于問題分解的模型,對于每個分解模型,采用Point的方式,利用BERT對原問題進行預測,得到幾個關鍵位置,利用關鍵位置原文本進行劃分,再加上一些規則手段,就可以得到對應的子問題了。例如預測出一個中間位置,就可以將原問題分割成兩部分,第一部分作為第一個子問題,第二部分作為第二個子問題,考慮到第二部分可能都是陳述句,就將前面的詞轉換成which。這里將分解模型簡化為一個span prediction問題,只需要400個訓練數據就得到很不錯的效果了。
b)在第一步會產生多種問題分解方式,對于每一種分解方式,利用單跳閱讀理解模型回復每個子問題,然后根據不同分分解類型的特性得到最終的答案。
c)對于每一種分解方式,將原問題,分解類型,該分解方式下的問題跟對應答案一同作為模型輸入,預測哪種分解方式對應的結果最合理,將該分解方式下的答案作為多跳閱讀理解問題的答案。
整個流程可以簡單理解為,系統提供了幾種將多跳問題分解為子問題的方式,分別計算每個分解方式的合理性,再選擇其中最優的分解方式對應的答案作為原問題最終答案。
QA
在QA場景下,通過將復雜問題分解為相對簡單的子問題(QA模型可以回復),從而提高問答的效果。具體到多跳QA問題上,現將復雜問題分解為多個子問題,利用單跳QA模型生成全部子問題的答案并融合到一起作為復雜問題的答案。
圖2: QA場景下的recursive prompting方案示例?
整個系統分為三個部分
a)無監督問題分解,將原問題分解為多個相對簡單的子問題。這里需要訓練一個分解模型,用于將復雜問題分解成多個子問題。由于這個任務下的監督訓練數據構造成本高昂,于是提出了一種無監督的訓練數據構造方式,對于每一個復雜問題q,從語料集Q中檢索召回得到N個對應的簡單問題s作為q的子問題,N的取值可以依賴于具體任務或者具體問題。我們希望這些簡單問題在某些方面跟q足夠相似,同時這些簡單問題s之間有明顯差異。從而構造出復雜問題跟子問題序列之間的偽pair對(q, [s1,…sN]),用于訓練分解模型。
b)生成子問題回復,利用現有的QA模型,去生成各個子問題的回復。這里不對QA模型有太多限制,只要它能正確回復語料庫S中的簡單問題即可,所以盡量采用在S中效果優異的QA模型。
c)生成復雜問題回復,將復雜問題,各個子問題跟對應回復一同作為QA模型的輸入,生成復雜問題的回復。這里的QA模型可以采用跟第二步一樣的模型,只要將輸入做對應調整即可。
圖3: QA場景下的recursive prompting方案示例
圖4: 實驗結果對比
從實驗效果上可以明顯看出這些問題分解的方式能夠顯著提升模型效果。
串行式
SEQZERO
如何利用大規模語言模型將自然語言問題轉化為SQL語句?SEQZERO就是一種解法。由于SQL這種規范語言的復合結構,SQL語句很多情況下會顯得復雜且冗長,要讓語言模型學會生草本跟SQL語言需要大量訓練數據,于是出現了一種基于few-shot的方法SEQZERO。
一個SQL語句包括多個部分,例如From **,SELCT **, WHERE **,只要能從自然語言問題中提出這幾個部分對應的元素,然后通過規則可以轉化為對應的SQL語句。于是SEQZERO的做法就是先利用語言模型預測得到其中一個元素,將該元素加入到原問題中生成下個元素,重復此操作直到生成全部元素,然后通過規則將所有結果組合起來的就得到對應的SQL語句。在預測每個元素的過程中,為了得到更加強大的泛化能力,采用了few-shot跟zero-shot的集成策略。
圖5: SEQZERO示例
Least-to-most
雖然chain-of-thought prompting在很多自然語言推理任務有顯著效果,但是當問題比prompt里的示例更難時,它的表現會很糟糕。舉個例子,比如任務抽取文本每個單詞最后一個字母,prompt的示例輸入是3個單詞,輸入相對較短,但是問題的長度卻是10個單詞,這種情況下chain-of-thought prompting的策略就會失效。于是提出了Least-to-most,通過兩階段的prompting來解決這種問題,第一階段通過prompting將原問題分解為一系列子問題,第二階段則是通過prompting依次解決子問題,前面子問題的問題跟答案會加入到候選子問題的模型輸入中去,方便語言模型更好地回復候選子問題。由于這兩個階段任務有所區別,對應的prompt內容也不同。
圖6: Least-to-most示例
4 其他
Successive prompting
前面幾種方法都是一開始就將問題分解為多個子問題,然后在通過串行或者并行的方式回復所有子問題,而successive prompting則是每次分解出一個子問題,讓語言模型去回復該子問題,再將該子問題以及對應答案加入到模型輸入種,進而分解出下一個子問題,重復這個過程直到沒有新的子問題生成,那么最后一個子問題的答案就是原問題的答案。
圖7: successive prompting示例
5 總結???????????????
Recursive prompting這種思路其實蠻好理解的,目前大規模語言模型處理這些簡單任務效果是很不錯的,但是復雜問題就比較糟糕了,一方面構造這些復雜問題相關數據的工作很艱巨,另一方面直接讓語言模型在這些復雜問題數據上訓練效果也很一般(想想為什么有些數據集上sota指標也很低)。但是讓語言模型學會根據具體問題進行拆解,通過將復雜問題分解為相對簡單的子問題,采用分而治之的方式,再將子問題答案匯總,不就得到原問題的答案了嘛。這也跟我們人類的行為模式更加接近,對于復雜任務,我們會通過合理規劃將其劃分為具體多個子任務,然后再去一一解決這些子任務。想想中華民族偉大復興的道路,不也是通過一個又一個的五年計劃逐步向前推進的嘛。
審核編輯:劉清
-
SQL
+關注
關注
1文章
777瀏覽量
44427 -
語言模型
+關注
關注
0文章
550瀏覽量
10432 -
SQL語句
+關注
關注
0文章
19瀏覽量
7096
原文標題:增強語言模型之Recursive prompting
文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
名單公布!【書籍評測活動NO.30】大規模語言模型:從理論到實踐
【大語言模型:原理與工程實踐】揭開大語言模型的面紗
【大語言模型:原理與工程實踐】大語言模型的基礎技術
自然語言處理怎么最快入門?
自然語言處理怎么最快入門_自然語言處理知識了解
基于自然語言生成多表SQL語句模板填充的方法

自然語言和ChatGPT的大模型調教攻略

評論