在 Netflix 評論中作情感分析的深度學習模型

 

 

文章發佈於公號【數智物語】 (ID:decision_engine),關注公號不錯過每一篇乾貨。瀏覽器

 

 

 

原標題 | Sentiment Analysis with Deep Learning of Netflix Reviews網絡

做者 | Artem Oppermann架構

譯者 | ybNero(電子科技大學)、Devin_ABCDEF(汕頭大學)、夕陽紅老年萬花(數據分析師)分佈式

 

 

在這篇文章中,我將介紹情感分析的主題和怎樣實現一個能夠識別和分類Netflix評論中人的感情的深度學習模型。工具

 

企業最重要的目的之一就是與客戶羣保持聯繫。這些公司必須清楚地瞭解客戶對新老產品、最近的舉措以及客戶服務的見解。學習

 

情感分析是完成上述任務的方法之一編碼

 

情感分析是天然語言處理(NLP)中的一個領域,它創建模型,試圖識別和分類語言表達中的屬性 e.g.:spa

1. 極性:若是發言者表達了積極或者消極的意見插件

2. 主題:正在被討論的事情3d

3. 意見持有者:表達這個觀點的人或者團體

 

在咱們天天產生2.5萬億字節數據的世界裏,情感分析已經成爲理解這些數據的關鍵工具。這使得公司可以得到關鍵的洞察力並自動化全部類型的流程。

 

情感分析可使得無結構的信息,好比民衆關於產品、服務、品牌、政治和其餘話題上的意見,自動轉變爲結構化的數據。這些數據對如市場分析、公共關係、產品意見、淨推薦值、產品反饋和顧客服務等商業應用很是有用。

 

接下來,我將向大家展現如何使用深度學習模型對 Netflix 評論進行正向和負向的分類。這個模型會把所有評論做爲輸入(每個單詞),而且提供一個百分比的評分來檢測某個評論是在表達正向或負向的情緒。

 

我使用的數據集包含了大約5000條負向和5000條正向的評論。這裏有5個數據集中的樣本,這些樣本在文末作模型分類。

 

 

本文所使用的深度模型+所有所需的代碼都能在個人GitHub repo中找到。

 

下面先開始理論部分。

 

01循環神經網絡

 

 

循環神經網絡(RNNs)是很受歡迎的模型,而且在不少NLP任務上已經取得了很好的表現。

 

循環神經網絡使用了序列信息,如文本。在傳統的前饋神經網絡中,咱們假設全部的輸入是彼此獨立的。可是對不少任務而言,這是很很差的想法。舉個例子,一句話有完整的語法結構和順序,句子中每一個詞都依賴於前一個詞。若是你想你的神經網絡可以學習到意義(或者咱們案例中的情感),神經網絡必須知道哪一個詞按哪一個順序出現。

 

循環神經網絡被叫作循環是由於他們對序列中的每一個元素都執行一樣的任務,而且輸出是依賴於以前的計算。其餘的方式去理解循環神經網絡是它們有記憶,可以獲取以前已經計算過的信息。這裏有一個經典的循環神經網絡:

 

圖1-循環神經網絡架構

 

x(t-1),x(t),x(t+1)是彼此依賴的輸入序列(例如句子中的單詞)。y(t_1),y(t),y(t + 1)是輸出。RNN的獨特之處在於,輸入x(t)的神經元的當前隱藏狀態h(t)的計算取決於先前輸入x(t-1)的先前隱藏狀態h(t-1)。Wxh和Whh是權重矩陣,其分別將輸入x(t)與隱藏層h(t)和h(t)與h(t-1)鏈接。經過這種方式,咱們將神經網絡的重複引入,能夠將其視爲先前輸入的記憶。

 

從理論上講,這種「vanilla」RNNs能夠在任意長的序列中使用信息,但在實踐中,它們僅限於循環中的幾個步驟。

 

01LSTMs

 

長短時記憶網絡-一般簡稱爲「LSTMs」一種特殊的RNN,可以學習到長期依賴。LSTMs 與RNNs沒有根本不一樣的架構形式,可是它融合了額外的組件。

 

 

LSTM的關鍵是狀態單元C(t),即橫穿圖頂部的水平線。除了僅僅只使用隱藏狀態h(t)以外,單元狀態是額外的方式來存儲記憶。然而,與 「vanilla」RNN相比, C(t)使得LSTMs可以在更長的序列上工做成爲可能。

 

更重要的是,LSTMs 能夠在單元狀態上刪除或者增長信息,嚴格地被稱爲門的架構約束。門是一種能夠選擇地讓信息經過的方式。一個LSTM有三種門結構,來保護和控制單元狀態。

 

1. 遺忘門:在獲取以前的輸入x(t-1)的隱藏狀態h(t-1)後,遺忘門幫助咱們決定該從h(t-1)中刪除什麼,只保留相關信息。

 

2. 輸入門:在輸入門中,咱們決定從當前輸入x(t)添加內容到咱們當前單元狀態C(t)。

 

3. 輸出門:正如名字所說同樣,輸出門決定從當前單元狀態C(t)輸出什麼到下一個C(t+1)。對於語言模型例子而言,由於它只能看見一個主語,它可能但願看到一個和動詞有關的信息,來控制接下來要發生的狀況。舉個例子,它可能輸出主語是單數仍是複數,這樣咱們就能夠知道接下來的動詞應該變成什麼形式。

 

每一種狀態的背後都是獨立的神經單元。能夠想象,這將會使得LSTMs變得至關複雜。在這一點上,我不會繼續深刻講更多關於LSTMs的細節。

 

02預處理

 

 

在咱們用這些評論做爲循環神經網絡的輸入以前,對這些數據作一些預處理是有必要的。這裏咱們的主要目的是減少觀測空間。

 

01單詞的統一書寫

 

考慮像"Somethiing"和「something」這些單詞,對咱們人來講,這些詞有着一樣的意思,它們之間惟一的區別是第一個字母是大寫,由於它或許是句子中的第一個詞。可是對於神經網絡而言,因爲不一樣的書寫,這些單詞將有(至少在開始的時候)不一樣的意思。只有在訓練階段,神經網絡纔可能學習到或者學習不到識別這些意思相同的詞。咱們目的就是避免這些錯誤理解。

 

所以,預處理的第一步就是把全部字母都變成小寫字母。

 

02刪除特殊字符

 

像. , ! ? '等等特殊字符,不能對一段評價的情感分析起到促進做用,所以能夠被刪除。

 

最後結果

 

考慮如下未處理的評價例子:

 

 

咱們作完上面所說的預處理步驟後,這個評價例子看起來以下所示:

 

 

預處理將會應用於數據集上的每一個評價。

 

03「詞—索引」映射

 

另外一個重要步驟是建立稱爲「詞—索引」的映射,這個映射爲數據集中每個單詞分配一個惟一的整數值。在我所使用的數據集中,所有的正向和負向評論共包含18339個不一樣的單詞。所以「詞—索引」映射有相同數量的條目。這個數量被稱爲詞彙數(vocabulary size)。

 

我獲得的 「詞—索引」映射中的第一個和最後一個條目以下:  

 

 

因爲咱們不能將字符串格式的數據輸入神經網絡,所以爲數據集中的單詞分配惟一整數值的步驟很是關鍵。經過「詞—索引」映射,咱們可使用整數代替字符來表示整個句子和評論。考慮如下評論:

 

 

使用」詞—索引」映射  , 能夠用一個整數向量來表示這條評論,每個整數表示映射中對應的單詞:

 

 

03詞嵌入

 

固然,神經網絡既不能接受字符串,也不能接受單個整數值做爲輸入。咱們必須使用詞嵌入(word embedding)向量來代替。 

 

詞嵌入是一種分佈式的文本表示,這多是深度學習方法在挑戰NLP問題上使人印象深入的關鍵突破之一。詞嵌入其實是一種用實值向量表示單詞的技術,一般具備數十或數百個維度。每一個單詞被映射到一個特定的向量,向量值由神經網絡學習。 

 

與單詞的稀疏表示方式不一樣,詞嵌入不需成千上萬的維度。例如,咱們可使用詞嵌入技術把單詞「although」和「life」表示成十維向量:

 

1. although = [0.8 1.0 4.2 7.5 3.6]

2. life = [8.3 5.7 7.8 4.6 2.5 ]

 

表示數據集中單詞的所有向量組成一個大型矩陣,稱爲嵌入矩陣(embedding-matrix)。該矩陣的行數表示詞嵌入的維數,列數表示詞彙量,或者說數據集中不一樣單詞的個數。所以,這個矩陣的每一列表示數據集中每一個單詞相應的的嵌入向量。  

 

咱們應如何從矩陣中找出單詞對應的列?此時咱們須要參考詞—索引映射。假設你想查找單詞「although」的嵌入向量,根據單詞—索引映射,單詞「although」由數字2511表示。接下來,咱們須要建立一個長度18339爲的獨熱向量,這裏的向量長度等於數據集中的單詞數量,向量的第2511位取值爲1,其他爲0。  

 

經過對嵌入矩陣和獨熱編碼向量進行點積運算,咱們獲得矩陣中的第2511列,即爲單詞「although」的嵌入向量。

 

 

這樣咱們就能夠將整個字符串段落或Netflix評論提供給LSTM。咱們只需在單詞到索引映射中查找每一個單詞的整數值,建立適當的獨熱編碼向量並使用矩陣執行點積。而後將評論逐字(矢量形式)饋送到LSTM網絡中。

 

 

04得到評論情感

 

 

到目前爲止,你已經瞭解瞭如何預處理數據,以及如何將評論輸入LSTM網絡中。如今,讓咱們討論一下如何得到給定評論的情感。 

 

對於每個時間步長t,將向量x(t)輸入LSTM網絡中,獲得輸出向量y(t)。在不一樣的步長上進行此操做,直到輸入向量爲x(n),n表明評論中所有單詞的長度。咱們不妨假設n=20,直到輸入向量爲x(n),LSTM模型輸出向量y(n)爲止,所有20個向量中,每一個向量都表明必定含義,但仍然不是咱們所須要的評論中的情感。實際上,向量y是神經網絡生成的對評論特徵的編碼表示,這些特徵在判斷情感時很是重要。  

 

y(8)表示評論中前8個單詞的神經網絡識別特徵。另外一方面,y(20)表示評論總體的特性。儘管只使用最後一個輸出向量y(20)足以進行情感判斷,但我發現若是使用y(0) - y(20)的所有向量來肯定情感,結果會更加準確。爲了使用所有向量,咱們能夠計算這些向量的均值向量。咱們稱這個均值向量爲y_mean。  

 

如今,均值向量y_mean能夠用編碼的方式來表示評論中的特徵。咱們須要在模型最後增長一個分類層,使用均指向量y_mean將評論劃分爲正向情感類和負向情感類。在最終的分類層中,須要將均值向量y_mean和權重矩陣W相乘。

 

以上描述的情感分析過程已經在個人GitHub repo上一個深度學習模型中實現。歡迎你來嘗試和復現。模型訓練完成後,能夠對新的評論進行情感分析:  

 

 

本文編輯:王立魚

英語原文:

https://towardsdatascience.com/sentiment-analysis-with-deep-learning-62d4d0166ef6

 

 

數智物語徵稿啓事0613.png

 

星標我,天天多一點智慧

 

相關文章
相關標籤/搜索