肖萍婉,王子牛,高建瓴
(貴州大學 大數(shù)據(jù)與信息工程學院,貴陽550025)
在大數(shù)據(jù)時代,每天都在產(chǎn)生各種類型的數(shù)據(jù),數(shù)據(jù)量大且具有多樣性。多標簽文本在日常生活中十分常見,例如:一條微博可能同時標注“明星”、“綜藝”、“搞笑”、“娛樂”等多個標簽;一則體育新聞可能同時標注“體操”、“奧運會”、“體育”等標簽。多標簽文本分類在現(xiàn)實生活中有許多實際應用,如視頻注釋、主題識別[1]、情感分析[2]、信息檢索[3]等。因此,多標簽文本分類任務是自然語言處理領域一個十分重要卻又富有挑戰(zhàn)性的任務。
目前,多標簽文本分類的研究方法可分為3種類型,分別是算法適應方法、問題轉(zhuǎn)換方法和神經(jīng)網(wǎng)絡方法。算法適應方法是根據(jù)已存在的傳統(tǒng)單標簽文本分類算法,進行相對應的改進后,得到適應處理多標簽分類的算法。Elissee等人提出Rank-SVM(Ranking Support Vector Machine)方法[4],是將經(jīng)典的支持向量機運用到多標簽分類中;陸凱等人提出的ML-KNN方法[5],是先利用K近鄰算法得到近鄰樣本的標簽,然后未知示例的標記集合是通過最大化后驗概率推理得到。問題轉(zhuǎn)換方法是將多標簽分類任務轉(zhuǎn)化為傳統(tǒng)的單標簽分類任務,目前單標簽分類任務已經(jīng)有許多成熟的算法可以選擇。如,二元分類算法BR(Binary Relevance)[6],是將多標簽學習問題分解為多個獨立的二元分類問題,但存在缺乏發(fā)現(xiàn)標簽間相互依賴的能力,這將會導致預測標簽的性能降低;標簽統(tǒng)一算法LP(Label Powerset)[7],是將每個有可能的標簽重新整合成一組新的標簽集合,再將問題轉(zhuǎn)化為單標簽分類任務;分類器鏈算法CC(Classifier Chains)[8],是將多標簽學習任務轉(zhuǎn)換為二元分類問題鏈,鏈上每個節(jié)點對應于一個標記,通過模擬標簽之間的相關性進行分類;文獻[9]設計了基于流式多目標回歸器iSOUPTree的多標簽分類方法;文獻[10]設計了一種基于去噪自編碼器和矩陣分解聯(lián)合嵌入多標簽分類算法Deep AE-MF;如此等等。上述兩個類型的方法都是依賴于大量特征工程的傳統(tǒng)機器學習方法。
近年來,隨著深度學習的發(fā)展,和機器學習方法相比,深度學習可以自動學習文本特征,具有泛化性更強的優(yōu)點。因此,研究者提出了許多基于神經(jīng)網(wǎng)絡的方法,深度神經(jīng)網(wǎng)絡被廣泛應用于多標簽文本分類任務。Berger等人[11]在詞嵌入層,利用預訓練模型word2vec來捕獲單詞順序,將向量輸入到CNN和GRU上,相比傳統(tǒng)的詞袋模型分類性能得到提升;Baker[12]設計了一種基于CNN架構(gòu)的標簽共現(xiàn)的多標簽文本分類方法;Liu等[13]針對極端多標簽文本分類中巨大標簽空間引發(fā)的數(shù)據(jù)稀疏性和可擴展性,考慮到標簽共現(xiàn)問題,提出了XML-CNN,用卷積神經(jīng)網(wǎng)絡設計了動態(tài)池處理文本分類;Chen等人[14]提出CNN與RNN的融合機制模型,將CNN的輸出作為RNN的輸入,來捕獲文本的局部和全局語義信息,再進行多標簽的分類任務;Yang等[15]首次提出將序列生成思想應用于多標簽文本分類;Qin等[16]延續(xù)序列生成思想,構(gòu)建新的訓練目標,以便RNN能發(fā)現(xiàn)最佳標簽順序;Hinton等[17-18]提出的膠囊網(wǎng)絡模型,采用向量神經(jīng)單元和動態(tài)路由更新機制,改進了卷積神經(jīng)網(wǎng)絡模型,克服了CNN的弊端,在圖像處理領域已取得較好成果;Zhao等人[19]首次將膠囊網(wǎng)絡模型應用在文本分類任務上,其分類效果比CNN有一定的提升。
多標簽文本分類問題的目標,是為每個未分類文本樣本標注合適的類別標簽??啥x為:X=Rm表示輸入樣本有m維特征空間,Y={y1,y2,…,yn}表示所有類別標簽集合,共有n個類別標簽。通過訓練樣本集學習得到了一個分類器f:X→2Y。 其中,xi∈X是輸入空間X的訓練樣本,yi∈Y是xi的類別標簽集合。每個樣本都有一個標簽集合與之關聯(lián),最后通過分類器得到測試樣本的所屬標簽集合[20]。基于BiGRUCapsule的多標簽文本分類模型整體結(jié)構(gòu)如圖1所示。
圖1 BiGRU-Capsule模型整體結(jié)構(gòu)Fig.1 Overall structure of BiGRU-Capsule model
傳統(tǒng)的卷積神經(jīng)網(wǎng)絡在池化層中進行標量計算的操作,在該過程中可能會導致文本特征的丟失。針對上述問題,“神經(jīng)網(wǎng)絡之父”Hinton提出了膠囊模型,該模型將池化層的標量計算改為向量計算,用神經(jīng)元向量代替?zhèn)鹘y(tǒng)卷積神經(jīng)網(wǎng)絡的單個神經(jīng)元節(jié)點,從而確保更多信息不丟失,該神經(jīng)元向量就是“膠囊”(Capsule)。本文模型是在膠囊模型的基礎上構(gòu)建的,該模型經(jīng)過BiGRU和膠囊模型分別提取到文本的全局和局部特征,最后使用sigmoid分類器輸出標簽。
循環(huán)神經(jīng)網(wǎng)絡(RNN)是一種用于處理序列數(shù)據(jù)的神經(jīng)網(wǎng)絡。標準的RNN結(jié)構(gòu)中有重復的神經(jīng)網(wǎng)絡模塊,以鏈式的形式存在。這個重復模塊只有單一神經(jīng)網(wǎng)絡層,因此RNN在處理長時間依賴會出現(xiàn)梯度消失和梯度爆炸的問題。為此,Graves等人[21]提出了長短時記憶網(wǎng)絡(Long Short-Term Memory,LSTM)。LSTM模型在RNN的基礎上加入了記憶單元和門控機制,使其可以選擇性的記住或遺忘信息,從而使時間序列上的記憶信息可控,具備長期記憶功能,在更長的序列中有更好的表現(xiàn)。LSTM的重復模塊有4個神經(jīng)網(wǎng)絡層,以一種非常特殊的方式進行信息的交互,每個LSTM模塊都具有記憶能力。一個LSTM重復模塊如圖2所示。
圖2 LSTM模塊Fig.2 LSTM module
LSTM重復模塊的神經(jīng)網(wǎng)絡計算公式如下:
其中,it、ft、ot分別表示輸入門、遺忘門、輸出門;x、h、c表示輸入層、隱藏層、記憶單元;W是權重矩陣;b是偏置向量。
單向LSTM只能提取輸入文本上文特征,而不能采集到下文的文本特征,為了能夠得到文本全局的語義信息,Schuster等人[22]提出了雙向循環(huán)神經(jīng)網(wǎng)絡。將單向網(wǎng)絡結(jié)構(gòu)變?yōu)殡p向網(wǎng)絡結(jié)構(gòu),在一定程度上解決了梯度爆炸或梯度消失問題,并且利用當前詞的上下文信息提取出輸入文本的全局特征表示。將前后2個輸出向量,得到最終提取的文本特征向量ht,如式(7):
GRU可以看做LSTM的一種變體,2014年由Cho等人[23]提出。將LSTM中隱藏狀態(tài)和細胞狀態(tài)合并成一種狀態(tài),相比LSTM的模型要簡單,參數(shù)更少、更容易收斂,縮短了訓練時間,常用來構(gòu)建大訓練量的模型。GRU首先讀取詞嵌入向量xt以及隱藏層狀態(tài)向量ht-1后,經(jīng)過門控,計算產(chǎn)生輸出向量和隱藏層狀態(tài)向量ht。 計算公式如下:
其中,σ是sigmoid函數(shù);zt是一個更新門,控制信息流入下一個時刻;rt是一個重置門,控制信息丟失,二者共同決定隱藏狀態(tài)的輸出。本文所使用的BiGRU結(jié)構(gòu)如圖3所示。
圖3 BiGRU結(jié)構(gòu)Fig.3 BiGRU structure
膠囊網(wǎng)絡(CapsNet)的創(chuàng)新,在于提出了輸入是向量,輸出也是向量的方法。傳統(tǒng)的卷積神經(jīng)網(wǎng)絡通過池化層來獲取文本的局部特征,但在池化層的操作過程中會造成信息的損失,降低了模型的效率,難以有效地進行編碼,且缺乏文本表達能力。膠囊網(wǎng)絡中使用神經(jīng)元向量代替?zhèn)鹘y(tǒng)神經(jīng)網(wǎng)絡的單個神經(jīng)元節(jié)點,該神經(jīng)元向量就是所謂的“膠囊”(Capsule)。通過動態(tài)路由(Dynamic Routing)訓練神經(jīng)網(wǎng)絡,自動的學習單詞之間存在的聯(lián)系,實現(xiàn)向量的信息傳遞,不僅獲取單詞在文本中的位置信息,還可以捕獲文本的局部空間特征。Capsule中的激活向量是某個類別特定實體的特征表示,對每個不同的類別,輸出不同的向量。向量的模長表示屬于該類別的概率,用激活向量的方向表征對應實例的參數(shù)。在傳統(tǒng)的神經(jīng)網(wǎng)絡中,一般選擇Sigmoid、Relu等作為激活函數(shù),但在膠囊網(wǎng)絡中提出了新的激活函數(shù)Squashing。 一個Capsule結(jié)構(gòu)如圖4所示。計算方法如式(12)-式(16)所示。
圖4 Capsule結(jié)構(gòu)Fig.4 Capsule structure
其中,u為上一層的膠囊輸出;cij為耦合系數(shù),用來預測上一層膠囊和下一層膠囊之間的相似性;sj為squashing函數(shù)的輸入;W為變換矩陣參數(shù);vj為輸出向量;bij的初始值設置為0。
為了驗證模型的有效性,實驗采用今日頭條2018新聞標題多標簽語料數(shù)據(jù)集,該數(shù)據(jù)集共包含2 914 000條新聞標題1 070個標簽。取其中23 677條新聞標題作為訓練集,5 261條新聞標題作為測試集。
本文的實驗環(huán)境為linux操作系統(tǒng)openSUSELeap42.3,intel(R)Core(TM)i5-7500的CPU,GeForce RTX 2080Ti的GPU;編程語言為python3.6,基于Keras框架,TensorFlow后端實現(xiàn)。為了提高訓練的效率,實驗模型參數(shù)設置為:句子最大長度為50,patience為5,batch_size為32,dropout率為0.5,BiGRU隱藏層維數(shù)為256,膠囊數(shù)量為32,實驗最大迭代次數(shù)為20。
在多標簽文本分類中,一般采用sigmoid函數(shù)作為輸出層的激活函數(shù),使用二分類交叉熵函數(shù)(binary_crossentropy,BCE)作為損失函數(shù)。即將最后分類層的每個輸出節(jié)點使用sigmoid激活函數(shù)激活,然后對每個輸出節(jié)點和對應的標簽計算交叉熵損失函數(shù)。公式如下:
其中,x為輸入;C為分類類別數(shù);i屬于[1,C];yi為第i個類別對于的真實標簽。
本文采用的準確率(accuracy)是keras中的top_k_categorical_accuracy。準確率的計算公式如下:
其中,T代表正確分類的文本數(shù)量;F代表錯誤分類的文本數(shù)量;N代表屬于該類但未被分到該類別的文本數(shù)量。accuracy的計算公式,是得到預測對的樣本數(shù)與總樣本數(shù)的比值。categorical_accuracy要求:樣本在真值類別上的預測分數(shù),是所有類別預測分數(shù)的最大值才算預測正確。不同的是,accuracy針對的是真實標簽(y_true)和預測標簽(y_pred),都為具體標簽的情況,而categorical_accuracy針對的是y_true為one-hot標簽,y_pred為向量的情況。對于top_k_categorical_accracy來說就是計算top-k正確率,當預測值的前k個值中存在目標類別即認為預測正確。
假設有4個樣本,其y_true為[[0,0,1],[0,1,0],[0,1,0],[1,0,0]],y_pred為[[0.1,0.6,0.3],[0.2,0.7,0.1],[0.3,0.6,0.1],[0.9,0,0.1]]。則categorical_accuracy計算方法為:
(1)將y_true轉(zhuǎn) 為 非onehot的 形 式,即y_true_new=[2,1,1,0]。
(2)將y_pred轉(zhuǎn)為標量標簽。其原理是:選取預測向量中最大值所在索引位置作為預測標簽,即得到y(tǒng)_pred_new=[1,1,1,0]。
(3)將y_true_new和y_pred_new代入公式(18)中計算,得到最終的categorical_accuracy為75%。
top_k_categorical_accuracy的計算方法與k息息相關。將y_pred轉(zhuǎn)為標量標簽的原理是:選取預測向量中最大k個值所在索引位置作為預測標簽,top_k_categorical_accuracy具體計算方法為:
(1)將y_true轉(zhuǎn) 為 非onehot的 形 式,即y_true_new=[2,1,1,0]。
(2)計算y_pred的top_k的label。如k=2時,y_pred_new=[[0,1],[0,1],[0,1],[0,2]]。
(3)根據(jù)每個樣本的真實標簽是否在預測標簽的top_k內(nèi),來統(tǒng)計準確率。以上述4個樣本為例,2不在[0,1]內(nèi),1在[0,1]內(nèi),1在[0,1]內(nèi),0在[0,2]內(nèi),4個樣本總共預測對了3個。因此,k=2時top_k_categorical_accuracy=75%。
本文使用的數(shù)據(jù)集的標簽數(shù)有1 070類,每個樣本的標簽數(shù)多且不定,因此將k設置為33。(在實驗結(jié)果與分析中,將top_k_categorical_accuracy簡寫為tk-acc。)
今日頭條2018新聞標題多標簽語料數(shù)據(jù)集多標簽文本分類結(jié)果見表1。
表1 多標簽文本分類結(jié)果Tab.1 Multi-label text classification results
本文實驗的主要模型是基于膠囊網(wǎng)絡中的capsule,且在實驗過程中發(fā)現(xiàn),疊加多層膠囊能達到較好的效果。因此,設置CapsNet模型和一層膠囊模型與本文模型做對比實驗。由實驗結(jié)果可見,本文實驗模型效果最好。其準確率隨著迭代次數(shù)的變化曲線如圖5所示。BiGRU-Capsule模型對比CapsNet模型和BiGRU-Capsule1,在準確率上分別提升了3.48%、3.04%。證明與只能獲取局部特征的CapsNet模型相比,本文實驗模型的效果更佳。CapsNet模型平均訓練一輪的時間約279 s,BiGRUCapsule1模型平均訓練一輪的時間約376 s,BiGRU-Capsule3模型平均訓練一輪的時間約110 s,可見本文模型的訓練時間比其它兩個模型的訓練時間更短。實驗結(jié)果表明,本文實驗模型不僅提高了模型的準確率,同時加快了訓練速度。
圖5 模型準確率變化曲線圖Fig.5 The model accuracy rate change curve
本文提出了一種基于BiGRU-Capsule的模型,用于多標簽文本分類研究。利用BiGRU對詞的上下文信息提取文本的全局特征,Capsule有效提取文本的局部特征。實驗結(jié)果表明,本文提出的模型在F1指標上優(yōu)于對比模型,有效地提升了多標簽文本分類的性能。然而,在多標簽文本分類領域,仍然有許多問題值得探索,因此下一步工作將研究預訓練模型的輸出特征與本文設計的模型輸出特征進行各種融合操作。