利用結構化生成改進Prompt一致性
最近,Hugging Face的“排行榜與評估”研究團隊進行了一些小型實驗,強調了評估是多麼不穩定。對於一個給定的任務,結果對提示格式的微小變化極其敏感!然而,這並不是我們想要的:一個輸入資訊量相同的模型應該輸出類似的結果。
我們與Dottxt的朋友討論了這個問題,他們有一個想法——有沒有一種方法可以增加跨提示格式的一致性?
那麼,讓我們深入探討一下!
背景:評估對格式變化的敏感性
LLM基準效能與提示本身的*格式*密切相關,這越來越明顯,並且有些令人驚訝,儘管多年來已經引入了許多方法來減少與提示相關的方差。例如,當我們在few-shot中評估模型時,我們向模型提供格式示例以強制輸出特定的模式;當我們比較合理答案的對數似然而不是允許自由形式生成時,我們試圖限制答案空間。
“排行榜與評估”團隊透過研究MMLU(檢視該任務的4個子集)的8種不同提示格式,對此進行了演示。這些提示變體被提供給5個不同的模型(之所以選擇它們,是因為它們在當時是其大小的SOTA,並且涵蓋了各種分詞和語言)。分數使用對數機率評估計算,其中最可能的答案被認為是正確的,這是多項選擇任務的經典指標。
讓我們使用MMLU的`global_facts`子集中的第一個問題,更詳細地檢視不同的格式。
Question: “As of 2016, about what percentage of adults aged 18 years or older were overweight?”
Choices: [ "10%", "20%", "40%", "80%" ]
Correct choice: “40%”
提示中不含選項 | ||
截至2016年,18歲及以上成年人中超重人群的比例約為多少? | Q:截至2016年,18歲及以上成年人中超重人群的比例約為多少? A |
問題:截至2016年,18歲及以上成年人中超重人群的比例約為多少? 回答 |
提示中含選項 | ||
問題:截至2016年,18歲及以上成年人中超重人群的比例約為多少? 選項 10% 20% 40% 80% 回答 |
問題:截至2016年,18歲及以上成年人中超重人群的比例約為多少? 選項 A. 10% B. 20% C. 40% D. 80% 回答 |
問題:截至2016年,18歲及以上成年人中超重人群的比例約為多少? 選項 (A) 10% (B) 20% (C) 40% (D) 80% 回答 |
10%、20%、40%、80%的對數機率 | 10%、20%、40%、80%與A、B、C、D的對數機率 | 10%、20%、40%、80%與(A)、(B)、(C)、(D)的對數機率 |
提示只包含問題,或者一些標籤來表示我們處於問答格式,以及提示中可能包含的選項。在所有情況下,評估都只比較可能選項的對數似然。所有這些格式都出現在評估文獻中,並且在理論上每行都應包含幾乎相同的資訊。然而,就在下面,您可以看到這些理論上微不足道的更改所導致的效能上的巨大差異!
每個模型的效能都相差約10個點,最極端的例子是Qwen1.5-7B,在第七種提示變體下準確率甚至下降到22.9%(主要是由於分詞器問題),而在資訊基本相同的情況下,它能夠透過另一種提示達到高達51.2%的準確率。
單獨來看,只要*排名*保持一致,*分數*的變化不一定是大問題。然而,正如我們在下圖中看到的,排名受到這些變化的影響。
沒有模型在不同提示中保持一致排名,儘管唯一的區別是它們的格式,而不是資訊本身。這意味著如果Gemma-7b的作者想證明他們的模型優於Mistral-7B-v0.1,他們只需選擇正確的提示即可。
由於幾乎沒有人報告他們的精確評估設定,這在模型報告中歷來如此,作者選擇報告最有利於他們模型的設定(這就是為什麼您會在某些論文中看到一些非常奇怪的few-shot報告數字)。
然而,這並非模型分數差異的唯一來源。
在擴充套件實驗中,我們比較了使用相同模型、相同提示格式,並使用完全相同的少量樣本在提示前進行不同洗牌(例如,A/B/C/D/E提示與C/D/A/B/E提示)進行評估。下圖顯示了這兩種少量樣本順序之間的模型分數差異:我們觀察到對於相同的模型/提示組合,效能差異高達3個點!
如果我們想能夠正確評估和比較不同的模型,我們需要一種方法來克服這個挑戰。
Sclar等人撰寫的《量化語言模型對提示設計中虛假特徵的敏感性》也很好地概述了這個問題,作者介紹了FormatSpread,這是一個軟體工具,它使用多種不同格式變體評估每個模型,然後計算該模型效能的方差。這樣的解決方案使我們能夠更自信地確定哪些模型優於其他模型,但它們需要很高的計算成本。
如果我們將重點放在輸出而不是輸入上,以使這些微小的格式變化的結果更具一致性,會怎麼樣?
雖然FormatSpread是使排行榜更公平、更誠實的一次偉大嘗試,但作為LLM的實際使用者,我們真正想要的是*提示一致性*。也就是說,我們希望找到一種方法來減少提示之間的這種差異。
在.txt,我們專注於改進和更好地理解*結構化生成*,即模型的輸出被限制為遵循特定結構。我們的庫Outlines允許我們透過定義正則表示式或上下文無關語法來結構化LLM的輸出(我們在下面給出示例)。
我們最初使用結構化生成是為了透過確保以良好格式的JSON響應來使LLM更容易進行程式設計互動。然而,我們不斷地被我們發現的結構化生成的其他好處所驚喜。
在早期探索結構化生成的好處時,我們證明了結構化生成始終能提高基準效能,並在探索JSON結構化提示時發現了一個有趣的邊緣情況。
在大多數情況下,將提示格式更改為JSON,即使使用非結構化生成,也會導致幾乎所有模型的基準效能得到提高。然而,MetaMath-Tulpar-7b-v2-Slerp並非如此,我們發現在使用JSON格式提示時,其準確率急劇下降。更令人驚訝的是,當使用*結構化生成*來約束模型輸出時,效能下降可以忽略不計!
這讓我們開始質疑結構化生成是否可以用於*提示一致性*。
實驗設定說明:關注n-shot和shot順序
雖然在上述實驗中,Hugging Face 的“排行榜與評估”研究團隊探索了提示本身格式的變化,但對於接下來的實驗,我們將限制這些變化。
為了集中探索提示空間,我們只關注提示的兩個屬性的變化
- 改變提示中使用的“示例”或“樣本”數量(n*-shot*)
- 改變這些樣本的順序(*shot order*,由*shot seed*指定)
對於第2點,在給定的n-shot下,我們只打亂相同的n個例子。這意味著1-shot提示的所有打亂都是相同的。這樣做是為了避免將提示的*格式*與它包含的*資訊*混淆。顯然,一個5-shot提示包含的資訊比1-shot提示多,但一個5-shot提示的每一次打亂都包含相同的例子,只是順序不同。
初步探索:GSM8K 1-8 shot提示
為了進一步驗證這一點,我們希望探索兩個非常相似但強大的7B引數模型:Mistral-7Bv0.1和Zephyr-7B-beta的行為。選擇它們的原因不僅是為了研究個體結果的方差,而且是為了觀察*相對排名的變化*。我們使用GSM8K任務,這是一組小學數學應用題。
這是GSM8K 1-shot提示的基本格式,其中隱含的結構被高亮顯示。
為了始終生成結構正確的答案,我們建立了一個與原始提示格式中固有的結構相匹配的正則表示式。以下正則表示式在Outlines中用於定義生成結構
我們可以在正則表示式中看到,我們允許模型進行200到700個字元的推理,然後它必須宣告“答案是”,然後回覆一個最多10位數字(不能以0開頭)的數字。
值得一提的是,控制結構的正則表示式與用於解析答案的正則表示式相似但不完全相同。我們發現,在定義結構時存在一些有趣的細微差別,因為就像提示一樣,它也會影響效能。例如,請注意正則表示式中的`{200,700}`。這意味著模型在回答之前有200到700個字元的“思考”時間。更改這些值可能會影響效能,並導致我們稱之為“思維控制”的東西,這是一個我們希望很快能撰寫更多文章的領域。
我們的第一個實驗是繼續探索GSM8K資料集,並迭代了1到8次提示。結果如下所示,非常引人注目。
我們在此圖中看到兩個主要特徵:不同n-shot設定下的效能差異大大減小,並且沒有出現排名互換的情況(Mistral始終領先於Zephyr)。還需要指出的是,1-shot結構化效能明顯優於1-shot非結構化效能,並且與5-shot效能相當。這引出了我們稱之為“提示效率”的另一個研究領域。
深入探討:GPQA n-shot和shot順序變化
在接下來的實驗中,我們希望同時研究n-shots和n-shots的順序變化。順序透過設定用於打亂示例的種子來控制。如前所述,只有前n-shots會被打亂以保持提示之間的資訊一致,這意味著所有1-shot提示在不同種子下都是相同的。以下是4-shot的shot順序示例
種子 | 4-shot順序 |
---|---|
42 | 2-1-3-0 |
1337 | 1-0-3-2 |
1981 | 3-2-0-1 |
1992 | 0-3-1-2 |
12345 | 1-0-2-3 |
此外,為了探索這些結果的可轉移性,我們將任務更改為研究生級Google-Proof問答基準(GPQA)。GPQA是一個高難度知識多項選擇評估任務。以下是提示格式和突出顯示的結構。
對於接下來的實驗,我們專門使用了“diamond”子集,它代表了經過精心策劃和清理的高質量問題。在這個資料集中,198個問題中我們保留了8個用於n-shot提示(儘管只使用了前5個),然後對剩餘的190個問題進行了評估。
下面視覺化的是一個網格,表示兩個模型在所有可能的shot seed和*n*組合下獲得的準確率,包括沒有(左)和有(右)結構化生成的情況。
立即引人注目的一點是,結構化輸出在整體上傾向於比非結構化輸出得分更高。我們將在下面看到結構化和非結構化輸出的每個網格的平均值
提示種子和n-shot的結果平均值
模型 | 非結構化 | 結構化 |
---|---|---|
Mistral-7B-v0.1 | 0.2360 | 0.2935 |
Zephyr-7b-beta | 0.2387 | 0.3048 |
此外,在網格中的所有值中,我們還發現與非結構化生成相比,結構化生成的*方差減小了*。
提示種子和n-shot結果的標準差
模型 | 非結構化 | 結構化 |
---|---|---|
Mistral-7B-v0.1 | 0.0213 | 0.0202 |
Zephyr-7b-beta | 0.0273 | 0.0180 |
網格中方差的減小與我們在GSM8K上僅觀察n-shot變化時所看到的方差減小相似。
雖然提高預期效能和降低方差是很好的特性,但我們真正想了解的是對排名的影響。在下圖中,我們根據兩個模型中哪個會被宣佈為贏家來檢查這些網格
- A: Zephyr-7b-beta
- B: Mistral-7B-v0.1
- “-”:平局
從這些圖片中我們可以看出,當應用結構化生成時,確定贏家的一致性有了顯著提高。這些結果與我們使用GSM8K在各種n-shot設定下的發現呈現出一致的圖景。
結論與未來工作
儘管這些結果非常有前景,但我們仍需在更多模型和任務中探索這些結果。到目前為止,我們已經看到結構化生成可能成為評估的重要組成部分。同時*提高*預期分數和*降低*提示變化之間的方差是一個非常有前景的結果,值得進一步研究。