陳海紅,司 威,黃鳳坡
(赤峰學(xué)院 數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院,內(nèi)蒙古 赤峰 024000)
文本分類問(wèn)題是自然語(yǔ)言處理領(lǐng)域的重要研究問(wèn)題,可以進(jìn)行主客觀分類、輿情情感分析等。文本分類的模型也是比較多的,本文采用7種方法對(duì)中文文本進(jìn)行二分類(正向情感、負(fù)向情感)或三分類(正向情感、中性情感、負(fù)向情感)研究對(duì)比,找到各種方法的優(yōu)缺點(diǎn),并將其應(yīng)用到輿情情感分析等文本分類領(lǐng)域。
我們從網(wǎng)絡(luò)上收集了很多領(lǐng)域的評(píng)論數(shù)據(jù),以及日常的微博數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行了預(yù)處理,去除多余的空格,表情符號(hào),Html標(biāo)簽等。然后對(duì)這些數(shù)據(jù)進(jìn)行標(biāo)注,再將數(shù)據(jù)轉(zhuǎn)換成各種模型能夠識(shí)別的格式。模型在使用的時(shí)候把這些數(shù)據(jù)分成開發(fā)集(development set)和測(cè)試集(test set),開發(fā)集又分成訓(xùn)練集(training set)和開發(fā)測(cè)試集(development test set)。本文中使用的開發(fā)集樣本數(shù)是17130條,測(cè)試集樣本數(shù)是4187條,此外,還收集了停用詞典,情感詞典(分為正向詞典和負(fù)向詞典),程度副詞,否定詞典等數(shù)據(jù)。
基于情感詞典的分類法是對(duì)人類的記憶和判斷思維的最簡(jiǎn)單模擬,人類會(huì)通過(guò)學(xué)習(xí)來(lái)記憶一些基本詞匯,如否定詞有“不”,積極詞有“幸?!薄膀湴痢保麡O詞有“討厭”,從而在大腦中形成一個(gè)基本的語(yǔ)料庫(kù),然后對(duì)輸入的句子進(jìn)行拆分,看看記憶的詞匯表中是否存在相應(yīng)的詞,然后根據(jù)這個(gè)詞的類別來(lái)判斷情感。
這里使用了一種比較簡(jiǎn)單的算法,將詞語(yǔ)的權(quán)重值劃分為四類,分別為P、N、DaP、DaN。P類型的詞語(yǔ)權(quán)重值為1,包括積極詞語(yǔ)、否定詞+消極詞語(yǔ);N類型的詞語(yǔ)權(quán)重值為-1,包括消極詞、否定詞+積極詞語(yǔ)、積極詞語(yǔ)+否定詞;DaP類型的詞語(yǔ)權(quán)重為2,包括程度副詞+積極詞語(yǔ);DaN類型的詞語(yǔ)權(quán)重為-2,包括程度副詞+消極詞語(yǔ)。并假定情感值滿足線性疊加原理,最終算出的權(quán)重值在(-∞,+∞)范圍內(nèi),越大說(shuō)明越積極。為了方便劃分類別,將最終的權(quán)重值放入sigmoid函數(shù)轉(zhuǎn)換成(0,1)之間的數(shù)值。上述方法在測(cè)試集上進(jìn)行測(cè)試,最終結(jié)果的準(zhǔn)確率為60%。
該方法存在的問(wèn)題:(1)假設(shè)了所有積極詞語(yǔ)、消極詞語(yǔ)的權(quán)重值都是相等的,但我們知道中文文本本身帶有非常豐富的感情色彩,同為積極/消極詞語(yǔ)但語(yǔ)氣程度可能是不同的;(2)對(duì)否定詞和程度副詞僅做了取反和加倍,但事實(shí)上,不同的否定詞和程度副詞的權(quán)重程度也是不同的;(3)假設(shè)了權(quán)重值是線性疊加的,但事實(shí)上,人腦情感分類是非線性的,不僅僅在想這個(gè)句子是什么情感,還會(huì)判斷句子的類型,整體的結(jié)構(gòu)(主語(yǔ)、謂語(yǔ)、賓語(yǔ)等),甚至還會(huì)聯(lián)系上下文對(duì)句子進(jìn)行判斷,基于簡(jiǎn)單的線性疊加性能是有限的;(4)情感詞典沒(méi)有自動(dòng)擴(kuò)充能力,人類獲得新知識(shí)的手段不僅僅靠他人的傳授,還會(huì)自己進(jìn)行學(xué)習(xí)、總結(jié)和猜測(cè),如“喜歡”和“熱愛(ài)”是積極詞語(yǔ),那么人類就會(huì)知道“喜愛(ài)”也是積極的詞語(yǔ)。
SnowNLP是一個(gè)python寫的類庫(kù),可以方便地處理中文文本內(nèi)容,是受到了TextBlob的啟發(fā)而寫的,它囊括了中文分詞、詞性標(biāo)注、情感分析、文本分類、轉(zhuǎn)換拼音、繁體轉(zhuǎn)簡(jiǎn)體、關(guān)鍵字/摘要提取、文本相似度等諸多功能,像隱馬爾科夫模型、樸素貝葉斯、TextRank等算法均在這個(gè)庫(kù)中有對(duì)應(yīng)的應(yīng)用。SnowNLP對(duì)情感的測(cè)試值為0到1,值越大,說(shuō)明情感傾向越積極。
使用SnowNLP對(duì)數(shù)據(jù)進(jìn)行測(cè)試,測(cè)試數(shù)據(jù)有4187條,測(cè)試結(jié)果以0.5為界,大于0.5的判定為正向,小于0.5的判定為負(fù)向,最終的準(zhǔn)確率為73%。如果大于0.8判定為正向,小于0.3判定為負(fù)向,中間為中性,最終的準(zhǔn)確率為67%。
SnowNLP的分詞效果沒(méi)有結(jié)巴分詞效果好,而且原料是基于幾個(gè)方向的評(píng)論留言,語(yǔ)料文件比較片面,且其中有些語(yǔ)句意向不準(zhǔn)確,導(dǎo)致效果并不是特別好,但如果沒(méi)有其他知識(shí)的情況下做中文文本處理,使用SnowNLP是一個(gè)不錯(cuò)的選擇。
邏輯回歸是一個(gè)非常經(jīng)典的分類算法,目前仍被廣泛應(yīng)用到各個(gè)領(lǐng)域,Bahalul Haque等人利用邏輯回歸,根據(jù)年齡、性別、國(guó)家和地區(qū)預(yù)測(cè)COVID-19導(dǎo)致的個(gè)人死亡[1]。
我們首先對(duì)文本進(jìn)行特征提取,提取方法采用TF-IDF(Term Frequency-Inverse Document Frequency),計(jì)算公式為:
S1是tf值與idf值的乘積,tf(t,d)表示某一篇文檔d中,詞項(xiàng)t的頻度。
nd表示訓(xùn)練集文本數(shù),df(d,t)表示包含詞項(xiàng)t的文檔總數(shù)。用S1和S2對(duì)訓(xùn)練集和測(cè)試集文本進(jìn)行特征提取,在訓(xùn)練集上得到的特征矩陣維度是(17130,41000),這是一個(gè)非常龐大的稀疏矩陣。然后使用sklearn中的LogisticRegression[2]對(duì)該矩陣數(shù)據(jù)進(jìn)行邏輯回歸訓(xùn)練,訓(xùn)練參數(shù)選擇newton-cg作為優(yōu)化算法,選擇1.0作為懲罰系數(shù)。訓(xùn)練好的模型應(yīng)用到測(cè)試集上進(jìn)行測(cè)試,測(cè)試結(jié)果的logloss:0.527,準(zhǔn)確率83%。
文本的特征提取是自然語(yǔ)言處理領(lǐng)域的最重要問(wèn)題,它決定著最終結(jié)果的上限。目前word2vec是一種應(yīng)用較廣泛的特征提取方法,它產(chǎn)生了很多變體,應(yīng)用于很多方面[3,4]。這里我們使用word2vec對(duì)文本再次進(jìn)行特征提取。使用TF-IDF進(jìn)行特征提取時(shí),它能過(guò)濾掉一些常見(jiàn)的卻無(wú)關(guān)緊要的詞語(yǔ),同時(shí)保留影響整個(gè)文本的重要詞語(yǔ),但丟失了文本上下文之間的聯(lián)系。使用word2vec進(jìn)行特征提取時(shí),它會(huì)考慮上下文,并且維度更少。首先使用gensim庫(kù)中的word2vec[5]對(duì)1.3G的中文語(yǔ)料進(jìn)行建模,生成維度為400的詞向量,使用該詞向量對(duì)[‘微積分’,‘統(tǒng)計(jì)學(xué)’,‘蘋果’]進(jìn)行heatmap分析,發(fā)現(xiàn)微積分與統(tǒng)計(jì)學(xué)具有很多的相似性,與蘋果相差很多。
圖1 熱圖分析數(shù)值
然后將一個(gè)句子中所有詞的詞向量相加取平均,得到句子向量,再將句子向量輸入到上述邏輯回歸模型進(jìn)行訓(xùn)練,并測(cè)試。測(cè)試結(jié)果的logloss:0.617,準(zhǔn)確率76%,發(fā)現(xiàn)并沒(méi)有得到比TF-IDF更好的結(jié)果。后面第3.4節(jié)也使用這個(gè)word2vec訓(xùn)練的詞向量,得到了不錯(cuò)的結(jié)果。
深度學(xué)習(xí)可以幫助我們從多角度提取文本特征,文本的分類問(wèn)題同樣可以使用深度學(xué)習(xí)模型進(jìn)行處理。我們先使用keras[6,7]中的Sequential搭建一個(gè)簡(jiǎn)單的3層全連接網(wǎng)絡(luò)查看效果。在搭建神經(jīng)網(wǎng)絡(luò)之前,先在word2vec訓(xùn)練的詞向量的基礎(chǔ)上對(duì)特征數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化/歸一化處理,因?yàn)槿绻硞€(gè)特征的方差遠(yuǎn)大于其他特征的方差,那么它將會(huì)在算法學(xué)習(xí)中占據(jù)主導(dǎo)位置,導(dǎo)致模型不能像我們期望的那樣,去學(xué)習(xí)其他的特征,這將導(dǎo)致最后的模型收斂速度慢甚至不收斂。
model=Sequential()
model.add(Dense(256,input_dim=400,activation=” relu” ))
model.add(Dense(256,activation=” relu” ))
model.add(Dense(3))
model.add(Activation(” softmax” ))
模型中間加Dropout[8]和BatchNormalization()來(lái)防止過(guò)擬合,優(yōu)化器選擇adam,損失函數(shù)選擇categorical_crossentropy,測(cè)試結(jié)果的logloss:0.453,準(zhǔn)確率82%。
CNN(Convolutional Neural Network)和RNN(Recurrent Neural Network)都會(huì)將矩陣形式的輸入編碼為較低維度的向量,而保留大多數(shù)有用的信息,但卷積神經(jīng)網(wǎng)絡(luò)更注重全局的模糊感知,循環(huán)神經(jīng)網(wǎng)絡(luò)更注重鄰近位置的重構(gòu),而自然語(yǔ)言是具有時(shí)間序列特征的數(shù)據(jù),每個(gè)詞的出現(xiàn)都依賴于它的前一個(gè)詞和后一個(gè)詞。由于這種依賴的存在,我們使用循環(huán)神經(jīng)網(wǎng)絡(luò)來(lái)處理這種時(shí)間序列數(shù)據(jù)更適合。Long Short Term Memory Units(LSTMs)是一種特殊的循環(huán)神經(jīng)網(wǎng)絡(luò),從抽象的角度看,LSTM保存了文本中長(zhǎng)期的依賴信息。
在使用LSTM建模之前,先測(cè)定訓(xùn)練集和測(cè)試集中的句子長(zhǎng)度,測(cè)試結(jié)果如圖2所示,根據(jù)圖中的結(jié)果,又計(jì)算了句子長(zhǎng)度小于150的句子總數(shù)占61%,句子長(zhǎng)度小于210的句子總數(shù)占93%,因此選擇句子長(zhǎng)度為210,在訓(xùn)練的過(guò)程中,加入了回調(diào)函數(shù),使得模型能夠停止在最佳的迭代節(jié)點(diǎn),最終結(jié)果如圖3所示,在epoch=25時(shí)達(dá)到了最佳節(jié)點(diǎn)。最終測(cè)試結(jié)果的logloss:0.32,準(zhǔn)確率86%。
圖2 不同句子長(zhǎng)度的數(shù)量分布
圖3 句子長(zhǎng)度為210時(shí)的acc和loss
BERT(Bidirectional Encoder Representations from Transformers)模型來(lái)源于論文[9],它的網(wǎng)絡(luò)架構(gòu)使用的是《Attention is all you need》中提出的多層Transformer結(jié)構(gòu),它解決了傳統(tǒng)模型的一些問(wèn)題:(1)解決了RNN模型本身的序列依賴結(jié)構(gòu)不適合大規(guī)模并行計(jì)算的問(wèn)題;(2)詞向量訓(xùn)練模型word2vec在預(yù)訓(xùn)練好詞向量后就永久不變了,但不同語(yǔ)境中相同的詞可能代表不同的含義。BERT詞向量包含了雙向的語(yǔ)境信息,在很多方面具有比較好的效果,也出現(xiàn)了很多針對(duì)它的改進(jìn)模型。
主要的思路:將一句話進(jìn)行分詞,通過(guò)BERT模型之后輸出各個(gè)分詞對(duì)應(yīng)的詞向量及CLS對(duì)應(yīng)的詞向量,CLS中包含了整句話的信息,然后通過(guò)CLS進(jìn)行類別的判斷。最終測(cè)試結(jié)果的logloss:0.31,準(zhǔn)確率88%。
F1和精確匹配(Exact Match,EM)是模型性能評(píng)價(jià)的兩個(gè)指標(biāo)。如果預(yù)測(cè)值與真實(shí)值完全相同,則EM值為1,否則為0;F1則是平衡精確率和召回率之間關(guān)系的指標(biāo),值越大越好。幾種方法的EM和F1值如表1所示。測(cè)試集數(shù)據(jù)是一個(gè)三分類的數(shù)據(jù),標(biāo)記為1的代表正向情感,標(biāo)記為2的代表負(fù)向情感,標(biāo)記為0的代表中性情感,個(gè)數(shù)見(jiàn)表1所示?;谇楦性~典的思路簡(jiǎn)單,穩(wěn)定性強(qiáng),但精確度不高,需要提取好情感詞典,而這一步,往往需要大量的工作才能保證準(zhǔn)確率,而且必須要對(duì)中文語(yǔ)義足夠了解才可以做到。測(cè)試時(shí)將結(jié)果值大于0.8的分類為正向情感,小于0.3的分類為負(fù)向情感,其余的分類為中性情感,結(jié)果的F1值為49%。SnowNLP的測(cè)試結(jié)果也是數(shù)值,和情感字典一樣做三分類劃分,F(xiàn)1值是51%。
表1 測(cè)試集樣本個(gè)數(shù)
機(jī)器學(xué)習(xí)允許我們?cè)趲缀趿惚尘暗那疤嵯?,為某個(gè)領(lǐng)域的實(shí)際問(wèn)題建立模型。在機(jī)器學(xué)習(xí)模型中,BERT模型達(dá)到了最高的準(zhǔn)確率和最低的loss,表2的BERT模型結(jié)果是在learning_rate=2e-5,num_train_epochs=1.0,vocab_size=21128(詞表大?。┑臈l件下獲得的。使用機(jī)器學(xué)習(xí)模型需要我們對(duì)相關(guān)框架、算法、知識(shí)點(diǎn)足夠的了解,如果沒(méi)有相關(guān)方面的知識(shí)又想做中文文本分類的話可以使用SnowNLP庫(kù)。根據(jù)表2的結(jié)果基于TF-IDF的邏輯回歸取得了不錯(cuò)的效果,基于word2vec的邏輯回歸使用了平均詞向量方法獲得句子向量,這種方法的缺點(diǎn)是認(rèn)為句子中的所有詞對(duì)于表達(dá)句子含義同樣重要。因此如果是簡(jiǎn)單的任務(wù),使用基于TFIDF的邏輯回歸將會(huì)是不錯(cuò)的選擇,總體來(lái)講深度學(xué)習(xí)的方法精確度更高。
表2 結(jié)果對(duì)比
本文使用基于情感詞典的分類方法,SnowNLP庫(kù),邏輯回歸,全連接神經(jīng)網(wǎng)絡(luò),LSTM,BERT模型等多種方法對(duì)相同的文本進(jìn)行分類研究。我們發(fā)現(xiàn)預(yù)訓(xùn)練模型雖然在很多時(shí)候能取得不錯(cuò)的結(jié)果,但需要忍受更大的模型尺寸及更高的延遲,因此在解決具體任務(wù)時(shí),傳統(tǒng)的普通方法也許能取得不錯(cuò)的結(jié)果,而且沒(méi)有更大的開銷。