【NLP】不讲武德,只用标签名就能做文本分类
文 | 誰動了我的煉丹爐
編 | 兔子醬
今天給大家介紹一篇微軟研究院在EMNLP2020上發表的論文,主題是弱監督文本分類。看到標題的你可能會和我剛開始一樣震驚,只是知道標簽名怎么給文本分類呢?是的,雖然聽起來不可思議,但看完下面的解讀你會發現論文的思路是如此簡單和精妙。
論文題目:
Text Classi?cation Using Label Names Only: A Language Model Self-Training Approach
論文鏈接:
https://arxiv.org/pdf/2010.07245
Github:
https://github.com/yumeng5/LOTClass
方法
首先,概括一下這篇論文的核心思想,簡單來說,就是先通過人的先驗知識來為每個類別設定幾個代表性的關鍵詞,也就是論文中說的Label Names,你沒看錯,只需要知道有哪些類別和每個類別有哪些關鍵詞,而不需要知道每條樣本的標簽!!然后通過基于預訓練模型的方法來篩選掉一些低質量的語料,用剩余的精挑細選的語料來支撐后面的語言模型任務;最后通過自訓練的方法充分利用大量不含關鍵詞的樣本,提高模型性能。下面我們再詳細介紹這種方法的各個步驟。
設定關鍵詞
事先給每一個類別選一些你認為對目標類別重要的一些代表性的關鍵詞。比如通過文本判斷描述的是什么動物,對于目標類別“鼠”,我們可以提出一系列關鍵詞,“耗子”、“老鼠”。通過關鍵詞匹配,我們可能會得到下面的語料。(1) 老鼠是哺乳綱、嚙齒目的動物。(2) 耗子的體型較小,體型小,繁殖快。(3) 年輕人耗子尾汁。這一步在論文中并沒有特別強調,但其實這是至關重要的一步,因為正是這一步為后面提供了一批粗糙的數據。
篩選正確的樣本
可以看到,經過關鍵詞匹配的樣本中可能包含大量的錯誤樣本,比如上面的(3),那怎么過濾掉這種樣本呢?作者提出了一種方法,流程如下:首先創建一個類別詞庫,即根據每一個類別的類別名選出該類別的關鍵詞表。建立類別詞庫要用到預訓練語言模型BERT,利用關鍵詞位置的上下文embedding向量預測整個詞庫各個單詞的概率分布。
對于(2)中關鍵詞“耗子”,可能排在前面的是“耗子”、“鼠科”、“老鼠”。但對于(3)中關鍵詞“耗子”,排在前面的就可能是“武德”、“大力士”、“大E”。
很顯然,(3)的目標類別就不是“鼠”,但這種詞也是少數,畢竟我們在選關鍵詞的時候肯定會選擇能代表目標類別的詞。如果文本中出現類別名,利于預訓練模型的通用知識預測該類別名位置的可能出現的詞,選出概率最高的top50的詞作為候選詞,然后選擇頻次排名前100的詞來組成該類別的關鍵詞庫(注意這其中不能有停止詞,也不能有同時屬于多個類別的詞)。
構建好了類別詞庫之后,我們就能用它來篩選掉一些含關鍵詞的錯誤樣本,做法也很簡單。如圖所示,對于樣本中某個關鍵詞,將其上下文embedding向量傳進MLM head,得到預測出來的單詞分布,如果top50里有20個以上的單詞出現在類別詞庫中,就算是正確樣本(這里的超參可以根據酌情調整,來控制約束力度)。
我們對(3)使用這種方法,發現top50的關聯詞里一個出現在類別詞庫的詞都沒有,因此(3)不是屬于目標類別的樣本;文中把能指代目標類別含義的關鍵詞稱為類別提示詞(category-indicative)。
Masked Category Prediction
通過上一步,我們已經得到了一批精挑細選的帶類別提示詞的樣本,如何利用這些樣本呢?本文提出了一個MCP任務用于 fine tuning 我們的模型。
如圖所示,這里跟前面預測單詞分布一樣,將類別提示詞的上下文embedding向量傳進MCP head(全連接+softmax),來預測類別提示詞的目標類別。注意,這里需要先Mask掉類別提示詞然后進行預測。為什么這里需要Mask但前面卻不用呢?道理很簡單。如果不Mask掉類別提示詞那么任務就太簡單了,而我們希望模型能學習到更多的上下文信息。前面在構建類別詞庫的時候不需要Mask,是因為那只是一個預測過程,只用關注預測結果的正確性。
自訓練
我們很容易能發現,被關鍵詞匹配到的樣本畢竟還是少數,大量無關鍵詞的樣本也不能就這樣浪費啊。因此作者還使用自訓練的方法在無關鍵詞樣本上訓練,自訓練的目標函數可以用KL散度來表示。
K代表類別數量,這里的q是類別概率的目標分布,p是預測分布。q的取值有兩種選擇:(1) Hard Labeling:概率最大的類別取1,其他為0;(2) Soft Labeling :
實驗下來(2)的效果更好。由于自訓練是通過[CLS]的embedding向量來進行預測的,因此它不僅讓大量的無關鍵詞數據得到利用,還彌補了MCP任務沒有用到[CLS]進行訓練的短板。
實驗結果
從表中我們可以看到,本文提出的方法在四個數據集上相比其他弱監督方法有很大的提升,并且自訓練的作用看來也是非常顯著,比不使用自訓練提升了約5個點。并且論文的第5節還提到,所用的方法還有進一步提升的手段。包括使用更先進的預訓練模型,為每個類別設置更多關鍵詞(文中每個類別對應3個關鍵詞),以及使用數據增強。
思考和小結
看完上面的文字,明白了作者提出的方法是屬于弱監督學習中的不準確監督學習,使用BERT預訓練模型構建類別詞庫的方法來找出錯誤樣本。同時還用到了自訓練的方法利用無標注樣本,讓模型的性能得到進一步提升。整套流程還是很系統的,有參考的價值。
[1]Y Meng,Y Zhang,J Huang,C Xiong,J Han. 2020. Text Classification Using Label Names Only: A Language Model Self-Training Approach. In Proceedings of EMNLP.
[2]Junyuan Xie, Ross B. Girshick, and Ali Farhadi. 2016. Unsupervised deep embedding for clustering analysis. In ICML.
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯 本站知識星球“黃博的機器學習圈子”(92416895) 本站qq群704220115。 加入微信群請掃碼:總結
以上是生活随笔為你收集整理的【NLP】不讲武德,只用标签名就能做文本分类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【机器学习基础】(二):理解线性回归与梯
- 下一篇: 网易邮箱大师如何定时发送 定时发送邮件方