手動標註標籤即將成為過去式

Rene Wang
翻滾吧!駭客女孩!
8 min readFeb 25, 2020

在 Machine Learning 的世界中,獲得正確且與任務相關的標籤永遠是要務之一。利用與任務相關的標籤資料來當作學習的正解有助於模型更有效率且切中要點的學習。然而,獲得標籤的資料是相當耗費人工以及時間的工程。因為端看應用為何,有些資料具有時效性,有些則需要特殊的 domain knowledge。前者必須週期性的對 streaming data 做標註,而後者則需要雇用大量的 Subject Matter Experts (SME) 方能得到有用的標籤。

人工標註是如此耗費金錢以致於對某些企業來說變成一個無法負荷的工作,於是需要考慮更便宜的選項。而其中一個選項是考慮所謂的 “User-generated” 資料標註。欲產生 ”User generated” 資料的企業,可以利用 app,圖片或鏈結來作為產生 ”User generated” 資料的媒介。一些有名的例子,如:Google 的 Quick draw 便是以遊戲的方式來搜集五千萬筆物體的素描圖案。還有 Netflix 可以利用影視商品的 Thumbnail 來搜集有關該影視商品的 click through 資料以增進該公司所發展的推薦演算法。這樣的手法也應用在其他購物網站。

前者所列的例子,都是需要使用者最小努力的輸入,甚至在使用者不曉得情況完成輸入。有一些任務需要比較多的使用者的努力,包括了自然語言以及醫學影像的判讀。以檢查英文文法的 Grammarly 和 Google Compose 就仰賴輸入者的識別能力來決定所建議的文句是否正確,進而成為這些 AI-based app 的訓練資料。關於更多 ”User generated” 可以參考相關資料 [1]。

雖然 “User-generated” 給許多 data-hungry 的公司提供了一個很好的解決方案,然而這些資料卻衍生了另一個問題,那就是他們是 “weakly-supervision” 的資料,需要進一步的審查與清理。另一種產生 “weakly-supervised” labeled 資料的方法,則是使用自動標註程式(labeling functions)。Snorkel 仰賴自動標註程式去產生資料的 representation,並設法解決多個標註結果產生的衝突結果,我們將會在下列的段落著重自動標註程式的介紹。最後一種產生 weakly supervision label 的方法,則是某些演算法的副產品,如,解釋物體分類的歸因演算法會產生每一個輸入像素與目標物體重要性的 saliency map,經研究發現該 saliency map 也可以幫助產生物體定位座標。

目前自動標註程式該程式需要整合 organization knowledge,並且在多數的情況下產生一到多個自動標註程式。Organization knowledge 可能包括人類標註者的經驗法則(Heuristics and rules),藉由相關 domain 的非監督學習結果(Topic models, taggers, and classifiers),追蹤的數據,如追蹤 click throgh rate(Aggregate statistics)和由現成的資料庫建立 knowledge 或 entity graph。

”Data management” 的需求正隨著深度類神經網路的發展而日漸升高,這是因為深度類神經網路替我們省下了特徵工程的費用和時間,然而他們所要求的就是準確和無雜訊的已標註資料。這個時候,我們就需要一個 machine learning 的模型來學習。

由 Stanford 大學實驗室發表的 Snorkel 就是為了學習 “weakly-supervision” 的標註資料。Snorkel 系統主要有三個 stages:包括由使用者手刻的自動標註程式(Writing Labeling Functions),建立一個 generative model 去估算標註的正確率以及相關性(Modeling Accuracies and Correlations)和最後訓練一個 Discriminative 模型(Training a Discriminative Model)。

第一個 stage 由使用者手刻或透過程式樣本(template)產生的自動標註程式自動標註程式可以根據上述的 organization knowledge 而手刻寫成。在 Snorkel 的函式庫有撰寫自動標註程式的樣本供使用者使用,甚至有標註程式的 generator,使用者只需要指定在某些條件下該輸出哪一個標籤即可。這些自動標註程式產生的標籤通常品質都不是很高,對同一資料點可能會有相斥或重複的情況。

第二個 stage 則是建立一個 generative model 去估算標籤的正確率以及相關性(Modeling Accuracies and Correlations)。這個 generative model 會以自動標註程式充滿雜訊的標籤輸出作為輸入,而輸出該資料點的標籤機率。換句話說,這個 generative model 會學習到標註程式輸出正確標籤的機率有多少。簡化 Snorkel 的 generative model 的運作方式,可以想像每一個標註程式都是一個獨立的投票者,根據標註程式的正確性(Modeling Accuracies)做加權投票,其結果就是決定該資料點的輸出標籤機率(probabilistic label),該標籤資料非絕對的二元值,而是一個介於 0–1 的機率值。

除了以機率模型來決定最終的輸出,Snorkel 也使用 dependency graph 的方式來學習標註程式之間的關聯性。標註程式有可能輸出重複的資訊,於是造成了重複計數的問題(double counting)。同樣地,標註程式也有可能輸出相互衝突的結果。藉由勾勒出這些標註程式之間的關係(Modeling Correlations),來解決上述因為不同標註程式產生的問題。

這個 generative model 可以就不同的標註程式,對現有的資料產生高 precision 的標籤機率,但是可以涵蓋的標籤資料範圍是較低的。為了不失去 generative model 的高 precision 且能夠達成較高的 coverage,我們就需要一個 discriminative model。

第三個 stage 如上所述,需要建立一個 discriminative model 去增加標籤資料的 coverage。同時,這個 discriminative model 也可以作為 end-model ,最後 deploy 成為 service。在這個 stage,你可以使用你所喜愛的分類器,無論是簡單的 logistic regression 還是 deep learning,只要他們允許使用非 perfect 的標籤來學習。事實上,這個 discriminative model 所使用的訓練標籤就是在上一個 stage 產生的標籤機率資料,而訓練的特徵可以採用與 generative model 相同的特徵,或是另外一組特徵。 而後者在 deploy 一個 production model 時格外的有效。

這是因為標註程式使用的 Organization knowledge 通常都是很繁複的經驗法則。除此之外,使用者手刻的標註程式雖然有標註相關 domain 知識,卻因缺乏 production 經驗而執行緩慢,造成在 production level 無法上線的情況。Snorkel 系統則提出相關的解決方法,那即是透過 Snorkel 產生高 coverage 的訓練標籤,然而再由另一組可使用在 production 的特徵來訓練 discriminative model 模型。一個例子,則是官方的 crowdsource tutorial 藉由 BERT 產生 embedding 作為訓練 logistic regression 的特徵。

未來是 No Label AI 的天下

作者在文後提到像 Snorkel 這樣的能達成自動大量標註系統,使得過往以搜集標籤為導向的 AI 產品發展趨勢將會逐漸減少。相對地, 設計一個AI 產品將會從「我們能從這個資料中推測怎麼樣的結果」,並生成相對的訓練標籤。而在這裡所提到的 No Label AI 並不是丟棄需要標籤訓練的監督式學習法,而是盡己所能的利用 weakly supervision data 來產生有用的產品知識。

Disclaimer: 有些讀者可能想知道 Snorkel 是否能處理 regression 任務中的連續浮點數?一個簡單的答案是,目前似乎是不行的。更長的答案,可以去 follow 這個 Snorkel issue

參考資料:

[1] Hand labeling is the past. The future is #NoLabel AI(英):本文主要基於此篇文章而寫成
[2] Snorkel: Rapid Training Data Creation with Weak Supervision (論文,英)
[3] Snorkel 官方網站(英)

相關資料:

[1] The Rise of User-Generated Data Labeling (英)

--

--