Skip to content

生成文本的人工評估

如何對 LLM 與 NLG 輸出開展一次經得起推敲的人工評估:精確定義各項標準,在絕對評分與成對比較之間做出選擇,為研究提供足夠的統計功效,並報告足以復現的細節。

像 BLEU 和 ROUGE 這樣的自動指標與生成文本的實際優劣相關性很弱,因此人工評估仍是標準做法,而它做砸的次數往往多於做好的次數。把一次可信的人工評估與裝點門面的評估區分開來的三件事:精確定義每一項標準,相對判斷優先於絕對評分,並報告足夠的細節使他人能夠重新執行它。 本指南講的是流程,而不是評分標準的措辭。

為什麼要人工評估,以及為什麼難以信任它

對於開放式生成、摘要、對話、翻譯、LLM 回覆而言,自動指標對照參考文本進行比較,卻漏掉了大部分要緊之處:一個流暢且忠實、但措辭與參考不同的回答得分很低,而一句流暢的謊言卻得分很高。因此人工判斷仍然是基準真相。問題在於,人工評估本身就是一件測量工具,而設計糟糕的工具產出的數字,其噪聲不亞於它所取代的那些指標。

問題的規模已有文獻記載。Howcroft et al. (2020) 梳理了二十年的 NLG 評估,發現該領域甚至無法就自己的標準意味著什麼達成一致:「流暢性」「充分性」「自然度」等術語在不同論文中定義各異(或根本沒有定義),使得結果無法相互比較。他們開出的藥方,是任何嚴肅評估的起點:在收集任何一個判斷之前,先釘死每一項標準究竟意味著什麼。

精確定義標準

標準含糊,正是大多數人工評估出錯的地方。「請給品質打 1 到 5 分」等於邀請每位標註者各自發明一套品質的定義。把它拆分為命名清晰、各自單獨定義的維度,併為每一個寫下一句可操作的定義:

  • 流暢性:拋開內容是否正確不談,文本是否合乎語法、結構良好?
  • 連貫性:句子作為一個整體是否順理成章地銜接?
  • 忠實性 / 事實準確性:每一項主張是否有來源支撐(用於摘要/RAG)或為真(用於開放式生成)?幻覺正是在這裡被抓出來。
  • 相關性:它是否真正回應了提示?
  • 有用性:對於助手類任務,它是否完成了使用者想要的事?

分開測量這些維度,能告訴你一個系統為何勝過另一個,而不只是它勝過了。

絕對評分還是相對比較

最大的設計抉擇在於:標註者是一次評估一個輸出,還是比較若干個。

  • **絕對評分(李克特)**簡單,卻受制於量表偏差:標註者的錨點各不相同,迴避兩端,並在一次會話中逐漸漂移,因此一位評分者的「4」並不等於另一位的「4」。
  • 成對偏好(A 好還是 B 好?)完全繞開了量表偏差,通常更為可靠,這正是它支撐起 RLHF 偏好資料模型比較的原因。代價是你得到的是排名,而非絕對水平。
  • **最優—最劣量表法**展示一小組,只詢問最優和最劣,是用少量判斷獲得可靠排名的一種低成本方式。

van der Lee et al. (2021) 給出了恰好涵蓋這些抉擇的最佳實踐指南:需要多少條目和評估者、採用哪種量表、做哪種統計分析,值得在你敲定設計之前一讀。

為它提供功效,並加以報告

即使設計已然正確,仍有兩種失敗模式。

第一,功效不足的比較。 要檢出兩個都不錯的系統之間的微小品質差異,所需條目數往往超出人們的預期;先做功效分析,採用恰當的顯著性檢驗,並報告效應量,而不只是哪個均值更高。

第二,未加報告的細節。 Belz et al. (2021) 審視了 NLP 中的可復現性,發現人工評估尤其難以復現,通常是因為論文略去了確切的標準、指示語、標註者群體和分析方法。把這一切都作為研究的一部分記錄下來,而不是事後補上。

幾項可防止本可避免之偏差的做法:隨機化輸出順序,使位置不致洩露(人們偏愛第一個選項);遮蔽系統身份,使標註者無法看出是哪個模型產出了什麼;以及先在一小批上做試點,以測量一致性,並在擴大規模之前修正令人困惑的標準。

在 Potato 中實現

Potato 為每一種評估方式都提供了一個方案,因此上述設計抉擇可直接對映為配置。對於按標準分項的絕對評分:

yaml
annotation_schemes:
  - name: faithfulness
    annotation_type: likert
    description: "Is every claim in the response supported by the source? 1 = many unsupported, 5 = fully supported."
    size: 5
  - name: fluency
    annotation_type: likert
    description: "Is the response grammatical and well-formed?"
    size: 5

對於盲態 A/B 比較,使用 pairwise 方案,並隨機化把哪個系統顯示為 A:

yaml
annotation_schemes:
  - name: preference
    annotation_type: pairwise
    description: "Which response is more helpful overall?"
    labels: ["A is better", "Tie", "B is better"]

若要在一遍之內完成結構化的多標準評分,rubric_eval 方案會為評分標準的每個維度各收集一個分數。無論選用哪一種,都要在一個共享子集上保留重疊,以便報告一致性,並在匯出中保留每位標註者的標籤,好讓顯著性檢驗擁有它所需要的方差。

延伸閱讀