經過多次重複說明如何建立產品評估後,我認為是時候將其寫下來了。基本步驟有三:(i) 標註小型資料集,(ii) 校準我們的大型語言模型評估器,以及 (iii) 針對每次配置變更執行實驗與評估工具。
首先,標註資料
首先,從我們的大型語言模型請求中取樣一些輸入和輸出,並標註輸出是否符合我們的評估標準(例如,忠實性、相關性等)。可以從一個簡單的試算表開始,其中包含輸入、輸出、有助於評估輸出的額外中繼資料,以及一個用於標籤的新欄位。
專注於二元的是/否或勝/負標籤。 如果標準是客觀的,例如摘要是否忠實於來源,或是否包含拒絕內容,則使用是/否標籤。對於主觀標準,例如一個摘要是否比另一個更簡潔,則使用勝/負/平手比較。對於後者,允許標註者標示平手會有所幫助。當兩個輸出幾乎相同時,強迫他們選擇一個勝者會引入雜訊,並使我們無法得知某些差異其實微不足道。
那數字標籤或李克特量表呢? 雖然 1-5 分的量表提供了細緻度,但我發現很難校準人類標註者和大型語言模型評估器。分數「3」和「4」之間的差異通常很微妙。即使有詳細的標註準則,不同的人類標註者也會給出不同的標籤。如果人類標註者難以根據準則一致地標註,那麼對於大型語言模型評估器來說也會是個挑戰。二元標籤透過強制明確的決策邊界來緩解這個問題。
此外,雖然利害關係人有時會要求細緻的分數,以便他們日後可以靈活調整合格的門檻(例如,從 3 分提高到 4 分,或從輕微錯誤調整為無錯誤),但根據我的經驗,他們之中「沒有任何一人」真正這樣做。他們最終只會要求一個建議的門檻,以便報告合格/不合格率。如果我們最終都會走到這一步,那麼從二元標籤開始會更簡單。這能讓人類標註者提供更快、更一致的標籤,並更容易校準我們的大型語言模型評估器。
目標是 50-100 個失敗案例。 這取決於標籤的總數,更重要的是,我們實際關心的標籤數量。對於合格/不合格評估,大多數時候重要的是「失敗」案例,因為這些是破壞信任的缺陷。一個包含數百個標籤但只有五個失敗的資料集,對於校準和評估我們的評估器來說是沒有用的。我們需要一個「平衡」的資料集。我通常建議在 200 個以上的總樣本中,至少有 50-100 個失敗案例。
如何取得失敗案例? 我發現使用較小、能力較弱的模型來生成輸出是成功的。即使這些模型盡力而為,它們也會自然地產生「原生」失敗。它們可能難以處理長上下文、推理能力不足,或在邊緣案例上失敗,這些都是我們在實際產品中會遇到的失敗類型。
一種流行的方法是提示一個強大的模型來生成合成缺陷。我認為這些合成缺陷是有問題的。它們往往是分佈外的,要麼過於誇張,要麼過於微妙,無法反映實際產品中發生的情況。當我們根據這些缺陷校準評估器時,它們可能無法檢測到實際影響用戶的混亂、原生問題。雖然我理解需要從某處開始啟動我們的評估,但如果我們的評估資料集僅由這些組成,我們應該優先從實際產品中添加原生樣本。
我們也可以應用主動學習。一旦我們有了一個足夠精確的評估器,我們就可以在未標註的資料上運行它,以識別可能的失敗並優先進行人工標註。這有助於我們建立一個平衡的資料集,而無需盲目標註數千個樣本。
接著,校準我們的大型語言模型評估器
有了我們標註的樣本,下一步是建立一個提示詞模板,該模板接收輸入和輸出(以及額外中繼資料),並返回預期的標籤。我們應該將其視為一個傳統的機器學習問題,並將資料分成開發集和測試集。例如,使用 75% 的樣本進行校準(即:迭代提示詞模板),並保留剩餘的 25% 作為測試集。這確保我們衡量的是評估器對新資料的泛化能力,而不是對最初 75% 樣本的過度擬合。
每個維度一個評估器。 將一個評估器校準到單一標準並實現高準確度會更容易。一種反模式是建立一個單一的「萬能評估器」(也請參閱上帝物件),它試圖在一個提示詞中評估 5-10 個維度,忠實性、相關性、簡潔性、語氣等。
我從未見過這種做法效果良好。此外,這些包羅萬象的評估器校準起來非常困難,因為我們無法輕易地隔離哪個維度出現偏差。
相反地,應該建立個別的評估器,並透過簡單的啟發式方法將它們組合起來(例如,只有當所有維度都合格時,輸出才算合格)。這種方法為我們提供了細緻的指標,使我們能夠精確地看到是哪個維度拖累了效能。這也允許我們以不同的方式處理各種指標,因為有些是「護欄指標」,不符合它們會阻礙產品發布,而另一些則是我們渴望持續改進的「北極星指標」。
如果進行勝/負評估,請考慮位置偏差。 為此,請將評估執行兩次,並交換順序。我通常使用 XML 標籤,例如 <control> 和 <treatment>,將要評估的輸出放在其中。在第一次評估中,將基準線放在 <control> 中,比較輸出放在 <treatment> 中。
然後,在第二次評估中,將比較輸出放在 <control> 中,基準線放在 <treatment> 中。這確保評估器評估的是內容本身,而不是受順序或 XML 標籤的偏見影響。
一個校準良好的評估器應該是一致的。如果基準線在第一次評估中獲勝,它在第二次評估中也應該獲勝。如果判斷結果翻轉,則表示輸出可能過於相似而難以區分,我們可以將這些標記為平手,而不是強行做出有雜訊的決定。
使用精確率、召回率和 Cohen's Kappa 評估這些評估器。 由於我們使用二元標籤,評估非常直接。對於合格/不合格任務,我們可以優先考慮「失敗」類別的召回率,因為我們希望確保捕捉到缺陷。我們也需要良好的精確率,以確保不會錯誤地標記過多的失敗。
為了衡量與人工標註標籤之間的標註者間信度,我們可以查看 Cohen's Kappa。分數在 0.4 - 0.6 之間表示實質性一致,而任何高於 0.7 的分數都是優秀的。
基準是人類表現,而非完美。 我們有時會收到要求 90% 以上準確度的要求。我的回應是溫和地提醒大家,人類標註者很少能達到這個水平。我經常看到人類標註者間信度(Cohen's Kappa)低至 0.2 - 0.3。而且人類標註者在查看數百個樣本後,由於疲勞可能會錯過多達 50% 的缺陷。因此,如果我們的大型語言模型評估器能達到比人類標註者更高的召回率和一致性,我會認為這是一個成功。
在我看來,真正的好處並非比人類標註者更高的準確度,而是「可擴展性」。一個校準良好的評估器使我們能夠在幾分鐘內,24/7 地對數百個樣本應用一致的、(超)人類水平的判斷,而不會受制於人工審查的瓶頸。這使我們能夠大規模運行實驗,從而更快地迭代。
最後,針對每次變更執行我們的評估工具
最後,我們可以將個別的評估器組合成一個評估工具。該工具應該接受輸入-輸出對的資料集,並行運行相關的評估器(受限於速率限制),並彙總結果。我還發現有一個實用函數可以將這些指標輸出為單行資料框會很有幫助。這使得將結果輕鬆複製貼上到 Excel(產品經理偏好用於追蹤)變得容易。透過一些條件格式設定,我們可以輕鬆識別改進或退步。
將評估工具與實驗流程整合。 當我們的評估工具可以直接取用實驗的輸出時,大規模運行實驗和評估就變得簡單。我們可以調整配置,提示詞模板、檢索參數、模型選擇和參數,生成輸出,並立即評估它。這種緊密的迴圈使我們能夠快速迭代。例如,如果我們想評估從 Claude Haiku 3.5 遷移到 Haiku 4.5 的模型,我們只需更改一行配置,啟動流程,去吃午餐,然後回來檢查結果。
我們應該評估多少樣本? 這取決於我們所需的統計信心。假設我們的產品要求是缺陷率低於 5%。如果我們對 200 個樣本進行實驗並觀察到 3% 的缺陷,我們的 95% 信賴區間大約是 3% ± 2.4%。這給出了 0.6 - 5.4% 的缺陷率範圍。由於上限超過 5%,我們無法自信地得出結論,認為目前的配置已達到發布要求。
我們可以透過增加樣本數量來收緊這個估計。如果我們將輸出加倍到 400 個樣本,信賴區間會縮小到 3% ± 1.7%。現在我們的上限範圍 4.7% 低於 5% 的要求。請注意:由於標準誤差與樣本量的「平方根」成反比,因此要將誤差範圍減半,我們需要將樣本量「增加四倍」。
因此,增加更多樣本的回報會遞減。(另請參閱 Anthropic 的深入探討。)
我會以一個成功應用評估的軼事作為結尾。我最近觀察到一個團隊投入大約四週的時間來建立他們的評估工具。這包括定義評估標準、收集人工標註、校準評估器以及建立實驗工具。利害關係人最初擔心這會分散他們開發產品本身的注意力。
但回報幾乎是立竿見影的。在接下來的兩週內,該團隊針對不同的模型、檢索配置和提示詞模板進行了數十次實驗,以迭代出一個可用的產品。在接下來的幾個月裡,他們又進行了數百次實驗來完善產品、添加新功能並改進邊緣案例。如果每次配置更改後都受制於人工標註的瓶頸,這將是不可能實現的。
這就是擁有產品評估的好處;不僅是衡量和改進產品品質,更是為了收緊回饋迴路並幫助我們更快地迭代。
更新: LangChain/LangSmith 的創辦人 Harrison Chase 錄製了一段影片,說明如何在 LangSmith 中建立產品評估(標註資料、校準評估器、運行評估工具)。
延伸閱讀
- 你的 AI 產品需要評估
- 使用 LLM 作為評審進行評估:完整指南
- LLM 評估:你需要知道的一切
- 為所有人辯護 AI 評估
- 評估 LLM 評估器(又稱 LLM 作為評審)的有效性
- AlignEval:建立一個應用程式,讓評估變得簡單、有趣且自動化



