Skip to content

跨度與結構化輸出的一致性

為何 Cohen 和 Fleiss 的 kappa 在跨度、NER 和結構化標註中失效,以及應改用什麼:作為一致性的 F1、完全匹配與部分匹配,以及 Krippendorff 的單元化 alpha。

像 Cohen 的 kappa 這類經機會校正的一致性,假設每位標註者都從同一固定的類別集合中,為同一固定的條目集合打標籤。跨度標註打破了這一假設:標註者可能在跨度從哪裡開始、到哪裡結束、乃至它是否存在這些問題上產生分歧。對於跨度,標準的可靠性度量是成對 F1,而不是 kappa,而且你必須事先決定邊界的部分重疊是否算作一致。 本指南解釋常用指標為何在此失效,以及應改為報告什麼。

為何 kappa 不適用於跨度

一個經機會校正的係數需要三樣東西:一份固定的條目清單、一份固定的標籤清單,以及計算標註者偶然達成一致的頻率的能力。跨度任務無法乾淨地提供其中任何一樣。沒有一份預先確定的"條目"清單可供打標籤:標註者在閱讀時才生成跨度,因此兩個人對同一份文件可能產生數量不同的跨度。而且不存在有意義的負類:"沒人標記的條目"是所有可能的子串,一個大到天文數字且定義不清的集合。

最後這一點才是致命的。Hripcsak and Rothschild (2005) 表明,當負類非常大或未定義時(如資訊檢索和跨度抽取中的情形),兩位標註者在同一個任意跨度上達成一致的機率實際上為零,因此機會校正幾乎不改變任何東西,kappa 背後的假設也不再成立。他們的結論是一種更乾淨的替代方案的標準依據:F 值本身就是恰當的一致性統計量。把一位標註者的跨度當作參考、另一位的當作預測,計算 F1,並在所有標註者對上取平均。由於 F1 是對稱的,這一對的順序無關緊要。

完全匹配還是部分匹配:測量前先決定

你報告的數字完全取決於什麼算命中,而且沒有普適答案,所以請宣告你的選擇。

  • 完全匹配:只有當兩個邊界都相同時,兩個跨度才算一致。嚴格,且在邊界承載意義時(法律引證、化學名稱)是正確的選擇。
  • 部分/重疊匹配:只要有任何重疊,或超過某個閾值,兩個跨度就算一致。更寬容,當實體的存在比其確切範圍更重要時是合理的。
  • 邊界還是標籤:對於帶類型的跨度(NER),把兩個問題分開:標註者是否標出了相同的範圍?以及他們是否賦予了相同的類型?把二者合在一起報告,會掩蓋究竟是哪一個真正造成了你的分歧。

Artstein and Poesio (2008) 是計算語言學中關於一致性的標準綜述,並詳細討論了這個"單元化"問題,即關於如何把文本切分成單元的分歧。當你需要為某個方法論選擇辯護時,這是應引用的參考文獻。

當你確實想要一個經機會校正的數字時

如果你能把任務歸約為一個固定的單元集合,機會校正就重新成立。兩種常見的歸約方式:

  • 詞元級標註:把跨度任務重新表述為每個詞元一個標籤(BIO 方案)。這樣每個詞元都是一個具有小標籤集的固定條目,Fleiss 的 kappa 或 Krippendorff 的 alpha 可直接適用。麻煩在於詞元級一致性看起來會被抬高:大多數詞元屬於簡單的"外部"類,因此一個很高的數字可能掩蓋真實的邊界分歧。
  • 單元化 alphaKrippendorff (2004) 正是為標註者自行切分連續體這一情形開發了 alpha 的一個變體。當你想要一個針對切分的、經機會校正的單一可靠性數值時,這是有原則的選擇,代價是需要更多準備工作。

一條務實的折中路徑:把詞元級 kappa 跨度級 F1 一起報告。前者告訴你標籤的一致性,後者告訴你邊界的一致性,而二者之間的差距則告訴你該修正哪個問題。

在 Potato 中的做法

Potato 會為分類方案自動計算 Krippendorff 的 alpha,但對於 span 方案,文件級的數字會掩蓋邊界分歧,所以請在你真正關心的層級上測量。可靠的做法是讓標註者在一個共享子集上重疊,匯出他們的跨度,並按你選定的匹配規則自行計算成對 F1。

yaml
annotation_schemes:
  - name: pii_spans
    annotation_type: span
    description: "Highlight every span that reveals personal information."
    labels:
      - name: person
      - name: location
      - name: org
 
# Overlap a subset so agreement is measurable
automatic_assignment:
  on: true
  instance_per_annotator: 100
  labels_per_instance: 3

匯出會保留每位標註者的跨度及其字元偏移量和標籤,這正是你離線計算完全匹配或重疊 F1、並把邊界一致性與類型一致性區分開來所需的全部內容。如果你的跨度帶類型,就把 F1 執行兩次:一次忽略類型(邊界一致性),一次要求類型匹配(完全一致性)。

延伸閱讀