JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

示範勝於說明:少樣本與情境學習

為什麼幾個做好的範例就能當場教會模型一項任務——以及如何挑選並排版這些範例。

從說明走向示範

有些任務難以描述,卻很容易示範。與其解釋規則,你不如展示幾組「輸入—輸出」配對,讓模型自行推斷出當中的模式。在提示裡加上範例就是少樣本提示(few-shot prompting)(「少」指的是兩個到一小把),與上一篇的零樣本做法相對。

Convert each company name to a stock-ticker guess.

Apple -> AAPL
Microsoft -> MSFT
Nvidia -> NVDA
Netflix ->
一個三樣本提示。模型會在最後一個箭頭之後接續這個模式。
模型按照少样本示例的模式逐个生成 token,在最后一个箭头之后自回归地预测答案。

自回归循环:将每个预测出的 token 重新输入以生成下一个。

你完全沒有更新模型的權重——學習整個發生在提示視窗之內,只為這一次請求服務。這正是整個領域的核心標題觀念。

情境學習:不用訓練的學習

這種「從放在提示裡的範例學會一項任務、且不更動權重」的能力,就是情境學習(in-context learning,ICL)。它是大型模型帶來的驚喜之一:餵給它一個模式,模型就把它當成一個臨時指令。這些範例不會被儲存;對話一結束,「這堂課」就消失了。每個新提示都得從零教起。

\hat{y}=\arg\max_{y}\; p_{\theta}\!\left(y \mid (x_1,y_1),\dots,(x_k,y_k),\, x\right)

少样本上下文学习:模型在 k 个示例和查询的条件下预测答案,而权重 θ 保持不变。

由於範例就住在提示裡,它們會和其他所有內容爭奪空間。每個示範都要花費詞元(tokens),並計入脈絡長度(context length)上限。三個精準的範例,通常勝過十個草率的範例。

挑選該展示哪些範例

你放進哪些範例,和放幾個一樣重要——這就是範例選擇(demonstration selection)。模型會把範例當成指引,所以要挑真正能代表這項任務的範例,包括你在意的那些棘手情況。

点击一个词,查看模型如何依赖上下文示例——自注意力会显示它关注的是哪些 token。

交互式自注意力,高亮显示每个 token 关注的词。

  1. 涵蓋你預期會在實際使用時遇到的多樣性——而不是三個幾乎相同的簡單案例。
  2. 至少包含一個邊界案例(空白欄位、含糊的輸入),讓模型學會該如何處理。
  3. 維持標籤平衡:如果你只展示正面範例,模型可能就不再預測負面結果了。
  4. 順序也可能有影響;把一個明確有力的範例放在靠近結尾處,往往能錨定模型會複製的格式。

讓範例格式一致

範例不只教內容,也教格式,所以要無比一致。輸入與輸出之間用同一個分隔符、同樣的大小寫、同樣的欄位名稱。強而清楚的分隔符與格式能讓模型看清一個範例在哪裡結束、下一個在哪裡開始——也讓它複製出你想要的那個確切形狀來作答。

如果你在許多請求中重複使用相同結構,就把固定的部分抽成一個提示模板(prompt template):一個可重複使用、留有空位讓你填入的骨架。範例與指令保持不變,只有新的輸入會改變,這就一舉消除了一整類意外造成的不一致。

Task: {task_description}

Examples:
{example_1}
{example_2}
{example_3}

Now do the same for:
Input: {new_input}
Output:
一個提示模板。程式把大括號裡的空位填好;結構永遠不會漂移。

範例何時有用、何時無用

當任務有特定格式、或有模型猜不到的特殊慣例,或當零樣本一直偏離你要的東西時,就動用少樣本。當任務常見、一句清楚的指令就已經到位時,就維持零樣本——這時加範例只是白花詞元、毫無收穫。