数据标注问题
前言
之前有些過一篇文本分類的文章,從技術層面來描述了包括傳統NLP技術、深度學習相關的文本分類技術,很有幸做了一個關于文本分類的項目,對這塊有進一步的認識。 項目的基本需求是對資訊文章按照語義進行分類。例如http://www.ifanr.com/906951中描述的
描述的小米手機相關的新聞,需要將文章分類為手機-手機通訊,然后結合文章相關tag詞做相關產品的廣告露出,僅僅依靠tag詞『小米』可能不太準確,會推薦出糧食相關的『小米』內容,如小米之類的糧食相關的商品。
如果能得到資訊可插入商品的分類,能進一步通過商品類別來濾除tag詞的一些badcase,在業務相關的廣告露出上,結合商品類目、資訊文章相關tag詞,還有一些業務規則,更加合理、準確地露出文章相關的商品。 商品分類主要包括兩塊內容:是否可插入商品分類器、可插入商品文章的商品分類,以下所有的內容都是從這兩塊去闡述數據標注中做的一些相關的工作。
數據 雜 亂 差
機器學習類方法,數據為重,數據是機器學習方法、尤其是深度學習方法的魂,是算法能達到性能的上限,所以有效的訓練數據是模型準確性保證的關鍵,而商品分類器的數據相對于資訊分類還是比較麻煩的,資訊分類的數據可以在爬蟲的時候爬取新聞文章相對應的類別信息,所以這部分比較容易,而商品分類麻煩就在于文章數據如何拿到對應的標簽,要想比較合理地收集訓練數據集,單純的收集文章數據,靠人工標注是不靠譜的,無論是在量上還是數據準確上都是很難的,商品分類數據的收集主要有三個方面的問題:
- 雜,商品分類體系特別多,耳機類目有將近400個分類,覆蓋多種不同類目,從手機到洗護用品都有涉及,很難從商品層面上找到共性;
- 亂,資訊分類數據在不同類目上分布極度不合理,先驗分布比例差異巨大,比例可能達到1000:1;
- 差,資訊文章文本數據質量差,尤其是圖片類文章,文本文字少,很難得到語義信息。
數據標注的三個層次
第一個層次:看山是山,看水是水
最開始,在未完全了解數據的前提下,按往前經驗,直接標注數據,標注內容主要包括:是否適合插入商品數據,若適合插入商品,則對應文章的類目,包括0級類目、1級類目、2級類目;每一條記錄的標注難度很高,需要完全閱讀文章,理解文章內容,再判斷是否可插入商品,插入何種商品,一條記錄從閱讀到最后記錄內容,可能需要2分鐘以上的內容,這種標注耗時太大,并且由于先驗分布的極不均勻,最后標注拿到的數據類別分布也極不均勻,且也存在相關的難點:
二類分類器的標注可以在第一個層次解決,完成一定量的標注后,因為得分還有類目的限制,正樣本相對負樣本比較多,這里我們再講不可能插入商品的類目樣本隨機抽取若干樣本數量,加入到訓練集中,訓練好二類分類器后,準確率和召回率達到將近90%+, 但是由于標注數據是從類目抽取和人工標注,是人就可能出錯,很多是否可插入商品的樣本不同標注人員的標注結果都不同,算法的準確率和召回率只能在一定程度說明結果。因此,及早引入測試人員對分類器性能進行測試,在這種情況下,顯得尤為重要。
第二個層次:看山不是山,看水不是水
商品類目分類,在第一個層次中盡管有標注,但是其實有效數據太少,如果能夠重新做一遍這個項目,我會將是否可插入商品的分類和商品類目分類作為兩個分開的任務來進行標注。這里給各位小伙伴提醒一下,在標注任務的相關工作上,盡量能把復雜的任務拆分為簡單的任務,將任務細化到標注人員只標注yes或者no的程度,標注人員尤其是外包,由于各個階層、各方面專業的人都有,越是復雜的問題上,對問題的理解越不一致。在和標注團隊合作一段時間后,更深地了解這其中的問題,很有意思。
**如何分解問題?**從兩個方面來處理:
- 和業務團隊溝通,將原先將近400個分類的分類問題,按照類目業務的重要性,將分類類別按重要性標注為0、1、2,選取其中最重要的率先進行標注;
- 將原先標注的標注各個類目的問題,分解為對樣本對應類目來標注是否正確, 具體解放方法是,在第一層次的基礎上,我們收獲了一批對應商品類目的樣本數量,樣本數量沒有達到能直接上線的程度。但是,我們可以通過已有的訓練數據,去訓練一個合適的分類器,然后去文章池子去過一遍,然后按照類別進行分析, 綜合考慮準確性、召回率的前提下,對每一個類別分配合理的閾值,當maxprob為某個類別且類別概率大于該類別閾值時,則露出來給標注人員來標注,判斷該文章被分配到類目是否合適。
第二層次在一定程度上能夠較快地收集到一批數據,但是由于本身樣本的多樣性還有先驗分布概率差異太大,這樣去對待標注問題,其實是很難的,能存在的問題就是標注20w數據可能在31類其中某個類別只有100不到,這種靠人工標注明顯不可靠,因為數據分布差異性太大,最后分類器的指標也很難讓人信服。
第三個層次:看山還是山,看水還是水
考慮到第二個層次遺留的問題,我們很難通過標注人員來幫助我們來完成這種問題,這里我們回溯到前面,從頭開始考慮數據標注:
- 是否可以通過自動化的手段,例如前面提到的資訊文章分類的手段,從爬蟲拿到對應的分類信息,這樣的數據質量,不僅高,而且無需標注成本。很不幸,很難直接拿到這樣的數據;
- 如果直接提取自動化手段不靠譜,那么我們是否可以通過一些文本提取的手段,來提取一些類別的關鍵詞,濾除不合適的類別的關鍵詞,然后用關鍵詞去過濾文章池子,這樣可以快速地得到對應類別的文章列表。
想到這個方法之后,我們直接從兩個方向上去獲取類別和關鍵詞的映射序列:
通過上面之后,我們可以得到31分類下大概20w左右的數據,訓練好商品分類器后,我們觀察分類器在大部分類目下都達到0.8+的準確率,但是在有些類目下確實有問題,但是由于直接對20w數據來進行重新標注工作量太大,耗時太多,根本不可行,更好的一種方式,是通過對測試樣本分類,通過測試人員檢查是否有badcase,我們測試人員發現一些娛樂明星相關的新聞,經常會被分到糧油調味的問題,很奇怪,按常識應該不會,但是就是發現了,分析了一輪應該是數據有問題,后來我們發現我們在濾除關鍵詞時,將糯米留在了糧油調味的類目下,而楊冪和劉愷威的小孩,小名就叫『糯米』,而娛樂明星相關的新聞,在原先的樣本池子就很多,因此污染了糧油調味這一類目的訓練數據,所以我們只需要讓外包同學幫忙重新濾除下糧油調味這個類目的數據即可,工作量大大降低,通過這種以結果(badcase)為導向的處理方式,對于標注人員只需要檢查某個類目下數據是否屬于這個類目即可,而對于算法工程師,我們能更加清楚地知道這類badcase的由來、可解決的方式、分類器在這類數據上的表現等等,而對于業務團隊就更加開心了,能夠切實看到分類器的效果、還有badcase,還能追著算法工程師去解決,何樂而不為呢?
總結
稍微總結下,因為之前實際項目經驗的不足,在最開始的時候,我們作為算法從業人員,把工作重點都集中在算法、模型這塊,其實轉過頭來,這樣是不對的,數據才是整個項目中80%應該關注的內容,數據好,算法才好,調嘛嘛優。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: 机器学习中样本不平衡处理办法
- 下一篇: 连续特征离散化方法介绍