1 Introduction
今天分享2020年EMNLP會議上的一篇paper,關(guān)于無監(jiān)督(弱監(jiān)督)方式進(jìn)行文本分類,論文題目為:Text Classification Using Label Names Only: A Language Model Self-Training Approach。從題目可看出:論文的核心是僅利用標(biāo)簽名進(jìn)行文本分類,而其中實(shí)現(xiàn)的過程可以看著是:一個自學(xué)習(xí)的語言模型。光從標(biāo)題這兩點(diǎn),就吸引了我想閱讀的欲望——可見取一個好論文的標(biāo)題是很重要的~~。
帶著這份被引導(dǎo)的欲望,我將這篇論文讀了幾遍,其中細(xì)節(jié)也是反復(fù)去理解。最后感覺:這篇論文提出的方法不錯,有在實(shí)際場景中落地的價(jià)值。那就把這篇自認(rèn)好文分享給大家,如果入不了你的法眼也沒關(guān)系,我權(quán)當(dāng)又加深了一次理解。論文的下載地址為:https://www.aclweb.org/anthology/2020.emnlp-main.724.pdf,本篇論文也開源了代碼:https://github.com/yumeng5/LOTClass
2 Model

上圖為論文的模型框架,整體來說:左邊部分(MLM)是利用標(biāo)簽名(如sports,politics等)和BERT Encoder來找每個標(biāo)簽對應(yīng)的類別詞,形成類別詞庫(Category Vocabulary);右邊部分是將文本中的類別詞marked掉,然后預(yù)測其屬于那種類別詞庫,其結(jié)果也對應(yīng)著文本預(yù)測的類別,這部分是一個自學(xué)習(xí)迭代的過程。接著詳細(xì)介紹。
2.1 依據(jù)label名從語料庫中找對應(yīng)的類別詞
實(shí)現(xiàn)該目標(biāo)的思路為:找出一個label名在語料庫中出現(xiàn)的文本,然后利用BERT獲取這個label的上下文表征向量h,接著利用它去預(yù)測跟詞表V中最相似的詞(最能替代的詞)。概括來說:就是利用BERT MKM模型(BERT masked language model) 來預(yù)測哪些詞在語義層面是可以代替在文本中出現(xiàn)的label。 計(jì)算公式如下:

其中參數(shù)都是BERT已訓(xùn)練好的,這個過程可利用transformer包直接調(diào)用實(shí)現(xiàn),詳細(xì)見論文源碼。
按以上方法找到詞并不能真正意義代表label的類別詞,接著作者制定了幾條規(guī)則進(jìn)行過濾:
- 對于每一個文本的中l(wèi)abel詞,取前50個最相似的詞,按概率排序
- 對每個label,通過出現(xiàn)頻率排序,取前100作為該label的類別詞庫
- 去掉停用詞
- 去掉在多個label的類別詞庫出現(xiàn)的詞
下表為論文在數(shù)據(jù)集上找的類別詞庫示例:


2.2 類別詞進(jìn)行marked預(yù)測學(xué)習(xí)
雖然通過上面的步驟已找到各個label對應(yīng)的類別詞庫,但作者覺得還不夠,因?yàn)檫€存在兩個問題:
- 存在一詞多義的情況,如Table1中顯示:“sports”有兩層含義,第二個得到的相似詞并不代表其label的含義;
- 詞表中詞有限,有些類別詞可能并不在詞表中;
針對上述兩個問題,作者提出一個新任務(wù): Masked Category Prediction (MCP),對應(yīng)model圖中的右邊部分。其思想是:將文本中的詞masked掉,然后利用它的上下文表征信息,預(yù)測類別詞所在的category。這是一個分類任務(wù),也是在MLM基礎(chǔ)上進(jìn)行下fine-tuned的學(xué)習(xí)過程。這里可能大家會有一個疑問:這是一個監(jiān)督學(xué)習(xí)過程,那監(jiān)督數(shù)據(jù)是?
為解決這個問題,作者這樣處理的:判斷一個詞w是否屬于真正對應(yīng)的label,如果該詞的替代詞有20個在label找到的類別詞的50個中,則認(rèn)為該詞就是label的代表詞,文中也稱類別指示(category-indicative)。這條規(guī)則在某種程度上消除了上面提到的一詞多義的問題。
接著作者將類別指示詞(category-indicative)作為監(jiān)督數(shù)據(jù)進(jìn)行MCP任務(wù)訓(xùn)練:

注意:在MCP任務(wù)中,masked是category-indicative詞,文中解釋說:這樣做可讓模型根據(jù)詞的上下文來推斷類別,而不是簡單根據(jù)類別詞,某種程度就擴(kuò)大了類別詞范圍,解決了上述的第二個問題。此外,這個任務(wù)也達(dá)到了文本分類的目的。
2.3 在大規(guī)模語料庫中進(jìn)行自學(xué)習(xí)
有了MLM和MCP任務(wù),作者又提出在大規(guī)模未標(biāo)注數(shù)據(jù)集上進(jìn)行自學(xué)習(xí)訓(xùn)練,其原因有兩個:
- 仍有大量的未標(biāo)注文本沒被MCP模型進(jìn)行學(xué)習(xí),而這些未被學(xué)習(xí)的樣例是有助于提高模型泛化性的;
- MCP訓(xùn)練的模型只是利用了masked詞的上下文表征信息,并沒有利用文本的整體表征信息[cls];
針對上述問題,文章提出一個self-training (ST)思想:迭代地使用模型的預(yù)測分布P,和計(jì)算出目標(biāo)分布Q,計(jì)算二者的KL loss,從而指導(dǎo)模型進(jìn)行優(yōu)化。

關(guān)于分布Q的計(jì)算,文本采用下列方法:

為何采用該計(jì)算方法,這里我也做不了太多的解釋;文中也是引起其他論文中的方法,若對此感興趣的,建議深入閱讀相關(guān)文獻(xiàn)。而P分布是利用MCP任務(wù)訓(xùn)練的模型,然后利用文本的[CLS]向量來進(jìn)行類別預(yù)測出來的分布。


按照上述方法,迭代在語料庫上進(jìn)行訓(xùn)練,每50個batch 更新下公式4、公式5,迭代過程如上圖所示。
3 Experiment
文中在四個數(shù)據(jù)集上進(jìn)行試驗(yàn),每個數(shù)據(jù)集上的label類目并不是很多,有的就兩個類別。


試驗(yàn)結(jié)果顯示,文中的方法(LOTClass)在弱監(jiān)督類,四個數(shù)據(jù)集都取得最佳結(jié)果,最高達(dá)20%效果的提升。其中自學(xué)習(xí)方法對模型也有約6%的提升效果。與監(jiān)督和半監(jiān)督學(xué)習(xí)對比來看,平均差8%左右。整體來說,弱監(jiān)督能達(dá)到這個水平非常不錯了。
4 Conclusion
文中作者也提及到:覺得目前提出的方法仍有提升的空間,具體包括:(1)使用更強(qiáng)的預(yù)訓(xùn)練模型,文中只使用的是Bert-base,(2)將類別詞粒度擴(kuò)大,文中的類別詞長度限制不超過3;(3)使用反向翻譯方式進(jìn)行數(shù)據(jù)增強(qiáng)。此外,作者相信:該方法如果結(jié)合半監(jiān)督或者監(jiān)督學(xué)習(xí)方法,能得到更佳分類的效果。
一些我個人的想法:論文是在英文數(shù)據(jù)集上做的實(shí)驗(yàn),其方法也可在中文文本上使用,可能會有一些差別,這個我目前正在實(shí)驗(yàn),看看效果,若效果如文中實(shí)驗(yàn)結(jié)果那般,那真很多項(xiàng)目場景都可以落地應(yīng)用。此外,有點(diǎn)存疑就是:如果真實(shí)分類場景中,label的數(shù)量很多,甚至有層級關(guān)系,這類label的指示詞能很好學(xué)到嗎?此外,有些label名可能就沒在語料庫出現(xiàn)過,那這個問題又涉及到類似冷啟動的問題了,還是需要人為定義一些label的指示詞再去擴(kuò)充。這些問題還需結(jié)合真實(shí)數(shù)據(jù)場景進(jìn)行研究,也希望本篇paper對text classification任務(wù)感興趣的朋友有用,后續(xù)若有進(jìn)展,再跟大家分享~
更多文章可關(guān)注筆者公眾號:自然語言處理算法與實(shí)踐