Skip to content

跨度標註

一份完整的跨度標註指南,涵蓋文本區域的高亮標記、重疊跨度與巢狀跨度、標籤顏色、BIO/IOB 標註,以及如何在 Potato 中構建跨度任務。

跨度標註是指標記條目內部的某個區域,而不是給整個條目打標籤。標註者高亮一段文本(或一段音訊),併為其指定一個標籤。 它是命名實體識別、錯誤標記、抽取式問答和音訊事件檢測的基礎,這些都是跨度任務,區別只在於標籤集合不同。

一個跨度就是一段帶標籤的子序列:一個起始位置、一個結束位置和一個類別。在機器學習中,這通常被表述為序列標註,即給每個詞元(token)打上一個標籤。

一個基礎的跨度任務

定義好標籤,讓標註者去高亮即可。顏色和提示文字能讓介面操作更快、更一目瞭然:

yaml
annotation_schemes:
  - annotation_type: span
    name: entities
    description: "Highlight each named entity and choose its type."
    labels: [PERSON, ORGANIZATION, LOCATION, DATE, MISC]
    sequential_key_binding: true
    allow_discontinuous: false

命名實體識別設計正是這個任務,可以直接執行。

重疊跨度與巢狀跨度

預設情況下,一個字元最多隻屬於一個跨度。但有些任務需要更多:

  • 重疊跨度:兩個標註覆蓋了部分相同的文本,例如一個情感跨度覆蓋在一個實體跨度之上。
  • 巢狀跨度:一個跨度位於另一個跨度內部,例如 "[University of [Michigan]]",其中地點巢狀在組織機構之內。

當你的標註指南有此需要時,設定 allow_overlapping: true。請儘早決定這一點,因為它會改變標註者對邊界的思考方式。

BIO/IOB 標註,你匯出的資料長什麼樣

跨度標註在用於訓練時,通常會以詞元標籤的形式匯出為 BIO 方案(也稱 IOB):B- 標記一個實體的首個詞元,I- 標記其內部的詞元,O 標記不屬於任何實體的詞元。

text
Barack    B-PERSON
Obama     I-PERSON
visited   O
Paris     B-LOCATION

Potato 可以將跨度匯出為 CoNLL 格式,它直接採用這種標註方式,spaCy 可以用 spacy convert 讀取。參見匯出標註用於機器學習

把邊界確定準確

跨度工作中最難的部分,是就跨度從哪裡開始、到哪裡結束達成一致。幾條有用的規則:

  • 決定是否包含周邊的標點、稱謂("Dr.")以及末尾的所有格,並把決定寫下來。
  • 在跨度層級而不僅是文件層級上測量一致性,這樣邊界上的分歧才會顯現出來。參見標註者間一致性
  • 用提示文字把邊界規則始終擺在標註者眼前。

NER 之外的跨度任務

同一套機制還支撐著許多工:

  • 錯誤跨度:標記譯文或模型輸出中的錯誤,採用 MQM 風格。參見檢測幻覺
  • 抽取式問答:在一段文章中高亮某個問題的答案。
  • 音訊事件檢測:在波形上標記某個聲音出現的時刻。參見音訊標註
  • 關係與共指:把多個跨度連線起來。參見關係與事件抽取共指消解

延伸閱讀