現代提示工程的進展 III — 提示工程的策略與技巧

Harry Chao
Jun 16, 2024

--

前言請參考此篇文章

III 提示工程的策略與技巧

作者的提示工程策略

提示工程的細節因使用的模型而異,但有幾個常用的原則可以指導提示工程過程::

  1. 要有實證:提示工程的第一步,是建立一個可靠的方法來評估你的提示(例如,通過測試案例、人工評估者,或是以語言模型作為判斷者),這樣你就可以很容易地評估提示的變化。
  2. 從簡單開始:你嘗試的第一個提示不應該是思維鏈提示(或其他專門的提示技術)。從最簡單的提示開始,慢慢增加複雜性,同時測量性能的變化(見上文),以確定是否需要額外的複雜性。記住,較長的提示總是更昂貴!使用API時,您需要直接支付這些Token的費用。對於開源模型,您需要為額外的Token支付額外的計算和延遲成本。
  3. 具體直接:消除提示中的模糊性,嘗試在描述大型語言模型所需的輸出時,努力做到簡潔、直接和具體。
  4. 使用範例:如果很難描述所需的輸出,可以嘗試在提示中加入一些範例。透過提供具體的例子,幫助我們清楚地告訴大型語言模型我們期待它做什麼,避免過於模糊不清。
  5. 盡可能避免複雜性:複雜的提示策略有時是必要的(例如,解決多步驟的推理問題),但在使用這些方法之前我們應該三思。要講求實證,並使用已建立的評估策略來確認複雜性是否必要。

總結以上所有內容,作者的個人提示工程策略是:

  1. 建立一個非常好的評估框架
  2. 從一個簡單的提示開始
  3. 在必要時慢慢增加複雜性,以達到所需的性能水平
輸入提示是一個反覆修正的過程!

提示技術

我們先前已經透過一系列相關介紹,學習了各種提示技術:

  • 實用提示工程 Practical Prompt Engineering [連結]
  • 進階提示工程 Advanced Prompt Engineering [連結]
  • 思維鏈提示 Chain of Thought Prompting [連結]
  • 提示集合 Prompt Ensembles[連結]

現在我們將再次回顧這些提示技術,為後面介紹的更複雜的方法打下基礎。在學習這些技術時,我們應該記住,提示工程中的簡單性非常重要。更複雜的提示技術並不一定比簡單的策略更好!

基本提示策略

零次提示 (Zero-shot prompting) (如上所示) 是最基本的提示策略之一。我們只需要在提示中描述任務,然後提示模型解決問題。例如,將單詞從英文翻譯成法文,我們用字符串「cheese =>」提示模型進行翻譯。以下是幾個零次提示的例子。

零次學習(使用 GPT-3.5-Turbo 產生的輸出)

雖然零次學習在某些情況下表現良好,但它受到任務描述模糊性的限制。性能取決於描述的清晰程度,我們依賴模型根據此描述產生正確輸出的能力。通常,我們可以通過在提示中加入更具體的信息來提高性能。

少次提示(Few-shot prompting)通過在提示中插入幾個正確的問題解決例子來做到這一點。這種策略由GPT-3普及,展示了大型語言模型在大規模上令人印象深刻的少次學習能力,可參考上圖。直觀地說,少次學習通過提供幾個預期輸出的例子來消除零次學習的模糊性。因此,模型可以直接從這些例子中理解正確行為,而不是從任務描述中推斷所需行為。

LLM可以從提示中的這些例子中學習,這種策略被稱為“上下文學習”(in-context learning。然而,這種學習方式不同於神經網絡的正常訓練 — — 模型的參數並不會改變。我們只是將相關信息放在提示中,模型可以使用這些信息作為生成更好輸出的上下文。

在實際應用中使用少次學習時,我們需要調整兩個關鍵設置:

  1. 使用的範例數量。
  2. 選擇範例的策略。

為了確定使用的範例數量,我們可以進行一些基本的超參數調整hyperparameter tuning。許多論文探討了範例選擇的策略(例如隨機選擇 random selection、多樣性 diversity、語義相似性 semantic similarity、主動學習 active learning 或更複雜的指標 complex metrics)。然而,隨機選擇範例在實際中往往是一種有效的策略。除了這些策略,還有許多與少次學習相關的實用規則和發現,我們應該記住:

  • 範例的標籤分佈會影響模型的答案,因為模型偏向於常見標籤。
  • 答案偏向於提示中最近觀察到的範例。 (為了解決這個問題,我們可以隨機排列或甚至重新排列提示中的範例,並生成多種範例排列的輸出。)
  • 範例在提示中的格式很重要。
  • 隨機選擇範例可以幫助消除模型生成答案中的偏見。

儘管其簡單性,少次學習是最有效的提示策略之一,並在實際應用中廣泛使用。

幾個指令提示的例子

指令提示(Instruction prompting)是一種更直接表達LLM期望輸出的方法。通過少次學習,我們通過具體的解決任務的範例來向模型解釋我們的意圖,但這些範例會消耗大量的代幣!用文字簡單地向模型解釋我們的意圖會更有效率。為了讓這種方法效果良好,使用的LLM必須對指令對齊aligned,以便一致地遵循指令。這樣的模型被稱為“可引導的”,因為它們理解所提供的詳細指令並可以相應地調整輸出。

對LLM的研究主要集中在改進指令遵循能力上。預訓練的LLM在開箱即用時並不擅長遵循指令。然而,我們可以通過監督微調( supervised finetuning (SFT))和來自人類反饋的強化學習(reinforcement learning from human feedback (RLHF))來使模型更好地遵循指令。我們可以看到,這種策略可以改進指令遵循能力以及LLM的其他關鍵特性。

使用LaMDA進行角色提示

鑑於LLM對齊的最新進展,指令提示 — 甚至可以與少次提示結合 —是一種高度有效的方法,並且在實際應用中經常使用。事實上,幾種流行的提示策略(例如角色提示role prompting,、指定受眾specifying an audience或工具使用tool usage)只是指令提示的更具體版本!在撰寫指令時,我們應該清晰準確,以確保最佳結果。

--

--