在 Netflix 評(píng)論中做情感分析的深度學(xué)習(xí)模型

 

在 Netflix 評(píng)論中做情感分析的深度學(xué)習(xí)模型

在這篇文章中,我將介紹情感分析的主題和怎樣實(shí)現(xiàn)一個(gè)可以識(shí)別和分類Netflix評(píng)論中人的感情的深度學(xué)習(xí)模型。
生意中的一個(gè)很重要的元素是了解客戶基本需求。那對(duì)于那些公司而言,去確切了解消費(fèi)者和客戶對(duì)于新和剛建立的產(chǎn)品或者服務(wù),最近方案和客服的看法也是很重要的。

情感分析是完成上述任務(wù)的方法之一

情感分析是自然語言處理(NLP)中的一個(gè)領(lǐng)域,它建立模型,試圖識(shí)別和分類語言表達(dá)中的屬性 e.g.:

  • 極性:如果發(fā)言者表達(dá)了積極或者消極的意見,
  • 主題:正在被討論的事情,
  • 意見持有者:表達(dá)這個(gè)觀點(diǎn)的人或者團(tuán)體。

在我們每天產(chǎn)生2.5萬億字節(jié)數(shù)據(jù)的世界里,情感分析已經(jīng)成為理解這些數(shù)據(jù)的關(guān)鍵工具。這使得公司能夠獲得關(guān)鍵的洞察力并自動(dòng)化所有類型的流程。

情感分析可以使得無結(jié)構(gòu)的信息,比如民眾關(guān)于產(chǎn)品、服務(wù)、品牌、政治和其他話題上的意見,自動(dòng)轉(zhuǎn)變?yōu)榻Y(jié)構(gòu)化的數(shù)據(jù)。這些數(shù)據(jù)對(duì)如市場分析、公共關(guān)系、產(chǎn)品意見、凈推薦值、產(chǎn)品反饋和顧客服務(wù)等商業(yè)應(yīng)用非常有用。

接下來,我將向你們展示如何使用深度學(xué)習(xí)模型對(duì) Netflix 評(píng)論進(jìn)行正向和負(fù)向的分類。這個(gè)模型會(huì)把全部評(píng)論作為輸入(每一個(gè)單詞),并且提供一個(gè)百分比的評(píng)分來檢測某個(gè)評(píng)論是在表達(dá)正向或負(fù)向的情緒。

我使用的數(shù)據(jù)集包含了大約5000條負(fù)向和5000條正向的評(píng)論。這里有5個(gè)數(shù)據(jù)集中的樣本,這些樣本在本文末也會(huì)在模型中做分類。

在 Netflix 評(píng)論中做情感分析的深度學(xué)習(xí)模型

本文所使用的深度模型+全部所需的代碼都能在此處找到。

下面先開始理論部分。

  1. 循環(huán)神經(jīng)網(wǎng)絡(luò)

循環(huán)神經(jīng)網(wǎng)絡(luò)(RNNs)是很受歡迎的模型,并且在很多NLP任務(wù)上已經(jīng)取得了很好的表現(xiàn)。
循環(huán)神經(jīng)網(wǎng)絡(luò)使用了序列信息,如文本。在傳統(tǒng)的前饋神經(jīng)網(wǎng)絡(luò)中,我們假設(shè)所有的輸入是彼此獨(dú)立的。但是對(duì)很多任務(wù)而言,這是很不好的想法。舉個(gè)例子,一句話有完整的語法結(jié)構(gòu)和順序,句子中每個(gè)詞都依賴于前一個(gè)詞。如果你想你的神經(jīng)網(wǎng)絡(luò)能夠?qū)W習(xí)到意義(或者我們案例中的情感),神經(jīng)網(wǎng)絡(luò)必須知道哪個(gè)詞按哪個(gè)順序出現(xiàn)。
循環(huán)神經(jīng)網(wǎng)絡(luò)被叫做循環(huán)是因?yàn)樗麄儗?duì)序列中的每個(gè)元素都執(zhí)行同樣的任務(wù),并且輸出是依賴于之前的計(jì)算。其他的方式去理解循環(huán)神經(jīng)網(wǎng)絡(luò)是它們有記憶,能夠獲取之前已經(jīng)計(jì)算過的信息。這里有一個(gè)經(jīng)典的循環(huán)神經(jīng)網(wǎng)絡(luò):
在 Netflix 評(píng)論中做情感分析的深度學(xué)習(xí)模型

圖1-循環(huán)神經(jīng)網(wǎng)絡(luò)架構(gòu)
 

x(t-1),x(t),x(t+1)是彼此依賴的輸入序列(例如句子中的單詞)。y(t_1),y(t),y(t + 1)是輸出。RNN的獨(dú)特之處在于,輸入x(t)的神經(jīng)元的當(dāng)前隱藏狀態(tài)h(t)的計(jì)算取決于先前輸入x(t-1)的先前隱藏狀態(tài)h(t-1)。Wxh和Whh是權(quán)重矩陣,其分別將輸入x(t)與隱藏層h(t)和h(t)與h(t-1)連接。通過這種方式,我們將神經(jīng)網(wǎng)絡(luò)的重復(fù)引入,可以將其視為先前輸入的記憶。

從理論上講,這種“vanilla”RNNs可以在任意長的序列中使用信息,但在實(shí)踐中,它們僅限于循環(huán)中的幾個(gè)步驟。

1.1LSTMs

長短時(shí)記憶網(wǎng)絡(luò)-通常簡稱為“LSTMs”一種特殊的RNN,能夠?qū)W習(xí)到長期依賴。LSTMs 與RNNs沒有根本不同的架構(gòu)形式,但是它融合了額外的組件。

在 Netflix 評(píng)論中做情感分析的深度學(xué)習(xí)模型

LSTM的關(guān)鍵是狀態(tài)單元C(t),即橫穿圖頂部的水平線。除了僅僅只使用隱藏狀態(tài)h(t)之外,單元狀態(tài)是額外的方式來存儲(chǔ)記憶。然而,與 “vanilla”RNN相比, C(t)使得LSTMs能夠在更長的序列上工作成為可能。

更重要的是,LSTMs 可以在單元狀態(tài)上刪除或者增加信息,嚴(yán)格地被稱為門的架構(gòu)約束。門是一種可以選擇地讓信息通過的方式。一個(gè)LSTM有三種門結(jié)構(gòu),來保護(hù)和控制單元狀態(tài)。

  • 遺忘門:在獲取之前的輸入x(t-1)的隱藏狀態(tài)h(t-1)后,遺忘門幫助我們決定該從h(t-1)中刪除什么,只保留相關(guān)信息。
  • 輸入門:在輸入門中,我們決定從當(dāng)前輸入x(t)添加內(nèi)容到我們當(dāng)前單元狀態(tài)C(t)。
  • 輸出門:正如名字所說一樣,輸出門決定從當(dāng)前單元狀態(tài)C(t)輸出什么到下一個(gè)C(t+1)。對(duì)于語言模型例子而言,因?yàn)樗荒芸匆娨粋€(gè)主語,它可能希望看到一個(gè)和動(dòng)詞有關(guān)的信息,來控制接下來要發(fā)生的情況。舉個(gè)例子,它可能輸出主語是單數(shù)還是復(fù)數(shù),這樣我們就可以知道接下來的動(dòng)詞應(yīng)該變成什么形式。    

每一種狀態(tài)的背后都是獨(dú)立的神經(jīng)單元。可以想象,這將會(huì)使得LSTMs變得相當(dāng)復(fù)雜。在這一點(diǎn)上,我不會(huì)繼續(xù)深入講更多關(guān)于LSTMs的細(xì)節(jié)。

  2.預(yù)處理

在我們用這些評(píng)論作為循環(huán)神經(jīng)網(wǎng)絡(luò)的輸入之前,對(duì)這些數(shù)據(jù)做一些預(yù)處理是有必要的。這里我們的主要目的是減小觀測空間。

2.1單詞的統(tǒng)一書寫

考慮像"Somethiing"和“something”這些單詞,對(duì)我們?nèi)藖碚f,這些詞有著同樣的意思,它們之間唯一的區(qū)別是第一個(gè)字母是大寫,因?yàn)樗蛟S是句子中的第一個(gè)詞。但是對(duì)于神經(jīng)網(wǎng)絡(luò)而言,由于不同的書寫,這些單詞將有(至少在開始的時(shí)候)不同的意思。只有在訓(xùn)練階段,神經(jīng)網(wǎng)絡(luò)才可能學(xué)習(xí)到或者學(xué)習(xí)不到識(shí)別這些詞意思相同。我們目的就是避免這些錯(cuò)誤理解。

因此,預(yù)處理的第一步就是把所有字母都變成小寫字母。

2.2 刪除特殊字符

像. , ! ? '等等特殊字符,不能對(duì)一段評(píng)價(jià)的情感分析起到促進(jìn)作用,因此可以被刪除。

最后結(jié)果

考慮以下未處理的評(píng)價(jià)例子:

在 Netflix 評(píng)論中做情感分析的深度學(xué)習(xí)模型

我們做完上面所說的預(yù)處理步驟后,這個(gè)評(píng)價(jià)例子看起來如下所示:

在 Netflix 評(píng)論中做情感分析的深度學(xué)習(xí)模型

預(yù)處理將會(huì)應(yīng)用于數(shù)據(jù)集上的每個(gè)評(píng)價(jià)。

2.3 “詞—索引”映射

另一個(gè)重要步驟是創(chuàng)建稱為“詞—索引”的映射,這個(gè)映射為數(shù)據(jù)集中每一個(gè)單詞分配一個(gè)唯一的整數(shù)值。在我所使用的數(shù)據(jù)集中,全部的正向和負(fù)向評(píng)論共包含18339個(gè)不同的單詞。因此“詞—索引”映射有相同數(shù)量的條目。這個(gè)數(shù)量被稱為詞匯數(shù)(vocabulary size)。

我得到的 “詞—索引”映射中的第一個(gè)和最后一個(gè)條目如下:  

在 Netflix 評(píng)論中做情感分析的深度學(xué)習(xí)模型

由于我們不能將字符串格式的數(shù)據(jù)輸入神經(jīng)網(wǎng)絡(luò),因此為數(shù)據(jù)集中的單詞分配唯一整數(shù)值的步驟非常關(guān)鍵。通過“詞—索引”映射,我們可以使用整數(shù)代替字符來表示整個(gè)句子和評(píng)論。考慮以下評(píng)論:

在 Netflix 評(píng)論中做情感分析的深度學(xué)習(xí)模型

使用”詞—索引”映射  , 可以用一個(gè)整數(shù)向量來表示這條評(píng)論,每一個(gè)整數(shù)表示映射中對(duì)應(yīng)的單詞:

在 Netflix 評(píng)論中做情感分析的深度學(xué)習(xí)模型

  3.詞嵌入

當(dāng)然,神經(jīng)網(wǎng)絡(luò)既不能接受字符串,也不能接受單個(gè)整數(shù)值作為輸入。我們必須使用詞嵌入(word embedding)向量來代替。 

詞嵌入是一種分布式的文本表示,這可能是深度學(xué)習(xí)方法在挑戰(zhàn)NLP問題上令人印象深刻的關(guān)鍵突破之一。詞嵌入實(shí)際上是一種用實(shí)值向量表示單詞的技術(shù),通常具有數(shù)十或數(shù)百個(gè)維度。每個(gè)單詞被映射到一個(gè)特定的向量,向量值由神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)。 

與單詞的稀疏表示方式不同,詞嵌入不需成千上萬的維度。例如,我們可以使用詞嵌入技術(shù)把單詞“although”和“life”表示成十維向量:

although = [0.8 1.0 4.2 7.5 3.6] life = [8.3 5.7 7.8 4.6 2.5 ] 

表示數(shù)據(jù)集中單詞的全部向量組成一個(gè)大型矩陣,稱為嵌入矩陣(embedding-matrix)。該矩陣的行數(shù)表示詞嵌入的維數(shù),列數(shù)表示詞匯量,或者說數(shù)據(jù)集中不同單詞的個(gè)數(shù)。因此,這個(gè)矩陣的每一列表示數(shù)據(jù)集中每個(gè)單詞相應(yīng)的的嵌入向量。  

我們應(yīng)如何從矩陣中找出單詞對(duì)應(yīng)的列?此時(shí)我們需要參考詞—索引映射。假設(shè)你想查找單詞“although”的嵌入向量,根據(jù)單詞—索引映射,單詞“although”由數(shù)字2511表示。接下來,我們需要?jiǎng)?chuàng)建一個(gè)長度18339為的獨(dú)熱向量,這里的向量長度等于數(shù)據(jù)集中的單詞數(shù)量,向量的第2511位取值為1,其余為0。  

通過對(duì)嵌入矩陣和獨(dú)熱編碼向量進(jìn)行點(diǎn)積運(yùn)算,我們得到矩陣中的第2511列,即為單詞“although”的嵌入向量。

在 Netflix 評(píng)論中做情感分析的深度學(xué)習(xí)模型

這樣我們就可以將整個(gè)字符串段落或Netflix評(píng)論提供給LSTM。我們只需在單詞到索引映射中查找每個(gè)單詞的整數(shù)值,創(chuàng)建適當(dāng)?shù)莫?dú)熱編碼向量并使用矩陣執(zhí)行點(diǎn)積。然后將評(píng)論逐字(矢量形式)饋送到LSTM網(wǎng)絡(luò)中。

在 Netflix 評(píng)論中做情感分析的深度學(xué)習(xí)模型

  
4.獲得評(píng)論情感

到目前為止,你已經(jīng)了解了如何預(yù)處理數(shù)據(jù),以及如何將評(píng)論輸入LSTM網(wǎng)絡(luò)中。現(xiàn)在,讓我們討論一下如何獲得給定評(píng)論的情感。 

對(duì)于每一個(gè)時(shí)間步長t,將向量x(t)輸入LSTM網(wǎng)絡(luò)中,得到輸出向量y(t)。在不同的步長上進(jìn)行此操作,直到輸入向量為x(n),n代表評(píng)論中全部單詞的長度。我們不妨假設(shè)n=20,直到輸入向量為x(n),LSTM模型輸出向量y(n)為止,全部20個(gè)向量中,每個(gè)向量都代表一定含義,但仍然不是我們所需要的評(píng)論中的情感。實(shí)際上,向量y是神經(jīng)網(wǎng)絡(luò)生成的對(duì)評(píng)論特征的編碼表示,這些特征在判斷情感時(shí)非常重要。  

y(8)表示評(píng)論中前8個(gè)單詞的神經(jīng)網(wǎng)絡(luò)識(shí)別特征。另一方面,y(20)表示評(píng)論整體的特性。盡管只使用最后一個(gè)輸出向量y(20)足以進(jìn)行情感判斷,但我發(fā)現(xiàn)如果使用y(0) – y(20)的全部向量來確定情感,結(jié)果會(huì)更加準(zhǔn)確。為了使用全部向量,我們可以計(jì)算這些向量的均值向量。我們稱這個(gè)均值向量為y_mean。  

現(xiàn)在,均值向量y_mean可以用編碼的方式來表示評(píng)論中的特征。我們需要在模型最后增加一個(gè)分類層,使用均指向量y_mean將評(píng)論劃分為正向情感類和負(fù)向情感類。在最終的分類層中,需要將均值向量y_mean和權(quán)重矩陣W相乘。

以上描述的情感分析過程已經(jīng)在我的GitHub repo上一個(gè)深度學(xué)習(xí)模型中實(shí)現(xiàn)。歡迎你來嘗試和復(fù)現(xiàn)。模型訓(xùn)練完成后,可以對(duì)新的評(píng)論進(jìn)行情感分析:  

在 Netflix 評(píng)論中做情感分析的深度學(xué)習(xí)模型

英語原文:

https://towardsdatascience.com/sentiment-analysis-with-deep-learning-62d4d0166ef6
想要繼續(xù)查看該篇文章相關(guān)鏈接和參考文獻(xiàn)?雷鋒網(wǎng)雷鋒網(wǎng)(公眾號(hào):雷鋒網(wǎng))雷鋒網(wǎng)

點(diǎn)擊【在 Netflix 評(píng)論中做情感分析的深度學(xué)習(xí)模型】即可訪問!

今日資源推薦:MXNet李沐的深度學(xué)習(xí)教程《動(dòng)手學(xué)深度學(xué)習(xí)》(有在線練習(xí))

由 MXNet 創(chuàng)始人李沐大神、Aston Zhang 等人所著的交互式書籍《動(dòng)手學(xué)深度學(xué)習(xí)》推出了在線預(yù)覽版,面向在校學(xué)生、工程師和研究人員,旨在幫助讀者從入門到深入、動(dòng)手學(xué)習(xí)深度學(xué)習(xí),即使是零基礎(chǔ)的讀者也完全適用。這本書是亞馬遜 MXNet 零基礎(chǔ)深度學(xué)習(xí)課程的重要組成部分,為此,亞馬遜團(tuán)隊(duì)開發(fā)了 MXNet 的新前端 Gluon,課程內(nèi)容推薦使用 Gluon 進(jìn)行開發(fā)。李沐表示,開設(shè)這門課程的初衷,是看到了目前剛開始接觸機(jī)器學(xué)習(xí)的學(xué)習(xí)者沒有很完善的參考資料的現(xiàn)狀,這門課程可以幫助他們從深度學(xué)習(xí)入門到最新最前沿的算法,從 0 開始通過交互式的代碼來講解每個(gè)算法和概念。

點(diǎn)擊鏈接獲取:https://ai.yanxishe.com/page/resourceDetail/642

來源 | 雷鋒網(wǎng)

原標(biāo)題 | Sentiment Analysis with Deep Learning of Netflix Reviews
作者 | Artem Oppermann
譯者 | ybNero(電子科技大學(xué))、Devin_ABCDEF(汕頭大學(xué))、夕陽紅老年萬花(數(shù)據(jù)分析師)
編輯 | 王立魚
 

Share this article:

Facebook
Twitter
LinkedIn
WhatsApp