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