COLING 2018的一篇多標籤文本分類的文章,思路比較新穎,用序列生成的方法來做的,而且效果非常好。

SGM: Sequence Generation Model for Multi-label Classification?

arxiv.org

abstract

多標籤文本分類是NLP中一項非常重要且有挑戰性的任務。由於多個label之間往往相互依賴,所以多標籤分類比單標籤分類更複雜。這篇文章將多標籤文本分類看成序列生成問題,然後用seq2seq的架構來解決。實驗證明瞭該方法的有效性,該方法不僅能捕捉label之間的相關性,而且在預測不同label時能自動選擇最有信息量的詞。

introduction

multi-label classification(MLC)是NLP中一項重要任務,現實中也有許多應用場景,比如給文本歸類打標籤、信息檢索等等。

一般的做法:

binary relevance,Boutell 等人2004提出,最早的做法,將MLC轉換為單標籤分類問題,忽略了label之間相關性;

classifier chain,Read 等人2011提出,將MLC問題轉換為一連串二分類問題來建模label之間相關性,然而,複雜度太高;

還有一些其他的方法,比如ML-DT (Clare and King, 2001), Rank-SVM (Elisseeff and Weston, 2002), 以及ML-KNN (Zhang and Zhou, 2007),這些方法要麼就是隻考慮了label之間一階或二階相關性,要麼就是計算複雜度太高。

近些年來,神經網路在NLP領域取得了巨大成功,MLC方面也有一些重要進展。受機器翻譯、自動摘要等領域Seq2Seq模型的啟發,本文提出了一種序列生成模型,使用了一種創新性的解碼器,來解決MLC問題,模型就叫SGM,SGM包括編碼器和帶注意力機制的解碼器。解碼器一步步生成multi-label,每一步生成label的時候都會基於上一步解碼的結果,因此可以建模label之間的相關性。另外,注意力機制在解碼不同label的時候可以聚焦文本不同部分。本文的主要貢獻如下:

  • 將多標籤分類看成序列生成問題來建模標籤之間相關性;
  • 提出了一種新的解碼器用於序列生成模型,能捕捉label之間相關性,而且預測不同label的時候能聚焦輸入不同部分
  • 實驗結果比基線好a large margin

proposed method

先定義問題, mathcal{L} = {l1, l2, ..., l_L} 是分類目標空間,給定一個包含m個詞的文本序列 m{x} ,我們的目標是確定包含n個label的 m y 。傳統的分類任務一般是針對一個樣本給出一個label,在MLC問題中,每個樣本可以有多個label。從序列生成的角度來看,MLC任務可以建模為找 m {y^*} 使得條件概率 p(m{y}|m{x}) 最大:

p(m{y}|m{x}) = Pi_{i=1}^{n}p(y_i|y_1, y_2, ..., y_{i-1}, m{x})

本文提出的模型結構如下圖所示:

首先,將每個樣本的標籤序列按訓練集中標籤頻率排序,高頻標籤排前面,同時添加句首和句尾佔位符。

首先將文本序列 m{x} 編碼得到隱狀態,然後在每個時間步t使用注意力機制將隱狀態聚合成上下文向量 m{c}_t ,然後解碼器利用上下文向量 m{c}_t ,上一步的隱狀態 m{s}_{t-1} 以及上一步解碼結果的embedding向量 g(m{y}_{t-1}) 作為輸入來得到t時刻的狀態 m{s}_t ,最後,利用masked softmax層輸出 m{y}_t 的概率分佈。

sequence generation

整個序列生成模型包括一個編碼器和帶注意力機制的解碼器。

編碼器:設 (m{w}_1, m{w}_2, ...m{w}_m) 是文本序列中的m個詞, m{w}_i 是第i個詞的one-hot編碼,利用embedding層可以得到 (m{x}_1, m{x}_2, ..., m{x}_m) ,然後利用雙向LSTM進行編碼得到每個詞的隱狀態, m{h}_i = mathrm{LSTM}(m h_{i-1}, m x_i) ,將雙向計算結果拼起來就得到最終編碼結果

注意力機制:在預測標籤的時候,每個詞的貢獻是不一樣的,使用注意力機制可以使模型在預測不同label的時候聚焦文本不同部分

e_{ti} = m v_{a}^T mathrm{tanh}(m W_am s_t + m U_a m h_i) ,根據t時刻解碼器狀態和每個詞編碼狀態計算注意力分配

alpha_{ti} = frac{mathrm{exp}(e_{ti})}{sum_{j=1}^mmathrm{exp}(e_{tj})} ,歸一化注意力分配,得到注意力機制係數,係數大對應貢獻大

m c_t = sum_{i=1} ^m alpha_{ti}m h_i ,編碼器狀態加權和

解碼器:

m s_t = mathrm{LSTM}(m s_{t-1}, [g(m y_{t-1}); m c_{t-1}]) ,上一時刻解碼label對應的embedding向量和注意力向量是解碼器的輸入

m o_t = m W_o f(m W_d m s_t + m V_d m c_t) ,利用解碼器狀態和注意力聚合向量計算softmax輸入,類似全連接層

m y_t = softmax(m o_t +  m I_t)

其中 m I_t 是掩碼向量,如果上一時刻輸出了 l_i ,則當前時刻掩碼向量第i個元素未負無窮,這樣可以避免解碼器重複輸出相同label

在訓練階段使用交叉熵損失函數,預測的時候使用beam search演算法。

Global Embedding

解碼器的輸入依賴上一個預測label的embedding,因此,如果上一個label預測錯了會直接影響後續的預測,這也叫exposure bias。beam search一定程度上可以緩解此問題,然而沒有本質上解決,因為beam search的候選path可能都有exposure bias的問題。考慮到我們其實知道了上一步預測的概率分佈,所以可以利用概率來加權,而不是隻用概率最大的label的embedding。

ar {m e} = sum_{i=1} ^L y_{t-1}^{(i)} m e_i ,每個label的embedding的加權和

g(m y_{t-1}) = (m 1 - m H) odot m e + m H odot  ar {m e} ,結合最大label embedding和加權embedding

m H = m W_1 m e + m W_2 ar {m e} ,模型自適應兩部分的比例,計算gate,用於上式加權

這種計算方式理論上包含了只用最大label embeding的情況,而且更加soft,因為用到了所有label的embedding,所以叫global吧

experiment

實驗主要用了兩個數據集,評估指標用的Hamming-loss和Micro-F1,兩個數據上的模型用了不同參數:

RCV1-V2實驗參數:詞表5w,文本截斷500,beam size = 5,word embedding size = 512,encoder hidden size = 256, decoder hidden size = 512,encoder和decoder都用了2層LSTM

AAPD實驗參數:詞表3w,文本截斷500,beam size = 9,word embedding = 256,encoder hidden size = 256,decoder hidden size = 512,encoder用了2層LSTM,decoder只用1層LSTM

其他實驗設置:使用adam優化,學習了0.001,用了dropout和梯度剪裁

實驗基線

  • Binary Relevance:每個label做二分類,忽略label之間相關性
  • Classifier Chains:轉化為一串二分類問題,考慮了label直接的相關性
  • Label Powerset:將多個label組合成新的label,然後做single-label classification
  • CNN:使用多個卷積核提取文本特徵,優化multi-label soft margin
  • CNN-RNN:利用CNN和RNN同時捕捉全局和局部語義特徵,建模labe之間相關性

實驗結果如下圖所示

在RCV1-V2數據集上,與常用的BR相比,SGM的hamming-loss下降了12.79,micro-F1提升了2.33%,即使與深度學習模型比也有較大提升,比如與CNN相比,hamming-loss下降了15.73%,micro-F1提升了2.69%,即使不用global embedding,SGM也比大部分基線好。此外,使用global embedding效果顯著,比不用的情況下hamming-loss下降了7.41%,micro-F1提升了1.04%。在數據集AAPD上,結果也類似。

analysis and discussion

global embedding的作用:

通過測試不同的 lambda 值對結果的影響,結果如下圖所示,可以發現, lambda 為0時效果是最差的,這對應不使用global embedding的情況,這也說明瞭global embedding確實有效。另一方面,通過模型自適應得到的 lambda 效果比取固定值好。

mask和sorting的作用:測試結果如下圖所示,可以看出,無論用不用global embedding,mask和sorting都是有效的,而且可以看出sorting影響非常大,文章中label是按訓練集中label頻率從高到低排的(我這裡有點小疑問,如果按其他順序排會影響模型結果麼?比如按label的字典序排列,或者乾脆按頻率從低到高排列,這個後續可以實驗看看)

error analysis:將測試集按length of label sequence(LLS)來分,可以看出LLS越大模型效果越差,這也很好理解,畢竟label越多越不好預測。

related work

針對MLC任務主要有4類方法(個人感覺這個分類邊界不太清晰,比如即使用深度學習的方法,也可以在最後輸出層用BR或者LP或者其他方法。。)

  • 轉換類方法,將問題轉換為其他任務,比如轉為single-label task,BR(Boutell et al., 2004)屬於這一類。LP(Tsoumakas and Katakis, 2006)也屬於這一類,LP枚舉所有multi-label的組合然後轉出single-label task。CC(Read et al., 2011)將MLC問題轉為一串二分類問題,每一個二分類任務都依賴上一個二分類問題的結果,因此複雜度較高。
  • 演算法適應類,改造現有演算法適應MLC任務,比如Clare and King (2001)提出了一種基於multi-label entropy的決策樹用於分類;Elisseeff and Weston (2002)通過利用最大化margin和核技巧來優化empirical ranking loss;Collective multi-label classifier (CML) (Ghamrawi and McCallum, 2005)將label之間的相關性作為約束條件引入,然後利用最大熵準則來優化;Zhang and Zhou (2007)採用KNN來處理multi-label數據;Furnkranz et al. (2008)利用pairwise的比較來得到labels之間的排序;Li et al. (2015)提出了一種新穎的聯合訓練演算法,可以將後續的label預測的反饋傳回當前label;這一類方法要麼只能捕捉低階相關性,要麼複雜度太高
  • 集成類,Tsoumakas et al. (2011)將初始的labels集合隨機分成一些小的子集然後利用LP演算法分別處理;Szymanski et al. (2016)利用label之間的共現來構建圖,然後利用社區發現演算法來分割label集合
  • 神經網路類,Zhang and Zhou (2006)提出了BP-MLL,利用了全連接網路然後優化pairwise ranking loss;Nam et al. (2013)提出了一個神經網路,不過優化的是交叉熵;Benites and Sapozhnikova (2015)通過增加一個額外的用於聚類的ART層來加快分類的速度;Kurata et al. (2016)利用基於word embedding的CNN來捕捉label之間的相關性;Chen et al. (2017)結合CNN和RNN來建模文本的語義信息和label之間的高階依賴關係;Baker and Korhonen (2017)基於CNN的框架,利用對應標籤共現的行初始化最後的隱藏層,從而提升模型性能;Ma et al. (2018)提出將多標籤分類演算法用於機器翻譯以處理一個句子可以被翻譯成多個正確句子的情況。

conclusion

總的來講,感覺最大的貢獻是將MLC問題建模為序列生成的問題,然後可以將序列生成的一系列方法用上,另外global embedding也是比較好的思路,可以緩解exposure bias的問題。從實驗結果來看,建模思路確實是有效的,估計後續會成為多標籤文本分類問題的標配。


推薦閱讀:
相關文章