Few Shot:最少的樣本,最大的可能
在LLM提示工程中,鏈式推理是一種方法,少樣本提示也是一種。如何能讓“少樣本”發(fā)揮出最大的價值,這篇文章提供了多種思路。
前兩周我們探討了LLM 提示工程中的一個關鍵方法:鏈式推理(Chain of Thought)在實際產品開發(fā)中的應用和注意要點。這篇文章我們會分享少樣本提示(few shot)的概念和應用。
一、概念:零樣本提示(Zero shot)與少樣本提示(Few shot)
想象一下,你有一位非常聰明的助手。
很多時候,你只需要告訴他你想要做什么,他就能立刻理解并正確無誤地替你辦完。比如,你告訴他“請幫我找最近3個月AIGC的最新研究發(fā)現”,他就能快速又貼心地給你想要的。但如果,你要他做的任務是“給客戶寫一封正式的邀請函”,且這類邀請函自帶獨特的排版格式、語言要求。你的助手縱然天賦異稟,也得知道邀請函怎么寫才行。那么,你會怎么做?
第一種方法,絮叨半小時,把規(guī)則一條條說清楚:“請給我寫一封客戶的邀請函,第一行必須是客戶抬頭,而且要頂格;第二行是……;日期的格式要這樣,結尾的格式要那樣……”。
第二種方法,簡單指示+參考:“這次的活動要請XX公司的張總參加,客戶名片、活動時間在這里。你來草擬正式的邀請函,具體的格式和語言風格按照以前的邀請函來,這里有一些好的例子,你拿去參考。”
如果助手夠聰明,也有具備寫作能力,第二種方法對你和助手來說,顯然都是輕松又高效的。
這兩種“提要求”的方法,恰恰就是prompt兩種不同的技術:零樣本提示(Zero Shot)和少樣本提示(Few Shot)樣本。
- 零樣本提示(Zero Shot):是一種在沒有任何相關示例的情況下,直接對模型進行提問的方法。
- 少樣本提示(Few Shot):在提示中提供少量的示例,以幫助模型更好地理解任務的目標和輸出要求。
如果你的提示直接明確,或者想獲得開放性的回答,零樣本提示(Zero Shot)足矣。但如果需要模型從事特定的模式或結構,就需要少樣本提示(Few Shot)了。
二、應用:Few Shot的舉例方式
嚴格來說,Few Shot重在“舉例”,對提示的形式幾乎沒有特別要求。常見的寫法有以下兩種:
1. 用“輸入-輸出”的示例結構,讓LLM理解你要的結果:
(Few Shot 部分)
情感分析任務。
示例1:
輸入:這個餐廳的服務太棒了,強烈推薦!
輸出:正面
示例 2:
輸入:我對我購買的耳機感到非常失望,音質很差。
輸出:負面
(任務要求)
新任務:
輸入:這部電影的演員表現非常出色,劇情緊湊,值得一看。
輸出:
LLM回答:
正面。
這類要求適合對輸出的格式有嚴格要求的內容。
2. 給示例+語言描述輸出要求:
示例1:
長江悲已滯,萬里念將歸。
況屬高風晚,山山黃葉飛。
示例2:
江曠春潮白,山長曉岫青。
他鄉(xiāng)臨睨極,花柳映邊亭。
示例3:
城闕輔三秦,風煙望五津。
與君離別意,同是宦游人。
海內存知己,天涯若比鄰。
無為在歧路,兒女共沾巾。
請模仿示例中的3首詩歌風格,寫一首五言絕句。
LLM回答:
碧波漾秋意,孤舟載夢回。
遠山銜落日,歸鳥入林催。
三、進階:如何用好Few Shot
Few shot既然是Prompt技術的一種,自然也和其他技術一樣,有放大優(yōu)勢的“妙招”和限制發(fā)揮的“昏招”。我們在這里,為你做了總結:
1. 量不在多,有用就好
很多人也許會好奇“
少樣本”的數量到底多少合適。一般來說,Few shot通常指2到20個示例之間。在實踐中,使用3-shot、5-shot 或 10-shot 的情況較多。而超過20個示例通常不再被認為是“few-shot”了。另外,已經有大量研究證明few shot并不是越多越好,更多的示例并不能提升輸出的結果。因此,提供高質量的示例才是更好的方法。
2. 如果有標簽,“全面”比“貼對”更重要
用“輸入-輸出”方式所做的few shot示例集,往往會為輸出定義一個分類或者內容,比如在上面的情感分析中“正面”、“負面”、“積極”和“消極”等。這樣的分類在few shot技術中被稱為“標簽”。這類標簽能幫助模型理解示例,并且定義可能輸出的范疇。
有意思的是,有人做了對比研究:讓人類專家給示例集貼上正確的標簽(后稱為“黃金標簽”),和讓機器自己在標簽范圍內(比如消極、積極)隨機選擇,對示例集貼上標簽(后稱為“隨機標簽”)。研究后發(fā)現,即使隨機標簽會出錯,但“隨機標簽”的做法并不影響最終的輸出。反而,這些標簽給得夠不夠全面,決定了LLM的輸出范疇。如果標簽范疇有明顯的缺漏,那會明顯影響輸出的準確性。
所以,當few shot示例集需要用標簽的方式時,準備全面且準確的標簽分類,比思考給每個示例貼上正確標簽更重要。
3. 既“相似”又“多樣”
在選擇few shot上,最理想的示例集是“相似性”與“多樣性”兼顧。
相似性:
指的是few shot和輸出任務在主題、概念或情感上相似,這樣可以幫助模型更快地理解和適應新任務。比如,你的輸出任務是讓LLM模型來分析人們對餐館/食物的點評是積極還是消極的。那么,示例應該與點評相關。
相關:
這家飯店真是太好吃了,我強烈推薦?。撕灒悍e極)
我非常喜歡這家飯店,食物非常出色。(標簽:積極)
非相關:
這部電影讓我很失望,劇情平淡無奇。(標簽:消極)
消極:我對這部電影不太滿意,角色的發(fā)展不夠深入。(標簽:消極)
多樣性:
指的是few shot之間,要在風格、結構或語義上有差異,這樣可以確保模型接觸到不同的語境,提高泛化能力。來對比一下“多樣”和“非多樣”之間的差別。
非多樣的示例集:
正面:這家餐廳的食物非常好吃。
正面:我非常喜歡這家餐廳的服務。
正面:餐廳的環(huán)境很棒。
負面:我不太喜歡這家餐廳的食物。
負面:這家餐廳的服務不太好。
負面:餐廳的環(huán)境讓我感到不舒服。
多樣性的示例集:
正面:這家餐廳的食物讓我印象深刻,每一道菜都烹飪得恰到好處。
正面:雖然價格不菲,但這家餐廳的服務和氛圍絕對值得。
正面:餐廳的裝潢很有特色,讓人用餐時心情愉悅。
負面:我對這家餐廳的體驗感到失望,期待的菜肴并沒有達到預期。
負面:昨晚的餐廳之旅并不理想,服務生似乎很忙,忽略了我們的需求。
負面:餐廳的布局有些擁擠,影響了我們的用餐體驗。
可以看到,非多樣的示例中,示范示例在語義上過于相似,都是直接表達對食物、服務和環(huán)境的正面或負面評價。而多樣性示例,在內容上更加豐富(食物、裝潢、價格),語言風格的表達也有不同,這可以幫助模型學習到更廣泛的語言模式和情感表達,提高性能。
4. 實驗、實驗,還是實驗
在實踐過程中,你可能會發(fā)現在不同的任務中,相似性和多樣性的重要性不同,有些任務中,強調多樣性的示例集表現更好,有些任務則恰恰相反。已經有研究證明了這一點,在《IN-CONTEXT LEARNING WITH ITERATIVE DEMON- STRATION SELECTION》中研究者就發(fā)現,在他們的訓練集的研究中,常識問答的任務中多樣性維度優(yōu)于相似性維度,而在新聞報道類的任務中相似性維度優(yōu)于多樣性維度。
因此,即使是有了相似性和多樣性的策略,在真實實踐中,也需要我們不斷“調試”,找到最合適任務的雙維度“配比”。
5. 最后的最后:選擇合適的模型
如果以上方法都不奏效,那么,你得看看現在的模型到底合適不合適了。
模型在預訓練階段接觸到的輸入數據會有一定的特征,比如詞匯的使用頻率、句子的結構、主題等等。在Few Shot的應用中,模型是需要根據給定的示例集來理解特定任務,并據此對新的輸入做出預測。如果示例集中的數據與模型在預訓練階段接觸到的數據特相匹配,那么模型更有可能準確地理解和執(zhí)行任務。這是因為模型能夠利用其在預訓練階段學到的知識,來推斷和生成與示例集一致的輸出。
比如:如果一個模型在預訓練階段主要接觸到的是科技領域的文本,那么它在處理科技相關的上下文學習任務時可能會表現得更好,因為它對這類文本的輸入分布已經有了很好的理解。相反,性能可能會下降。因此,到最后你真的無計可施了,emmm,也許問題并不在few shot詞身上。
本文由 @AI 實踐干貨 原創(chuàng)發(fā)布于人人都是產品經理。未經作者許可,禁止轉載
題圖來自 Unsplash,基于CC0協(xié)議
該文觀點僅代表作者本人,人人都是產品經理平臺僅提供信息存儲空間服務
- 目前還沒評論,等你發(fā)揮!