提示工程

**提示工程**（）係人工智能嘅一個概念，特別自然語言處理（NLP）。
喺提示工程中，任務的描述會被嵌入到輸入中。通常唔喺指俾模型一個明確或暗示嘅參數，而是用問問題嘅形式，直接輸入。
提示工程的典型工作方式，將一個或多個任務轉做提示嘅數據集，並通過所謂的“基於提示學習（prompt-based learning）”黎訓練語言模型。 
喺零樣本學習，喺提示入面，預留鼓勵思考鏈的語句（例如：不如我們一步一步咁思考”）可以提高語言模型喺多步驟推理問題中嘅表現。
 

## 思維鏈
根據Google嘅CEO，「思維鏈」（Chain-of-thought，CoT）被認為係一種令大型語言模型（LLMs）可以將問題分解做幾個中間步驟嚟解決嘅技術，然後先畀出最終答案。喺2022年，Google仲聲稱思維鏈提示可以透過引導模型用類似思維過程嘅推理步驟嚟解決多步驟問題，從而改善推理能力。 根據Google同Amazon嘅公告，思維鏈技術理論上可以幫助大型語言模型克服一啲需要邏輯思維同多個步驟嚟解決嘅推理任務，例如算術或者常識推理問題。

舉個例，畀個問題「問：食堂有23個蘋果。如果佢哋用咗20個嚟煮午餐，之後又買咗6個，而家有幾多個蘋果？」，Google話CoT提示可能會令LLM答「答：食堂起初有23個蘋果。佢哋用咗20個嚟煮午餐。所以剩返23 - 20 = 3個。佢哋買多咗6個蘋果，所以而家有3 + 6 = 9個。答案係9。」

根據Google最初嘅提議，每個CoT提示都包含幾個問答例子。呢個令佢成為一個「少量樣本」提示技術。不過，根據Google同東京大學嘅研究人員所講，單純加上「讓我們一步一步諗」呢幾個字，都證明咗係有效嘅，令CoT變成一個「零樣本」提示技術。OpenAI話呢個提示可以實現更好嘅擴展，因為用戶唔再需要構思好多具體嘅CoT問答例子。

當應用喺PaLM（一個有5,400億參數嘅語言模型）上面，Google話CoT提示大大幫助咗模型，令佢喺幾個任務上面可以同專門微調過嘅模型表現相若，喺GSM8K 數學推理基準上面達到當時嘅最高水平。根據Google所講，可以透過喺CoT推理數據集上面微調模型嚟進一步加強呢個能力，同時刺激更好嘅可解釋性。

例子：
問：{問題}
答：讓我們一步一步諗。

## 其他技巧
串鏈思維提示只係眾多提示工程技巧嘅其中一種。學界提出咗好多唔同嘅技巧，至少已經發表咗29種唔同嘅方法。

**符號鏈式提示 (Chain-of-Symbol, CoS)**

浙江西湖大學、香港中文大學同愛丁堡大學嘅研究合作發現，符號鏈式提示配合思維鏈提示可以幫助大型語言模型克服佢哋喺文字空間推理方面嘅困難。換句話講，用「/」咁嘅任意符號可以幫助大型語言模型理解文字中嘅空間關係。研究指出呢個方法可以提升模型嘅推理能力同表現。

例子：
輸入：

有一堆磚。黃色嘅C磚喺E磚上面。黃色嘅D磚喺A磚上面。黃色嘅E磚喺D磚上面。白色嘅A磚喺B磚上面。B磚係白色嘅。而家我哋要攞一塊特定嘅磚。磚必須由上至下咁攞，如果要攞下面嘅磚，就要先攞走上面嘅磚。點樣先可以攞到D磚？

B/A/D/E/C
C/E
E/D
D

輸出：

所以答案係要先攞走C，跟住E，最後先至可以攞到D。

**少量樣本學習**

提示可以包含幾個例子畀模型學習，例如要求模型完成「*<span lang="fr" dir="ltr">maison</span>*  house, *<span lang="fr" dir="ltr">chat</span>*  cat, *<span lang="fr" dir="ltr">chien</span>* 」（預期答案係 *dog*），呢個就叫做**少量樣本學習**。

#### 生成知識提示
*生成知識提示*首先會要求模型生成同任務相關嘅事實，然後先去完成個任務。呢個方法通常可以提高完成嘅質素，因為模型可以根據相關事實嚟做判斷。

例子：
為輸入嘅概念生成一啲知識。
輸入：{問題}
知識：

#### 由少至多提示
*由少至多提示*會先要求模型列出問題嘅子問題，然後逐個解決，等後面嘅子問題可以利用之前答案嘅幫助。

例子：
輸入：
問：{問題}
答：我哋將呢個問題分拆：
1.

#### 自我一致性解碼
*自我一致性解碼*會做幾次思維鏈推理，然後揀最常見嘅結論。如果唔同嘅推理結果差異好大，就可以搵人嚟幫手揀正確嘅思維鏈。

#### 複雜度為本提示
複雜度為本提示會做幾次思維鏈推理，揀啲思維鏈最長嘅推理結果，然後喺呢啲結果入面揀最常見嘅結論。

#### 自我改進
自我改進會先要求模型解決問題，然後要求模型批評自己嘅解決方案，再要求模型根據問題、解決方案同批評重新解決問題。呢個過程會重複進行，直到用晒token、時間用完，或者模型輸出「停止」嘅指令。

批評例子：
我有啲代碼。畀一個建議嚟提高可讀性。唔使改代碼，淨係畀個建議。
代碼：{code}
建議：

改進例子：
代碼：{code}
用呢個建議嚟改進代碼。
建議：{suggestion}
新代碼：

#### 思維樹
*思維樹提示*係思維鏈嘅延伸，佢會要求模型產生一個或者多個「可能嘅下一步」，然後用廣度優先搜索、束搜索或者其他樹搜索方法喺每個可能嘅下一步執行模型。

#### 產婆式提示
產婆式提示同思維樹好相似。首先會要求模型答問題同埋解釋，然後再要求模型解釋佢解釋嘅部分內容，如此類推。唔一致嘅解釋樹會被剪走或者放棄。呢個方法可以提升複雜常識推理嘅表現。

例子：
問：{問題}
答：正確，因為

Copy
問：{問題}
答：錯誤，因為
#### 定向刺激提示
*定向刺激提示*會包含一啲提示或者線索，例如想要嘅關鍵字，嚟指引語言模型產生想要嘅輸出。

例子：
文章：{article}
關鍵字：

Copy
文章：{article}
問：用2-4句準確咁總結篇文章，並包含提供嘅關鍵字。
關鍵字：{keywords}
答：

## 披露不確定性嘅提示
語言模型預設嘅輸出可能唔包含不確定性評估。模型可能輸出睇嚟好有信心嘅文字，但背後嘅詞元預測可能有好低嘅似然分數。好似GPT-4咁嘅大型語言模型喺詞元預測方面可以有準確嘅校準似然分數，所以模型輸出嘅不確定性可以透過直接讀取詞元預測嘅似然分數嚟估計。

不過，如果冇辦法獲取呢啲分數（例如透過限制性API嚟使用模型嘅時候），都仲可以估計不確定性同將佢加入模型輸出。其中一個簡單嘅方法就係要求模型用文字嚟估計不確定性。另一個方法就係要求模型用標準化嘅方式拒絕回答，如果輸入唔符合條件嘅話。

## 估計模型敏感度嘅提示
研究一直顯示大型語言模型對提示格式、結構同語言特徵嘅細微變化都非常敏感。有啲研究發現喺少量示例設定下，格式改變可以令準確度相差多達76個百分點。 語言特徵好大程度影響提示嘅效果——例如形態學、句法同詞彙語義嘅改變——呢啲都可以喺各種任務中明顯提升表現。 例如，分句句法可以提高知識檢索嘅一致性同減少不確定性。 即使增加模型規模、加入更多少量示例，或者做指令微調，呢種敏感性都仲係存在。

為咗處理模型嘅敏感性同令佢更穩健，研究者提出咗幾個方法。FormatSpread通過評估一系列合理嘅提示格式，幫助系統性分析，提供更全面嘅表現區間。 同樣，PromptEval會估計唔同提示嘅表現分佈，令到可以喺有限預算下做到穩健嘅指標評估，例如表現分位數同準確評估。

## 歷史

喺2018年，研究人員首次提出所有之前獨立嘅NLP任務都可以轉化為一個問題答覆問題。佢哋仲訓練咗第一個單一、聯合、多任務模型，可以回答任何任務相關嘅問題，好似「呢句嘅語氣係點」或者「將呢句翻譯成德文」或者「邊個係總統」咁。

喺2021年，研究人員將一個生成式預訓練模型（T0）微調到可以執行12個NLP任務（使用咗62個數據集，因為每個任務可以有多個數據集）。呢個模型喺新任務上面表現良好，仲超越咗直接訓練嚟執行單一任務嘅模型（冇預訓練嘅）。要解決一個任務，T0會收到一個結構化嘅提示，例如``就係用嚟令T0解決entailment嘅提示。

一個提示庫報告喺2022年2月有超過2,000個公開提示，涵蓋大約170個數據集。

喺2022年，「思維鏈」提示技術由Google嘅研究人員提出。

喺2023年，有幾個文字轉文字同文字轉圖像嘅提示數據庫公開咗。

## 睇埋
* ChatGPT
* 自然語言處理

## 文獻