當前位置:
首頁 > 科技 > 想100%了解消費者?用Netflix評論識別人類情感

想100%了解消費者?用Netflix評論識別人類情感

全文共3540字,預計學習時長7分鐘

本文介紹了情感分析這個主題以及如何應用一個深度學習模型。該模型可在Netflix評論中識別和分類人類的情感。

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

情感分析是完成這項必要任務的一種方法。

情感分析屬於自然語言處理(NLP)領域,它構建了試圖識別和分類表達式屬性的模型,例如:

· 極性:如果發言者表達了積極或消極的意見。

· 主題:正在談論的事情。

· 意見持有人:表達意見的個人或實體。

在每天生成2.5個五萬億位元組數據的世界中,情緒分析已成為理解數據的關鍵工具。這使得公司能夠獲得關鍵的見解並將所有類型的流程自動化。

情感分析可以自動地將非結構化信息轉換為關於產品、服務、品牌,或任何人們可以表達意見的話題的公眾意見的結構化數據。這些數據對於營銷分析,公共關係,產品評論,網路發起人評分,產品反饋和客戶服務等商業應用非常有用。

在下文中,我們將展示如何將Netflix評論分類為正面或負面的深度學習模型。該模型把所有的評論作為輸入(逐字逐句),並提供百分比評級,以檢查評論是否傳達了積極或消極的情感。

我們使用的數據集含大約5000個負面和5000個正面評論。 以下是來自數據集的5個樣本評論,在文章的最後將根據深度學習模型進行分類:

「The film is a hoot and is just as good if not better than much of what s on saturday morning tv, especially the pseudo educational stuff we all can』t stand.。」

「The things this movie tries to get the audience to buy just won』t fly with most intelligent viewers.」

「Although life or something like it is very much in the mold of feel good movies, the cast and director stephen herek』s polished direction pour delightfully piquant wine from aged bottles.」 「This is the case of a pregnant premise being wasted by a script that takes few chances and manages to insult the intelligence of everyone in the audience.」

「One of the finest most humane and important holocaust movies ever made.」

(深度學習模型 所有必要數據:https://github.com/artem-oppermann/Sentiment-Analysis-of-Netflix-Reviews)

讓我們從理論知識開始吧!

1. 遞歸神經網路

遞歸神經網路(RNN)是在許多NLP任務中表現出很大前景的流行模型。

RNN使用文本等順序信息。在「傳統」前饋神經網路中,我們假設所有輸入彼此獨立。但對於許多任務而言,這樣並不好。例如,一個句子具有明確的語法結構和順序,其中每個單詞取決於前一個單詞。如果你希望你的神經網路清楚這個含義(或我們例子中的情感),網路必須知道哪些單詞以哪種順序出現。

RNN之所以被稱為循環,因為它們對序列的每個元素都執行相同的任務,輸出依賴於先前的計算。考慮RNN的另一種方式是它們具有「記憶」,它能捕獲到目前為止已經計算的信息。這是典型的RNN的結構:

圖1.遞歸神經網路架構

x(t-1),x(t),x(t !)是彼此依賴的順序輸入(例如句子中的單詞)。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」RNN可以在任意長的序列中使用信息,但在實踐中,它們僅限於回顧幾個步驟。

這就是LSTM派上用場的地方。

1. 1 LSTMs

長短期內存網路——通常被稱為「LSTM」——是一種特殊的RNN,能夠學習長期依賴性。LSTM與RNN並沒有完全不同的架構,但它們各自也包含了額外的組件。

LSTM的關鍵是單元狀態C(t),即貫穿圖頂部的水平線。除了僅使用隱藏狀態h(t)之外,單元狀態是存儲存儲器的另一種方式。然而,C(t)使得LSTM可以使用vanilla RNN相反的更長序列。

此外,LSTM能夠在單元里移除或添加信息狀態,由稱為門的結構來進行調節。門是一種可選擇通過信息的方式。 LSTM具有三個這樣的門,用於保護和控制單元狀態。

· 忘記門:在獲得前一個輸入x(t-1)的隱藏狀態h(t-1)之後,忘記門幫助我們決定必須刪除h(t-1)狀態中的什麼內容,從而只保留相關的內容。

· 輸入門:在輸入門中,我們決定將當前輸入x(t)中的新信息添加到我們當前的單元狀態C(t)中。

· 輸出門:顧名思義,輸出門決定從當前單元狀態C(t)輸出到下一個C(t 1)的輸出。對於語言模型的例子來說,由於它只是看到一個主題,它可能想要輸出與動詞相關的信息,以防接下來會發生什麼。例如,它可以輸出主語是單數還是複數,這樣我們就知道接下來如果是單數動詞,那麼動詞應該變成什麼形式。

每個狀態的背後都是獨立的神經網路。可以想像,這使LSTM變得非常複雜。

2. 預處理

在我們將這些評論用作於遞歸神經網路的輸入之前,需要對數據進行一些預處理。我們的主要目的是縮小觀察空間。

2.1 統一單詞的拼寫

想想諸如「Something」和「something」之類的詞。對我們來說,這些詞語具有相同的含義,它們之間唯一的區別是第一個詞是大寫的,因為它可能是句子中的第一個詞。

但是對於神經網路來說,由於它們的拼寫不同,這些單詞(至少在開始時)會有不同的含義。只有在訓練期間,神經網路才能夠學會或不學會識別這些詞的含義是否相同。我們的目的是防止這種誤解。

因此,預處理的第一步是將所有單詞設為小寫單詞。

2.2 刪除特殊字元

諸如。,!? "等的特殊字元不會影響評論的情感,因此可以刪除。

最終結果

請看以下未經處理的評論示例:

「Although life or something like it is very much in the mold of feel good movies, the cast and director stephen herek』s polished direction pour delightfully piquant wine from aged bottles.」

在我們執行上述預處理步驟之後,評論示例如下所示:

「although life or something like it is very much in the mold of feel good movies the cast and director stephen hereks polished direction pour delightfully piquant wine from aged bottles」

預處理應用於數據集中的每個評論。

2.3 Word-To-Index

另一個主要步驟是創建一個所謂的Word-To-Index映射,它為數據集中的每個單詞分配一個唯一的整數值。我在該項目中使用的包含所有正面和負面評論的數據集由18339個獨特單片語成。因此,word-to-index引映射具有相同數量的條目。這個數字也稱為辭彙量大小。

我們獲得的word-to-index映射中的第一個和最後一個條目如下所示:

為數據集中的單詞分配唯一整數的這一步驟至關重要,因為我們無法將字元串數據輸入到神經網路。相反,單詞到索引允許我們使用整數來表示整個句子和評論。請看以下評論:

「這部電影試圖讓觀眾購買的東西,在大多數聰明的觀眾中是行不通的。」

使用word-to-index映射,可以用整數數組來表示評論,其中每個整數根據映射表示一個單詞:

[0, 5094, 147, 81, 1269, 5, 532, 0, 1303, 5, 1835, 652, 236, 1101, 125, 188, 712, 855]

3. Word嵌入

當然,神經網路不能將字元串或單個整數值作為輸入。因此,我們必須使用Word嵌入。

Word嵌入是文本的分散式表示,這可能是深度學習方法在挑戰NLP問題上令人印象深刻的關鍵突破之一。Word嵌入實際上是一類技術,其中單個單詞由實值向量表示,通常具有數十或數百個維度。每個字被映射到一個特定向量,並且向量值由神經網路學習。

這與稀疏字表示所需的數千或數百萬維度形成對比,例如單熱編碼。例如,我們可以將「雖然」和「生命」這些詞語嵌入為10維向量:

雖然 = [0.8 1.0 4.2 7.5 3.6]

生命 = [8.3 5.7 7.8 4.6 2.5 ]

表示數據集中表示一個單詞的向量都是從一個被稱為嵌入矩陣的大矩陣中獲得的。此矩陣的行數表示單詞嵌入的維度,列數表示數據集中的辭彙量大小或唯一單詞的數量。因此,該矩陣的每列表示數據集中唯一單詞的嵌入向量。

我們如何知道哪一列代表哪個詞?這是我們要使用word-to-index映射的地方。假設你想得到單詞「雖然」的嵌入向量,根據word-to-index的映射,這個單詞由數字2511表示。在下一步中,需要創建一個熱編碼的向量,大小為18339(數據集中的單詞數),其中除了第2511條目的值為1,其它每個條目都為0。

通過在嵌入矩陣和單熱編碼矢量之間進行點積,我們得到矩陣的第2511列,即單詞「雖然」的嵌入向量。

這樣就可以將整個字元串段落或Netflix評論提供給LSTM。我們只需在word-to-index映射中查找每個單詞的整數值,創建適當的單熱編碼向量並使用矩陣執行點積。然後將評論逐字(矢量與矢量)饋送到LSTM網路中。

4. 獲得評論的情感

到目前為止,你已經了解了如何預處理數據以及如何在LSTM網路中提供評論。現在,讓我們討論如何最終獲得給定評論的情感。

對於每個時間步長t,LSTM網路接收輸入矢量x(t),其導致輸出矢量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和另一個權重矩陣W之間的點積。

剛才描述的情感分析過程是在GitHub中的深度學習模型中操作實現的。在開發模型之後,你可以對尚未看到的評論進行情感分析:

測試樣品:

評論: 「the film is a hoot and is just as good if not better thanmuch of whats on saturday morning tv especially the pseudo educational stuff we all cant stand」

pos. sentiment: 0.96 %neg. sentiment: 0.04 %

評論: 「the things this movie tries to get the audience to buy just wont fly with most intelligent viewers」

pos. sentiment: 0.11 %neg. sentiment: 0.89 %

評論: 「although life or something like it is very much in the mold of feel good movies the cast and director stephen hereks polished direction pour delightfully piquant wine from aged bottles」

pos. sentiment: 0.97 %neg. sentiment: 0.03 %

評論: 「this is the case of a pregnant premise being wasted by a script that takes few chances and manages to insult the intelligence of everyone in the audience」

pos. sentiment: 0.02 %neg. sentiment: 0.98 %

留言 點贊 發個朋友圈

我們一起分享AI學習與發展的乾貨

編譯組:張怡雯、趙璇

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 讀芯術 的精彩文章:

西北大學:RNN語言模型的重要訓練數據抽樣
今日芯聲:小米深陷缺貨風波,雷軍要去工廠擰螺絲保證產量?

TAG:讀芯術 |