探究代碼思維鏈對(duì)大模型推理能力的作用
一、引言
現(xiàn)階段,程序代碼是解決基于大型語(yǔ)言模型(LLM)的復(fù)雜推理任務(wù)的有效的方式之一,這類方法通常被稱為"程序或代碼思維鏈" (program-of-thought)。與傳統(tǒng)思維鏈(chain-of-thought)方法相比,代碼思維鏈方法將復(fù)雜問(wèn)題分解為可執(zhí)行的代碼片段,并且利用代碼執(zhí)行器逐步解決子問(wèn)題,可以較大程度提升基于大型語(yǔ)言模型的推理能力。然而目前代碼程序數(shù)據(jù)本身的形式與大模型推理能力之間的相關(guān)性仍是未解之謎,我們對(duì)于構(gòu)造何種代碼指令數(shù)據(jù)才能提升基于代碼思維鏈的大模型推理能力仍知之甚少。因此,本文致力于分析以下問(wèn)題:
什么情況下代碼思維鏈數(shù)據(jù)對(duì)語(yǔ)言模型推理最為有效?
本文分析了不同邏輯和結(jié)構(gòu)復(fù)雜度的代碼程序數(shù)據(jù),初步探究了不同復(fù)雜度的代碼數(shù)據(jù)與語(yǔ)言模型推理能力的關(guān)系。
二、代碼程序復(fù)雜度估計(jì)
在這項(xiàng)工作中,我們提出Complexity-Impacted Reasoning Score (CIRS) 用來(lái)度量推理復(fù)雜度的分?jǐn)?shù)。CIRS分?jǐn)?shù)用于衡量代碼推理步驟(代碼思維鏈)對(duì)語(yǔ)言模型推理能力的影響。
我們假設(shè)代碼編程語(yǔ)言具有獨(dú)特的優(yōu)勢(shì),原因如下:
- 首先,相較于扁平化的自然語(yǔ)言數(shù)據(jù),得益于其面向?qū)ο蟮奶卣?,代碼語(yǔ)言能夠更加有效建模復(fù)雜的結(jié)構(gòu)。
- 其次,程序語(yǔ)言具有相對(duì)固有的過(guò)程導(dǎo)向邏輯,其面向過(guò)程的特性有助于解決多步推理問(wèn)題。
因此,合理的方式應(yīng)該從結(jié)構(gòu)和邏輯兩個(gè)角度評(píng)估代碼的復(fù)雜性。
具體來(lái)說(shuō),為了衡量代碼思維鏈 的推理能力,我們定義為結(jié)構(gòu)復(fù)雜性 和邏輯復(fù)雜性 的乘積。
1.結(jié)構(gòu)復(fù)雜性定義
為了計(jì)算結(jié)構(gòu)復(fù)雜性,我們衡量抽象語(yǔ)法樹(AST)的結(jié)構(gòu)復(fù)雜性。具體來(lái)說(shuō),我們利用抽象語(yǔ)法樹中的三個(gè)指標(biāo)來(lái)反映其結(jié)構(gòu)信息。
一般來(lái)說(shuō),節(jié)點(diǎn)數(shù)越多,復(fù)雜性越高。但是僅憑節(jié)點(diǎn)數(shù)無(wú)法全面衡量代碼的復(fù)雜性,因?yàn)橐粋€(gè)具有簡(jiǎn)單結(jié)構(gòu)的大代碼可能比一個(gè)具有復(fù)雜結(jié)構(gòu)的小代碼更容易理解。節(jié)點(diǎn)類型幫助識(shí)別代碼中存在的結(jié)構(gòu)元素,例如條件語(yǔ)句、循環(huán)和函數(shù)調(diào)用。不同的節(jié)點(diǎn)類型在代碼中扮演不同的角色,并對(duì)代碼的復(fù)雜性有不同的貢獻(xiàn)。因此,記錄各種節(jié)點(diǎn)類型的數(shù)量可以增進(jìn)對(duì)代碼結(jié)構(gòu)復(fù)雜性的理解。最后,抽象語(yǔ)法樹 的深度反映了代碼中嵌套的級(jí)別。更大的樹深度可能意味著更復(fù)雜的控制流和邏輯,使代碼更難理解。同樣樹深度也不是唯一的衡量標(biāo)準(zhǔn)。一個(gè)具有多個(gè)簡(jiǎn)單分支的淺樹可能比一個(gè)具有少數(shù)復(fù)雜分支的深樹更容易理解。
2.邏輯復(fù)雜性定義
受到 Halstead 復(fù)雜度 和 McCabe 的圈復(fù)雜度的啟發(fā),我們定義代碼的邏輯復(fù)雜性 ,它包含了困難度
和圈復(fù)雜度
。
其中表示代碼控制流圖中的邊數(shù),
表示代碼控制流圖中的節(jié)點(diǎn)數(shù)。高圈復(fù)雜度與潛在的程序錯(cuò)誤之間存在顯著的相關(guān)性, 高圈復(fù)雜度的模塊和方法也會(huì)有最多的缺陷。我們注意到高圈復(fù)雜度表明程序代碼具有復(fù)雜的判斷邏輯,同時(shí)也可能導(dǎo)致較低的質(zhì)量,并且難以測(cè)試和維護(hù)。
總的來(lái)說(shuō),引入對(duì)于代碼塊困難度和圈復(fù)雜度的衡量指標(biāo),可以同時(shí)兼顧碼操作符、操作數(shù)和代碼控制流的復(fù)雜性對(duì)于代邏輯復(fù)雜度的影響。
三、實(shí)驗(yàn)分析
本文的實(shí)驗(yàn)分為兩部分,第一部分我們使用CIRS指標(biāo)對(duì)代碼數(shù)據(jù)進(jìn)行經(jīng)驗(yàn)性分析,并且按照分?jǐn)?shù)值進(jìn)行劃分,最后探討不同復(fù)雜度代碼塊對(duì)大模型推理能力的影響。第二部分,我們將第一部分得到的結(jié)論用于代碼數(shù)據(jù)的過(guò)濾,篩選出對(duì)大模型推理能力增益最有效的代碼,在多個(gè)數(shù)據(jù)集上做驗(yàn)證。
1.經(jīng)驗(yàn)性實(shí)驗(yàn)分析
為了盡量避免現(xiàn)有數(shù)據(jù)集本身造成的誤差,我們選擇模擬新的代碼數(shù)據(jù),種子數(shù)據(jù)的來(lái)源包括GSM8K、MultiArith、Asdiv等訓(xùn)練集。我們從五個(gè)種子數(shù)據(jù)集模擬合成了超過(guò)60,000個(gè)樣本。最后每個(gè)數(shù)據(jù)集生成了大約10,000個(gè)樣本,并且我們選擇盡可能多的數(shù)據(jù)集以確保數(shù)學(xué)問(wèn)題的多樣性。在獲取到生成的代碼數(shù)據(jù)后,我們使用CIRS指標(biāo)并根據(jù)代碼復(fù)雜性分布的分析手動(dòng)將數(shù)據(jù)分成不同的子集?;诓煌膹?fù)雜性分?jǐn)?shù),我們將劃分的子集命名為low(低分樣本)、medium(中分樣本)和high(高分樣本)。
(1)不同代碼程序復(fù)雜度分?jǐn)?shù)的影響
合適代碼的復(fù)雜度對(duì)于代碼思維鏈的提示的推理能力至關(guān)重要:
從四個(gè)數(shù)據(jù)集的結(jié)果中,我們注意到當(dāng)代碼數(shù)據(jù)的復(fù)雜性處于中等范圍時(shí),模型的性能最佳。這表明學(xué)習(xí)性符號(hào)語(yǔ)言對(duì)于程序輔助提示的推理能力至關(guān)重要。其原因在于,過(guò)于簡(jiǎn)單的復(fù)雜性數(shù)據(jù)對(duì)于大型語(yǔ)言模型(LLMs)來(lái)說(shuō)太簡(jiǎn)單,導(dǎo)致效果不太明顯。相反,當(dāng)復(fù)雜性顯著增加時(shí),邏輯語(yǔ)義和嵌套結(jié)構(gòu)變得難以理解或?qū)W習(xí),這可能對(duì)大型語(yǔ)言模型的推理能力產(chǎn)生不利影響。
參數(shù)數(shù)量越大,代碼數(shù)據(jù)對(duì)于大型語(yǔ)言模型的推理能力提升越顯著:
隨著語(yǔ)言模型大小從70億增加到650億,其推理能力也在提高。實(shí)際上經(jīng)過(guò)微調(diào)后,大多數(shù)650億參數(shù)量的模型使用代碼數(shù)據(jù)可以達(dá)到與gpt-3.5-turbo相當(dāng)?shù)慕Y(jié)果。這表明擁有足夠多的參數(shù)對(duì)于語(yǔ)言模型的實(shí)質(zhì)性推理能力至關(guān)重要。此外當(dāng)語(yǔ)言模型足夠大時(shí),不同復(fù)雜度代碼之間帶來(lái)的結(jié)果差異很小。這說(shuō)明大量參數(shù)的語(yǔ)言模型能夠更加擅長(zhǎng)處理符號(hào)數(shù)據(jù),并且內(nèi)在的具有產(chǎn)生強(qiáng)大推理能力的潛力。
當(dāng)前語(yǔ)言模型的架構(gòu)在理解推理能力方面存在局限性:
我們觀察到,當(dāng)數(shù)據(jù)復(fù)雜性極高時(shí),語(yǔ)言模型的性能傾向于下降,這反映了大型語(yǔ)言模型的推理能力有其固有的限制。首先,我們認(rèn)為當(dāng)前語(yǔ)言模型的架構(gòu)(例如decoder-only架構(gòu))對(duì)于理解復(fù)雜知識(shí)的能力有限,這也限制了其推理能力的涌現(xiàn)。大模型展示強(qiáng)大推理能力的前提是它們能夠理解復(fù)雜數(shù)據(jù)中嵌入的結(jié)構(gòu)和邏輯知識(shí)。因此,未來(lái)的研究需要探索具有更強(qiáng)推理能力的模型基礎(chǔ)結(jié)構(gòu)。其次,進(jìn)一步增強(qiáng)推理能力需要依賴外部工具。我們知道推理問(wèn)題的范圍非常廣泛,不僅包括數(shù)學(xué)推理,還包括常識(shí)或更復(fù)雜的邏輯推理任務(wù)。因此,僅依靠LLM本身是不足以一次性解決所有問(wèn)題的,需要更強(qiáng)大的外部工具的協(xié)助。
(2)不同復(fù)雜度分?jǐn)?shù)的數(shù)據(jù)特征
不同CIRS分?jǐn)?shù)的不同子集顯示出不同的結(jié)構(gòu)和邏輯差異,我們還發(fā)現(xiàn)不同復(fù)雜性分?jǐn)?shù)的結(jié)果與推理問(wèn)題的認(rèn)知難度級(jí)別相對(duì)應(yīng)。低分?jǐn)?shù)的樣本包含很少的結(jié)構(gòu)信息。盡管它們包含一些中間推理過(guò)程,但這些主要以平面文本描述形式呈現(xiàn)。這些樣本通常對(duì)應(yīng)于更簡(jiǎn)單的、在結(jié)構(gòu)和邏輯上不足的問(wèn)題。當(dāng)分?jǐn)?shù)在代碼推理步驟中增加時(shí),具有簡(jiǎn)單邏輯語(yǔ)義和結(jié)構(gòu)的編程語(yǔ)言的存在也隨之增加。這些樣本通常涉及簡(jiǎn)單且直接的邏輯操作。得分極高的樣本包含大量的結(jié)構(gòu)化函數(shù)定義或推理過(guò)程,這表明存在許多復(fù)雜的條件語(yǔ)句和函數(shù)結(jié)構(gòu)。這些樣本通常是高度挑戰(zhàn)性的數(shù)學(xué)問(wèn)題。
(3)排除數(shù)據(jù)分布本身的影響
為了消除數(shù)據(jù)分布本身可能帶來(lái)的偏差,例如由于出現(xiàn)頻率較高而在中等數(shù)據(jù)范圍內(nèi)的性能提升,我們對(duì)不同復(fù)雜性分?jǐn)?shù)的結(jié)果進(jìn)行了更深入的分析。從實(shí)驗(yàn)結(jié)果來(lái)看,模型對(duì)每種分布的預(yù)測(cè)準(zhǔn)確率與訓(xùn)練數(shù)據(jù)的數(shù)量無(wú)關(guān)。因此,我們可以初步得出結(jié)論,復(fù)雜性數(shù)據(jù)的有效性并非因?yàn)閿?shù)據(jù)出現(xiàn)的頻率。
(4)代碼思維鏈和文本思維鏈的比較
為了驗(yàn)證代碼和文本推理鏈的效果,我們用文本替換了使用相同數(shù)據(jù)集的代碼程序推理過(guò)程。代碼數(shù)據(jù)集在所有四個(gè)數(shù)據(jù)集中都展示出明顯的優(yōu)勢(shì)。這是因?yàn)榇a本質(zhì)上包含了邏輯語(yǔ)義和結(jié)構(gòu)信息, 另一個(gè)原因是代碼可以被外部解釋器執(zhí)行。因此帶有代碼的提示方法優(yōu)于扁平化的文本信息。
2.使用CIRS提升大語(yǔ)言模型推理能力
(1)自動(dòng)合成和劃分代碼數(shù)據(jù)算法
我們將第一部分實(shí)驗(yàn)的步驟集成為一種自動(dòng)合成和分層算法,然后將其應(yīng)用于數(shù)學(xué)推理的指令生成任務(wù),以及代碼生成任務(wù)中用來(lái)做代碼數(shù)據(jù)過(guò)濾。
(2)CIRS引導(dǎo)的指令生成
合適的代碼數(shù)據(jù)復(fù)雜性對(duì)于語(yǔ)言模型表現(xiàn)出最佳的推理能力更重要。因此,我們從源數(shù)據(jù)集中篩選出更多數(shù)據(jù)訓(xùn)練一個(gè)針對(duì)中等復(fù)雜性范圍的代碼數(shù)據(jù)增強(qiáng)推理模型。在分布內(nèi)測(cè)試條件下,我們發(fā)現(xiàn)訓(xùn)練的模型優(yōu)于Vicuna和Falcon。為了消除數(shù)據(jù)分布的影響,我們直接測(cè)試了模型在分布外設(shè)置中的性能。相同的參數(shù)下,我們的模型在零樣本和少樣本提示下表現(xiàn)更好。值得注意的是,我們的方法在零樣本設(shè)置下在BigBench-Hard與ChatGPT相當(dāng)。對(duì)于MATH數(shù)據(jù)集,我們注意到我們的模型仍然優(yōu)于基線模型。但是由于代碼數(shù)據(jù)本身的局限性,我們的模型比ChatGPT差得多。
(3)不同推理復(fù)雜度分?jǐn)?shù)的影響
為了驗(yàn)證我們方法在代碼相關(guān)任務(wù)中的有效性,我們過(guò)濾訓(xùn)練數(shù)據(jù)集并獲得了更多高質(zhì)量代碼指令的子集。結(jié)果表明,Code (CIRS)-LLaMA在純代碼生成任務(wù)中表現(xiàn)出有效的性能。我們可以得出結(jié)論,優(yōu)化的結(jié)構(gòu)和邏輯語(yǔ)義對(duì)LLM的推理能力最有益。
四、討論與總結(jié)
1. 數(shù)學(xué)邏輯和代碼之間的深層聯(lián)系是什么?
柯里-霍華德同構(gòu)(Curry-Howard isomorphism)表明數(shù)學(xué)邏輯和計(jì)算機(jī)程序代碼之間的互為鏡像,同時(shí)這也說(shuō)明了數(shù)學(xué)證明和計(jì)算機(jī)程序可以建立某種關(guān)聯(lián),為我們理解語(yǔ)言模型也提供了啟發(fā)和思考。語(yǔ)言模型在處理代碼時(shí),如果能夠理解和應(yīng)用類型系統(tǒng),就能更好地處理邏輯推理。類型系統(tǒng)在程序設(shè)計(jì)中用于約束和推理數(shù)據(jù)和函數(shù)之間的關(guān)系,類似于邏輯系統(tǒng)中命題和證明的關(guān)系。在編寫程序時(shí),人需要對(duì)數(shù)據(jù)和操作進(jìn)行邏輯推理。這與證明一個(gè)邏輯命題的過(guò)程有相似之處。語(yǔ)言模型如果能理解和生成程序代碼,就表明它在進(jìn)行某種形式的邏輯推理。通過(guò)程序代碼的理解和生成,語(yǔ)言模型能夠更有效地進(jìn)行邏輯推理,處理復(fù)雜的問(wèn)題解決方案,這對(duì)于理解邏輯問(wèn)題來(lái)解決特定問(wèn)題是有用的。雖然柯里-霍華德同構(gòu)直接描述的是邏輯系統(tǒng)和類型系統(tǒng)之間的關(guān)系,但將這種理論應(yīng)用于語(yǔ)言模型和程序代碼的融合,可以幫助模型更好地理解和處理邏輯推理和編程任務(wù)。這表明了邏輯學(xué)和計(jì)算機(jī)科學(xué)之間的深刻聯(lián)系也適用于人工智能和語(yǔ)言模型的領(lǐng)域。
2. 對(duì)于語(yǔ)言模型的推理能力來(lái)說(shuō),哪種數(shù)據(jù)格式至關(guān)重要?
在本文中,我們探討了程序思維提示鏈的推理能力。結(jié)果表明,具有某些邏輯和結(jié)構(gòu)特質(zhì)的優(yōu)化級(jí)別代碼數(shù)據(jù)是關(guān)鍵因素。代碼數(shù)據(jù)之所以高效,是因?yàn)樗举|(zhì)上是半結(jié)構(gòu)化的,且在自然界中豐富存在。我們可以證明:(1) 數(shù)據(jù)的局部結(jié)構(gòu)特性對(duì)于提升推理能力至關(guān)重要,這與Prystawski等 (Why think step-by-step? Reasoning emerges from the locality of experience) 的觀點(diǎn)一致。數(shù)據(jù)中固有的邏輯連貫性或一定量的知識(shí)回路是必要的。(2) 過(guò)于復(fù)雜的結(jié)構(gòu)信息和邏輯對(duì)LLM來(lái)說(shuō)是“太難學(xué)習(xí)”的。本文的實(shí)驗(yàn)結(jié)果表明,最有效的是知識(shí)的最佳層次復(fù)雜度,因?yàn)樗鼘?duì)大多數(shù)大型語(yǔ)言模型來(lái)說(shuō)是可學(xué)習(xí)的。同時(shí),我們還發(fā)現(xiàn),隨著語(yǔ)言模型中參數(shù)數(shù)量的增加,它們對(duì)復(fù)雜知識(shí)的理解也在提高。
在本項(xiàng)工作中,我們致力于探究代碼思維鏈數(shù)據(jù)和大模型推理能力背后的機(jī)理,并提出CIRS來(lái)衡量代碼數(shù)據(jù)形式與大模型推理能力之間的關(guān)系。通過(guò)考慮代碼數(shù)據(jù)的結(jié)構(gòu)和邏輯屬性,我們使用AST來(lái)編碼結(jié)構(gòu)信息,并根據(jù)難度和圈復(fù)雜度編碼結(jié)構(gòu)特征。通過(guò)實(shí)證分析,我們發(fā)現(xiàn)代碼語(yǔ)言的合適水平在程序思維提示的推理能力中扮演著關(guān)鍵角色。進(jìn)一步的,我們?cè)O(shè)計(jì)了應(yīng)用數(shù)學(xué)推理和代碼生成任務(wù)的自動(dòng)合成和分層算法。廣泛的結(jié)果證明了所提方法的有效性。在未來(lái),我們將把這項(xiàng)工作擴(kuò)展到更多場(chǎng)景,例如常識(shí)或邏輯推理任務(wù),并以低計(jì)算成本訓(xùn)練強(qiáng)大的推理模型。
本文轉(zhuǎn)載自:??ZJUKG??
作者:畢禎
