0
本文作者: AI研習社-譯站 | 2019-07-08 11:21 |
原標題 | Sentiment Analysis with Deep Learning of Netflix Reviews
作者 | Artem Oppermann
譯者 | ybNero(電子科技大學)、Devin_ABCDEF(汕頭大學)、夕陽紅老年萬花(數(shù)據(jù)分析師)
編輯 | 王立魚
在這篇文章中,我將介紹情感分析的主題和怎樣實現(xiàn)一個可以識別和分類Netflix評論中人的感情的深度學習模型。
生意中的一個很重要的元素是了解客戶基本需求。那對于那些公司而言,去確切了解消費者和客戶對于新和剛建立的產(chǎn)品或者服務,最近方案和客服的看法也是很重要的。
情感分析是完成上述任務的方法之一
情感分析是自然語言處理(NLP)中的一個領域,它建立模型,試圖識別和分類語言表達中的屬性 e.g.:
極性:如果發(fā)言者表達了積極或者消極的意見,
主題:正在被討論的事情,
意見持有者:表達這個觀點的人或者團體。
在我們每天產(chǎn)生2.5萬億字節(jié)數(shù)據(jù)的世界里,情感分析已經(jīng)成為理解這些數(shù)據(jù)的關鍵工具。這使得公司能夠獲得關鍵的洞察力并自動化所有類型的流程。
情感分析可以使得無結(jié)構的信息,比如民眾關于產(chǎn)品、服務、品牌、政治和其他話題上的意見,自動轉(zhuǎn)變?yōu)榻Y(jié)構化的數(shù)據(jù)。這些數(shù)據(jù)對如市場分析、公共關系、產(chǎn)品意見、凈推薦值、產(chǎn)品反饋和顧客服務等商業(yè)應用非常有用。
接下來,我將向你們展示如何使用深度學習模型對 Netflix 評論進行正向和負向的分類。這個模型會把全部評論作為輸入(每一個單詞),并且提供一個百分比的評分來檢測某個評論是在表達正向或負向的情緒。
我使用的數(shù)據(jù)集包含了大約5000條負向和5000條正向的評論。這里有5個數(shù)據(jù)集中的樣本,這些樣本在本文末也會在模型中做分類。
本文所使用的深度模型+全部所需的代碼都能在此處找到。
下面先開始理論部分。
循環(huán)神經(jīng)網(wǎng)絡(RNNs)是很受歡迎的模型,并且在很多NLP任務上已經(jīng)取得了很好的表現(xiàn)。
循環(huán)神經(jīng)網(wǎng)絡使用了序列信息,如文本。在傳統(tǒng)的前饋神經(jīng)網(wǎng)絡中,我們假設所有的輸入是彼此獨立的。但是對很多任務而言,這是很不好的想法。舉個例子,一句話有完整的語法結(jié)構和順序,句子中每個詞都依賴于前一個詞。如果你想你的神經(jīng)網(wǎng)絡能夠?qū)W習到意義(或者我們案例中的情感),神經(jīng)網(wǎng)絡必須知道哪個詞按哪個順序出現(xiàn)。
循環(huán)神經(jīng)網(wǎng)絡被叫做循環(huán)是因為他們對序列中的每個元素都執(zhí)行同樣的任務,并且輸出是依賴于之前的計算。其他的方式去理解循環(huán)神經(jīng)網(wǎng)絡是它們有記憶,能夠獲取之前已經(jīng)計算過的信息。這里有一個經(jīng)典的循環(huán)神經(jīng)網(wǎng)絡:
圖1-循環(huán)神經(jīng)網(wǎng)絡架構
x(t-1),x(t),x(t+1)是彼此依賴的輸入序列(例如句子中的單詞)。y(t_1),y(t),y(t + 1)是輸出。RNN的獨特之處在于,輸入x(t)的神經(jīng)元的當前隱藏狀態(tài)h(t)的計算取決于先前輸入x(t-1)的先前隱藏狀態(tài)h(t-1)。Wxh和Whh是權重矩陣,其分別將輸入x(t)與隱藏層h(t)和h(t)與h(t-1)連接。通過這種方式,我們將神經(jīng)網(wǎng)絡的重復引入,可以將其視為先前輸入的記憶。
從理論上講,這種“vanilla”RNNs可以在任意長的序列中使用信息,但在實踐中,它們僅限于循環(huán)中的幾個步驟。
1.1LSTMs
長短時記憶網(wǎng)絡-通常簡稱為“LSTMs”一種特殊的RNN,能夠?qū)W習到長期依賴。LSTMs 與RNNs沒有根本不同的架構形式,但是它融合了額外的組件。
LSTM的關鍵是狀態(tài)單元C(t),即橫穿圖頂部的水平線。除了僅僅只使用隱藏狀態(tài)h(t)之外,單元狀態(tài)是額外的方式來存儲記憶。然而,與 “vanilla”RNN相比, C(t)使得LSTMs能夠在更長的序列上工作成為可能。
更重要的是,LSTMs 可以在單元狀態(tài)上刪除或者增加信息,嚴格地被稱為門的架構約束。門是一種可以選擇地讓信息通過的方式。一個LSTM有三種門結(jié)構,來保護和控制單元狀態(tài)。
遺忘門:在獲取之前的輸入x(t-1)的隱藏狀態(tài)h(t-1)后,遺忘門幫助我們決定該從h(t-1)中刪除什么,只保留相關信息。
輸入門:在輸入門中,我們決定從當前輸入x(t)添加內(nèi)容到我們當前單元狀態(tài)C(t)。
輸出門:正如名字所說一樣,輸出門決定從當前單元狀態(tài)C(t)輸出什么到下一個C(t+1)。對于語言模型例子而言,因為它只能看見一個主語,它可能希望看到一個和動詞有關的信息,來控制接下來要發(fā)生的情況。舉個例子,它可能輸出主語是單數(shù)還是復數(shù),這樣我們就可以知道接下來的動詞應該變成什么形式。
每一種狀態(tài)的背后都是獨立的神經(jīng)單元??梢韵胂?,這將會使得LSTMs變得相當復雜。在這一點上,我不會繼續(xù)深入講更多關于LSTMs的細節(jié)。
在我們用這些評論作為循環(huán)神經(jīng)網(wǎng)絡的輸入之前,對這些數(shù)據(jù)做一些預處理是有必要的。這里我們的主要目的是減小觀測空間。
2.1單詞的統(tǒng)一書寫
考慮像"Somethiing"和“something”這些單詞,對我們?nèi)藖碚f,這些詞有著同樣的意思,它們之間唯一的區(qū)別是第一個字母是大寫,因為它或許是句子中的第一個詞。但是對于神經(jīng)網(wǎng)絡而言,由于不同的書寫,這些單詞將有(至少在開始的時候)不同的意思。只有在訓練階段,神經(jīng)網(wǎng)絡才可能學習到或者學習不到識別這些詞意思相同。我們目的就是避免這些錯誤理解。
因此,預處理的第一步就是把所有字母都變成小寫字母。
2.2 刪除特殊字符
像. , ! ? '等等特殊字符,不能對一段評價的情感分析起到促進作用,因此可以被刪除。
最后結(jié)果
考慮以下未處理的評價例子:
我們做完上面所說的預處理步驟后,這個評價例子看起來如下所示:
預處理將會應用于數(shù)據(jù)集上的每個評價。
2.3 “詞—索引”映射
另一個重要步驟是創(chuàng)建稱為“詞—索引”的映射,這個映射為數(shù)據(jù)集中每一個單詞分配一個唯一的整數(shù)值。在我所使用的數(shù)據(jù)集中,全部的正向和負向評論共包含18339個不同的單詞。因此“詞—索引”映射有相同數(shù)量的條目。這個數(shù)量被稱為詞匯數(shù)(vocabulary size)。
我得到的 “詞—索引”映射中的第一個和最后一個條目如下:
由于我們不能將字符串格式的數(shù)據(jù)輸入神經(jīng)網(wǎng)絡,因此為數(shù)據(jù)集中的單詞分配唯一整數(shù)值的步驟非常關鍵。通過“詞—索引”映射,我們可以使用整數(shù)代替字符來表示整個句子和評論??紤]以下評論:
使用”詞—索引”映射 , 可以用一個整數(shù)向量來表示這條評論,每一個整數(shù)表示映射中對應的單詞:
當然,神經(jīng)網(wǎng)絡既不能接受字符串,也不能接受單個整數(shù)值作為輸入。我們必須使用詞嵌入(word embedding)向量來代替。
詞嵌入是一種分布式的文本表示,這可能是深度學習方法在挑戰(zhàn)NLP問題上令人印象深刻的關鍵突破之一。詞嵌入實際上是一種用實值向量表示單詞的技術,通常具有數(shù)十或數(shù)百個維度。每個單詞被映射到一個特定的向量,向量值由神經(jīng)網(wǎng)絡學習。
與單詞的稀疏表示方式不同,詞嵌入不需成千上萬的維度。例如,我們可以使用詞嵌入技術把單詞“although”和“l(fā)ife”表示成十維向量:
although = [0.8 1.0 4.2 7.5 3.6]
life = [8.3 5.7 7.8 4.6 2.5 ]
表示數(shù)據(jù)集中單詞的全部向量組成一個大型矩陣,稱為嵌入矩陣(embedding-matrix)。該矩陣的行數(shù)表示詞嵌入的維數(shù),列數(shù)表示詞匯量,或者說數(shù)據(jù)集中不同單詞的個數(shù)。因此,這個矩陣的每一列表示數(shù)據(jù)集中每個單詞相應的的嵌入向量。
我們應如何從矩陣中找出單詞對應的列?此時我們需要參考詞—索引映射。假設你想查找單詞“although”的嵌入向量,根據(jù)單詞—索引映射,單詞“although”由數(shù)字2511表示。接下來,我們需要創(chuàng)建一個長度18339為的獨熱向量,這里的向量長度等于數(shù)據(jù)集中的單詞數(shù)量,向量的第2511位取值為1,其余為0。
通過對嵌入矩陣和獨熱編碼向量進行點積運算,我們得到矩陣中的第2511列,即為單詞“although”的嵌入向量。
這樣我們就可以將整個字符串段落或Netflix評論提供給LSTM。我們只需在單詞到索引映射中查找每個單詞的整數(shù)值,創(chuàng)建適當?shù)莫殶峋幋a向量并使用矩陣執(zhí)行點積。然后將評論逐字(矢量形式)饋送到LSTM網(wǎng)絡中。
到目前為止,你已經(jīng)了解了如何預處理數(shù)據(jù),以及如何將評論輸入LSTM網(wǎng)絡中?,F(xiàn)在,讓我們討論一下如何獲得給定評論的情感。
對于每一個時間步長t,將向量x(t)輸入LSTM網(wǎng)絡中,得到輸出向量y(t)。在不同的步長上進行此操作,直到輸入向量為x(n),n代表評論中全部單詞的長度。我們不妨假設n=20,直到輸入向量為x(n),LSTM模型輸出向量y(n)為止,全部20個向量中,每個向量都代表一定含義,但仍然不是我們所需要的評論中的情感。實際上,向量y是神經(jīng)網(wǎng)絡生成的對評論特征的編碼表示,這些特征在判斷情感時非常重要。
y(8)表示評論中前8個單詞的神經(jīng)網(wǎng)絡識別特征。另一方面,y(20)表示評論整體的特性。盡管只使用最后一個輸出向量y(20)足以進行情感判斷,但我發(fā)現(xiàn)如果使用y(0) - y(20)的全部向量來確定情感,結(jié)果會更加準確。為了使用全部向量,我們可以計算這些向量的均值向量。我們稱這個均值向量為y_mean。
現(xiàn)在,均值向量y_mean可以用編碼的方式來表示評論中的特征。我們需要在模型最后增加一個分類層,使用均指向量y_mean將評論劃分為正向情感類和負向情感類。在最終的分類層中,需要將均值向量y_mean和權重矩陣W相乘。
以上描述的情感分析過程已經(jīng)在我的GitHub repo上一個深度學習模型中實現(xiàn)。歡迎你來嘗試和復現(xiàn)。模型訓練完成后,可以對新的評論進行情感分析:
英語原文:
https://towardsdatascience.com/sentiment-analysis-with-deep-learning-62d4d0166ef6
想要繼續(xù)查看該篇文章相關鏈接和參考文獻?雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
點擊【在 Netflix 評論中做情感分析的深度學習模型】即可訪問!
今日資源推薦:MXNet李沐的深度學習教程《動手學深度學習》(有在線練習)
由 MXNet 創(chuàng)始人李沐大神、Aston Zhang 等人所著的交互式書籍《動手學深度學習》推出了在線預覽版,面向在校學生、工程師和研究人員,旨在幫助讀者從入門到深入、動手學習深度學習,即使是零基礎的讀者也完全適用。這本書是亞馬遜 MXNet 零基礎深度學習課程的重要組成部分,為此,亞馬遜團隊開發(fā)了 MXNet 的新前端 Gluon,課程內(nèi)容推薦使用 Gluon 進行開發(fā)。李沐表示,開設這門課程的初衷,是看到了目前剛開始接觸機器學習的學習者沒有很完善的參考資料的現(xiàn)狀,這門課程可以幫助他們從深度學習入門到最新最前沿的算法,從 0 開始通過交互式的代碼來講解每個算法和概念。
點擊鏈接獲?。?/span>https://ai.yanxishe.com/page/resourceDetail/642
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。