大模型提示詞技術詳解(1)——Prompt結構&少樣本學習
本文將深入探討提示詞的概念、組成和調優技巧,以及樣本自動構建技術等方面的知識。通過引用相關論文和實踐案例,我們將揭示如何通過合理的提示詞設計提升大模型的回答質量,并分享一些實用的設計技巧。無論你是AI產品經理還是對提示詞感興趣的普通人,都可以在這篇文章中找到有價值的信息。
提示詞(Prompt)是指它通過向模型輸入特定的指令或問題,來增強模型的表現,而無需對模型結構本身進行調整。這一概念隨著大型語言模型的發展而流行,并催生了一個新興的領域——提示詞工程(Prompt Engineering)。這一領域目前還處于早期探索階段,依賴于實踐和試錯來發現有效的提示詞策略,屬于經驗科學的一種。
經驗科學:在研究方法上,以歸納法為主,帶有較多盲目性的觀測和實驗。一般科學的早期階段屬經驗科學,化學尤甚。在恩格斯《自然辯證法》中,專指十八世紀以前搜集材料階段的科學。(百度百科)
一、我對提示詞的看法
- 提示詞的確有用
- 提示詞本質上是一種“引導”,引導大模型說出他本來會的內容。因為它本身不會對模型性能進行任何修改。所以本質上來講不應該叫“性能提升”,而是提升其“回答質量”。
- Prompt調優的效果因模型而異(甚至因版本而異),需要大量的實驗。意味著同一套Prompt在遷移到其他模型的時候并不能保證它的效果。
- 提示詞的脆弱性:由于自然語言的復雜性,提示詞往往是離散的,難以精確優化。這種脆弱性意味著很難為提示詞找到一個明確的最佳結構,通常需要通過大量實驗和迭代來探索。
- 不要指望一個方法一勞永逸。網上的各種Prompt教程/大模型使用教程魚龍混雜,很多都缺乏基本的科學素質,即“開局一張嘴,內容全靠編?!?,缺乏科學得證明“A方法就是比B方法好”。適合他的不代表適合你,他的最優解更不可能是你的最優解。理性看待,多做嘗試。適合自己的才是好的。
- 推薦一下DSPy。這是我覺得為數不多“科學”的Prompt調優方式,還有xAI的PromptIDE看著也不錯。
二、為什么要寫這個系列?
作為一個一直在關注工程實現而沒有深入研究提示詞的產品經理,前一段時間的產品空窗期我重新研究了一下提示詞。
然后深感提示詞領域的混亂。我意識到提示詞領域存在許多混亂,各種術語和框架層出不窮,我相信許多人可能也有同樣的困惑。因此,我希望通過一系列文章來整理和分享我的知識體系,希望能對大家有所幫助。
這個系列會引用很多論文,主要是兩個原因,首先,部分章節會介紹一些專業知識(例如聚類算法),引用原論文可以提供權威參考;其次,許多結論源自論文,引用論文既是對原作者工作的尊重,也為我的論點提供了依據。我將努力確保每個觀點都有充分的論據支持。
曾經有一個問題是AI產品經理到底要不要看論文,我的看法是不用看,但了解總是有益的。學術論文的方法相比網上的文章往往具備以下特征:
- 專業性(論文由科研工作者撰寫,其研究方法和結論通常在相關數據集上經過驗證
- 嚴謹性(相比網上的文章,學術論文的研究和論證過程更為嚴謹。)
但是它對普通人不易讀,所以做出一些解讀還是很有必要的,提取一些關鍵點進行分析。
整個系列的行文結構參考今年6月份出的技術報告(Schulhoff, Sander, et al., 2024)。做了一些補充并加入了一些自己的理解。這篇論文很好,它對很多混亂概念進行了梳理并重新定義。比如說Few Shot,在深度學習中通常是指少樣本學習(Few-Shot Learning)。Prompt工程中是指Few-Shot Prompting。兩者最大的差別就在于前者是會對模型進行永久性修改(比如模型的參數)而后者僅限于在一次對話中,重啟上下文后即會失效,對模型本身不會造成任何影響。
文章內容還會參考網上的一些資料,由于參考過多無法一一引用。在此向所有研究Prompt領域的工作者致敬??,你們是大模型時代的先驅者。
三、適用讀者范圍
下面幾種人都可以在文章中各取所需
- AI產品經理
- 對提示詞感興趣的普通人,希望能夠提升大模型的回答質量?;蛘邩嫿▽儆谧约旱拇竽P?。會講解一些普通人通用的簡單的設計技巧。
四、提示詞的組成
一個完整的提示詞通常可以由指令、示例、輸出格式、風格、角色約定幾部分組成,它們并不需要同時存在,也并非所有場景都必須使用它們。
1. 指令
指令即用戶直接下達給大模型的命令。通常分為顯式指令以及隱式指令兩種。
顯式指令:直接提出問題
告訴我歷史上是誰統一了六國?
模型回答:
秦始皇。
隱式指令:給大模型一些示例,讓其自動判斷該輸出什么。隱式指令更像“找規律”,讓模型來自動判斷如何輸出。例如下面是一個將英語翻譯成西班牙語的場景
用戶輸入:
Night:Noche Morning:
模型回答:
Morning:Ma?ana
2. 示例
通常會使用*-Shot來表示,即提供給大模型的完成任務的示例,幫助其更好理解你的任務。上面的示例就屬于一個One-Shot場景(即提供一個事例)。當場景足夠簡單、事例充分的情況下,大模型不需要你為他提供明確的指令,就可以得到你想要的答案。(參考上面的隱式指令場景)。*-Shot通常分為如下幾種情況:
1)Many-Shot
多實例上下文學習,指提供多個(沒有具體的標準)示例來輔助大模型理解
2)Few-Shot
提供少量示例,比如1-3個輔助大模型理解。
3)Zero-Shot
不提供示例,讓模型直接回答問題。
這一部分也通常稱為ICL(In-Context Learning)上下文學習。通常來講Zero-Shot場景是對模型性能要求最高的,也是各家大模型的優化重點。GPT4相比GPT3.5很明顯的能力提升就在于它在Zero-Shot場景下的性能,這往往也代表著其語義理解能力更強。
五、輸出格式約定
這一部分通常是指定模型的輸出格式,例如
…,請以MarkDown的形式輸出回答。
這么想的話你倒是可以拿大模型做為一個格式刷:)
六、風格約定
風格即指定大模型的輸出風格,是一種非常常用的模型輸出優化方式。
請以通俗易懂,略帶風趣的方式來解釋地球為什么圍繞太陽旋轉。
模型回答:
讓我們來聊聊太陽和地球這對宇宙中的好基友。想象一下,你手里拿著一個網球,然后你用繩子把它系住,開始旋轉。網球因為繩子的牽引,不得不跟著你轉圈圈。這其實和地球圍繞太陽轉是一個道理。
七、角色約定
為大模型設置一個角色,這點與上一部分的風格約定通常都被用來改善模型輸出的風格。
你是一個經驗豐富的家庭教師,正在教一個二年級的小學生。請解釋一下地球為什么圍繞太陽旋轉。
模型回答:
好的,想象一下你在公園里玩陀螺。你用繩子把陀螺繞起來,然后快速一拉,陀螺就會在地面上旋轉起來,對吧?地球圍繞太陽轉的原理和這個有點像。首先,地球和太陽都非常非常重,太陽比地球重好多好多。很久以前,當太陽系形成的時候,地球和其他行星都是圍繞著太陽旋轉的。這就像你把陀螺的繩子一拉,它就開始轉起來一樣…..
八、少樣本提示(Few-Shot Prompting)
大模型的記憶是有限的,它的記憶容量被稱為上下文窗口(Context Window),決定了模型能夠捕捉信息的范圍。例如,GPT-4 Turbo擁有128k個Token的上下文窗口,相當于超過300頁的文本,這使得它能夠生成更符合對話語境的回復。而上下文學習(In-Context Learning,ICL)是指一種不需要對模型進行訓練,在Prompt中通過給予示例以及說明來讓模型提高模型的預測性能。但是這種性能提升其實并非“學習到的”,更像是一種激活。激活模型原有的記憶。
少樣本提示(Few-Shot Prompting)參考上面的*-Shot介紹。尤其需要注意這里和深度學習中的Few-Shot Learning存在本質區別,FSP并不會對模型參數進行調整,它的提升僅限于當前的上下文窗口中。
1. 通用的示例設計/選取原則
為大模型提供或構建示例的方式對其性能有顯著影響。不當的示例可能會導致模型產生嚴重的誤解。以下是六個關鍵因素。
2. 示例數量
通常我們直覺上認為給大模型更多的示例,可以讓其性能更好。但是考慮到客觀條件,一方面大模型受到上下文長度限制。另一方面,不好的示例會成為噪音,從而將會降低大模型的性能。此外,在部分場景下過多的示例對性能提升并無幫助(Zhao et al., 2024)。
3. 示例順序
事例的順序可能會影響模型的表現,在某些極端場景下,不同的順序甚至會使模型回答準確率從低于50%到90%+不等(Lu et al. , 2024)。這個地方可以使用人工排列組合,也可以采用下一小節樣本自動構建技術中的一些方法。注意:該順序也可能是不具有泛用能力的,遷移到另一個大模型可能會導致性能下降。
4. 標簽的分布
標簽(label)類似于傳統的機器學習中的概念。當我們訓練機器學習模型時,我們通常會給模型提供很多示例,每個示例都有一個標簽,告訴模型這個示例屬于哪個類別。如果我們提供給大模型的示例中,某個類別的樣本數量很多,而另一個類別的樣本數量很少,那么大模型的回答將會更偏向于第一個類別。所以在進行示例采樣時應該綜合考慮。
5. 標簽的準確性
這點的影響目前還不確定,但是可以確定的點在于較大的模型通常更擅長處理不正確或不相關的標簽。能不錯還是不要錯。
6. 示例格式
示例的格式會對模型的回答質量造成影響,常用的格式例如“Q:{input},A:{label}”并沒有所謂的“最佳格式”,需要去根據具體場景進行實驗。
7. 示例相似性
提供的示例的相似性也會對模型回答質量造成影響,但是具體的影響目前也不確定。有的場景下選擇更多相似的示例可能會提升回答質量,而有的場景下多樣化的示例則表現更好。一般來講認為多樣化的示例會使得模型表現更好。
九、樣本自動構建技術
目前,手動構建樣本的方法還處于相對原始的階段,類似于“刀耕火種”,主要依賴于人的主觀判斷。為了提高樣本的質量,可以參考前面提到的幾個關鍵因素,并進行多次測試以優化樣本。此外,目前也有一些研究致力于開發自動化構建Few-Shot樣本的技術。
如果我們有一個示例庫,并希望從中動態構建有效的提示詞(Prompt),這是一個非常實際且常見的應用場景。例如,在法律文書編寫領域,我們需要為大模型提供與當前案件相似的文書示例,以輔助模型進行更準確的分析。這要求我們能夠從示例庫中智能地選擇和構建相關的樣本,以提高模型的理解和預測能力。
這里介紹幾個常用的樣本自動構建技術。
1. K-NN(K-近鄰算法)
非常經典的聚類算法,每次在特征空間中選取k個與輸入樣本最接近的訓練樣本。但其對計算資源的消耗以及時間需求都很高,如果在提升生成階段使用將會一定程度影響使用體驗。
2. Vote-K(Su et al., 2022)
在第一階段通過嵌入模型(SBert)來構建一個有向圖。其中每個節點都指向其k最近鄰。然后從一組選定的樣本開始計算評分。在第二階段對第一階段對結果進行人工標注,在進行Prompt Retrieval時計算所有標注樣本和測試樣本的余弦相似度即可。
3. SG-ICL(Kim et al., 2022)
自生成上下文學習 (Self-Generated In-Context Learning,SG-ICL)利用大模型本身來自動生成示例,效果嘛….不好說??紤]到大模型對指令的理解偏差,可能會進一步放大誤差。讓我想到了前段時間Nature發的那篇論文,利用AI生成的數據繼續訓練大模型會導致模型的迅速退化(Shumailov et al., 2024)。
其他還有基于Q-Learning、基于對比學習以及基于主動學習的樣本構建技術。這些方法目前研究性仍然不足,暫不列舉出來。
簡單總結一下,Few-Shot是一種常見的提示詞調優技術。一般來說,示例選取最好保持多樣化,同時應該具有較強的隨機性(順序,內容…)以避免大模型發現了“規律”從而影響回答質量。
參考文獻
[1]Schulhoff, Sander, et al. “The Prompt Report: A Systematic Survey of Prompting Techniques.” arXiv preprint arXiv:2406.06608 (2024).
https://arxiv.org/abs/2406.06608
[2]Zhao, Hao, et al. “Is In-Context Learning Sufficient for Instruction Following in LLMs?.” arXiv preprint arXiv:2405.19874 (2024).
https://arxiv.org/abs/2405.19874
[3]Lu, Yao, et al. “Fantastically ordered prompts and where to find them: Overcoming few-shot prompt order sensitivity.” arXiv preprint arXiv:2104.08786 (2021).
https://arxiv.org/abs/2104.08786
[4]Su, Hongjin, et al. “Selective annotation makes language models better few-shot learners.” arXiv preprint arXiv:2209.01975 (2022).
https://arxiv.org/abs/2209.01975
[5]Kim, Hyuhng Joon, et al. “Self-generated in-context learning: Leveraging auto-regressive language models as a demonstration generator.” arXiv preprint arXiv:2206.08082 (2022).
https://arxiv.org/abs/2206.08082
[6]Shumailov, Ilia, et al. “AI models collapse when trained on recursively generated data.” Nature 631.8022 (2024): 755-759.
https://www.nature.com/articles/s41586-024-07566-y
本文由@阿茶的AI之路 原創發布于人人都是產品經理,未經許可,禁止轉載。
題圖來自 Unsplash,基于CC0協議。
該文觀點僅代表作者本人,人人都是產品經理平臺僅提供信息存儲空間服務。
- 目前還沒評論,等你發揮!