第27天:基準測試 (Benchmarking) 的概念與實踐
我們已經充分理解 Prompt 是一個奠基於語意的指令,所以要讓 LLM 能生成符於預期的結果是相對困難且複雜的。而 Prompt engineering 所做的諸多努力,正是在使「LLM 總是可以生成符於預期的結果」這件事可以發生。
那麼,對於「LLM 總是可以生成符於預期的結果」,我們就有必要進一步去釐清「生成符於預期的結果」的判斷標準是什麼?這也就是「基準測試 (Benchmarking)」之所以存在的目的。▶︎ Why Benchmarking
基準測試在 Prompt engineering 中所扮演的角色,就是希望能預先為實際應用場景建立一個可以實現的「符於預期的結果」的「最低可接受標準」。簡言之,建立一套客觀數據來找出最合適的 Prompt模板,用以承接對應用戶輸入的 Prompt。
▶︎ How Benchmarking
透過模擬測試,包含設定不同的 Prompt模板、不同的用戶輸入 Prompt,模擬輸入 LLM後得到的生成內容,針對生成內容進行評分,基準測試提供了一套數據作為客觀標準,來衡量 Prompt 模板的品質,從而決定採用。
▶︎ Benefits of Benchmarking
1. 生成內容的品質一致性:
基準測試能協助確認,LLM 在接收各種不可預期的用戶輸入 Prompt 時,仍能得出相同一致且穩定的、高品質的生成內容。
2. 迭代優化可行性高:
透過定期的基準測試,可持續對 Prompt 模板進行迭代優化;尤其是就語詞使用變化快速的現實層面而言。
▶︎ Core Steps of Benchmarking
一個有效的基準測試流程至少包含以下 4個步驟:
Step 1:Define Metrics/定義評估指標
(a) 針對「什麼是好的生成內容」建立明確評估指標。
(b) 評估指標通常包含多個維度,基本必備的有:
▪︎ 準確性:是否包含所有必要資訊?
▪︎ 完整性:是否包含了所有用戶需求的點?
▪︎ 安全性:是否遵守了安全準則?
(c) 評分方式:
▪︎ 有正確標準答案的以「分數」:完全錯誤→完全正確
▪︎ 無正確標準答案的以「百分比」:ex用戶指定某種文章風格,相似度適用
(d) 考慮實際應用場景的其他評估指標:
主要取決於用戶輸入的任務內容,ex客服、資料分析、寫作**...etc.。
(**註:以寫作為例,評估指標可添加:「風格一致性:是否符合用戶指定文筆風格」。)
Step 2:Create a Test Dataset/建立測試集
(a) 在開始測試前,建立一組包含多種情境和邊緣案例的「用戶輸入 Prompt 測試集」,以確保測試盡可能地包含了用戶輸入的各種可能性。
(b) 測試集必備的輸入 Prompt 類型:
▪︎ 正常輸入:典型的、清晰的用戶問題。
▪︎ 模糊輸入:帶有歧義或不完整的用戶問題。
▪︎ 惡意輸入:試圖進行提示詞攻擊的輸入。
▪︎ 邊緣案例:很少見或極端的情境。
Step 3:Execute the Test/測試執行
(a) 將測試集中的每一個輸入 Prompt,應用至已預先設計好的不同 Prompt 模板,記錄各個模板的輸出結果。
(b) 預先設計好的 Prompt 模板,是基準測試的前置作業:在 Prompt engineering 中,完整的基準測試會包含三個階段:
▪︎ 第一階段「設計與開發 (Design & Development)」:規劃設計不同 Prompt 模板(←i.e.基準測試的前置作業)
▪︎ 第二階段「基準測試 (Benchmarking)」:今天的主要知識內容(4 steps)**
▪︎ 第三階段「部署與迭代 (Deployment & Iteration)」:實際場景落地應用
(**註:透過這個三階段歷程亦可知,Benchmarking 是連續迭代的「中間環節」,不是可以單獨成立的。)
Step 4:Evaluate & Analyze/評估與分析
(a) 根據Step 1所定義的評估指標,對所有輸出結果進行評分並分析數據。
(b) 評分可透過人工進行,或使用另一個 LLM 進行自動化評分;抑或兩者並行。
(c) 透過分析得出「哪個 Prompt 模板綜合表現最佳」,將於實際場景落地應用(i.e.第三階段的「部署與迭代(Deployment & Iteration)**」)。
(**註:記錄最佳模板在測試集中的哪些輸入類型失敗最多,可針對弱項改進,同樣有助於迭代。)
❖ 小結:
透過基準測試,在「以自然語言語意為基礎」的困難前提下,仍能為 LLM 的應用提供一個相對客觀的 Prompt 判准,保障 LLM生成內容在一定程度上的一致與穩定性。
而且,基準測試也再一次例證了,Prompt engineering (在應用程式端的各種規劃與構作) 對於 LLM 得以良好執行應用所起到的效用。