Multi-Stage Language Model Programs:提升語(yǔ)言模型程序的新策略 原創(chuàng)
在自然語(yǔ)言處理(NLP)領(lǐng)域,語(yǔ)言模型程序(Language Model Programs)正逐漸成為推動(dòng)任務(wù)進(jìn)展的關(guān)鍵力量。這些由多個(gè)模塊化語(yǔ)言模型(LM)調(diào)用組成的復(fù)雜管道,為解決復(fù)雜的NLP任務(wù)提供了新的思路和方法。然而,構(gòu)建這些管道并非易事,其中一個(gè)關(guān)鍵挑戰(zhàn)就是如何優(yōu)化提示(prompts),使得所有模塊都能高效協(xié)同工作。今天我們就來(lái)介紹一篇來(lái)自DSPy一作、斯坦福大學(xué)博士生、并且即將成為MIT助理教授的Omar Khattab領(lǐng)導(dǎo)的一項(xiàng)有意思的工作!
一、研究背景
(一)語(yǔ)言模型程序的發(fā)展與挑戰(zhàn)
隨著技術(shù)的發(fā)展,語(yǔ)言模型在解決復(fù)雜任務(wù)時(shí),常常需要運(yùn)用復(fù)雜的提示技術(shù),并將其組合成多階段的管道。例如在問(wèn)答系統(tǒng)、文本生成、信息檢索等任務(wù)中,通過(guò)將多個(gè)語(yǔ)言模型按特定順序和方式組合,可以實(shí)現(xiàn)更強(qiáng)大的功能。但是,目前構(gòu)建這些管道大多依賴于手動(dòng)的“提示工程”(prompt engineering),即通過(guò)反復(fù)試驗(yàn)來(lái)設(shè)計(jì)提示,以促使特定的語(yǔ)言模型在特定的管道步驟中運(yùn)行。這種方法不僅耗時(shí)費(fèi)力,而且難以保證效果的最優(yōu)性。
(二)現(xiàn)有提示優(yōu)化方法的局限性
近年來(lái),雖然出現(xiàn)了一些提示優(yōu)化器(prompt optimizers),如APE、OPRO和EvoPrompt等,但它們大多針對(duì)單個(gè)語(yǔ)言模型的提示優(yōu)化,無(wú)法直接應(yīng)用于多階段的語(yǔ)言模型程序。在多階段程序中,由于缺乏對(duì)單個(gè)語(yǔ)言模型調(diào)用的黃金標(biāo)簽或評(píng)估指標(biāo),使得提示優(yōu)化變得更加困難。
圖1:優(yōu)化問(wèn)題的一個(gè)示例,以一個(gè)多跳檢索語(yǔ)言模型程序展示。給定一些問(wèn)答對(duì)和一個(gè)度量標(biāo)準(zhǔn),優(yōu)化器為每個(gè)階段提出新的指令并引導(dǎo)新的演示(未圖示)。
二、問(wèn)題定義與挑戰(zhàn)分析
(一)問(wèn)題正式化
考慮一個(gè)由m個(gè)模塊組成的語(yǔ)言模型程序Φ,每個(gè)模塊使用一個(gè)語(yǔ)言模型,并由一個(gè)包含一組變量(開(kāi)放插槽)v的提示模板pi定義。我們的目標(biāo)是找到一個(gè)變量到字符串的總分配,使得程序在給定的訓(xùn)練集D上,根據(jù)評(píng)估指標(biāo)μ達(dá)到最優(yōu)性能。這個(gè)問(wèn)題面臨著諸多挑戰(zhàn),例如每個(gè)字符串可以取任意值,評(píng)估指標(biāo)只能在整個(gè)任務(wù)層面提供監(jiān)督,無(wú)法獲取語(yǔ)言模型的梯度或嵌入,以及通常只有小數(shù)據(jù)集和有限的語(yǔ)言模型調(diào)用預(yù)算等。
(二)主要挑戰(zhàn)
- 提案挑戰(zhàn)(Proposal Challenge) 可能的提示空間非常大,而且隨著模塊數(shù)量的增加,這個(gè)問(wèn)題更加嚴(yán)重。因此,提出一些高質(zhì)量的指令就變得至關(guān)重要。
- 信用分配挑戰(zhàn)(Credit Assignment Challenge) 需要聯(lián)合優(yōu)化許多不同的變量,這些變量用于參數(shù)化所有模塊的提示。為了合理分配搜索努力,我們必須有效地推斷每個(gè)變量配置的影響。
三、解決策略
(一)應(yīng)對(duì)提案挑戰(zhàn)的策略
- 引導(dǎo)演示(Bootstrapping Demonstrations)一種簡(jiǎn)單而有效的策略是通過(guò)從訓(xùn)練集中采樣輸入,運(yùn)行程序Φ生成輸入/輸出軌跡,將成功的軌跡作為潛在的標(biāo)記演示(即有效輸入/輸出示例)。然后,從這些潛在演示中選擇組合作為有效的少樣本示例用于提示。
- 基礎(chǔ)設(shè)定(Grounding)為了引導(dǎo)提案語(yǔ)言模型為給定模塊生成高效的指令,我們?yōu)槠涮峁┫嚓P(guān)的上下文信息,如數(shù)據(jù)的屬性、程序的控制流以及成功任務(wù)完成的示例等。通過(guò)構(gòu)建一個(gè)零樣本語(yǔ)言模型程序來(lái)描述原始數(shù)據(jù)集的模式、總結(jié)程序的控制流、引導(dǎo)程序演示以及收集每個(gè)階段的提示及其評(píng)估分?jǐn)?shù),并將這些信息作為上下文提供給提案語(yǔ)言模型。
- 學(xué)習(xí)提案(Learning To Propose)每個(gè)提案策略都有一些超參數(shù),如指令生成的溫度以及是否使用數(shù)據(jù)摘要、程序控制流等來(lái)設(shè)定提案語(yǔ)言模型的基礎(chǔ)。由于這些超參數(shù)的最優(yōu)配置可能因任務(wù)、程序和提案語(yǔ)言模型而異,我們通過(guò)參數(shù)化提案超參數(shù),并在多次試驗(yàn)中學(xué)習(xí)一個(gè)貝葉斯模型,以找到適合給定任務(wù)、程序和語(yǔ)言模型設(shè)置的提案策略。
圖2:引導(dǎo)隨機(jī)搜索。在第1步中,通過(guò)將訓(xùn)練輸入在程序Φ中運(yùn)行,并保留根據(jù)度量標(biāo)準(zhǔn)μ判斷能產(chǎn)生足夠高得分輸出的軌跡,來(lái)引導(dǎo)演示。在第2步中,使用隨機(jī)搜索對(duì)這些引導(dǎo)出的演示集進(jìn)行搜索,并返回性能最佳的集合。
(二)應(yīng)對(duì)信用分配挑戰(zhàn)的策略
- 貪婪策略(Greedy)分別對(duì)語(yǔ)言模型程序的單階段變化進(jìn)行提案和評(píng)估。雖然這種方法可以避免將錯(cuò)誤錯(cuò)誤地歸因到不正確的階段,但它效率低下,因?yàn)槊看沃荒軕?yīng)用一個(gè)變化,而且某些階段的變化可能要在其他階段先改進(jìn)后才能對(duì)程序級(jí)性能產(chǎn)生影響。
- 替代策略(Surrogate)利用貝葉斯學(xué)習(xí)構(gòu)建一個(gè)替代模型,通過(guò)學(xué)習(xí)從先前評(píng)估中預(yù)測(cè)不同參數(shù)組合的質(zhì)量,使我們能夠聚焦于搜索空間中有希望的區(qū)域。這種基于替代的優(yōu)化方法可以有效地優(yōu)化離散的現(xiàn)有參數(shù)提案集,但它的缺點(diǎn)是只能對(duì)固定的提案集進(jìn)行優(yōu)化,無(wú)法利用過(guò)去的評(píng)估結(jié)果來(lái)改進(jìn)提案本身。
- 基于歷史的策略(History - Based)假設(shè)給定過(guò)去評(píng)估的歷史,一個(gè)足夠強(qiáng)大的語(yǔ)言模型可以進(jìn)行信用分配。通過(guò)將評(píng)估過(guò)的指令及其分?jǐn)?shù)包含在上下文中,讓提案語(yǔ)言模型學(xué)習(xí)分配信用并輸出新的指令。
四、算法實(shí)例與實(shí)驗(yàn)
(一)算法實(shí)例
- 引導(dǎo)隨機(jī)搜索(Bootstrap Random Search)首先通過(guò)引導(dǎo)演示過(guò)程為每個(gè)模塊引導(dǎo)出一定數(shù)量的少樣本示例,然后使用隨機(jī)搜索在這些引導(dǎo)出的演示集上進(jìn)行搜索,返回性能最佳的集合。
- 模塊級(jí)OPRO(Module - Level OPRO)將模塊級(jí)指令和程序分?jǐn)?shù)對(duì)的歷史作為輸入提供給提案語(yǔ)言模型,為每個(gè)模塊生成新的指令,然后在程序中評(píng)估這些指令,并將結(jié)果分?jǐn)?shù)與每個(gè)模塊的指令一起添加回模塊的歷史中,重復(fù)這個(gè)過(guò)程直到達(dá)到最大迭代次數(shù),最后返回得分最高的程序參數(shù)化。
- MIPRO(Multiprompt Instruction PRoposal Optimizer)首先通過(guò)引導(dǎo)演示和基礎(chǔ)設(shè)定策略為每個(gè)模塊引導(dǎo)出少樣本示例和指令,并初始化潛在的分類變量。然后使用樹結(jié)構(gòu)的Parzen估計(jì)器的采樣規(guī)則選擇用于參數(shù)化Φ的指令和少樣本示例。接著在隨機(jī)選擇的小批量樣本上對(duì)參數(shù)化的Φ進(jìn)行評(píng)分,并使用這些分?jǐn)?shù)更新估計(jì)器對(duì)參數(shù)質(zhì)量的先驗(yàn)。最后,每隔一定步驟,在整個(gè)訓(xùn)練集上評(píng)估具有最高平均分?jǐn)?shù)的候選參數(shù)化,返回最優(yōu)的分配。
圖3:模塊級(jí)OPRO優(yōu)化器。模塊級(jí)指令和程序分?jǐn)?shù)對(duì)的歷史作為輸入提供給提案語(yǔ)言模型,以便為每個(gè)模塊生成一條新指令。然后在程序中對(duì)這些指令進(jìn)行評(píng)估,并將所得分?jǐn)?shù)與每個(gè)模塊的指令一起添加回模塊的歷史記錄中。這個(gè)過(guò)程重復(fù)I次。
圖4:MIPRO優(yōu)化器。在第1步中,使用與引導(dǎo)隨機(jī)搜索第1步相同的過(guò)程引導(dǎo)演示。在第2步中,使用3.1節(jié)中描述的基礎(chǔ)設(shè)定策略提出指令。在第3步中,使用貝葉斯優(yōu)化來(lái)找到指令和演示候選的最佳性能組合。
(二)實(shí)驗(yàn)設(shè)置
- 基準(zhǔn)測(cè)試(Benchmark)開(kāi)發(fā)了七個(gè)任務(wù)來(lái)評(píng)估語(yǔ)言模型程序優(yōu)化器,包括四個(gè)多階段程序和兩個(gè)單階段程序,涵蓋了問(wèn)答、分類、自然語(yǔ)言推理等多種任務(wù)類型。使用500個(gè)示例進(jìn)行訓(xùn)練,500個(gè)用于開(kāi)發(fā),2000個(gè)(或更小的完整測(cè)試集)用于測(cè)試。
- 方法與模型(Methods & Models)對(duì)指令僅優(yōu)化、少樣本優(yōu)化以及指令和少樣本聯(lián)合優(yōu)化三種情況進(jìn)行了評(píng)估。在不同的優(yōu)化場(chǎng)景下,比較了多種優(yōu)化器的性能,如Module - Level OPRO、0 - Shot MIPRO、0 - Shot MIPRO++、Bootstrap Random Search、Bayesian Bootstrap等,并使用未優(yōu)化的語(yǔ)言模型程序作為基線。同時(shí),為了評(píng)估基礎(chǔ)設(shè)定的效用,還比較了帶有和不帶有基礎(chǔ)設(shè)定的Module - Level OPRO。在實(shí)驗(yàn)中,使用GPT - 3.5作為提案語(yǔ)言模型,Llama3 - 8B作為任務(wù)模型,并根據(jù)任務(wù)的不同,在引導(dǎo)少樣本演示時(shí)可能會(huì)切換使用的模型。
表1:DSPy優(yōu)化器基準(zhǔn)測(cè)試和相關(guān)程序。我們?cè)谄邆€(gè)不同的程序上對(duì)我們的優(yōu)化器進(jìn)行基準(zhǔn)測(cè)試。
(三)實(shí)驗(yàn)結(jié)果與討論
- 引導(dǎo)演示的重要性對(duì)于大多數(shù)任務(wù),優(yōu)化引導(dǎo)的演示作為少樣本示例對(duì)于實(shí)現(xiàn)最佳性能至關(guān)重要。通過(guò)實(shí)驗(yàn)證明,即使是簡(jiǎn)單的引導(dǎo)隨機(jī)搜索,在除了一個(gè)任務(wù)之外的所有任務(wù)中,都比最佳的僅指令優(yōu)化器表現(xiàn)更好。
- MIPRO的優(yōu)勢(shì)使用MIPRO聯(lián)合優(yōu)化指令和少樣本示例通常能獲得最佳的整體性能。但也存在一些例外情況,對(duì)于某些任務(wù),如HotPotQA和Heart Disease等,可能由于任務(wù)本身的特點(diǎn),指令優(yōu)化的價(jià)值相對(duì)較小。
- 指令優(yōu)化的適用場(chǎng)景對(duì)于具有條件規(guī)則且這些規(guī)則對(duì)語(yǔ)言模型不明顯且無(wú)法通過(guò)有限的少樣本示例表達(dá)的任務(wù),指令優(yōu)化最為重要。例如在HotPotQA Conditional任務(wù)中,即使是0 - shot指令優(yōu)化也優(yōu)于僅演示優(yōu)化。
- 基礎(chǔ)設(shè)定的效果基礎(chǔ)設(shè)定對(duì)于指令提案總體上是有幫助的,但最佳的提案策略因任務(wù)而異。在某些任務(wù)中,如HotPotQA和HoVer,基礎(chǔ)設(shè)定對(duì)性能提升至關(guān)重要,而在ScoNe任務(wù)中,似乎會(huì)損害性能。這也促使了像MIPRO++這樣能夠針對(duì)給定任務(wù)學(xué)習(xí)自定義提案策略的方法的出現(xiàn)。
- 進(jìn)一步探索的空間通過(guò)比較不同優(yōu)化器的性能,發(fā)現(xiàn)結(jié)果是復(fù)雜的。不同的優(yōu)化器在不同的任務(wù)和場(chǎng)景下各有優(yōu)劣,未來(lái)還需要進(jìn)一步研究在不同優(yōu)化預(yù)算下這些優(yōu)化器的性能差異,以及探索如何讓優(yōu)化器在不依賴手寫輸入的情況下學(xué)習(xí)任務(wù)動(dòng)態(tài)等問(wèn)題。
表2:5次運(yùn)行的平均結(jié)果,分為僅優(yōu)化指令(即“0 - shot”提示)、僅優(yōu)化演示以及兩者同時(shí)優(yōu)化。每列中性能最佳的值用粗體突出顯示。這些粗體值表示與第二高值相比的最高平均分?jǐn)?shù),相應(yīng)運(yùn)行平均值之間的威爾科克森符號(hào)秩檢驗(yàn)(p <.05)支持其顯著性。如果顯著性未得到確認(rèn),則多個(gè)結(jié)果用粗體表示它們具有可比的性能。
五、研究貢獻(xiàn)與局限
(一)貢獻(xiàn)
- 對(duì)語(yǔ)言模型程序的提示優(yōu)化問(wèn)題進(jìn)行了形式化定義,并提出了一個(gè)算法設(shè)計(jì)空間,包括三種應(yīng)對(duì)提示提案挑戰(zhàn)的策略和三種解決信用分配問(wèn)題的策略。
- 發(fā)布了一個(gè)涵蓋七個(gè)任務(wù)的語(yǔ)言模型程序優(yōu)化器基準(zhǔn)測(cè)試套件,為評(píng)估不同優(yōu)化器的性能提供了統(tǒng)一的標(biāo)準(zhǔn)。
- 構(gòu)建并評(píng)估了一組可能的提示優(yōu)化算法,其中MIPRO優(yōu)化器在七個(gè)任務(wù)中的五個(gè)任務(wù)上優(yōu)于基線優(yōu)化器,為實(shí)際應(yīng)用提供了有效的優(yōu)化方法。
- 為從業(yè)者提供了五條關(guān)于優(yōu)化語(yǔ)言模型程序的關(guān)鍵經(jīng)驗(yàn)教訓(xùn),有助于指導(dǎo)實(shí)踐操作。
(二)局限
- 研究是在固定預(yù)算下進(jìn)行的,沒(méi)有探討在極低或極高預(yù)算場(chǎng)景下優(yōu)化動(dòng)態(tài)的差異。
- 在實(shí)驗(yàn)中使用了固定的提案語(yǔ)言模型和任務(wù)語(yǔ)言模型,未來(lái)需要評(píng)估在使用不同模型時(shí)方法的一致性表現(xiàn)。
- 優(yōu)化器在推斷復(fù)雜任務(wù)的規(guī)則方面能力有限,尤其是在沒(méi)有手寫種子提示的情況下。
- 雖然建立了一個(gè)涵蓋多種任務(wù)和程序的基準(zhǔn),但對(duì)于日益復(fù)雜的任務(wù)和程序,優(yōu)化器方法的性能還有待進(jìn)一步研究和完善。
總的來(lái)說(shuō),這項(xiàng)研究在語(yǔ)言模型程序提示優(yōu)化方面取得了重要進(jìn)展,為未來(lái)的研究和實(shí)踐提供了有價(jià)值的參考和方向。盡管存在一些局限,但也為進(jìn)一步的探索和改進(jìn)提供了空間。
本文轉(zhuǎn)載自公眾號(hào)AIGC最前線 作者:不是小馬哥啊
