Python,Python,web,爬蟲,開發,機器學習,人工智慧,數據分析,資料庫,編程,基礎入門 先用電影評論來做情感分析,要看到最後哦 ...
先用電影評論來做情感分析,主要包括下麵幾個主要內容(看到最後哦):
1、準備文本數據
2、基於文本文檔來構建特征向量
3、訓練機器學習模型來區分電影評論的正面評論和負面評論(對你的女神同樣適用哦~~)
4、使用外存學習和線上學習演算法來處理大數據
在本篇文章中,主要介紹對於電影評論數據的準備工作。

一、情感分析
情感分析也稱觀點挖掘(opinion mining),是機器學習中自然語言處理(NLP)領域一個非常流行的分支,它主要是分析文檔的情感傾向。
二、下載數據
請自行準備一個電影信息(或者直接使用你和女神的聊天信息)
該電影評論是來自IMDb中的電影評論,數據集一共包含了50000個關於電影的正面評論和負面評論,正面評論代表對於影片的評分超過了6顆星,而負面評論則表示評分低於5顆星。50000條評論被分成了四個文件夾train的neg和pos和test的neg和pos,其中每個文件夾中包含了12500個txt電影評論文件,其中pos代表正面評論,neg代表負面評論。所以,我們需要將這50000個txt文件整合成一個表格,表格分為兩列,第一列表示評論的內容,第二列表示評論是屬於正面(用1表示)還是負面(用0表示)。
三、生成電影評論的表格文件
將50000個txt文件整合成一個表格文件的時候,需要十分鐘左右。我們可以通過Python的pyprind庫將整個處理過程可視化,同時它還能根據當前電腦的運行狀態來估計剩餘處理時間,處理完成之後,還能查看消耗的總時間。通過python的數據分析庫pandas將電影評論保存成一個csv文件。
1、預計處理總時間
2、統計處理總時間
3、python實現代碼
我們還需要知道將文本轉換為特征向量前的一些準備工作,主要內容包括:
1、清洗文本數據
2、標記文檔
3、詞袋模型

一、清洗文本數據
清洗文本需要將文本中所包含的一些不必要的字元刪除。
1、刪除不必要的字元
print(data["review"][0][-50:])
is seven.
Title (Brazil): Not Available
發現評論中含有一些HTML標記符、標點符號、以及其他的非字母符號。HTML標記符在對於我們對評論做情感分析的時候沒有影響,至於標點符號可能會影響句子的語義,為了簡化處理我們將標點符號進行刪除,保留表情符號(如":)"),因為表情符號對於電影評論情感的分析很有幫助。下麵,我們通過python的正則表達式來刪除這些不必要的字元。
python的正則表達式提供了一種字元串搜索特定字元串的方便有效方法,正則表達式也要很多的技巧和方法,如果對正則表達式有興趣的話可以自己去瞭解一下。在這裡我們只是簡單的使用一下,所以對正則表達式不會有太過詳細的介紹。
2、標記文檔
對於英文文檔我們可以利用其天然的空格作為單詞的分隔符,如果是中文的時候,可以利用一些分詞庫如jieba分詞。在句子中,我們可能會遇見先"runners"、"run"、"running"單詞不同的形式,所以我們需要通過詞乾提取(word
stemming)來提取單詞原形。最初的詞乾提取演算法是由Martin F. Porter在1979年提出的,被稱為porter
stemming演算法。我們可以通過安裝python的自然語言工具包NLTK,官網安裝鏈接:http://www.nltk.org/install.html,在NLTK中已經是實現了Porter
Stemming演算法,還有實現了比它更高級的Snowball stemmer和Lancaster stemmer與porter
stemming相比,它們更加的提取速度更快。可以通過pip命令進行安裝
pip install nltk
3、停用詞的移除
停用詞大致可以分為兩類,一類是功能詞,這些功能詞非常普遍,與其他的詞相比,功能詞沒有什麼實際的含義,比如"the"、"is"、"at"、"which"等。還有一類是辭彙詞,比如"want"等。停用詞對於電影評論的情緒分類沒有任何意義,所以我們需要將一些停用詞進行刪除。通過nltk.download函數獲取NLTK提供的停用詞,並使用這些停用詞來移除電影評論中的停用詞。NLTK庫提供的停用詞,一共有179個,下麵給出部分的停用詞
我們還需要做什麼呢?
1、將單詞轉換為特征向量
2、TF-IDF計算單詞關聯度
在之前,我們已經知道一些文本的預處理和分詞。這篇文章中,主要介紹如何將單詞等分類數據轉成為數值格式,以方便我們後面使用機器學習來訓練模型。
一、將單詞轉換為特征向量
詞袋模型(bag-of-words model):將文本以數值特征向量的形式來表示。主要通過兩個步驟來實現詞袋模型:
1、為整個文檔集(包含了許多的文檔)上的每個單詞創建一個唯一的標記。
2、為每個文檔構建一個特征向量,主要包含每個單詞在文檔上的出現次數。
註意:由於每個文檔中出現的單詞數量只是整個文檔集中很少的一部分,因此會有很多的單詞沒有出現過,就會被標記為0。所以,特征向量中大多數的元素就會為0,就會產生稀疏矩陣。
下麵通過sklearn的CountVectorizer來實現一個詞袋模型,將文檔轉換成為特征向量
通過count.vocabulary_我們可以看出每個單詞所對應的索引位置,每一個句子都是由一個6維的特征向量所組成。其中,第一列的索引為0,對應單詞"and","and"在第一和二條句子中沒有出現過,所以為0,在第三條句子中出現過一些,所以為1。特征向量中的值也被稱為原始詞頻(raw
term frequency)簡寫為tf(t,d),表示在文檔d中辭彙t的出現次數。
註意:在上面詞袋模型中,我們是使用單個的單詞來構建詞向量,這樣的序列被稱為1元組(1-gram)或單元組(unigram)模型。除了一元組以外,我們還可以構建n元組(n-gram)。n元組模型中的n取值與特定的應用場景有關,如在反垃圾郵件中,n的值為3或4的n元組可以獲得比較好的效果。下麵舉例說明一下n元組,如在"the weather is sweet"這句話中,1元組:"the"、"weather"、"is"、"sweet"。2元組:"the weather"、"weather is"、"is sweet"。在sklearn中,可以設置CountVecorizer中的ngram_range參數來構建不同的n元組模型,預設ngram_range=(1,1)。sklearn通過CountVecorizer構建2元組
二、TF-IDF計算單詞關聯度
在使用上面的方法來構建詞向量的時候可能會遇到一個問題:一個單詞在不同類型的文檔中都出現,這種類型的單詞其實是不具備文檔類型的區分能力。我們通過TF-IDF演算法來構建詞向量,從而來剋服這個問題。
詞頻-逆文檔頻率(TF-IDF,term frequency-inverse document frequency):tf-idf可以定義為詞頻×逆文檔頻率
其中tf(t,d)表示單詞t在文檔d中的出現次數,idf(t,d)為逆文檔頻率,計算公式如下
其中,nd表示文檔的總數,df(t,d)表示包含單詞t的文檔d的數量。分母中加入常數1,是為了防止df(t,d)=0的情況,導致分母為0。取log的目的是保證當df(t,d)很小的時候,不會導致idf(t,d)過大。
通過sklearn的TfidfTransformer和CountVectorizer來計算tf-idf
可以發現"is"(第二列)和"the"(第六列),它們在三個句子中都出現過,它們對於文檔的分類所提供的信息並不會很多,所以它們的tf-idf的值相對來說都是比較小的。
註意:sklearn中的TfidfTransformer的TF-IDF的計算與我們上面所定義TF-IDF的公式有所不同,sklearn的TF-IDF計算公式
通常在計算TF-IDF之前,會對原始詞頻tf(t,d)做歸一化處理,TfidfTransformer是直接對tf-idf做歸一化。TfidfTransformer預設使用L2歸一化,它通過與一個未歸一化特征向量L2範數的比值,使得返迴向量的長度為1,計算公式如下:
下麵通過一個例子來說明sklearn中的TfidfTransformer的tf-idf的計算過程,以上面的第一句話"The sun is shining"為例子
1、計算原始詞頻
a、單詞所對應的下標
b、計算第三句話的原始詞頻tf(t,d)
c、計算逆文檔頻率idf(t,d)
註意:其他的詞在計算tf-idf都是0,因為原始詞頻為0,所以就不需要計算idf了,log是以自然數e為底。
d、計算tf-idf
所以,第一個句子的tf-idf特征向量為[0,1,1.29,1.29,0,1,0]
e、tf-idf的L2歸一化
在下一篇文章中將介紹如何使用這些句子的特征向量來構建一個模型進行情感分類。雖然在實際演示的是電影影評,但是訓練好了可是可以用來處理你的聊天信息的哦~~~

想不想用來測試一下你的女神和你聊天時候的情緒呢?保你牽手成功!!!
另外,小編有自己的學習交流群大家如果想要來學習的話,可以一起來交流:719+139+688,不管你是小白還是大牛,小編都歡迎,而且小編會在群裡面不定期分享乾貨,包括小編自己整理的一份2018年最新學習資料和大神分享直播,歡迎初學和進階中的小伙伴