吳恩達深度學習筆記(127)

情感分類(Sentiment Classification)

情感分類任務就是看一段文本,然後分辨這個人是否喜歡他們在討論的這個東西

,這是NLP中最重要的模塊之一,經常用在許多應用中。

情感分類一個最大的挑戰就是可能標記的訓練集沒有那麼多,但是有了詞嵌入,即使只有中等大小的標記的訓練集,你也能構建一個不錯的情感分類器,讓我們看看是怎麼做到的。

吳恩達深度學習筆記(127) | NLP | 情感分類

這是一個情感分類問題的一個例子(上圖所示),輸入x是一段文本,而輸出y是你要預測的相應情感。比如說是一個餐館評價的星級,

比如有人說,

"The dessert is excellent."(甜點很棒),並給出了四星的評價;

"Service was quite slow"(服務太慢),兩星評價;

"Good for a quick meal but nothing special"(適合吃快餐但沒什麼亮點),三星評價;

還有比較刁鑽的評論,"Completely lacking in good taste, good service and good ambiance."(完全沒有好的味道,好的服務,好的氛圍),給出一星評價。

如果你能訓練一個從x到y的映射,基於這樣的標記的數據集,那麼你就可以用來蒐集大家對你運營的餐館的評價。

一些人可能會把你的餐館信息放到一些社交媒體上,Twitter、Facebook、Instagram或者其他的社交媒體,如果你有一個情感分類器,那麼它就可以看一段文本然後分析出這個人對你的餐館的評論的情感是正面的還是負面的,這樣你就可以一直記錄是否存在一些什麼問題,或者你的餐館是在蒸蒸日上還是每況愈下。

情感分類一個最大的挑戰就是可能標記的訓練集沒有那麼多。對於情感分類任務來說,訓練集大小從10,000到100,000個單詞都很常見,甚至有時會小於10,000個單詞,採用了詞嵌入能夠帶來更好的效果,尤其是隻有很小的訓練集時。

吳恩達深度學習筆記(127) | NLP | 情感分類

接下來你可以這樣做,這節我們會講幾個不同的算法。

這是一個簡單的情感分類的模型,假設有一個句子"dessert is excellent",然後在詞典裡找這些詞,我們通常用10,000個詞的詞彙表。我們要構建一個分類器能夠把它映射成輸出四個星,給定這四個詞("dessert is excellent"),我們取這些詞,找到相應的one-hot向量,所以這裡(上圖編號1所示)就是o_8928,乘以嵌入矩陣E,E可以從一個很大的文本集裡學習到,比如它可以從一億個詞或者一百億個詞裡學習嵌入,然後用來提取單詞the的嵌入向量e_8928,對dessert、is、excellent做同樣的步驟。

如果在很大的訓練集上訓練E,比如一百億的單詞,這樣你就會獲得很多知識,甚至從有些不常用的詞中獲取,然後應用到你的問題上,即使你的標記數據集裡沒有這些詞。

我們可以這樣構建一個分類器,取這些向量(上圖編號2所示),比如是300維度的向量。然後把它們求和或者求平均,這裡我畫一個大點的平均值計算單元(上圖編號3所示),你也可以用求和或者平均。這個單元(上圖編號3所示)會得到一個300維的特徵向量,把這個特徵向量送進softmax分類器,然後輸出^y。這個softmax能夠輸出5個可能結果的概率值,從一星到五星,這個就是5個可能輸出的softmax結果用來預測y的值。

這裡用的平均值運算單元,這個算法適用於任何長短的評論,因為即使你的評論是100個詞長,你也可以對這一百個詞的特徵向量求和或者平均它們,然後得到一個表示一個300維的特徵向量表示,然後把它送進你的softmax分類器,所以這個平均值運算效果不錯。它實際上會把所有單詞的意思給平均起來,或者把你的例子中所有單詞的意思加起來就可以用了。

這個算法有一個問題就是沒考慮詞序,尤其是這樣一個負面的評價,"Completely lacking in good taste, good service, and good ambiance.",但是good這個詞出現了很多次,有3個good,如果你用的算法跟這個一樣,忽略詞序,僅僅把所有單詞的詞嵌入加起來或者平均下來,你最後的特徵向量會有很多good的表示,你的分類器很可能認為這是一個好的評論,儘管事實上這是一個差評,只有一星的評價。

吳恩達深度學習筆記(127) | NLP | 情感分類

我們有一個更加複雜的模型,不用簡單的把所有的詞嵌入都加起來,我們用一個RNN來做情感分類。我們這樣做,首先取這條評論,"Completely lacking in good taste, good service, and good ambiance.",找出每一個one-hot向量,這裡我跳過去每一個one-hot向量的表示。用每一個one-hot向量乘以詞嵌入矩陣E,得到詞嵌入表達e,然後把它們送進RNN裡。RNN的工作就是在最後一步(上圖編號1所示)計算一個特徵表示,用來預測^y,這是一個多對一的網絡結構的例子,我們之前已經見過了。

有了這樣的算法,考慮詞的順序效果就更好了,它就能意識到"things are lacking in good taste",這是個負面的評價,“not good”也是一個負面的評價。而不像原來的算法一樣,只是把所有的加在一起得到一個大的向量,根本意識不到“not good”和 “good”不是一個意思,"lacking in good taste"也是如此,等等。

如果你訓練一個這樣的算法,最後會得到一個很合適的情感分類的算法。由於你的詞嵌入是在一個更大的數據集裡訓練的,這樣效果會更好,更好的泛化一些沒有見過的新的單詞。比如其他人可能會說,"Completely absent of good taste, good service, and good ambiance.",即使absent這個詞不在標記的訓練集裡,如果是在一億或者一百億單詞集裡訓練詞嵌入,它仍然可以正確判斷,並且泛化的很好,甚至這些詞是在訓練集中用於訓練詞嵌入的,但是可以不在專門用來做情感分類問題的標記的訓練集中。

以上就是情感分類的問題,我希望你能大體瞭解。一旦你學習到或者從網上下載詞嵌入,你就可以很快構建一個很有效的NLP系統。


分享到:


相關文章: