APE:大語言模型具有人類水平的提示工程能力

摘要

通過以自然語言指令作為條件輸入,大型語言模型(LLMs)展現出令人印象深刻的通用計算能力。然而,任務表現嚴重依賴于用于引導模型的提示(prompt)質量,而最有效的提示通常是由人類手工設計的。受經典程序合成方法和人類提示工程實踐的啟發,我們提出了自動提示工程師Automatic Prompt Engineer, APE)方法,用于自動生成和選擇指令。在我們的方法中,將“指令”視作“程序”,通過在由LLM提出的一組指令候選中搜索,優化一個目標評分函數,從而選擇最優指令。為了評估所選指令的質量,我們使用另一個LLM在零樣本設定下執行該指令,并評估其表現。大量實驗證明,我們自動生成的指令在24項Instruction Induction任務中全面超越了先前的LLM基線,并在21項BIG-Bench任務中的17項上實現了優于或可比于人類注釋者的性能。我們進行了大量定性和定量分析來探索APE的性能,展示了APE生成的提示不僅能提升少樣本學習效果(只需將其前綴添加至標準的上下文學習提示中),還能找到更優的零樣本chain-of-thought提示,并能引導模型生成更真實和/或更具信息性的內容。

1 引言

大規模和基于注意力機制的架構相結合,使得語言模型具備了前所未有的通用性(Kaplan et al., 2020;Vaswani et al., 2017)。這些被稱為“大型語言模型”(LLMs)的系統在各類任務中表現出卓越,甚至超越人類的能力,包括零樣本和少樣本設定(Brown et al., 2020;Srivastava et al., 2022)。然而,通用性的提升也引出了一個核心問題:我們如何才能讓LLM做我們希望它做的事?

為了解決這個問題并引導LLMs展現出期望行為,近期研究探索了多種方法,包括微調(Ouyang et al., 2022;Ziegler et al., 2019)、上下文學習(Brown et al., 2020),以及多種提示生成方法(Gao, 2021),其中包括軟提示的可微調方法(Qin & Eisner, 2021;Lester et al., 2021)和自然語言提示工程(Reynolds & McDonell, 2021)。其中,自然語言提示工程特別值得關注,因為它為人類與機器之間提供了一種自然的交互接口,這種方法不僅適用于LLMs,也可能對其他通用模型(例如基于提示的圖像生成器,Rombach et al., 2022;Ramesh et al., 2022)具有重要意義。公眾對提示設計與生成的興趣也日益增長(見附錄A示例)。

這一現象背后的原因在于:即使目標結果是可以通過其他指令實現的,樸素語言提示也往往無法產生期望的輸出。因此,用戶需要嘗試多種提示以激發模型產生目標行為,因為他們對于哪些指令與特定模型兼容知之甚少。我們可以將LLM看作執行由自然語言指令定義程序的黑盒計算機:盡管它們能夠執行大量的自然語言程序,但程序的處理方式可能并不符合人類的直覺,且指令的質量只能通過在下游任務中執行后才能被評估(Sanh et al., 2022;Wei et al., 2021)。

在這里插入圖片描述

為了減少在創建和驗證有效指令過程中所需的人力成本,我們提出了一種使用大語言模型(LLM)自動生成和篩選指令的新算法。我們將這一問題稱為自然語言程序合成(natural language program synthesis),并提出將其作為一個黑盒優化問題來解決,利用LLM生成并在啟發式可行的候選解空間中進行搜索。在此過程中,我們從三個方面利用了LLM的通用能力。首先,我們將LLM作為推理模型(Ellis 等,2021;Honovich 等,2022),根據少量輸入-輸出示例生成指令候選項。接著,我們通過計算每條指令在目標LLM下的評分來引導搜索過程。最后,我們提出了一種迭代的蒙特卡洛搜索方法,由LLM生成語義相近的指令變體以改進當前最佳候選項。

直觀地說,我們的算法讓LLM根據示例生成一組指令候選項,并評估哪些指令更具潛力。我們將此算法命名為自動提示工程師(Automatic Prompt Engineer,APE)。我們的主要貢獻如下:

  • 我們將指令生成建模為自然語言程序合成問題,形式化為一個由LLM引導的黑盒優化問題,并提出了樸素的和迭代的蒙特卡洛搜索方法來近似求解。
  • 我們提出的方法 APE 在由模型生成指令的零樣本學習任務中達到了人類水平的表現,在24個Instruction Induction任務中全部通過(24/24),在21個Big-Bench任務中完成了17個(17/21)。
  • 我們提供了廣泛的定性和定量分析,探討了APE的多個方面,并展示了APE在提升小樣本學習效果、發現更優的零樣本思維鏈提示(zero-shot chain of thought prompts)以及引導LLM朝向更真實和/或更具信息性的行為方面的應用。

2 相關工作

大型語言模型
通過在模型規模、訓練數據和計算資源方面對基于transformer的語言模型進行擴展,已經被證明可以在各種下游自然語言處理任務中帶來可預測的性能提升(Vaswani et al., 2017;Devlin et al., 2018;Brown et al., 2020)。隨著規模擴展,LLM展現出了許多涌現能力(Wei et al., 2022a),包括小樣本上下文學習、零樣本問題求解、思維鏈推理、指令遵循和指令誘導(Cobbe et al., 2021;Wei et al., 2022b;Kojima et al., 2022;Sanh et al., 2022;Wei et al., 2021;Ouyang et al., 2022;Honovich et al., 2022)。在本文中,我們將LLM視為能夠執行由自然語言指令指定程序的黑盒計算機,并研究如何利用模型生成的指令來控制LLM的行為。

提示工程
提示(prompting)為人類與通用模型如LLM的交互提供了一種自然直觀的接口。由于其靈活性,提示已被廣泛用于各種NLP任務中(Schick & Schütze, 2021;Brown et al., 2020;Sanh et al., 2022)。然而,LLM對提示的理解方式與人類不同,因此需要精心設計提示,無論是手動(Reynolds & McDonell, 2021)還是自動(Gao et al., 2021;Shin et al., 2020)生成。盡管許多成功的提示微調方法使用基于梯度的方式在連續空間中進行優化(Liu et al., 2021;Qin & Eisner, 2021;Lester et al., 2021),但隨著模型規模的增加,這種方法的計算代價變得越來越高,并且API化的模型使用方式往往不再提供梯度訪問權限。

在本文中,我們借鑒了離散提示搜索方法中的組件,如提示生成(Gao et al., 2021;Ben-David et al., 2021)、提示評分(Davison et al., 2019)和提示釋義(Jiang et al., 2020;Yuan et al., 2021),通過直接在自然語言假設空間中搜索來優化指令。與這些依賴于多個專用模型并嚴重依賴人工模板的工作不同,我們展示了整個搜索過程可以由單一LLM完成。

程序合成
程序合成指的是在“程序空間”中自動搜索,找到滿足特定規范的程序(Gulwani et al., 2017)。現代程序合成支持多種形式的規范,包括輸入-輸出示例(Ellis et al., 2021;Wong et al., 2021)和自然語言(Jain et al., 2022)。可搜索的程序空間也在不斷擴大,從早期受限的領域特定語言逐步發展為支持通用編程語言(Austin et al., 2021)。

與需要結構化假設空間和組件庫的傳統方法(Liang et al., 2010;Ellis et al., 2018)不同,我們利用LLM所提供的結構,在自然語言程序空間中進行搜索。使用推理模型是一種常見的加速搜索的方式,通過限制搜索空間為一小部分可行表達來提高效率(Menon et al., 2013;Lee et al., 2018;Devlin et al., 2017;Ellis et al., 2021)。受此啟發,我們將LLM作為近似推理模型,基于少量示例生成程序候選項。與傳統程序合成方法不同,我們的推理模型無需訓練,并且能夠很好地泛化到各種任務。

3 使用LLM進行自然語言程序合成

我們考慮這樣一個任務:由數據集 D train ? = { ( Q , A ) } { \mathcal { D } } _ { \operatorname { t r a i n } } = \{ ( Q , A ) \} Dtrain?={(Q,A)} 指定,該數據集由來自總體 X X X 的輸入/輸出示例組成,同時還包括一個提示式模型 M M M。自然語言程序合成的目標是找到一個指令 ρ \rho ρ,使得當模型 M M M 接收到 ρ \rho ρ 和給定輸入 Q Q Q 的拼接 [ ρ ; Q ] [\rho ; Q] [ρ;Q] 作為提示時,能夠輸出相應的輸出 A A A。更形式化地,我們將這一過程表述為一個優化問題:尋找指令 ρ \rho ρ,以最大化某個對單個樣本打分函數 f ( ρ , Q , A ) f(\rho, Q, A) f(ρ,Q,A) 在所有可能的 ( Q , A ) (Q, A) (Q,A) 上的期望:

ρ ? = arg ? max ? ρ f ( ρ ) = arg ? max ? ρ E ( Q , A ) [ f ( ρ , Q , A ) ] ( 1 ) \rho^{\star} = \underset{\rho}{\arg\operatorname*{max}} \; f(\rho) = \underset{\rho}{\arg\operatorname*{max}} \; \mathbb{E}_{(Q, A)} \left[ f(\rho, Q, A) \right] \quad(1) ρ?=ρargmax?f(ρ)=ρargmax?E(Q,A)?[f(ρ,Q,A)](1)

需要注意的是, Q Q Q 一般也可以是空字符串,此時我們等價地在優化一個能直接生成輸出 A {A} A 的指令 ρ \rho ρ。盡管人類經常嘗試該任務,但我們對某個特定指令與模型 M M M 之間的兼容性知之甚少。因此,我們提出將這一人類難以處理的問題轉化為一個由LLM引導的黑盒優化過程。

我們的算法 APE(Automatic Prompt Engineer)在兩個關鍵組件中使用LLM:候選指令生成(proposal)和 評分(scoring)。如圖和算法中所示,APE 首先生成一組候選提示,然后根據選定的評分函數對這些候選集進行過濾或改進,最終選出得分最高的指令作為最終輸出。我們將在接下來的部分討論候選生成與評分策略的具體實現方案。

3.1 初始提議分布

由于搜索空間幾乎無限大,找到合適的指令極為困難,這也使得自然語言程序合成在歷史上一直被認為是難以實現的任務。NLP領域的最新進展表明,語言模型在生成多樣的自然語言文本方面表現優異。因此,我們考慮利用預訓練的LLM來提出一組良好的候選解集合 U U U,以引導我們的搜索過程。雖然從LLM中隨機采樣不太可能生成理想的 ( Q , A ) (Q, A) (Q,A) 對,但我們可以改為請求LLM基于輸入/輸出示例近似推斷出那些具有較高得分的最可能指令,即從 P ( ρ ∣ D train ; f ( ρ ) 高 ) P(\rho \mid \mathcal{D}_{\text{train}}; f(\rho) \text{ 高}) P(ρDtrain?;f(ρ)?) 中進行近似采樣。

在這里插入圖片描述

正向模式生成(Forward Mode Generation)
我們考慮兩種從 P ( ρ ∣ D t r a i n , f ( ρ ) i s h i g h ) P ( \rho \, | \, \mathcal { D } _ { \mathrm { t r a i n } } , \ f ( \rho ) \ \mathrm { i s \ h i g h } ) P(ρDtrain?,?f(ρ)?is?high) 中生成高質量候選項的方法。第一種方法是基于“正向”模式的生成,通過將該分布 P ( ρ ∣ D t r a i n , f ( ρ ) i s h i g h ) P ( \rho \, | \, \mathcal { D } _ { \mathrm { t r a i n } } , \ f ( \rho ) \ \mathrm { i s \ h i g h } ) P(ρDtrain?,?f(ρ)?is?high) 翻譯為自然語言文本。例如,在我們的指令誘導實驗中(第4.1小節),我們遵循 Honovich 等人(2022)的方法,使用圖2(上)中的提示方式來提示LLM。

反向模式生成(Reverse Mode Generation)
盡管“正向”模型對大多數預訓練LLM而言可以直接使用,但將 P ( ρ ∣ D t r a i n , f ( ρ ) i s h i g h ) P ( \rho \, | \, \mathcal { D } _ { \mathrm { t r a i n } } , \ f ( \rho ) \ \mathrm { i s \ h i g h } ) P(ρDtrain?,?f(ρ)?is?high) 翻譯為自然語言文本在不同任務中仍需要自定義設計。這是因為指令通常出現在段落的開頭,而“正向”模型只能從左到右生成文本,這要求指令必須出現在提示的末尾才能被預測。因此,我們希望采用一種更靈活的方法,使得指令可以出現在文本中的任意位置。

為了解決這一問題,我們提出“反向”模式生成方法,利用具備填空能力的LLM(例如 T5(Raffel et al., 2020)、GLM(Du et al., 2022)以及 InsertGPT(Bavarian et al., 2022))來推斷缺失的指令。我們的“反向”模型通過填空的方式直接從 P ( ρ ∣ D t r a i n , f ( ρ ) i s h i g h ) P ( \rho \, | \, \mathcal { D } _ { \mathrm { t r a i n } } , \ f ( \rho ) \ \mathrm { i s \ h i g h } ) P(ρDtrain?,?f(ρ)?is?high) 中進行采樣。圖2(中)展示了這種模板的一個示例。

定制提示(Customized Prompts)
需要注意的是,根據所使用的評分函數的不同,可能存在比上述樣例更合適的提示方式。例如,在我們的 TruthfulQA 實驗中,我們從原始數據集中人類設計的指令出發(Lin et al., 2022),并請求“反向”模型生成符合缺失上下文的初始指令樣本(見圖2(下))。

在這里插入圖片描述

3.2 評分函數

為了將我們的問題建模為黑盒優化問題,我們選擇一個評分函數,用以準確衡量數據集與模型生成數據之間的一致性。在我們的指令誘導實驗中,我們考慮了兩種潛在的評分函數,下面將進行介紹。在 TruthfulQA 實驗中,我們主要采用 Lin 等人(2022)提出的自動化度量指標,這些指標與執行準確率(execution accuracy)類似。在每種情況下,我們使用公式(1)對生成指令的質量進行評估,并在保留的測試數據集 D test \mathcal{D}_{\text{test}} Dtest? 上取期望。

執行準確率(Execution Accuracy)
首先,我們考慮使用 Honovich 等人(2022)提出的執行準確率指標來評估指令 ρ \rho ρ 的質量,記作 f exec f_{\text{exec}} fexec?。在大多數情況下,執行準確率被簡單地定義為 0-1 損失函數: f ( ρ , Q , A ) = 1 [ M ( [ ρ ; Q ] ) = A ] f ( \rho , Q , A ) = \mathbb { 1 } \left[ \mathcal { M } ( [ \rho ; Q ] ) = A \right] f(ρ,Q,A)=1[M([ρ;Q])=A] ,其中, 1 [ ? ] \mathbf{1}[\cdot] 1[?] 是指示函數,若括號內的條件為真則返回 1,否則返回 0。在某些任務中,執行準確率還會考慮不變性(invariants);例如,它可能是一個對順序不敏感的集合匹配損失函數,具體定義詳見 Honovich 等人(2022)附錄 A。

對數概率
我們進一步考慮一種更柔和的概率評分函數,我們假設這種方法在搜索低質量指令候選時,能夠通過提供更細粒度的信號來改善優化效果。具體來說,我們考慮在目標模型 MM 下,給定指令和問題時期望答案的對數概率,即每個樣本上的 log ? P ( A ∣ [ ρ ; Q ] ) \log P(A \mid [\rho; Q]) logP(A[ρ;Q])

溫馨提示:
閱讀全文請訪問"AI深語解構" APE:大語言模型具有人類水平的提示工程能力

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87865.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87865.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87865.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

X86 CPU 工作模式

1.概述 1.實模式 實模式又稱實地址模式,實,即真實,這個真實分為兩個方面,一個方面是運行真實的指令,對指令的動作不作區分,直接執行指令的真實功能,另一方面是發往內存的地址是真實的&#xff…

Java設計模式之行為型模式(策略模式)介紹與說明

一、策略模式簡介 策略模式(Strategy Pattern)是一種行為型設計模式,它定義了一系列算法,并將每個算法封裝起來,使它們可以相互替換,且算法的變化不會影響使用算法的客戶。策略模式讓算法獨立于使用它的客…

【BIOS+MBR 微內核手寫實現】

本文基于BIOS+MBR的架構,從四部分講解微內核是如何實現的: 1)搭建微內核編譯調試環境 2)梳理微內核的代碼結構:偽指令講解 3)手寫實現微內核框架,輸出簡單的字符串 4)講解微內核啟動階段的具體運行過程 先完成內核工程創建,如下圖 我們這里使用nasm風格的匯編編寫,…

從C/C++遷移到Go:內存管理思維轉變

一、引言 在當今高速發展的軟件開發世界中,語言遷移已成為技術進化的常態。作為一名曾經的C/C開發者,我經歷了向Go語言轉變的全過程,其中最大的認知挑戰來自內存管理模式的根本性差異。 我記得第一次接觸Go項目時的困惑:沒有析構函…

正確設置 FreeRTOS 與 STM32 的中斷優先級

在裸機開發(非 RTOS)時,大多數 STM32 外設的中斷優先級通常不需要手動配置,原因如下: ? 裸機開發中默認中斷優先級行為 特點說明默認中斷優先級為 0如果你不設置,STM32 HAL 默認設置所有外設中斷為 0&…

EasyExcel之SheetWriteHandler:解鎖Excel寫入的高階玩法

引言在 EasyExcel 強大的功能體系中,SheetWriteHandler 接口是一個關鍵的組成部分。它允許開發者在寫入 Excel 的 Sheet 時進行自定義處理,為實現各種復雜的業務需求提供了強大的支持。通過深入了解和運用 SheetWriteHandler 接口,我們能夠更…

Python單例模式魔法方法or屬性

1.單例模式概念定義:單例模式(Singleton Pattern)是一種創建型設計模式,它確保一個類只能有一個實例,并提供一個全局訪問點來獲取該實例。這種模式在需要控制資源訪問、配置管理或協調系統操作時特別有用。核心特點:私有構造函數:防止外部通過…

【Kubernetes系列】Kubernetes 資源請求(Requests)

博客目錄 引言一、資源請求的基本概念1.1 什么是資源請求1.2 請求與限制的區別 二、CPU 請求的深入解析2.1 CPU 請求的單位與含義2.2 CPU 請求的調度影響2.3 CPU 請求與限制的關系 三、內存請求的深入解析3.1 內存請求的單位與含義3.2 內存請求的調度影響3.3 內存請求的特殊性 …

大型語言模型中的自動化思維鏈提示

摘要 大型語言模型(LLMs)能夠通過生成中間推理步驟來執行復雜的推理任務。為提示演示提供這些步驟的過程被稱為思維鏈(CoT)提示。CoT提示有兩種主要范式。一種使用簡單的提示語,如“讓我們一步一步思考”,…

Private Set Generation with Discriminative Information(2211.04446v1)

1. 遇到什么問題,解決了什么遇到的問題現有差分隱私生成模型受限于高維數據分布建模的復雜性,合成樣本實用性不足。深度生成模型訓練依賴大量數據,加入隱私約束后更難優化,且不保證下游任務(如分類)的最優解…

C++編程語言入門指南

一、C語言概述 C是由丹麥計算機科學家Bjarne Stroustrup于1979年在貝爾實驗室開發的一種靜態類型、編譯式、通用型編程語言。最初被稱為"C with Classes"(帶類的C),1983年更名為C。它既具有高級語言的抽象特性,又保留了底層硬件操作能力&…

ZED相機與Foxglove集成:加速機器人視覺調試效率的實用方案

隨著機器人技術的發展,實時視覺數據流的高效傳輸和可視化成為提升系統性能的重要因素。通過ZED相機(包括ZED 2i和ZED X)與Foxglove Studio平臺的結合,開發者能夠輕松訪問高質量的2D圖像、深度圖和點云數據,從而顯著提高…

目標檢測新紀元:DETR到Mamba實戰解析

🚀【實戰分享】目標檢測的“后 DE?”時代:DETR/DINO/RT-DETR及新型骨干網絡探索(含示例代碼) 目標檢測從 YOLO、Faster R-CNN 到 Transformer 結構的 DETR,再到 DINO、RT-DETR,近兩年出現了許多新趨勢&am…

【IOS】XCode創建firstapp并運行(成為IOS開發者)

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 這篇文章主要介紹XCode創建firstapp并運行 學其所用,用其所學。——梁啟超 歡迎來到我的博客,一起學習,共同進步。 喜歡的朋友可以關注一下,下次更新不迷路…

class類和style內聯樣式的綁定 + 事件處理 + uniapp創建自定義頁面模板

目錄 一.class類的綁定 1.靜態編寫 2.動態編寫 二.style內聯樣式的綁定 三.事件處理 1.案例1 2.案例2 四.uniapp創建自定義頁面模板 1.為什么要這么做? 2.步驟 ①打開新建頁面的界面 ②在彈出的目錄下,新建模板文件 ③用HBuilderX打開該模板…

android 卡頓和丟幀區別

Android 卡頓(Jank)與丟幀(Frame Drop)的核心區別在于問題本質與用戶感知,以下是分層解析: ? 一、本質差異 維度卡頓(Jank)丟幀(Frame Drop)定義用戶可感知…

【python實用小腳本-125】基于 Python 的 Gmail 郵件發送工具:實現高效郵件自動化

引言 在現代辦公和開發環境中,郵件通信是一種重要的溝通方式。自動化發送郵件可以大大提高工作效率,例如發送通知、報告或文件。本文將介紹一個基于 Python 的 Gmail 郵件發送工具,它能夠通過 Gmail 的 SMTP 服務器發送郵件,并支持…

gateway斷言配置詳解

一、Predicate - 斷? 1、簡單用法 spring:cloud:gateway:routes:- id: after_routeuri: https://example.orgpredicates:- After2017-01-20T17:42:47.789-07:00[America/Denver] 2、自定義斷言 新建類VipRoutePredicateFactory,注意VipRoutePredicateFactory名字…

基于大模型的尿毒癥全流程預測與診療方案研究報告

目錄 一、引言 1.1 研究背景與意義 1.2 研究目的與方法 1.3 國內外研究現狀 二、尿毒癥相關理論基礎 2.1 尿毒癥的定義、病因與發病機制 2.2 尿毒癥的癥狀與診斷標準 2.3 尿毒癥的治療方法概述 三、大模型技術原理與應用 3.1 大模型的基本概念與發展歷程 3.2 大模型…

裸金屬服務器租用平臺-青蛙云

企業對服務器性能與靈活性的要求與日俱增。青蛙云M-啟強裸金屬服務器租用平臺應運而生,為企業提供了一種兼具物理機性能和云計算彈性的解決方案。裸金屬服務器租用平臺的優勢?(一)高配性能,無虛擬化開銷?裸金屬服務器直接運行在物理硬件之上&#xff0…