筆記整理:劉軼,天津大學碩士,研究方向為知識圖譜和大模型
論文連結:https://doi.org/10.1162/coli_a_00548
發表會議:Computational Linguistics (2025) 51 (2): 467–504.
1. 動機
因果推理是人類思維的核心能力,但大型語言模型(LLMs)在處理複雜因果推理任務(如溯因推理和反事實推理)時仍面臨挑戰。其核心難點在於文本中複雜的因果結構(如多事件分支關係)通常隱含在時序描述中,難以被LLMs明確學習。而程式碼中的條件陳述能更直接、頻繁地表達因果關係,所以程式碼語言模型(Code-LLMs)可能具備更強的因果推理能力。因此亟需探索Code-LLMs是否比通用LLMs更擅長因果推理,以及程式碼提示是否能比文本提示更清楚地描述因果結構。
2. 貢獻
本文的主要貢獻有:
(1) 設計了程式碼提示來處理因果推理任務,透過利用程式碼中的條件陳述來表示因果結構。
(2) 在零樣本和單樣本設定下,全面評估多種通用LLMs(如LLAMA-2、GPT-3)和Code-LLMs(如CODELLAMA、CODEX)在溯因推理和反事實推理任務上的表現,並驗證了程式碼大型語言模型比通用大型語言模型更擅長因果推理,並且對於大多數模型來說,程式碼提示比文本提示更有效。
(3) 透過干預實驗,例如修改提示的資訊、結構、格式和程式語言,揭示程式結構(尤其是條件陳述)是程式碼提示有效的關鍵因素。
(4) 證明了僅在條件陳述的程式碼語料庫上對大型語言模型進行微調就可以提升它們的因果推理能力。
3. 方法
主要考慮兩個具有挑戰性的因果推理任務:溯因推理和反事實推理。溯因推理要求模型在與前提一致的情況下,為結果生成一個合理的理由。反事實推理詢問在反事實分支中會發生什麼。任務和研究問題概述如圖1所示,其中任務中事件之間的因果關係如圖1左圖所示,而本工作中討論的研究問題,包括如何激發和如何提升大型語言模型的因果推理能力如圖1右圖所示。這些研究問題如下:
• 程式碼語言模型在因果推理方面是否比通用語言模型更好?
• 程式碼提示在描述因果結構方面是否比文本提示更好?
• 程式碼提示的哪些方面使其有效?
• 如何使用程式碼資料提升大型語言模型的因果推理能力?
圖1 任務與研究問題概述
溯因推理的程式碼提示建構如圖2所示,因果結構在主函式中透過執行流程來表示:執行前提,如果滿足假設,則執行結局。事件內容以註解形式嵌入函式,目標函式置於末尾供模型生成。
圖2 溯因推理程式碼提示建構
反事實推理的程式碼提示建構如圖3所示,使用if-elif結構區分原始分支與反事實分支,確保因果邏輯清楚,並透過註解明確任務要求,例如最小化修改原始結局。
圖3 反事實推理程式碼提示建構
在文本提示的設計上,用自然語言描述相同的因果結構;在模型的對比上,選擇了像<LLAMA-2, CODELLAMA>和<GPT-3, CODEX>這樣的大型語言模型對,它們具有相同的結構,只是在文本/程式碼訓練語料庫的比例上有所不同。
對於程式碼提示中建構因素的探討,選擇了資訊、結構、格式和語言四個方面進行干預。
4. 實驗
在結果評估實驗中,溯因推理使用ART資料集,反事實推理使用TimeTravel資料集,評估指標包括BLEU-4、ROUGE-L、CIDEr、BERTScore。零樣本情況下,溯因推理的自動評估結果如表1所示,反事實推理的自動評估結果表2所示;單樣本情況下,評估結果如表3所示;人工評估結果如表4所示。
在干預提示實驗中,在資訊方面,研究兩種類型的先驗資訊:任務指令和函式名,在「無指令」中,我們從提示中刪除任務指令,在「函式名擾動」中,我們用匿名函式X替換原始函式名;在結構方面,一種是將條件結構轉換為順序結構,一種是隨機打亂條件結構中函式的位置;在格式方面,除了原始格式外,還測試了兩種格式:類和列印;在語言方面,將原始的Python程式轉換為另外兩種程式語言,Java和C,以評估程式語言的影響。實驗結果如表5所示。
在微調實驗中,使用現有的程式碼語料庫CodeAlpaca-20k(Chaudhary,2023)來建構微調資料,CodeAlpaca-20k包含20,000個遵循指令的資料,用於將LLAMA-2微調為Code Alpaca模型。對三個7B模型LLAMA-2、QWEN1.5和DEEPSEEK-LLM進行微調,以128的批次大小訓練它們一個輪次,使用AdamW最佳化器,學習率為2e-5,熱身率為0.03。最大長度設定為512,這涵蓋了大部分CodeAlpaca資料。批次大小、輪次數量和學習率這些超參數是透過在ART和TimeTravel的驗證集上進行網格搜尋選擇的。在條件陳述上微調的模型的自動評估結果如表6所示,而為了研究性能提升隨訓練資料量的變化趨勢,將訓練資料的比例從0%控制到100%,並評估微調後模型的性能,結果如圖4所示。
表1 溯因推理的自動評估結果表
表2 反事實推理的自動評估結果表
表3 單樣本設定下評估結果表
表4 人工評估結果表
表5 干預提示實驗結果表
表6 在條件陳述上微調的模型的自動評估結果表
圖4 使用不同比例訓練資料微調後的模型性能圖
實驗表明用程式碼描述複雜的因果結構對大多數模型來說更清楚、更容易理解,並且所有模型在單樣本設定下的表現都優於零樣本設定,程式碼語言模型在大多数設定下仍然優於相應的通用語言模型,並且對於大多數模型來說,程式碼提示優於文本提示,程式碼語言模型和程式碼提示的優勢在不同設定下都是穩健的;合理描述事件之間關係的條件結構在模型進行推理時至關重要,而模型對格式和語言干預更具穩健性,這表明透過精細的提示工程可以進一步提升性能;同時在大多数情況下,從0%到20%的訓練資料觀察到最大的性能提升,這表明僅用少量(少於一千條)條件陳述程式碼,模型的因果推理能力就能大幅提升,條件陳述是能增強因果推理能力的。
5. 總結
本文研究了程式碼語言模型(Code-LLMs)的因果推理能力以及在因果推理任務中使用程式碼提示的有效性。經過證明,在執行複雜因果推理任務時,程式碼語言模型優於相同結構的通用語言模型。與文本提示相比,程式碼提示在描述因果結構方面更有效,提升了廣泛語言模型的性能。本文還進一步分析了程式碼提示不同方面的重要性,發現在程式碼中提供合理的因果結構有助於生成合理的輸出。基於這些觀察結果,本文假設在條件陳述的程式碼語料庫上微調模型可以提升因果推理能力,並透過實驗驗證了這一假設。這些發現表明,程式碼,特別是程式碼中的條件陳述,透過提示和微調在引發和提升語言模型的因果推理能力方面可以發揮重要作用。