姜炎宏,遲呈英,戰(zhàn)學剛
(遼寧科技大學 計算機與軟件工程學院,遼寧 鞍山 114051)
智能化時代,人們日常接觸到的文本信息數量呈現出爆炸式增長趨勢。文本作為信息載體,以各式各樣的形式流入互聯(lián)網中。隨著文本分類技術的快速發(fā)展,對文本信息內容進行高效的管理已經成為必然趨勢。標注多標簽的形式能夠更好地反應出文本信息的真實意義,更加有效地發(fā)掘信息、使用信息和利用信息庫。
根據樣本數據關聯(lián)標簽個數,文本可以分為單標簽文本分類和多標簽文本分類[1]。為了提高網上信息的檢索效率,單標簽文本分類已經不能滿足需求,多標簽分類也就自然而然地出現了。多標簽分類問題是指文本信息內容上的多樣、復雜的分布性以及龐大的規(guī)模性,文本內容通常會和多個標簽相關聯(lián),將標簽映射到分類類別中就演化為多標簽分類問題。對這類問題的研究已經逐漸成為文本分類領域的熱點問題之一。
傳統(tǒng)的文本分類方法[2]是通過人為設計提取規(guī)則對文本內容進行特征提取。特征提取是將文本中與分類結果相關聯(lián)的內容篩選出來,降低冗余特征對結果的負面影響。由于是人為設計提取規(guī)則,如果文本內容相關領域發(fā)生改變,則需要重新設計提取規(guī)則。這種做法不僅擴展性較差并且耗時耗力,導致用戶體驗感很差。
隨著在線文本數量增長和機器學習的興起,基于深度學習的多標簽文本分類方法也隨之涌現。2000 年 Tom Μitchell[3]等將大量未標記文檔與少量的帶標簽的文檔混合在一起進行訓練。2014年Yoon Kim[4]使用卷積神經網絡(Convolutional neural networks,CNN)進行了一系列的對比實驗,為進行句子級的文本分類任務提供便利。2016 年 Liu[5]等介紹了循環(huán)神經網絡(Recurrent neural network,RNN)應用于多標簽分類問題的設計方式和方法,模型利用最后一個詞組表示文本的特征并連接全連接層,使用Softmax函數輸出各個類別。
深度學習的方法對多標簽文本分類問題進行求解過程中,最重要、最根本的是使文本內容得到良好的表達。本文首先提出使用文本循環(huán)神經網絡(TextRNN)模型和文本卷積神經網絡(TextCNN)模型進行多標簽文本分類實驗。TextRNN擅長處理序列結構,并且能夠考慮到句子的上下文信息,但是整體運行速度過慢。TextCNN屬于無偏模型,對文本淺層特征的抽取能力很強。對于長文本領域,TextRNN主要依據filter窗口抽取特征,在長距離建模方面能力受限,且對語序不敏感。為了解決二者的局限性,本文提出將TextRNN與TextCNN融合,并且引入Attention機制,使模型可以將注意力聚焦在對文本分類結果貢獻較大的文本特征上面。
文本分類是指根據文本語義內容將未知類別的文本內容歸類到已知類別集合中的過程。設有一個文本數據集合D={d1,…,d|D|}和已知的類別集合C={c1,…,c|C|},文本數據集合和類別集合之間的關系可由下列函數表示[6]
文本分類問題可以轉化為找到函數⌒Φ代替Φ作為一種近似表示,目的是⌒使得函數Φ盡量逼近未知的真實函數Φ。函數Φ相當于文本分類器,可以反映出文本內容和標簽類別之間的關系。訓練效果優(yōu)秀的分類器可以對未知標簽類別的文本內容進行準確地分類,從而實現自動多標簽文本分類。
Adam算法是一種對隨機目標函數執(zhí)行一階梯度優(yōu)化的基于適應性低階矩估計的算法。Adam算法在2014年由Kingma[7]提出,文本數據在訓練過程中不斷地迭代,從而不斷地更新神經網絡權重。
Adam算法不同于隨機梯度下降算法。隨機梯度下降法在訓練過程中學習率不會改變,而Adam算法通過第一和第二矩估計,計算不同參數的自適應學習速率。Adam優(yōu)化算法收斂的速度較快,效果明顯,實現簡單,適用于非穩(wěn)態(tài)目標,需要極少量的調參,對計算機內存要求低并且有很強的計算能力。
Attention機制[8]是模仿人類注意力而提出的一種解決問題的辦法,簡單地說就是從大量信息中快速篩選出高價值信息。受到計算能力限制和優(yōu)化算法限制,引入注意力機制可以幫助神經網絡模型處理信息過載,提高神經網路模型處理信息的能力。在RNN模型中,用來解決由長序列到定長向量轉化而造成的信息損失的瓶頸,如圖1所示。
圖1 引入Attention的RNNFig.1 RNN using attention mechanism
引入Attention的RNN計算過程:
Step 1 利用RNN結構得到編碼器中的隱藏狀態(tài)(h1,h2,…,hT)。
Step 2 假設當前解碼器的隱藏狀態(tài)是st-1,計算每一個輸入位置j與當前輸出位置的關聯(lián)性
寫成相應的向量形式
其中a是一種相關性的算符。
Step 3 對于e→t進行softmax操作,將其標準化得到Attention的分布
展開形式為
Step 4 對α→t可以進行加權求和得到相應的上下文向量
Step 5 計算解碼器的下一個隱藏狀態(tài)
及該位置的輸出
通過上述步驟計算編碼器與解碼器狀態(tài)之間的關聯(lián)性權重,得到Attention分布,對于比較重要的輸入位置,在預測輸出時權重較大。
在文本表示過程中,通常是直接將每個時刻的輸出向量相加再求得平均值,這種做法認為每個輸入詞對于文本的貢獻是相等的,但實際情況往往與之相反。在合并這些輸出向量時,合理地分配注意力資源,為每個向量配以不同的權重,才能選出對當前分類結果更重要的文本向量特征。Attention機制本質上是給每個向量都賦予一個權值,將所有的輸出向量加權平均。權值大小由詞組對文本內容輸出結果貢獻程度而定,降低了其他無關詞的作用,提高了計算效率。將Attention機制應用在多標簽文本分類模型中,可以使文本特征得到更好的解釋,從而使得分類結果更準確。
隨著網絡的迅速發(fā)展,互聯(lián)網成為大量信息的載體,如何有效地提取并利用這些信息成為一個巨大的挑戰(zhàn),網絡爬蟲隨之產生。在對網站內容爬取過程中,可以合理地使用動態(tài)代理解決反爬蟲問題,最終實現數據獲取。
悟空問答網站和百度知道網站具有帶標簽數據,因此從這兩個網站獲取數據和標簽。
悟空問答網站是ajax技術動態(tài)加載頁面信息和數據內容。因此,在對該網站進行爬取時,需要分析網頁js腳本,找到含有頁面內容js腳本。腳本url:“https://www.wukong.com/wenda/web/nativefe ed/brow/?concern_id=6300775428692904450&t=15 68099799213&max_behot_time=1568101150&_signature=lO1iGRAUyaadoRgΜT0SKrZTtYg”。它的請求參數包括:concern_id,t,max_behot_time,signature。通過js選項卡發(fā)現page_index_25f701a.js含有這幾個參數:concern_id為固定值6300775428692904450;signature是 concern_id的簽名,也為固定值;t為時間戳;max_behot_time為時間戳的整數位的值。得到四個請求參數的值,可以通過構造請求的網址,解析返回的json數據。Python對json數據的解碼通過JSON模塊來實現。解碼過程是通過JSON模塊的loads函數將json對象轉換成Python對象的過程。進而獲取標題和標題對應的標簽。
百度知道網站只顯示19頁的內容,內容是動態(tài)更新,每頁顯示40條內容和其對應的標簽。通過分析翻頁 url:“https://zhidao.baidu.com/list?rn=40&pn=0&ie=utf8&_pjax=%23j-question-list-pjaxcontainer”。在url中,pn是按照40的倍數遞增,而且只有這個變量是動態(tài)變化。爬蟲的實質是模擬瀏覽器請求網站,需要將Request Headers的所有請求條件加上,保證了請求的順利進行。采用BeautifulSoup解析該網站內容,獲取文本內容和其對應的標簽。在實際爬取過程中,設計了一個定時重啟腳本,每隔30 min重新爬取該網站。這樣能及時獲取到該網站的大部分內容。
在爬取悟空問答網站和百度知道網站過程中遵循了Robots協(xié)議,避免對爬取網站的服務器造成壓力。最終獲得72萬條帶標簽的文本數據。
2.2.1 數據清洗 在社交網絡中,用戶對自己的文本設置標簽時,不乏有一些為了博人眼球的內容和標簽,還存在廣告?zhèn)麂N等內容。為了保證數據的質量,必須對數據進行清洗。
(1)敏感詞過濾。通過構建敏感詞詞匯表,對含有敏感詞的數據進行過濾。由于文本數據量偏大,采用傳統(tǒng)的方法進行過濾,效率低,時間久。因此采用 DFA[9](Deterministic finite automaton)算法對敏感詞進行過濾,其原理是根據狀態(tài)轉移進行敏感詞的檢索,將敏感詞構造成樹形結構,能夠減少檢索的次數,提高計算效率。
(2)長度比過濾。文本數據如:“I hope you're here for me.怎么翻譯?翻譯|英文”,英文字母較多,不利于文本數據分析。通過Unicode的中文編碼范圍,統(tǒng)計數據中漢字和非漢字的個數及個數比,如果個數比小于2,就將該數據過濾掉。
(3)無意義文本過濾。數據中出現的零寬字符,例如“u200bu200c…”在進行分詞處理時,會增加詞匯表數量。處理零寬字符的方法是查看零寬字符的ASCII編碼,將ASCII編碼轉為字符串格式,最后在文本數據中進行替換。同時對于文本中出現的諸如廣告內容、版權信息和個性簽名部分,需要進行過濾。這些內容都不應該作為特征。
(4)語義完整性判斷。將獲取到的數據進行簡單的語義完整性判斷。如果句尾是常用的截止符號,則認為文本內容是完整的,否則需要進行過濾。
經過以上步驟清洗,數據量最終為64萬個,其中訓練集60萬個,校驗集2萬個,測試集2萬個。文本的長度不同,對所有數據長度進行累和取均值,而后對數據進行截長補短。對數據的標簽進行頻率統(tǒng)計,保留前2 000個標簽。數據的存儲格式如表1所示。
2.2.2 數據分詞及文本向量化表示 本文采用的分詞工具是由沈陽雅譯網絡技術有限公司研發(fā)的Niutrans分詞工具,該工具是基于語言模型進行分詞,對日常生活中的用字方法和用字模式做了總結,不僅效率高,而且識別效果好。分詞后的文本數據中含有很多停用詞[9]。為了節(jié)省存儲空間和提高搜索效率,根據已有停用詞表,將數據中停用詞進行過濾。
表1 數據存儲格式Tab.1 Data storage format
訓練詞向量就是將文本采用向量表示。本文使用爬取的數據進行word2vec[10]模型訓練。訓練好的詞向量將用于多標簽文本分類模型的訓練。使用Gensim接口調用word2vec工具訓練詞向量,Gensim的word2vec的輸入是句子的序列,每個句子是一個單詞列表。本文采用Skip-Gram模型將數據集訓練生成詞向量,具體參數設置如表2所示。通過以上方式,將文本數據轉為其對應的詞向量,詞向量作為模型訓練的輸入,為后續(xù)實驗提供方便。
表2 word2vec參數設置Tab.2 Parameters of word2vec
對于多標簽文本分類,目前采用的評價指標有準確率(Precision,P)、召回率(Recall,R)、F值(F-Μeasure,F)。
準確率:模型預測出的標簽與數據對應的標簽中的任何一個標簽相同,即為正確,其中m為每個位置的準確率。
召回率:預測出的標簽對原有標簽的覆蓋量,其中,f為預測標簽總數,c為正確標簽總數。
F值:評價指標為準確率和召回率的調和平均數。
采用按位加權的方式對模型進行評估,準確率值會大于1,但是這種方式能夠很好地將標簽與文本內容的關聯(lián)程度表示出來。準確率與召回率的調和平均數F值能夠很好地表示出模型的準確性,因此采用F值對模型進行評估。
采用如圖2所示的雙向TextRNN模型進行多標簽文本分類實驗,神經網絡采用BILstm[11]結構。訓練序列由向上和向下的兩個Lstm構成,并且每個Lstm都連接著輸出層,在輸出層可以得到訓練數據特征的完整信息表示。
圖2 雙向循環(huán)神經網絡結構Fig.2 Two-way circulation TextRNN neural network structure
雙向TextRNN模型包括輸入層、Embedding層、雙向Lstm層、k-max pooling層和輸出層。輸入層將數據傳入到模型中,Embedding層負責將輸入的數據轉為對應的詞向量,輸入維度為300,設置batch大小為128。在連接下一層時隨機斷開50%連接,用于防止模型過擬合。雙向Lstm層主要負責提取句子向量的上下文信息,為了防止過擬合采用BatchNorm1d。在輸出層進行分類時,將全部的神經元輸出采取2_max pooling操作,而后再分類輸出,輸出的維度即為標簽的總個數(2 000)。采用Adam算法結合反向傳播算法在模型訓練過程中進行不斷優(yōu)化。在模型訓練過程中對優(yōu)化目標函數增加約束條件以防止模型過擬合,因此使用L2正則化。在實際訓練中,疊加了3層的雙向Lstm進行訓練,保證模型能夠學習的更深更廣。
TextCNN[12]的核心思想是將復雜問題簡單化處理,將大量的參數降維成少量參數,對局部特征進行捕捉。對于多標簽文本分類數據而言,局部提取就是指從特征映射矩陣中選取對應卷積核大小的特征,不同卷積核提取到的特征也不盡相同。因此可以得到多種層次的語境信息,使得文本信息表征更加完善。
圖3 文本卷積神經網絡模型結構Fig.3 TextCNN neural network structure
對TextCNN模型進行建模時,模型結構如圖3所示。模型由輸入層、Embedding層、兩層卷積、池化層、全連接層組成。輸入層將數據傳入到模型中。Embedding層負責將輸入的數據轉為對應的詞向量,batch大小為128,輸入維度為300,并在連接下一層時隨機斷開50%的鏈接,防止模型過擬合。在卷積層中,卷積核大小是[3,4,5]。在連接下一層時,對每個神經元的值進行BatchNorm,激活函數采用Relu。下一層的卷積操作同上。在池化層中對所有卷積核進行1-max pooling操作,選擇每個特征映射矩陣中的最大值,將這些代表最重要特征的值級聯(lián)起來,可以得到最終的特征向量,并在連接下一層時隨機斷開50%的鏈接,防止模型過擬合。最后,將得到的特征向量再輸入Softmax layer做分類。
TextCNN的特點是稀疏連接,表示文本內容的特征矩陣不要求每一個類別的數據有非常一致的特性,只具有某一些特性即可,適合用于文本分類。
為了解決TextRNN和TextCNN的局限性,參考文獻[14]中的網絡結構,使用雙向循環(huán)神經網絡結構(TextRCNN)獲取上下文信息,使文本信息得到更好地表征。在模型搭建過程中結合Attention機制,使模型將注意力聚焦在對文本分類任務貢獻大的幾個詞上面,降低其他無意義的詞對分類結果的負面影響。TextRCNN結合Attention機制構建的TextRCNN_Attention模型的結構如圖4所示。
圖4 TextRCNN_Attention神經網絡模型結構Fig.4 TextRCNN_Attention neural network structure
TextRCNN_Attention模型本質是將TextCNN的卷積層替換為雙向Lstm,引入Attention機制。首先將詞進行詞向量編碼,通過word embedding層,得到詞向量,維度為300。接著將詞向量輸入到雙向循環(huán)神經網絡,在實驗中,為了得到詞匯更多的上下文信息,雙向循環(huán)神經網絡使用的是Lstm結構。將詞向量與兩端的上下文信息進行結合,將結合結果使用Tanh函數作為激活函數進行計算。而后使用Attention機制為每個輸出特征分配不同的權重。接著進行池化操作,使用1-max pooling找到輸入的數據中最重要的特征,得到最重要的信息。最后是輸出層,使用Softmax函數處理。
分別采用TextRNN、TextCNN和TextRCNN_Attention模型進行實驗。TextRNN模型結果如圖5和圖6所示。TextRNN模型在運行速度上絲毫不占優(yōu)勢,主要原因是TextRNN模型的后一個時間步的輸出依賴于前一個時間步的輸出,無法進行并行處理,導致模型訓練的速度慢。迭代到10輪時,校驗集漲幅和損失曲線基本穩(wěn)定,已經達到很好的效果。為了實驗結果最優(yōu),可以對模型進行微調,增訓2輪,調整學習率,最終測試集的綜合評價得分F值為0.952 5。
圖5 文本循環(huán)神經網絡校驗集曲線圖Fig.5 Check-set curve of TextRNN
TextCNN實驗結果如圖7和圖8所示。迭代到10輪時,校驗集曲線和損失曲線基本穩(wěn)定,在訓練過程中曲線波動比較隨機。原因可能是不同的數據量使得某一類別數據的特征矩陣發(fā)生變化,而對于某一些特征變化,卷積神經網絡沒有及時捕獲。適當調整超參數可能會減少這種現象的發(fā)生。為了實驗結果最優(yōu),可以對模型進行微調[13],增訓2輪,調整學習率,最終在測試集的綜合評價得分F值為0.950 6。
圖6 文本循環(huán)神經網絡損失曲線Fig.6 Loss curve of TextRNN
圖7 文本卷積神經網絡校驗集曲線Fig.7 Check-set curve of TextCNN
圖8 文本卷積神經網絡損失曲線Fig.8 Loss curve of TextCNN
TextRCNN_Attention實驗結果如圖9和圖10所示。經過10輪訓練,曲線基本穩(wěn)定。在測試集上的綜合評價得分F值為0.961 2,說明TextRCNN_Attention的性能優(yōu)于TextCNN和TextRNN,更適合提取文本特征,同時能夠及時捕獲更多特征的上下文信息,使得分類結果最優(yōu)。
圖9 TextRCNN_Attention校驗集曲線Fig.9 Check-set curve of TextRCNN_Attentio
圖10 TextRCNN_Attention損失曲線Fig.10 Loss curve of TextRCNN_Attention
針對基于文本循環(huán)神經網絡和文本卷積神經網絡的多標簽文本分類模型的局限性,提出TextRCNN_Attention多標簽文本分類方法。文本數據爬取自網絡。對數據進行長度比過濾、敏感詞過濾、零寬字符過濾、無意義文本過濾和語義完整性判斷的方式進行數據篩選,從而保證數據質量。采用word2vec將文本數據向量化,輸入模型進行訓練。實驗結果表明,TextRCNN_Attention模型結合了TextRNN和TextCNN模型的優(yōu)點,能更好地理解語義信息。同時,Attention機制對文本特征提取更加合理,模型將注意力聚焦在對文本分類任務貢獻較大的特征上面,使得分類效果最優(yōu)。