您當前的位置 :實況網-重新發現生活>資訊頻道 > 熱點 > 正文
關于 Prompt Engineering 你該了解啥?OpenAI 應用研究負責人幫你梳理了-世界資訊
2023-04-23 01:33:25 來源:機器之心

選自 Lil ’ Log

機器之心編譯


(相關資料圖)

編輯:rome rome

隨著 ChatGPT、GPT-4 等模型的興起,人們對如何創建提示以獲得想要的輸出越來越感興趣。研究者對特定提示的響應可能很難預測,并且會因模型的不同而不同。本文來自 OpenAI 的翁麗蓮(Lilian Weng) 撰文介紹了關于提示的一些內容,包括基礎提示、指令提示等內容。

Prompt 工程,也稱為 In-Context Prompt,是指在不更新模型權重的情況下如何與 LLM 交流以引導其行為來獲得所需結果的方法。這是一門經驗科學,Prompt 工程方法的效果在模型之間可能會有很大差異,因此需要大量的實驗和啟發式方法。

本文來自 OpenAI 的 Lilian Weng ( 翁麗蓮 ) 介紹了一些關于提示工程的知識。翁麗蓮為 OpenAI 人工智能應用研究的負責人,2018 年加入 OpenAI,在 GPT-4 項目中主要參與預訓練、強化學習 & 對齊、模型安全等方面的工作。

主要內容包含以下章節,下面我們看看本文主要內容。

基礎 Prompt

Zero-shot 和 few-shot 學習是 prompt 模型的兩種最基本的方法,許多關于 LLM 論文都有涉及,并常用于評估 LLM 的性能。

Zero-Shot 學習

Zero-Shot 學習是簡單地將任務文本輸入模型并要求其返回結果。(所有情感分析示例均來自 SST-2)

Text: i"ll bet the video game is a lot more fun than the film.Sentiment:

Few-shot 學習

Few-shot 學習提供了一組關于目標任務的高質量的演示,每個演示都包含目標任務的輸入和期望的輸出。當模型首先看到好的例子時,它可以更好地理解人類的意圖和對所需答案的標準。因此,與 zero-shot 學習相比,few-shot 學習通常會導致更好的性能。然而,這樣的代價是消耗更多的 token,并且當輸入和輸出文本很長時,可能會達到上下文長度限制。

Text: ( lawrence bounces ) all over the stage, dancing, running, sweating, mopping his face and generally displaying the wacky talent that brought him fame in the first place.Sentiment: positive

Text: despite all evidence to the contrary, this clunker has somehow managed to pose as an actual feature movie, the kind that charges full admission and gets hyped on tv and purports to amuse small children and ostensible adults.Sentiment: negative

Text: for the first time in years, de niro digs deep emotionally, perhaps because he"s been stirred by the powerful work of his co-stars.Sentiment: positive

Text: i"ll bet the video game is a lot more fun than the film.Sentiment:

許多研究探討了如何構建上下文示例以最大限度地提高性能,并觀察到 prompt 格式、訓練示例和示例順序的選擇可能導致截然不同的性能,從接近隨機猜測到接近 SOTA。

Zhao 等人的研究調查了 few-shot 分類情況,并提出幾個導致高方差的原因(他們在實驗中使用 GPT-3):(1)如果標簽在示例之間的分布不平衡,會導致 Majority label 偏差;(2) Receny 偏差是指模型可能在最后重復標簽的趨勢;(3) Common token 偏差表明 LLM 傾向于生成常見的 token 而不是罕見的 token。為了克服這類偏差,他們提出了一種方法來校準模型輸出的標簽概率,使得當輸入字符串為 N/A 時,標簽的概率輸出變為均勻分布。

樣本選擇小技巧

在 embedding 空間中使用 k-NN 聚類選擇與測試示例在語義上相似的示例 ( Liu et al., 2021);

為了選擇多樣化且具有代表性的示例集, [ Su et al. ( 2022 ) ] 提出使用基于圖的方法: ( 1 ) 首先,構造一個有向圖 G= ( V,E ) 基于嵌入(例如通過 SBERT 或其他嵌入模型)樣本之間的余弦相似度,其中每個節點指向其 k 個最鄰近節點; ( 2 ) 從一組選定樣本 L= 和一組剩余樣本 U 開始。每個樣本 u ∈ U 的 score 表示為:,如果選擇了 v 的許多鄰近節點,則 s ( v ) 很低,因此評分鼓勵選擇不同的樣本;

[ Rubin et al. ( 2022 ) ] 提出通過特定于一個訓練數據集的對比學習來訓練 embedding,以進行上下文學習樣本選擇。給定每個訓練對 ( x,y ) ,一個示例 e_i(格式化的輸入 - 輸出對)的質量可以通過 LM 分配的條件概率來衡量:,可以將其他具有 top-k 和 bottom-k 分數的示例識別為每個訓練對的正負候選集,并將其用于對比學習;

一些研究人員嘗試使用 Q-Learning 來進行樣本選擇 ( Zhang et al. 2022 ) ;

受基于不確定性的主動學習的啟發, [ Diao et al. ( 2023 ) ] 建議在多次抽樣試驗中識別熵較大的例子。然后注釋這些示例以用于 few-shot prompt。

關于樣本排序的小技巧

建議保持樣本選擇的多樣性、與測試樣本相關并以隨機順序排列,以避免 Majority Label bias 和 Recency bias;

增加模型大小或包含更多訓練樣本并不能減少不同上下文樣本排列的方差。同一順序可能適用于一個模型,但對另一個模型效果不佳。當驗證集有限時,考慮選擇順序,使得模型不會產生極不平衡的預測或對其預測過于自信 ( Lu et al. 2022 ) 。

指令 prompt

在 prompt 中使用 few-shot 示例的目的是向模型解釋我們的意圖,換句話說,以演示的形式向模型描述任務指令。然而,few-shot 樣本在標記使用方面可能很昂貴,并且由于上下文長度有限,它會限制輸入長度。那么,為什么不直接給出指令呢?

Instructed LM 模型(例如 InstructGPT、自然指令)通過高質量的元組(任務指令,輸入,正確輸出)來微調預訓練模型,以使 LM 更好地理解用戶意圖并遵循指令。RLHF(來自人類反饋的強化學習)是一種常用的方法。指令跟隨式微調的好處在于,它使模型更加符合人類意圖,大大降低通信成本。

與指令模型交互時,應該詳細描述任務要求,盡量具體和精確,避免說 " 不要做某事 ",而是具體說明要做什么。

Please label the sentiment towards the movie of the given movie review. The sentiment label should be "positive" or "negative". Text: i"ll bet the video game is a lot more fun than the film. Sentiment:

向指定群體解釋是另一種聰明的指示方式,例如為孩子們制作教育資料

Describe what is quantum physics to a 6-year-old.

以及安全的內容

... in language that is safe for work.

情境指令學習 [ Ye et al. 2023 ] 將 few-shot 學習與指令 prompt 相結合。它在 prompt 中包含多個跨不同任務的演示示例,每個演示都由指令、任務輸入和輸出組成。請注意,他們的實驗僅針對分類任務,指令 prompt 包含所有標簽選項。

Definition: Determine the speaker of the dialogue, "agent" or "customer".Input: I have successfully booked your tickets.Ouput: agent

Definition: Determine which category the question asks for, "Quantity" or "Location".Input: What"s the oldest building in US?Ouput: Location

Definition: Classify the sentiment of the given movie review, "positive" or "negative".Input: i"ll bet the video game is a lot more fun than the film.Output:

自洽采樣

自洽采樣 [ Wang et al. 2022a ] 是對 temperature > 0 的多個輸出進行采樣,然后從這些候選中選擇最好的一個。選擇最佳候選的標準因任務而異。一般的解決方案是選擇多數票。對于易于驗證的任務,例如帶有單元測試的編程問題,可以簡單地運行解釋器并通過單元測試驗證正確性。

思維鏈 ( CoT )

思維鏈 ( CoT ) prompt ( Wei et al. 2022 ) 生成一系列短句來逐步描述推理邏輯,稱為推理鏈,最終得出最終答案。CoT 的好處對于復雜的推理任務更為明顯,同時使用大型模型(例如,參數超過 50B)。簡單的任務從 CoT 的 prompt 中獲益甚微。

CoT prompt 的類型

CoT prompt 的兩種主要類型:

few-shot CoT:通過一些演示來給模型 prompt,每個演示都包含人類編寫(或模型生成)的高質量推理鏈。

(所有數學推理例子均來自 GSM8k)

Question: Tom and Elizabeth have a competition to climb a hill. Elizabeth takes 30 minutes to climb the hill. Tom takes four times as long as Elizabeth does to climb the hill. How many hours does it take Tom to climb up the hill?Answer: It takes Tom 30*4 = <<30*4=120>>120 minutes to climb the hill.It takes Tom 120/60 = <<120/60=2>>2 hours to climb the hill.So the answer is 2.===Question: Jack is a soccer player. He needs to buy two pairs of socks and a pair of soccer shoes. Each pair of socks cost $9.50, and the shoes cost $92. Jack has $40. How much more money does Jack need?Answer: The total cost of two pairs of socks is $9.50 x 2 = $<<9.5*2=19>>19.The total cost of the socks and the shoes is $19 + $92 = $<<19+92=111>>111.Jack need $111 - $40 = $<<111-40=71>>71 more.So the answer is 71.===Question: Marty has 100 centimeters of ribbon that he must cut into 4 equal parts. Each of the cut parts must be divided into 5 equal parts. How long will each final cut be?Answer:

Zero-shot CoT:使用像「讓我們一步一步來思考」這樣的自然語言語句來明確鼓勵模型首先生成推理鏈,然后 prompt「因此答案是」來生成答案 ( Kojima et al. 2022 ) 。或者類似的陳述「讓我們一步一步地解決這個問題,以確保我們有正確的答案」(Zhou et al. 2022)。

Question: Marty has 100 centimeters of ribbon that he must cut into 4 equal parts. Each of the cut parts must be divided into 5 equal parts. How long will each final cut be?Answer: Let"s think step by step.

小技巧和擴展

自洽采樣可以通過抽取多個不同的答案然后進行多數表決來提高推理的準確性。 ( Wang et al. 2022a ) ;

集成學習的另一種方法是改變樣本順序或使用模型生成的基本原理來代替人工編寫的基本原理,以在多個樣本試驗中引入隨機性。然后聚合模型根據多數投票的結果獲得最終答案。 ( Wang et al. 2022b ) ;

如果訓練樣例只與真實答案相關聯,但沒有基本推理,可以遵循 STaR(Self-Taught Reasoner;Zelikman et al. 2022)方法:(1)讓 LLM 生成推理鏈,只保留那些導致正確答案的鏈; ( 2 ) 然后用生成的基本推理微調模型并重復該過程直到收斂。需要注意的是,較高的 temperature 更有可能產生錯誤的基本原理和正確的答案。如果訓練樣本沒有真實答案,可以考慮使用多數票作為 " 正確 " 答案;

Prompt 具有更高推理復雜性的演示可以實現更好的性能,其中復雜性由鏈中推理步驟的數量來衡量。分隔推理步驟時,換行符 n 比 " 步驟 i"、句號或分號等要好 ( Fu et al. 2023 ) ;

Complexity-based 的一致性是通過僅在前 k 個復雜鏈中進行多數投票表決,選出 k 個中明確表現較好的復雜鏈 ( Fu et al. 2023 ) ;

[ Shum et al. ( 2023 ) ] 發現在他們的實驗中,僅使用復雜示例的 CoT 提示可以提高復雜問題的準確性,但在簡單問題中表現不佳 ( GSM8k 上的表現就是明顯的證據);

將 Q: 更改為 Question: 發現很有幫助 ( Fu et al. 2023 ) ;

[ Ye & Durrett ( 2022 ) ] 發現,對于涉及文本推理的 NLP 任務(即 QA 和 NLI),在 prompt 中包含解釋的好處有用處但是不大,并且效果因模型而異。他們觀察到解釋更可能是非事實的而不是不一致的(即解釋是否需要預測)。非事實的解釋很可能導致錯誤的預測;

[ Self-Ask ( Press et al. 2022 ) ] 是一種反復 prompt 模型提出后續問題以迭代構建思維過程的方法。可以通過搜索引擎結果回答后續問題。同樣,IRCoT [ Interleaving Retrieval CoT;Trivedi et al. 2022 ] 和 ReAct [ Reason + Act;Yao et al. 2023 ] 將迭代 CoT 提示與維基百科 API 查詢相結合,以搜索相關實體和內容,然后將其添加回語境中。

圖 1. Self-Ask 如何與外部搜索查詢一起使用(圖源:Press et al. 2022)。

自動 Prompt 設計

Prompt 是一系列前綴 token,可增加在給定輸入的情況下獲得所需輸出的概率。因此,可以將它們視為可訓練參數,并通過梯度下降直接在嵌入空間上對其進行優化,例如 AutoPrompt [ Shin et al., 2020, Prefix-Tuning ( Li & Liang ( 2021 ) ] ,P-tuning [ Liu et al. . 2021 ) ] 和 Prompt-Tuning [ Lester et al. 2021 ] 。從 AutoPrompt 到 Prompt-Tuning 的趨勢是設置逐漸簡化。

APE [ Automatic Prompt Engineer;Zhou et al. 2022 ] 是一種搜索模型生成的候選指令池,然后根據所選得分函數過濾候選集以最終選擇得分最高的最佳候選的方法。

1、Prompt LLM 根據 input-output 對形式的演示集合生成候選指令。例如。{{Given desired input-output pairs}}nnThe instruction is;

2、給定 Dtrain={ ( x,y ) } 的數據集,想要找到一條指令 ρ 使得 ρ =arg max ρ E ( x,y ) ∈ Dtrain [ f ( ρ ,x,y ) ] ,其中 f ( . ) 是每個樣本的得分函數,比如如執行精度 [ LM ( .| ρ , x ) =y ] 或對數概率:Plm ( y| ρ ,x ) ;

3、使用迭代蒙特卡洛搜索方法通過 prompt 提出語義相似的變體來改進最佳候選,例如 Generate a variation of the following instruction while keeping the semantic meaning.nnInput: ...nnOutput:...

為了自動構建 CoT prompt [ Shum et al. ( 2023 ) ] 建議 augment-prune-select,包含三個步驟的過程:

1.Augment:使用 few-shot 或 zero-shot CoT prompt 生成給定問題的多個偽 CoT;

2.Prune:根據生成的答案是否與基本事實相匹配來修剪偽鏈;

3.Select:應用 variance-reduced 梯度策略來學習所選示例的概率分布,同時將示例的概率分布作為策略,將驗證集的準確性作為獎勵。

[ Zhang et al. ( 2023 ) ] 采用聚類技術對問題進行抽樣,然后生成鏈。他們觀察到 LLM 傾向于犯某些類型的錯誤。一種類型的錯誤在嵌入空間中可能相似,因此被組合在一起。通過只從頻繁錯誤的集群中抽取一個或幾個樣本,可以防止對一種錯誤類型的過多錯誤演示,并收集一組不同的例子。

1. 問題聚類:嵌入問題并運行 k-means 聚類的方法;

2. 示例選擇:從每個簇中選擇一組有代表性的問題;即來自一個簇的一個示例。每個簇中的樣本按到簇質心的距離排序,最接近質心的樣本首先被選擇;

3. 生成推理鏈:使用 zero-shot CoT 為選定的問題生成推理鏈,并構建 few-shot prompt 來運行推理。

增強語言模型

[ Mialon et al. ( 2023 ) ] 對增強語言模型進行的一項調查。涵蓋了多類增強推理技能和使用外部工具能力的語言模型。推薦讀者可以讀一下。

檢索

通常,我們需要在模型預訓練時間截止或內部 / 私有知識庫之后,完成需要最新知識的任務。在這種情況下,如果不在 prompt 中顯式提供上下文,模型將不知道上下文。開放領域問答的許多方法都依賴于首先在知識庫上進行檢索,然后將檢索到的內容作為 prompt 的一部分。這個過程的準確性取決于檢索和生成步驟的質量。

[ Lazaridou et al. ( 2022 ) ] 研究了如何使用谷歌搜索進行文檔檢索以增強 LLM。給定一個問題 q,從谷歌返回的 20 個 URL 中提取文本,得到一組文檔。由于這些文檔很長,因此每個文檔被拆分為 6 個句子的段落,{p}。段落是根據證據段落和查詢之間基于 TF-IDF 的余弦相似性進行排序的。在 prompt 中只使用最相關的段落來產生答案 a.

對于閉卷問答,每個演示的格式如下,以構建 few-shot prompt。發現將問題與證據交換(問題和答案之間的距離更長)在所有數據集中始終產生較低的結果。

Evidence: ...Question: ...Answer: ...

答案的概率以三種方式計算:

1.RAG 風格,,其中 是 TF-IDF 段落和問題表示之間的歸一化余弦相似度。

2. 噪聲信道推斷:

3.Product-of-Experts ( PoE ) ,結合上面使用的所有概率,但不包括

根據他們在生成和分類任務的實驗,在三個答案的重新排序得分中,PoE > 噪聲信道推斷 > RAG。在所有概率中,pLM ( a|q,pi ) 和 pLM ( q|pi,a ) 提供的信息最多。pLM ( q|pi,a ) 捕捉到 LM 在給定證據段落和答案的情況下對問題的解釋有多好,并且可以可靠地用于對候選答案進行重新排序。

針對基于不同日期的問題的 SituatedQA 數據集進行的一項觀察是,盡管 LM(預訓練截止日期為 2020 年)可以通過 Google 搜索訪問最新信息,但其在 2020 年后問題上的表現仍然比 2020 年前問題差很多。這表明上下文信息和模型內部知識之間存在一些差異或參數沖突。

有趣的是,即使只有 " 內部檢索 " 也是有益的,即在回答問題之前生成關于某個主題的知識 [ Liu et al. 2022 ] 。首先可以使用下面的模板來抽取知識:

Generate some knowledge about the input. Examples:

Input: What type of water formation is formed by clouds?Knowledge: Clouds are made of water vapor.

Input: {question}Knowledge:

然后用模型生成的知識,進一步給 LM 進行 prompt 得到答案。

編程語言

既有 PAL(程序輔助語言模型 ) [ Gao et al. 2022 ] 和 PoT ( Program of Thoughts prompting [ Chen et al. 2022 ] 要求 LLM 生成編程語言語句來解決自然語言推理問題,從而將解決方案步驟轉移到運行時,如 Python 解釋器。這樣的設置解耦了復雜的計算和推理。該方法依賴于具有足夠好的編程技能的 LM。

圖 2. 比較 CoT 和 PoT. ( 圖片源自 : Chen et al. 2022 ) 。

外部 API

TALM(Tool Augmented Language Models [ Parisi et al. 2022 ] )是一種通過文本到文本 API 調用增強的語言模型。LM 被引導生成以任務輸入文本為條件的工具調用和工具輸入文本,以構建 API 調用請求。當 result 出現時,調用指定的工具 API,并將返回的結果附加到文本序列。最終輸出是在 output token 之后生成的。

圖 3. TALM 中調用 API 的格式 ( 圖片源自 : Parisi et al. 2022 ) 。

TALM 采用 self-play 的方法來迭代引導工具使用示例的數據集,并用它來微調 LM。這個迭代的 self-play 模仿了一個 RL 過程,其中 LM 是策略網絡,它由帶有二元獎勵信號的策略梯度訓練。

圖 4. Self-play 迭代提升模型的性能 ( 圖片源自 : Parisi et al. 2022 ) 。

Toolformer [ Schick et al. 2023 ] 是一種可以通過簡單的 API 使用外部工具的 LM,通過自我監督的方式構建,每個 API 只需要少量的演示。Toolformer 的工具箱包括:

計算系統:幫助 LM 缺乏精確的數學技能;

問答系統:幫助解決無效內容;

搜索引擎:在預訓練截止時間后提供最新信息;

翻譯系統:提高低資源語言性能;

日歷系統:使 LM 了解時間進程。

圖 5. 如何構建 Toolformer. ( 圖片源自 : Schick et al. 2023 ) 。

Toolformer 的訓練過程如下:

1.Prompt 注釋下的 API 調用。要求預訓練的 LM 通過帶有 API 調用使用示例的 few-shot 學習來注釋數據集。格式化示例:

圖 6. 數據集如何在調用 API 的時候注釋 ( 圖片源自 : Schick et al. 2023 ) 。

每個 API 調用都表示為一個元組(API 名稱,相應的輸入),其對應的結果記為 r。有結果和無結果的 API 調用序列分別標注如下:

基于概率 的 API 調用,如果概率大于某個閾值,則選擇前 k 個候選在位置 i 進行 API 調用;

然后,從 LM 中采樣潛在的 API 調用,其中序列 [ prompt ( x ) ,x1, … ,xi 1, API ] 作為前綴, /API 作為后綴。

2. 根據 API 調用是否有助于模型預測未來 token 來過濾注釋。使用自監督損失來確定哪些 API 調用產生實際的幫助。

執行每個 API 調用 c_i 得到對應的結果 r_i;

計算 LM 在 token 序列 xi,...,xn 上的加權交叉熵損失,當模型以 prompt 為前綴時。計算了兩個版本,一個帶有 API 結果,另一個帶有空序列 ε;

僅保留大于閾值的 API 調用,這表示添加此 API 調用及其結果有助于模型預測未來的 token。

3. 在注釋數據集上微調 LM。新的訓練序列構造為訓練數據是原始數據集(例如論文中的 CCNet 子集)及其增強版。

在推理時,解碼會一直運行,直到模型產生 " → "token,表明它期待接下來來自 API 調用的響應。

Toolformer 目前不支持在鏈中使用工具(即使用一個工具的輸出作為另一個工具的輸入)或以交互方式(即在人工選擇后采用 API 響應)。兩者都是未來擴展模型的方向。

原文鏈接:https://lilianweng.github.io/posts/2023-03-15-prompt-engineering/

THE END

轉載請聯系本公眾號獲得授權

投稿或尋求報道:content@jiqizhixin.com

關鍵詞:

相關閱讀
分享到:
版權和免責申明

凡注有"實況網-重新發現生活"或電頭為"實況網-重新發現生活"的稿件,均為實況網-重新發現生活獨家版權所有,未經許可不得轉載或鏡像;授權轉載必須注明來源為"實況網-重新發現生活",并保留"實況網-重新發現生活"的電頭。

国产又粗又猛又黄视频,97超碰亚洲中文字幕校园,中文字幕在线视频网站,国产阿v视频高清在线观看
无遮挡高潮国产免费观看 | 亚洲丁香七月色婷婷 | 久久伊人精品青青草原精品 | 亚洲一本之道高清乱码 | 色色国产亚洲欧美 | 亚洲一区在线国产 |