檢信智能ALLEMOTION OS 語義文本情感識別原理
首先,當(dāng)然是文本預(yù)處理
輸入文本,在將輸入文本轉(zhuǎn)化成向量之前,我們需要將標(biāo)點符號、括號、問號等刪去,只留下字母、數(shù)字和字符, 同時將大寫字母轉(zhuǎn)化為小寫,去除停用詞。
效果如下圖
然后就是將文本轉(zhuǎn)化為詞向量(即漢字要轉(zhuǎn)化為計算機能識別的數(shù)字類(矩陣啥的))
在將深度學(xué)習(xí)運用于文本情感分析的過程中,我們需要考慮網(wǎng)絡(luò)模型的輸入數(shù)據(jù)的形式。在其他例子中,卷積神經(jīng)網(wǎng)絡(luò)(CNN)使用像素值作為輸入,logistic回歸使用一些可以量化的特征值作為輸入,強化學(xué)習(xí)模型使用獎勵信號來進行更新。通常的輸入數(shù)據(jù)是需要被標(biāo)記的標(biāo)量值。當(dāng)我們處理文本任務(wù)時,可能會想到利用這樣的數(shù)據(jù)管道。
但是,這樣的處理方式存在著很多問題。我們不能像點積或者反向傳播那樣在一個字符串上執(zhí)行普通的運算操作。所以在這里我們不能將字符串作為輸入,而是需要將文本轉(zhuǎn)換成計算機可識別的格式,由于計算機只能識別數(shù)字,因此我們可以將文本中的每一個詞都轉(zhuǎn)化為一個向量,也稱作詞向量。詞向量是用一個向量的形式表示文本中的一個詞,通過這種轉(zhuǎn)化方式就能采用機器學(xué)習(xí)來把任何輸入量化成我們需要的數(shù)值表示,然后就可以充分利用計算機的計算能力,計算得出最終想要的結(jié)果,保證了操作的可行性。
如圖所示,我們可以將上面的這段文本輸入數(shù)據(jù)轉(zhuǎn)化成一個 16*D 的輸入矩陣。
我們希望創(chuàng)建這種詞向量的方式是可以表示單詞及其在上下文中意義的。例如,我們希望單詞 “love” 和 “adore” 這兩個詞在向量空間中是有一定的相關(guān)性的,因為他們的意思相似,而且都在類似的上下文中使用,因此他們的空間相距距離會相對較小。而“love”、“adore”這兩個單詞與單詞“baseball”的意思有很大的不同,詞性也不相同,那么“love”、“adore”這兩個單詞的向量與單詞“baseball”的向量相距距離就會相對較大。單詞的向量表示也被稱之為詞嵌入。
特征提?。?/span>
為了得到這些詞嵌入,我們采用一個很著名的模型 “Word2Vec”?!?/span>Word2Vec”是近幾年很火的算法,它通過神經(jīng)網(wǎng)絡(luò)機器學(xué)習(xí)算法來訓(xùn)練N-gram 語言模型,并在訓(xùn)練過程中求出word所對應(yīng)的vector的方法。它是將詞表征為實數(shù)值向量的一種高效的算法模型,其利用深度學(xué)習(xí)的思想,可以通過訓(xùn)練,把對文本內(nèi)容的處理簡化為 K 維向量空間中的向量運算,而向量空間上的相似度可以用來表示文本語義上的相似。在這個模型中,每個詞的詞向量是根據(jù)上下文的語境來進行推斷的,如果兩個詞在上下文的語境中可以被互換,那么這就表示這兩個詞的意思相似,詞性相似,那么他們的詞向量中相距距離就非常近。在自然語言中,上下文的語境對分析詞語的意義是非常重要的。
簡單來說,Word2Vec這個模型的作用就是從一大堆句子(以 Wikipedia 為例)中為每個獨一無二的單詞進行建模,并且輸出一個唯一的向量,Word2Vec 模型的輸出被稱為一個嵌入矩陣。該嵌入矩陣將包含訓(xùn)練語料庫中每個不同單詞的向量。 傳統(tǒng)上,嵌入矩陣可以包含超過300萬個單詞向量。
Word2Vec模型是通過對數(shù)據(jù)集中的每個句子進行訓(xùn)練,在其上滑動一個固定大小的窗口,并試圖預(yù)測窗口的中心詞,給出其他詞。使用損失函數(shù)和優(yōu)化程序,該模型為每個唯一字生成向量。這個訓(xùn)練過程的細節(jié)可能會變得有點復(fù)雜,所以我們現(xiàn)在要跳過細節(jié),但這里主要的一點是,任何深度學(xué)習(xí)方法對于NLP任務(wù)的輸入可能都會有單詞向量作為輸入。
后面特征提取這一塊,應(yīng)該會將用word2vec提取的方式改為用doc2vec來提取,不過具體修改時間待定,得看我啥時候能將這一操作學(xué)會(哈哈噠)。
Google 已經(jīng)幫助我們在大規(guī)模數(shù)據(jù)集上訓(xùn)練出來了 Word2Vec 模型,它包括 1000 億個不同的詞,在這個模型中,谷歌能創(chuàng)建300萬個詞向量,每個向量維度為 300。在理想情況下,我們將使用這些向量來構(gòu)建模型,但是因為這個單詞向量矩陣太大了(3.6G),因此在此次研究中我們將使用一個更加易于管理的矩陣,該矩陣由 GloVe 進行訓(xùn)練得到。矩陣將包含 400000 個詞向量,每個向量的維數(shù)為 50。
這里有用到一些.npy文件,是通過glove已經(jīng)轉(zhuǎn)好的,存為了npy文件。
我們將導(dǎo)入兩個不同的數(shù)據(jù)結(jié)構(gòu),一個是包含 400000 個單詞的 Python 列表,一個是包含所有單詞向量值的 400000*50 維的嵌入矩陣。
結(jié)果對比:
CNN網(wǎng)絡(luò)層數(shù)包括:卷積層,池化層,全連接層。
CNN神經(jīng)網(wǎng)絡(luò)模型運用于文本情感分析時效果不如LSTM神經(jīng)網(wǎng)絡(luò)模型效果好,經(jīng)典的CNN模型在文本情感分析正確率只有71.2%,而對經(jīng)典進行改進之后,增加了卷積層和池化層,CNN模型的正確率得到了提高,但正確率也是只有77.25%,仍然比不上只用了一層LSTM網(wǎng)絡(luò)的正確率高。從結(jié)果對比中我們可以知道,CNN不光可以應(yīng)用于圖像處理領(lǐng)域,也能成功有效地對文本信息進行分析,但LSTM在解決文本情感分析的問題時效果要比CNN好。
下面是一些運行結(jié)果:
訓(xùn)練數(shù)據(jù)集的結(jié)果
嗯…,訓(xùn)練了800多個數(shù)據(jù),發(fā)現(xiàn)最高的時候準確率在百分之七十幾,但是絕大多數(shù)穩(wěn)定在百分之五十左右,這個準確度還是有點低的,后面加強學(xué)習(xí),改進代碼,應(yīng)該可以將準確度提高。(方法推薦:改改epoch可能會提高準確度,模型收斂+準確率)
輸出詞列表的長度,詞向量的維數(shù)
維度的個數(shù)
這個項目采用的數(shù)據(jù)集是IMDB數(shù)據(jù)集,這個數(shù)據(jù)集是一個關(guān)于電影評論的數(shù)據(jù)集,在這個數(shù)據(jù)集上做訓(xùn)練和測試。這個數(shù)據(jù)集包含 25000 條電影數(shù)據(jù),其中 12500 條正向數(shù)據(jù),12500 條負向數(shù)據(jù)。將其中的23000個文本評論作為訓(xùn)練集,將剩下的2000個文本評論作為測試集。
下面為正面評價文本和負面評價文本示例
總結(jié):
將CNN與LSTM兩種神經(jīng)網(wǎng)絡(luò)模型應(yīng)用到了文本情感分析的問題當(dāng)中,使用Word2Vec模型及它的子矩陣GloVe來將文本信息進行預(yù)處理,轉(zhuǎn)換成了詞向量及向量矩陣,使用了IMDB數(shù)據(jù)集來對模型進行訓(xùn)練,并用TensorFlow進行建模、訓(xùn)練。
版權(quán)聲明:本文為CSDN博主「醒了的追夢人」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。