一些關(guān)于大語言模型 “提示詞” 優(yōu)化的經(jīng)驗談
最近我有幸參與了一個與自然語言處理相關(guān)的項目,團隊選擇了大語言模型作為核心技術(shù)之一。在一個分類任務(wù)中,我們通過精心設(shè)計提示詞,顯著提升了模型的準確率。這個過程讓我們積累了一些有用的 “提示詞” 經(jīng)驗。接下來,我將分享一些關(guān)于 “提示詞” 優(yōu)化的經(jīng)驗和技巧,希望能夠幫助大家更好地利用大語言模型。
一、對大語言模型的重新認識
在項目中,我們逐漸意識到,要真正發(fā)揮大語言模型的潛力,僅靠工具層面的了解是不夠的,還需要對其內(nèi)部運作機制有所了解。
簡單來說,大語言模型通過對海量文本數(shù)據(jù)進行學(xué)習(xí),捕捉文本間的模式和關(guān)聯(lián),從而實現(xiàn)理解和生成文本的能力。本質(zhì)上講,大語言模型是一種統(tǒng)計模型,它對互聯(lián)網(wǎng)上的公開文本(如新聞、博客、社交媒體、書籍等)進行統(tǒng)計,識別詞語間的深層次關(guān)系。從這點可以知道,大語言模型所掌握的知識和所具備的能力也是與互聯(lián)網(wǎng)文本數(shù)據(jù)中的基本統(tǒng)計特征相對應(yīng)的。
這讓大語言模型具備這樣幾個值得注意的特點:
- 語義相似性: 它能很好地識別不同詞匯之間的關(guān)聯(lián)。
- 常見語法結(jié)構(gòu)和語序: 對日常使用的句式結(jié)構(gòu)了然于胸。
- 部分領(lǐng)域?qū)I(yè)術(shù)語: 雖然擅長某些領(lǐng)域的專業(yè)詞匯,但可能在深層次的行業(yè)知識上略有不足。
- 模式與關(guān)聯(lián)學(xué)習(xí): 通過海量數(shù)據(jù),習(xí)得了許多模式和關(guān)聯(lián),但對其背后的邏輯或原理,不一定有更深入的理解。
大語言模型的推理是怎么回事呢?
大語言模型的輸出過程可以理解為一系列的條件概率計算。在生成文本時,模型會根據(jù)已有的上下文信息,預(yù)測下一個詞的概率分布,并選擇概率最高的詞作為輸出。這個過程不斷重復(fù),直到生成完整的文本。
盡管乍一看似乎缺乏邏輯推理,但實際上,邏輯推理始終潛藏于整個過程。這是因為,詞語之間本身就存在著內(nèi)在的邏輯關(guān)聯(lián),每個詞可以被視為是基于前置詞匯進行邏輯推導(dǎo)而得出的結(jié)果。因此,每一次新詞的生成都是一次微妙的推理過程?;ヂ?lián)網(wǎng)文本如此,大語言生成的文本亦是如此。
基于此,我們也可以了解為什么加上 COT 之后模型能輸出更準確的結(jié)果。因為 COT 為模型注入了更多的推理邏輯過程,有了這些之后,生成的文本在邏輯上就更能成立了,輸出正確答案的概率自然也變高了。(COT 是 Chain of Thought 的縮寫,即思維鏈,是一種讓模型逐步推理出答案的方法。)
二、提示詞優(yōu)化
了解這些如何能指導(dǎo)我們更好的應(yīng)用大語言模型呢?那就是提示詞優(yōu)化了。
提示詞是與大語言模型交互的途徑和關(guān)鍵,它決定了模型如何理解和生成文本。優(yōu)化提示詞被認為是一件非常 tricky 的事情,并不容易。根據(jù)我們的經(jīng)驗,在優(yōu)化提示詞時,把上面的對大語言模型特點的理解謹記于心,常常能找到優(yōu)化的方向。
三、一些提示詞優(yōu)化經(jīng)驗
提示詞優(yōu)化的目的是讓大語言模型更好地理解我們的意圖,從而生成更準確、更符合預(yù)期的輸出。
那么大語言模型常常在什么地方出問題呢?我們觀察到:
- 理解偏差:大語言模型可能誤解了我們的意圖,導(dǎo)致輸出不符合預(yù)期。
- 信息不足:大語言模型可能缺乏足夠的信息來生成準確的輸出。
- 邏輯錯誤:大語言模型可能在推理過程中出現(xiàn)邏輯錯誤,導(dǎo)致輸出不準確。
- 推理不足:大語言模型可能輸出內(nèi)容很少,推理不足,導(dǎo)致輸出不準確。
- 關(guān)注的重點不一致:大語言模型可能關(guān)注的重點與我們預(yù)期的不一致,導(dǎo)致輸出錯誤。
了解這些可以讓我們更好地理解大語言模型的行為,從而更有針對性地優(yōu)化提示詞。
四、下面分享一些具體的優(yōu)化經(jīng)驗
為了更快的響應(yīng)速度,一般的提示詞會直接讓大語言模型輸出結(jié)果,不要附帶其他信息。但是這樣一來,出錯了就沒法知道原因。
1. 為了解決這個問題,我們可以讓大語言模型先輸出結(jié)果,再解釋原因
這樣一來,如果出錯了,就可以根據(jù)解釋進行分析。例如,我們可以這樣提示大語言模型:“請先在第一行直接輸出結(jié)果,然后換一行開始逐步解釋原因”當大語言模型輸出錯誤的結(jié)果時,我們可以根據(jù)解釋的原因來判斷錯誤的原因,從而更有針對性地優(yōu)化提示詞。在上線應(yīng)用時,只需要設(shè)置stop_words為換行符,就可以快速地只獲取結(jié)果,而不需要解釋的原因。
2. 基于大語言模型的解釋去分析在哪里表現(xiàn)不好,或者理解有差異,針對性的添加提示詞
大模型的解釋常??梢詭椭覀兎治銎湓谀睦锉憩F(xiàn)不好,或者理解有差異。這一方法,通??梢越鉀Q由于理解偏差和信息不足帶來的問題。我們可以根據(jù)這些信息,針對性地添加提示詞,來引導(dǎo)大語言模型更準確地理解我們的意圖。例如,如果大語言模型在關(guān)于分類的定義理解有差異,我們可以在提示詞中添加相關(guān)的背景知識,來幫助大語言模型更準確地理解。
我在實驗過程中,就碰到這樣一個例子。我發(fā)現(xiàn)大語言模型不能將“錢包”對應(yīng)到“數(shù)字人民幣錢包”,而是將其理解為“實體錢包”。我在提示詞中添加了“數(shù)字人民幣錢包”的定義,并說明其簡稱為“錢包”,就解決了這個問題。再比如,大語言模型可能不能很好的區(qū)分兩個分類,我們可以在提示詞中添加關(guān)鍵的差異點,來幫助大語言模型更準確地理解。當然,這個差異點我們也不用自己想,可以通過詢問大語言模型來找到。
我們在實驗中的例子是,大語言模型對于用戶意圖是“完成任務(wù)”或者“咨詢問題”兩個類別識別不夠準確。通過分析大語言模型的解釋,發(fā)現(xiàn)關(guān)鍵的差異在于是否在完成任務(wù)的過程中遇到問題。我們在提示詞中添加了這一點,模型表現(xiàn)就更好了。
我們都知道COT可以提高大語言模型的正確率,但是COT比較慢,難以應(yīng)對實時的應(yīng)用場景。是不是可以把COT編碼到提示詞中?這樣就可以提高正確率,又不會影響響應(yīng)速度。我們實驗發(fā)現(xiàn),這樣做是可行的,只需要進行一點抽象即可。
首先,我們可以讓大語言模型對錯誤的用例,使用COT重新解釋一遍,如果這次能解釋正確,就說明這個邏輯可以參考。但這樣的解釋可能跟具體的用例強相關(guān),難以直接放到提示詞中。這個問題不難解決,我們可以讓大語言模型對其他錯誤的用例也應(yīng)用COT進行解釋,然后找到解釋中的共性,將這些共性抽象出來,放到提示詞中就可以了。比如,大語言模型有時會把“完成某個特定任務(wù)”和“閑聊”混淆,觀察大語言模型對錯誤用例的COT解釋,發(fā)現(xiàn)大語言模型提到了“是否有目的性”。這是一個很好的共性,我們可以將其提取出來,放到提示詞中。把COT編碼到提示詞中常常能解決邏輯錯誤和推理不足的問題。
3. 分析性的提示詞放在后面,在提示詞中編碼分析過程,可以提高正確率
這是一個很有意思的發(fā)現(xiàn)。一般而言, 我們會把描述任務(wù)的提示詞放在前面,然后再放需要分析的內(nèi)容。但事實上這會降低正確率。我們發(fā)現(xiàn),如果把描述任務(wù)的提示詞放在后面,就可以提高5%左右的正確率。仔細一想,這其實比較符合COT的思路。在COT中,我們也是基于問題進行分析之后得出結(jié)果。描述任務(wù)的提示詞其實蘊含了分析過程,放在后面,一定程度上有COT分析過程的意義,所以可能是更有效的。
4. 保持英文和中文的一致性,不要引入一些隱性的差異
另一個有意思的發(fā)現(xiàn)是,大語言模型對于英文和中文的敏感度是不一樣的。一些開源的模型,如Llama系列的,其訓(xùn)練數(shù)據(jù)以英文為主,那么英文的敏感度就可能更高。這給我們的啟示是,用英文比用中文可能能取得更好的效果。實際上,在我們項目里面,是中英混合的。我們一開始嘗試了多次在提示詞中用中文進行解釋,但效果一直不夠理想。后來我們發(fā)現(xiàn)英文名與中文的描述并不是特別一致,我們把一個隱含的結(jié)構(gòu)放在了英文名中。在修改英文名之后,效果就好了很多。
保持中英文一致,常常是解決大語言關(guān)注的重點不一致問題的一個不錯的方法。
5. 保持提示詞使用簡潔而嚴謹?shù)恼Z言風(fēng)格
簡潔而嚴謹?shù)恼Z言風(fēng)格,就像是在書寫嚴謹?shù)耐评眍惖奈臋n內(nèi)容(比如論文),可以讓大語言模型更加專注于任務(wù),而不會被其他的信息干擾。在實際應(yīng)用中,這常常也是有效的,而且,這樣的提示詞還能節(jié)省token,讓模型響應(yīng)更快。
五、總結(jié)
大語言模型的能力越來越強大,應(yīng)用也越來越廣泛,但是,實際應(yīng)用中,我們?nèi)匀恍枰獙ζ溥M行一些調(diào)教,才能更好地發(fā)揮其潛力。
本文分享了一些我們對大語言模型的理解,并基于一些實際操作經(jīng)驗分享了我們在提示詞設(shè)計上的一些發(fā)現(xiàn)。希望這些發(fā)現(xiàn)能夠?qū)Υ蠹矣兴鶐椭?/p>