自然語言學習——使用word2vec對文本進行情感分析

本文主要講述瞭如何對影評數據做情感分析,就是如何判斷這條評論是好評還是差評。對文本處理的方法是word2vec,然後用隨機森林的方法構建模型,最後訓練模型進行預測。前面一、二部分主要是講述如何處理文檔,有點囉嗦可以快速閱讀,主要方法從第三部分開始。

一、讀取文檔

在進行文本情感分析之前,當然需要大量的文本數據,我使用了一些影評數據(labeledTrainData.tsv)作爲訓練集來完成。內容如下圖所示:

該訓練集擁有25000條影評數據,圖中只顯示了五行數據,id可表示評論者,sentiment表示是好評(1)還是差評(0),review則是影評內容。

在讀取完文檔後,先看看我們所得到的影評數據是一個什麼樣的內容:以第一條爲例(with all this……),如下圖所示:

仔細觀察會有<br/><br/>這樣的網頁標籤存在,在進行網頁爬取影評的時候這樣情況肯定會出現,爲了得到完好的文本,需要對文本進行一個預處理,如下。

二、文本預處理

1.去掉html標籤

使用BeautifulSoup庫可以輕鬆去除html中的標籤,得到所需文本。

2.移除標點

由於標點符號對我們的文本情感分析是沒有用處的,所以我們也需要把標點符號去掉:

去除標點後就如上圖所示,使用的正則匹配的方式。

3.切分成詞

計算機對一句話進行分析的難度較大,對單詞進行分析就相對簡單一些,所以需要將每一句話的單詞提取出來,這也是爲什麼我們需要去除標點的原因,因爲去除標點後比較好分詞。

上圖爲得到分詞後的結果,全部轉爲小寫。

4.去停用詞

停用詞類似於be、but、by等等這些對情感分析毫無影響的詞語,需要全部去掉,以免干擾結果。

上圖中像with,all,this這些單詞都已經去除了。

5.重組爲新句子

第一個cell中寫了一個新函數clean_text,其功能就是將上述4條的功能寫進一個函數。然後返回一個合併好的新句子(這個句子毫無語法而言,因爲去掉了一些單詞)。

得到的就是上圖中輸出的這一條句子。這僅僅只是一個影評,需要對文檔中的25000條影評做同樣處理,得到新的一欄clean_review

這只是一個簡單的處理,將文本處理成自己想要得到的有用信息。

三、word2vec詞向量編碼

得到清洗的文本後表示已經完成了一步,接下來需要開始建立模型,訓練模型了。我們都知道文本是沒法被計算機分析的,只要0,1纔是計算機處理的語言。接下來就是開始這一步操作,將清洗後的文本轉爲0,1矩陣才能開始訓練模型。代碼如下圖所示:

vetorizer = CountVectorizer(max_features=5000):這行代碼是統計所有文本中詞頻前5000的單詞,這是一個類,目前還沒有對文本進行任何操作,只是先設置成這樣,也可以改成4000,6000等等。

train_data_features = vetorizer.fit_transform(df.clean_review).toarray():這表示開始對文本進行處理了,標準就爲上一行代碼設置的那樣,然後轉換爲數組的形式。

得到的爲25000行,5000列的數據:通俗一點講呢就是先統計頻數最多的前5000個單詞爲標準,第一個影評中有一個單詞在這5000個裏面就標爲1,沒有就標0,後面的類推。完成後,就將這25000行文本轉爲了(25000L,5000L)的數組了,這也是我們前面所做的操作的最終目標。

四、構造隨機森林分類器

在將所有影評數據處理成(25000L,5000L)的向量後,需要將這些數據放入模型中去訓練,才能預測之後的影評數據是好評還是差評。

forest = RandomForestClassifier(n_estimators=100):表示構造一個隨機森林分類器。

forest = forest.fit(train_data_features, df.sentiment):表示將處理好的影評數據(25000L,5000L),和是否好評的數據(0\1)放入模型中訓練。運行後,則表示模型已經訓練完成。

五、預測測試集的情感狀態

1.預處理測試集數據

在訓練完模型後,爲了測試模型的好壞,我們需要通過測試集(testData.tsv)來驗證這個模型。測試集中沒有sentiment一欄,因爲這就是我們需要預測的結果。對測試集我們同樣需要進行如上所示的1,2,3,4的操作來清洗影評數據。

最終我們也得到了測試集中25000條影評的特徵向量,也就是(25000L,5000L)數組.

2.預測測試集影評情感狀態

在得到了測試集的特徵向量後,我們就可以開始進行預測了。

我們通過建立好的隨機森林模型,往其中丟入測試集的數組,就可以得到預測的sentiment(情感狀態),然後輸出結果。

3.檢測預測結果

在預測好後,我們看看,預測的sentiment這一欄到底準不準確,我們先看看第一條影評數據是好評還是差評,從上圖可知第一條預測的結果爲1(好評)。將第一條影評拿下來翻譯看看:

根據意思大概也能看出是一條好評,後面的這些預測結果我也檢查了一些,的確挺準確的。

六、總結

對以上部分做一個小小的概括:

1.先對訓練集做預處理,將文本轉爲機器方便處理的0,1數組。

2.建立模型,訓練模型

3.對測試集做預處理,預測測試集中的影評是好評還是差評

4.檢查結果,完成

以上是我在學習過程中記錄的一些筆記,內容可能不太規範,還請見諒。本文的代碼,訓練集,測試集等文件都已經上傳。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章