iT邦幫忙

2021 iThome 鐵人賽

DAY 21
0
AI & Data

然後模型就死在 Jupyter Notebook 了 (ಥ﹏ಥ)系列 第 21

[Day 21] 資料標註 (2/2) — 各種標註方法

子曰:『工欲善其事,必先利其器。

前言

昨天提到依照 Ground truth 改變的速度會讓不同任務的標註有各種難易度:
labeling difficulty
而依照不同的難度會有不同的標註方法,接下來就讓我們來談談各種標註方法吧。

標註方法 (基礎版)

Process Feedback (Direct Labeling)

持續創造訓練資料集。

最常見的例子為真實 vs. 預測的點擊率 (CTR),若使用者真的有點擊就標注為 True,反之為 False,其標注流程如下:

  1. Feature 為模型接收到的輸入
  2. Label 則由系統的回饋得來
  3. 把前兩個接起來就是新的訓練資料 (注意前兩者會存在時間差,要仔細配對好)
    Process Feedback
    *圖片修改自 MLEP — Process Feedback and Human Labeling

其優點為:

  • 可以不斷創造新的訓練資料
  • 標籤可以快速隨時間演變
  • 能捕捉強烈的標籤信號 (例如有沒有點擊是一翻兩瞪眼,這樣的信號就叫強烈)

缺點為:

  • 大部分任務不適合
  • 無法捕捉 Ground Truth
  • 必須針對任務客製化

常用的方法為日誌分析 (log analysis),因為大部分資料都來自於監控系統時產生的日誌。
其中開源的日誌分析工具有:

  • Logstash — 免費的開源資料處理 Pipeline
  • Fluentd — 開源的資料採集器 (data collector)

若使用雲端平台則有以下雲端日誌分析工具:

Human Labeling

由人類手把手教學。

基本上就跟想像的一樣,在前面已經討論很多了,這裡再複習一下步驟:
Human Labeling

標註方法 (進階版)

以上兩種方法為比較常見的方法,接下來介紹一些進階方法,它們的中心思想都是自動化標註流程以減少高昂的人力成本 (以標籤的正確性為代價),那就讓我們繼續吧。

Semi-Supervised Labeling

只手工標注一部分資料,剩下讓演算法幫忙。

其做法為將少數由人類標注的資料與大量的未標註資料結合,利用已標註資料在特徵空間中的 cluster 或結構來推論剩餘的標籤為何。
Semi-Supervised Labeling

假設不同類別的標籤在特徵空間中必須 cluster 在一起或具有某些可辨別的結構。

此方法的優點如下:

  • 將已標註與未標註資料結合可以提升模型準確率。
  • 取得未標註資料成本很低,所以可以大幅增加資料量。

用來標註的半監督式演算法稱為標籤傳遞 (Label propagation),它會以未標註資料和已標註資料的相似性或群體關係 (community structure) 作為標註的基準。
以 Graph-based label propagation 為例,它會利用相鄰的已標註資料來進行標註,而這些標籤則會傳遞到該 cluster 剩餘的資料中:
Graph-based label propagation
*圖片修改自 MLEP — Semi-supervised Learning

Label propagation 屬於 轉導推理 (transductive learning),也就是不學習映射函數,直接利用樣本自身進行映射。

Active Learning

依據現有資料來智能取樣尚未標注的資料 (專注於最重要的部分)。

主動學習 (Active Learning) 指的是可以智能取樣資料的演算法,它會找出較能提升模型預測性的樣本,因此特別適用於以下情境:

  • 有限的資料預算:例如醫療領域請醫生標註成本超高,主動學習可以幫助我們減輕這個負擔。
  • 不均勻的資料:主動學習可以將罕見類別挑出來。
  • 標準取樣方法無法提升模型在目標 Metrics 的表現:主動學習或許可以找到某些方法來達到目標。

其中心思想為選擇最能幫助模型學習的已標註資料,又細分為以下兩種策略:

  • 完全監督式:直接使用那些資料作為訓練集。
  • 半監督式:利用這些已標註資料來進行標籤傳播。

Active learning strategies
*圖片修改自 MLEP — Active Learning

而主動學習的整體流程為:
Active learning cycle

以下為常見的主動學習技巧:

  • Margin sampling:選取現有模型較沒信心的樣本進行標注。
    首先會使用已標註的資料訓練模型,接著選取最靠近決策邊界 (不確定性最高) 的點進行標註,將其加回訓練集重新訓練 (移動決策邊界),如此反覆至模型表現不再提升為止:
    Margin sampling
  • Cluster-based sampling:由明確的 cluster 間取樣以 "覆蓋" 特徵空間。
  • Query-by-committee:集成數個模型,選取它們意見最分歧的樣本。
  • Region-based sampling:將特徵空間分成幾個部分,分別執行不同的主動學習演算法。

Weak Supervision

程序化 (Programmatic) 的標注方法,通常藉由 subject matter experts 設計的規則來標注。

弱監督是指使用若干不同來源的資訊產生標籤,通常這些來源都是 SME 設計的規則,因此產生的標籤是不完美的 (會有 "雜訊" 產生),也就是說不一定 100% 正確。
更精確來說,它會使未標註的資料存在數個 noisy 的條件分佈,而其目標就是學習一個生成式模型來衡量這些雜訊來源的權重。
Snorkel 為最受歡迎的 weak supervision 框架,它不需要手動標注,可以程序化地建立與管理訓練集,其原理如下:
Data programming pipeline in Snorkel

以上就是今天的內容,我們當然還可以搭配前幾天提到的資料增強 (Data Augmentation) 來增加有標籤的資料量,藉由提升特徵空間的涵蓋率可以改善模型表現,但今天就到此為止啦,明天見囉!!
/images/emoticon/emoticon35.gif

參考資料


上一篇
[Day 20] 資料標註 (1/2) — Forget about the price tag ♫
下一篇
[Day 22] 驗證資料 — 不可以色色! 加裝資料界的色情守門員
系列文
然後模型就死在 Jupyter Notebook 了 (ಥ﹏ಥ)30

尚未有邦友留言

立即登入留言