解讀:基于圖的大模型提示技術(shù)
共 7891字,需瀏覽 16分鐘
·
2024-07-21 20:24
【引子】大模型的興起, 使得讀論文成為了學(xué)習(xí)中的一種常態(tài)。如果一篇論文沒有讀懂,不用擔(dān)心,可以再讀一篇該領(lǐng)域內(nèi)容相近的論文,量變可能會(huì)產(chǎn)生質(zhì)變。就像編程語言一樣,你永遠(yuǎn)無法精通一門編程語言,除非,精通兩種。
像思維鏈和思維樹這樣的提示技術(shù),已經(jīng)大大提高了大模型解決復(fù)雜的、基于推理的任務(wù)能力。從高層抽象來看,通過強(qiáng)制 LLM 構(gòu)造對問題的逐步響應(yīng),我們可以大大提高其解決問題的能力。然而,這些技術(shù)都假設(shè)推理過程應(yīng)該遵循從一個(gè)想法到下一個(gè)想法的線性模式。然而,人所遵循的推理過程往往是完全不同的,遵循多種不同的思維鏈,甚至將不同見解結(jié)合起來,得出最終的解決方案。將推理過程建模為圖(而不是鏈或樹) ,我們或許可以更好地捕捉在對問題進(jìn)行推理時(shí)可能出現(xiàn)的各種非線性模式。
常見的提示技術(shù)包括基礎(chǔ)方法和一些高級技巧。基礎(chǔ)方法包括提示工程,上下文窗口,提示結(jié)構(gòu)等。一些高級技巧包括思維鏈(CoT) ,思維樹(ToT),自我一致性(self-consistency)等。除此之外,我們還需要了解Transformer結(jié)構(gòu)和圖卷積網(wǎng)絡(luò),它們適用于圖結(jié)構(gòu)數(shù)據(jù)的機(jī)器學(xué)習(xí)。
1.Transformer回顧
Transformer體系結(jié)構(gòu)最初應(yīng)用于 Seq2Seq 任務(wù)(例如,語言翻譯)。然而,這個(gè)模型以及它的一些變體已經(jīng)發(fā)展到能夠捕獲各種不同的用例,例如:
Vision transformer :用于圖像的目標(biāo)檢測和分類
Encoder-only transformer :例如,區(qū)分性語言任務(wù)的僅編碼器transformer
Decoder-only transformer :例如,語言建模的僅解碼器transformer
過去在工程實(shí)踐中往往會(huì)使用許多深度學(xué)習(xí)的體系結(jié)構(gòu),但是,transformer的獨(dú)到之處在于,它是一個(gè)單一的體系結(jié)構(gòu),可以應(yīng)用于大量各種各樣的任務(wù)。
編碼器-解碼器 transformer由兩個(gè)組成部分:
編碼器: 每個(gè)塊包含雙向,多頭自注意力和前饋?zhàn)儞Q(通常是一個(gè)兩層前饋網(wǎng)絡(luò))。
解碼器: 每個(gè)塊包含掩碼的自注意力,交叉注意,和前饋轉(zhuǎn)換。
處理原始文本過程將文本轉(zhuǎn)換為一系列向量,帶有附加的位置信息,對應(yīng)于輸入中的每個(gè)標(biāo)記。然后,這個(gè)向量序列被 transformer的編碼器攝取,該模塊的輸出僅僅是一系列的令牌向量,這些令牌向量通過雙向自注意和前饋神經(jīng)網(wǎng)絡(luò)進(jìn)行了轉(zhuǎn)換。我們可以獲取通過編碼器的所有塊傳遞的結(jié)果序列,并將其用作解碼器組件的輸入。簡單地說,編碼器使用雙向自注意形成整個(gè)輸入序列的表示,這意味著在精心設(shè)計(jì)編碼器的輸出序列時(shí),輸入序列中的每個(gè)令牌都考慮序列中的所有其他令牌。
然后,解碼器獲取編碼器的輸出,并在生成輸出時(shí)使用輸入序列的這種表示作為上下文。transformer的解碼部分與編碼器相似,但有兩個(gè)主要區(qū)別:
它用的是掩碼自自注意力。
它有一個(gè)額外的交叉注意力機(jī)制。
掩碼自注意力機(jī)制限制了解碼器中的多頭自注意力操作在序列中的“向前看”。換句話說,每個(gè)標(biāo)記的表示只取決于它之前的標(biāo)記。
因?yàn)榻獯a器需要生成一個(gè)文本序列作為輸出。如果解碼器使用雙向自我注意,模型就能夠在訓(xùn)練期間通過查看目標(biāo)序列中正確的下一個(gè)令牌并在預(yù)測下一個(gè)令牌時(shí)復(fù)制它來“作弊”。掩碼自注意力避免了這個(gè)問題,可以有效地訓(xùn)練生成一致的文本通過下一個(gè)令牌預(yù)測。交叉注意力類似于任何其他注意力操作,但它融合了兩個(gè)編碼器和解碼器獨(dú)立的序列與一個(gè)單一的注意力操作。
標(biāo)準(zhǔn)編碼器-解碼器Transformer架構(gòu)的一個(gè)廣泛使用的示例是文本到文本Transformer(T5)模型。該模型主要用于自然語言的遷移學(xué)習(xí)任務(wù),編譯碼transformer對于 Seq2Seq 任務(wù)和前綴語言建模任務(wù)都是有用的,這兩種任務(wù)都是常見的實(shí)際問題。
兩個(gè)重要的變體是僅編碼器和僅解碼器模型,純編碼器架構(gòu)使用transformer的編碼器部分,完全消除了解碼器。這樣的架構(gòu)是由 BERT 推廣的,當(dāng)針對各種不同的區(qū)分性語言任務(wù)(例如,句子分類、命名實(shí)體識(shí)別、問題回答等)進(jìn)行微調(diào)時(shí),這種架構(gòu)是非常有效的。
僅解碼器的架構(gòu)只是消除了transformer的編碼器部分。這意味著還必須擺脫任何交叉注意力模塊,因此,純解碼器變壓器的每個(gè)塊只執(zhí)行掩碼自注意力和前饋?zhàn)儞Q。目前被廣泛研究的大多數(shù)生成型 LLM ,例如,GPT 系列、 Falcon、 LLaMA-2等,都依賴于僅解碼器的transformer架構(gòu)。
2.基于圖結(jié)構(gòu)數(shù)據(jù)的人工智能
由于我們的目標(biāo)是利用圖數(shù)據(jù)結(jié)構(gòu)對推理過程建模的提示技術(shù),所以需要了解在機(jī)器學(xué)習(xí)應(yīng)用中通常如何處理圖結(jié)構(gòu)數(shù)據(jù)。也就是說,大多數(shù)模型結(jié)構(gòu)(例如,transformer或卷積神經(jīng)網(wǎng)絡(luò))是為了處理歐幾里得數(shù)據(jù)(例如,圖像或文本) ,可以很容易地表示為一個(gè)矩陣。然而,并非所有的數(shù)據(jù)都可以線性表達(dá)的。事實(shí)上,許多真實(shí)世界的數(shù)據(jù)來源更適合建模為圖(例如,社交網(wǎng)絡(luò)、分子等)。對于這樣的數(shù)據(jù),一般使用一種稱為圖卷積網(wǎng)絡(luò)(GCN)的特殊模型。
在核心組件中,GCN與典型的前饋神經(jīng)網(wǎng)絡(luò)沒有太大的不同。給定一個(gè)圖,我們將圖中的每個(gè)節(jié)點(diǎn)與一個(gè)輸入嵌入關(guān)聯(lián)起來,這個(gè)輸入嵌入可以來自多種數(shù)據(jù)源(例如,文檔的嵌入,與用戶對應(yīng)的特性,等等)。然后,在 GCN 的每一層中,首先對每個(gè)節(jié)點(diǎn)的嵌入(和規(guī)范化)應(yīng)用前饋轉(zhuǎn)換。然后,通過聚合每個(gè)節(jié)點(diǎn)的相鄰特征來合并底層圖的結(jié)構(gòu),例如取所有相鄰節(jié)點(diǎn)嵌入的平均值。通過向 GCN 添加多個(gè)層,我們可以學(xué)習(xí)豐富的節(jié)點(diǎn)表示,這些表示同時(shí)捕獲每個(gè)節(jié)點(diǎn)的屬性和圖的結(jié)構(gòu)。
GCN 架構(gòu)已經(jīng)獲得了廣泛的流行,并被廣泛應(yīng)用于各種強(qiáng)大的大型應(yīng)用程序(例如,Google Maps),并且已經(jīng)有了對 GCN 的幾個(gè)擴(kuò)展,一個(gè)值得關(guān)注的架構(gòu)是圖形注意力網(wǎng)絡(luò)(GAT)。
GAT 體系結(jié)構(gòu)在某種程度上與 GCN 相似,但是它不僅僅執(zhí)行從鄰近節(jié)點(diǎn)聚合特性的簡單平均值。相反,使用一個(gè)加權(quán)平均數(shù)來接管相鄰的節(jié)點(diǎn)特征,其中的權(quán)重是通過一種注意力機(jī)制計(jì)算出來的。所使用的注意力機(jī)制可能很簡單,例如,只是將兩個(gè)連接的節(jié)點(diǎn)嵌入作為輸入,并執(zhí)行前饋轉(zhuǎn)換來計(jì)算分?jǐn)?shù)。這種方法允許學(xué)習(xí)更多相鄰特征的一般性聚合。
3.多模態(tài) CoT 推理
還有一種需要注意的一種提示技術(shù), 即多模態(tài)思維鏈。這種方法,提出了一個(gè)兩階段的方法來解決文本和視覺輸入的推理問題。在第一階段,模型將文本和圖像作為輸入,并使用類似于思維鏈的解決問題的合理解釋。然后,將這個(gè)合理解釋與輸入連接起來,再次通過模型(連同圖像)得到最終答案。這種方法使用了 T5架構(gòu),并對它所解決的任務(wù)進(jìn)行了微調(diào)。
盡管 CoT 提示具有令人難以置信的影響力,但它有著自己的局限性它的下一個(gè)令牌預(yù)測以從左到右的方式生成問題解決原理,這阻止了模型從推理過程的早期錯(cuò)誤中恢復(fù)。這個(gè)問題的一個(gè)解決方案是思維樹(ToT)提示 ,它支持對建模為樹的中間推理步驟進(jìn)行回溯和策略性的前瞻。盡管 ToT 具有實(shí)用性,但它仍然將推理和問題解決作為一個(gè)線性過程,在樹中的單個(gè)節(jié)點(diǎn)路徑上進(jìn)行,這限制了提示技術(shù)的能力。
通過將思維單元表示為節(jié)點(diǎn),將它們之間的聯(lián)系表示為邊緣,可以捕捉到人類思維的非順序性質(zhì),并允許對思維過程進(jìn)行更現(xiàn)實(shí)的建模。
4.大模型中的思維圖推理(GOTR)
GOTR是一個(gè)兩階段的推理框架,稱為思維圖推理,用于解決具有文本和視覺輸入的推理任務(wù)。在第一階段,語言模型被用來產(chǎn)生一個(gè)解決問題的合理解釋。然后,第二階段使用這個(gè)生成的合理解釋得出最終的答案。這個(gè)兩階段的過程受到了多模態(tài) CoT的啟發(fā)。
GOTR框架在推理過程中依賴于三種不同的輸入:
文本: 任何基于提示的推理任務(wù)中獲得的正常的文本輸入。
圖像: 可以(可選地)攝取與推理任務(wù)相關(guān)的圖像。
思想圖: 生成一個(gè)圖,其中包含文本輸入中的所有命名實(shí)體及其作為輸入的關(guān)系。
這些輸入中的每一個(gè)都在架構(gòu)中使用了單獨(dú)的編碼器。然后,將這些編碼器生成的表示進(jìn)行融合,并將其傳遞給能夠生成輸出的解碼器模塊,要么是合理解釋,要么是最終答案。
GOTR 在兩個(gè)階段的框架中運(yùn)行。在第一階段,對于要解決問題的輸入文本,并被期望產(chǎn)生一個(gè)解決問題的合理解釋,類似于一個(gè)思維鏈。然后,在第一階段生成的合理解釋只是與輸入文本連接在一起,然后我們再次生成輸出。第一階段和第二階段的唯一區(qū)別是:
第二階段的輸入較長(即,輸入文本和原理)。
第二階段產(chǎn)生一個(gè)最終答案,而不是一個(gè)合理解釋。
然而,除了輸入和輸出之外,這兩個(gè)階段的結(jié)構(gòu)是相同的。下面描述了 GOTR 之后的兩個(gè)階段的過程,在每個(gè)階段產(chǎn)生兩種不同的輸出。
如前所述,GOTR 采用三種數(shù)據(jù)源作為輸入: 文本、圖像和思維圖。圖像數(shù)據(jù)是完全可選的,GOTR 在沒有它的情況下也可以正常工作。其中,思維圖是基于輸入文本構(gòu)建的。示例如下:
具體而言,GOTR 的思維圖表用于表示輸入文本中的命名實(shí)體及其關(guān)系。為了生成這個(gè)圖,需要使用工具(例如CoreNLP 框架)從文本中提取三元組,并執(zhí)行共享引用解析來統(tǒng)一重復(fù)實(shí)體,從而形成輸入文本的圖表示。
為了從不同的輸入模式(即文本、圖像和圖形)獲取數(shù)據(jù),需要對每個(gè)模式使用單獨(dú)的編碼器。對于圖像和文本數(shù)據(jù),可以只使用Transformer編碼器,也可以對圖像使用視覺Transformer進(jìn)行編碼,而文本使用T5模型的編碼器進(jìn)行編碼。
與大多數(shù)LLM 相比,GOTR 框架使用了不同的模型架構(gòu),與典型的僅解碼器架構(gòu)不同,GOTR 使用基于前綴的語言建模方法,該方法使用多個(gè)編碼器模型來攝取輸入,然后將這些編碼器的輸出傳遞給解碼器以生成輸出。這類似于編碼器-解碼器的Transformer架構(gòu),但可以有多種不同類型的編碼器。為了使用多個(gè)編碼器,需要在解碼器之前有幾個(gè)學(xué)習(xí)層,這些層將它們的輸出融合成一個(gè)單一的序列,然后傳遞給解碼器。GOTR 使用完整編碼器-解碼器設(shè)置在所需任務(wù)上進(jìn)行了微調(diào)。
GAT 是 GCN 體系結(jié)構(gòu)的一種類型,它不是通過簡單的求和/平均運(yùn)算來聚集相鄰節(jié)點(diǎn)的特征,而是使用注意力機(jī)制來聚集相鄰節(jié)點(diǎn)之間的信息。
一旦對來自文本、圖像和思維圖輸入的數(shù)據(jù)進(jìn)行了編碼,就需要在將這些特征傳遞給解碼器之前將它們?nèi)诤显谝黄鹨陨奢敵觯梢允紫仁褂靡粋€(gè)簡單的交叉注意力機(jī)制。這個(gè)初始的特征融合操作如下所示,其中文本特征與圖像和思想圖形的特征融合使用交叉注意。在這里,圖像特征是可選的。
在交叉注意力之后,仍然有圖像特征、文本特征和可能的圖像特征,仍然需要將這些特征組合在一起,形成一個(gè)可以傳遞給解碼器的單一特征表示。這可以通過門控熔合層完成的。這意味著:
取出我們的輸入特征
將它們乘以一些可學(xué)習(xí)的權(quán)重矩陣
產(chǎn)生“掩碼”(即,每個(gè)條目中值在0到1之間的矩陣) ,告訴使用每個(gè)特征的哪些部分保留或去除。
當(dāng)把 GOTR 產(chǎn)生的解決問題的合理解釋與其他框架相比較時(shí),會(huì)發(fā)現(xiàn) GOTR 在 ROUGE 得分方面產(chǎn)生了更高質(zhì)量的合理解釋,與多模態(tài) CoT 和 UnifiedQA 方法相比,質(zhì)量略有提高,這似乎表明將思維圖納入問題解決過程是有幫助的。
5. 思維圖: 用大型語言模型解決復(fù)雜問題(GoT)
GOTR 可能并不是一個(gè)真正的提示技術(shù),它必須經(jīng)過微調(diào)或訓(xùn)練才能解決推理問題。CoT 或 提示類似的純提示方法使用預(yù)先訓(xùn)練好的 LLM,不需要任何模型微調(diào)。“思維圖”(GoT)提示,將 LLM 生成的每個(gè)辦法建模為圖中的一個(gè)節(jié)點(diǎn),然后使用連接這些節(jié)點(diǎn)的頂點(diǎn)來表示依賴關(guān)系。
人類在解決問題時(shí)可能不會(huì)遵循嚴(yán)格的思維鏈,可能會(huì)嘗試多種思維鏈,并將來自多個(gè)思想鏈的見解結(jié)合在一起。第一種情況可以通過 ToT 提示來處理,但是結(jié)合不同的思維鏈并不適合樹形結(jié)構(gòu)的思維模式。為此,一個(gè)圖結(jié)構(gòu)可以將多個(gè)推理路徑可以合并在一起。此外,這樣的結(jié)構(gòu)能夠捕獲類似遞歸的模式,這對于解決各種不同的問題可能是有價(jià)值的。GoT可以擴(kuò)展,使得不同大模型即插即用,提示技術(shù)也會(huì)變得容易。
GoT 框架將 LLM 的推理過程表示為一個(gè)(有向)圖。圖中的每個(gè)節(jié)點(diǎn)對應(yīng)一個(gè) LLM 生成的單個(gè)思想,邊表示思想之間的關(guān)系。也就是說,圖中從思想 a 到 b 的邊或者有向邊(a,b)只是告訴我們思想 b 是用思想 a 作為輸入生成的。與 ToT 提示類似,思想的確切定義取決于正在解決的問題。更進(jìn)一步,每個(gè)節(jié)點(diǎn)代表一個(gè)問題或者中間問題的解決方案,但是可以在圖中有不同類型的節(jié)點(diǎn),它們代表推理過程的不同方面(例如,計(jì)劃與執(zhí)行)。
假設(shè),使用一個(gè)圖來表示 LLM 執(zhí)行的推理過程,對這個(gè)圖的任何修改都表示對底層推理過程的修改,可以將這些修改稱為思維變換,具體定義為向圖中添加新的頂點(diǎn)或邊。如上圖所示,存在各種各樣的思維轉(zhuǎn)換,例如,合并或分割數(shù)組的數(shù)字,匯總一組文章,生成單篇文章的多個(gè)摘要,等等。總體上,有三種主要的思維變換類型:
聚合: 將任意的思想聚合成一個(gè)新的思想。
精煉: 通過自我連接精煉思想中的內(nèi)容。
生成: 基于單一思想生成多種新思想。
每一種類型都可以任意地修改和推進(jìn) LLM 的推理過程。例如,聚合可以將多個(gè)不同思想鏈的結(jié)果合并在一起,而精煉可以遞歸地更新一個(gè)思想,直到得到最終的答案。這樣的功能嚴(yán)格擴(kuò)展了 CoT 和 ToT 的提示技術(shù)。
最后,GoT 提示使用評估函數(shù)為特定的想法分配分?jǐn)?shù),以及一個(gè)排名函數(shù)來選擇最相關(guān)的想法。值得注意的是,排名和得分都考慮了整個(gè)圖結(jié)構(gòu)。排名通常只是返回得分最高的想法。
其中主要的模塊如下:
Prompter: 為 LLM 準(zhǔn)備消息或提示詞,應(yīng)該包含圖結(jié)構(gòu)的編碼。
Parser: 從 LLM 輸出中提取相關(guān)信息,從而形成存儲(chǔ)在每個(gè)思想中的狀態(tài)。
Scorer: 驗(yàn)證思維狀態(tài)是否滿足正確性條件,并給它們分配一個(gè)評分(從 LLM 或人工標(biāo)注中獲得)。
Controller: 協(xié)調(diào)推理過程并決定如何進(jìn)行。
Controller會(huì)選擇應(yīng)該應(yīng)用于底層圖結(jié)構(gòu)的思維變換,將這些信息傳達(dá)給Prompter,并根據(jù)scorer對生成的思想狀態(tài)的輸出決定推理過程是否已經(jīng)完成或應(yīng)該繼續(xù)向前。在整個(gè)過程中,Controller維護(hù)兩種信息:
操作圖: 在推理過程之前創(chuàng)建的用戶定義的靜態(tài)結(jié)構(gòu),它捕獲思維操作的執(zhí)行計(jì)劃。
圖推理狀態(tài): 一個(gè)跟蹤 LLM 推理過程狀態(tài)的動(dòng)態(tài)結(jié)構(gòu),包括所有的思想及其狀態(tài)。
GoT 提示技術(shù)的常見示例包括使用歸并算法對數(shù)字列表(包含重復(fù)數(shù)字)進(jìn)行排序,計(jì)算兩個(gè)集合的交集,關(guān)鍵字計(jì)數(shù)以及文檔合并等。與其他的提示技術(shù)相比,GoT 提示技術(shù)具有更少的延遲和更大的容量,而且GoT 提示持續(xù)產(chǎn)生的錯(cuò)誤更少。這些結(jié)果如下圖所示。
然而,GoT 和其他提示技術(shù)之間的性能差異在現(xiàn)實(shí)世界的任務(wù)中似乎不那么明顯。例如,GoT 提示在文檔合并任務(wù)方面提供了不太明顯的改進(jìn)。類似地,GoT 在關(guān)鍵字計(jì)數(shù)任務(wù)的性能方面提供了一個(gè)優(yōu)勢,但是基線技術(shù)ーー特別是 ToT 提示ーー相當(dāng)具有競爭力。
在考慮是否在實(shí)踐中使用 GoT 時(shí),需要考慮兩個(gè)個(gè)問題:
試圖解決的問題是否可以很容易地分解成更小的、可解決的子問題,并合并成最終的解決方案?對于這類(基于合并的)問題,GoT 提示非常有效。
增加的成本是否會(huì)成為一個(gè)問題?是否可以用更便捷的技術(shù)(例如,CoT 提示)得到一個(gè)合理的解決方案嗎?
6.小結(jié)
從鏈到樹再到圖,是一個(gè)自然的演進(jìn)過程,基于圖的提示技術(shù)允許大模型將其推理過程構(gòu)造成一個(gè)圖結(jié)構(gòu)。從線性推理過程轉(zhuǎn)向更靈活的基于圖結(jié)構(gòu)的推理過程對某些任務(wù)是有益的, GOTR和 GoT提供了兩種方式的參考示例, 可以看到圖結(jié)構(gòu)可以有利于推理過程。然而,由此產(chǎn)生的推理過程可能更加復(fù)雜和昂貴。
【參考資料與關(guān)聯(lián)閱讀】
-
“Beyond Chain-of-Thought, Effective Graph-of-Thought Reasoning in Large Language Models.” arXiv:2305.16582 (2023). -
“Graph of Thoughts: Solving Elaborate Problems with Large Language Models.” arXiv:2308.09687 (2023). -
“Multimodal chain-of-thought reasoning in language models.” arXiv:2302.00923 (2023). -
“Tree of thoughts: Deliberate problem solving with large language models.” arXiv:2305.10601 (2023). -
“Graph attention networks.”arXiv:1710.10903 (2017). -
如何構(gòu)建基于大模型的App
