翟高粵
摘要:針對one-hot詞嵌入技術(shù)無法表述相關(guān)詞之間的語意和關(guān)系的問題,提出一種基于預(yù)訓(xùn)練模型的詞嵌入(GloVe)和CNN神經(jīng)網(wǎng)絡(luò)相結(jié)合的情感分類方法。首先,讀取要分類的語料并加載中文預(yù)訓(xùn)練詞向量模型;然后使用TensorFlow進(jìn)行數(shù)據(jù)預(yù)處理,生成訓(xùn)練集和測試集;最后定義兩種詞嵌入矩陣并構(gòu)建CNN模型進(jìn)行對比。實(shí)驗(yàn)結(jié)果表明,使用預(yù)訓(xùn)練模型的詞嵌入方法比自定義訓(xùn)練的方式能進(jìn)行更好的情感分類
關(guān)鍵詞:詞嵌入;深度學(xué)習(xí);卷積神經(jīng)網(wǎng)絡(luò);情感分類
中圖分類號:TP183:文獻(xiàn)標(biāo)識碼:A
0 引言
情感分析是從自然語言中識別人的態(tài)度的一種人工智能方法,現(xiàn)在有很多人通過社交網(wǎng)絡(luò)服務(wù)、博客、在線評論和社區(qū)網(wǎng)站上面發(fā)表他們的觀點(diǎn)或看法。由于很多用戶在網(wǎng)絡(luò)上表達(dá)自己的情感,因此研究人員可以通過分析現(xiàn)實(shí)世界中的情感來了解社會輿論。
1 相關(guān)概念
1.1 卷積神經(jīng)網(wǎng)絡(luò)(CNN)
CNN模型在計(jì)算機(jī)視覺處理中獲得了很大的成功。它由輸入層、卷積層、池化層和完全連接層組成。輸入層主要輸入原始像素值的圖像,包括RGB通道。在卷積層中,通過滑動窗口(過濾器)來捕獲像素的局部特征。在池化層中,局部小平移具有不變性的特點(diǎn),并通過子抽樣的方法減小了參數(shù)維數(shù)。在全連接層中,把高維度圖像進(jìn)行平展后進(jìn)行分類。
1.2 詞嵌入技術(shù)(Word-Embedding)
為了數(shù)字化輸入的單詞,我們可以使用k個編碼向量(由若干個0和一個1組成)中的1(one-hot)來表示一個單詞,這種方法非常簡單,但無法表達(dá)單詞之間的關(guān)系。為了能表達(dá)單詞之間的關(guān)系,我們通常使用詞嵌入方法,這是一種降維技術(shù)。詞嵌入方法就是把每個單詞矢量化表示。它由密集且維數(shù)較低的k維向量表示。研究表明,語義相近的詞向量在向量空間中距離很近,反之語義差距大的詞向量在向量空間距離較遠(yuǎn)。目前,許多關(guān)于自然語言處理(NLP)的研究都使用預(yù)訓(xùn)練詞向量。
使用預(yù)訓(xùn)練的詞嵌入,在數(shù)據(jù)集較小的情況下,難以學(xué)習(xí)到足夠好的embedding層,選擇一些權(quán)威的官方詞嵌入數(shù)據(jù)庫(比如GloVe)能夠有效解決數(shù)據(jù)集的問題。GloVe的全稱叫Global Vectors for Word Representation,它是一個基于全局詞頻統(tǒng)計(jì)(count-based & overall statistics)的詞表征(word representation)工具,它可以把一個單詞表達(dá)成一個由實(shí)數(shù)組成的向量,這些向量捕捉到了單詞之間一些語義特性,比如相似性(similarity)、類比性(analogy)等。我們通過對向量的運(yùn)算,比如歐幾里得距離或者cosine相似度,可以計(jì)算出兩個單詞之間的語義相似性。
1.3 情感分類
情緒分類的目的是識別給定句子(或文檔)的情緒極性(積極或消極)。傳統(tǒng)分類方法大致可以分為基于詞典的分類方法和基于深度學(xué)習(xí)的分類方法?;谠~典的方法通過人工的方法來提取語言特征。例如,通過在詞典中標(biāo)注每個單詞的情感極性就被當(dāng)作語言特征。另一方面,深度學(xué)習(xí)方法具有自動地從原始數(shù)據(jù)中學(xué)習(xí)表示的能力?;谏疃葘W(xué)習(xí)的方法自動從原始文本輸入中提取特征,并使用它們對情緒極性進(jìn)行分類。因此,基于深度學(xué)習(xí)的方法在情緒分類任務(wù)中越來越受到研究人員的歡迎。
2 數(shù)據(jù)預(yù)處理(定義詞嵌入矩陣)
2.1 數(shù)據(jù)集介紹
本文使用的是IMDB電影評論數(shù)據(jù)集,該數(shù)據(jù)集是用于情感分析的國際標(biāo)準(zhǔn)數(shù)據(jù)集之一。數(shù)據(jù)集收集了大約50000條的評論,其中訓(xùn)練集25000條,測試集25000條。對于預(yù)訓(xùn)練詞嵌入,本文使用的是GloVe。
2.2 讀取語料
打開語料文件,把原始語料劃分為訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù),把文本信息讀取到texts列表中,標(biāo)簽信息讀取到labels中,其中文本信息需要使用預(yù)處理詞嵌入技術(shù)進(jìn)行處理,標(biāo)簽信息本文使用one-hot進(jìn)行表示。
2.3 加載預(yù)訓(xùn)練詞向量模型
本文采用的詞向量是一個稠密向量,可以理解為將文本的語義抽象信息嵌入到了一個具體的多維空間中,詞之間語義關(guān)系可以用向量空間中的范數(shù)計(jì)算來表示。
下載GlOve,進(jìn)行解壓之后的中文預(yù)訓(xùn)練詞向量模型的文件格式是文本文件,首行只有兩個空格隔開的數(shù)字:詞的個數(shù)和詞向量的維度,從第二行開始格式為:詞 數(shù)字1 數(shù)字2 …… 數(shù)字300,形式如下:
364180 300? [首行]
china 0.003146 0.582671 0.049029 -0.312803 0.522986 0.026432 -0.097115 0.194231 -0.362708
以上364180表示的是詞的個數(shù),300表示的詞的維度,即一個詞用300維的數(shù)字進(jìn)行表示,”中國”使用了300維的向量進(jìn)行表示。
2.4 使用tf.keras對語料進(jìn)行處理
tf.keras是tensorflow中集成的keras處理模塊,通過tf.keras可以直接調(diào)用keras中的各種功能。本文將使用tf.keras中的Tokenizer對語料文本進(jìn)行處理,每個向量等于每個文本的長度,這個長度在處理的時候由變量MAX_SEQUENCE_LEN(最大句子長度)做了限制,其數(shù)值并不表示計(jì)數(shù),而是對應(yīng)于字典tokenizer.word_index中的單詞索引值,這個字典是在調(diào)用Tokenizer時產(chǎn)生。
長度超過MAX_SEQUENCE_LEN的文本序列會被截?cái)啵L度小于這個值的文本序列則需要補(bǔ)零來達(dá)到這個長度,可以使用tf.keras中的pad_sequence()就是用零來填充向量序列。例如:對[1,2,3,4,5,6,7,8],[6,7,8,9],用maxlen=6進(jìn)行長度的截?cái)?,結(jié)果如下: