2.9 情感分类-深度学习第五课《序列模型》-Stanford吴恩达教授
情感分類 (Sentiment Classification)
情感分類任務就是看一段文本,然后分辨這個人是否喜歡他們在討論的這個東西,這是NLP中最重要的模塊之一,經常用在許多應用中。情感分類一個最大的挑戰就是可能標記的訓練集沒有那么多,但是有了詞嵌入,即使只有中等大小的標記的訓練集,你也能構建一個不錯的情感分類器,讓我們看看是怎么做到的。
這是一個情感分類問題的一個例子(上圖所示),輸入 xxx 是一段文本,而輸出 yyy 是你要預測的相應情感。比如說是一個餐館評價的星級,
比如有人說,“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.”(完全沒有好的味道,好的服務,好的氛圍),給出一星評價。
如果你能訓練一個從 xxx 到 yyy 的映射,基于這樣的標記的數據集,那么你就可以用來搜集大家對你運營的餐館的評價。一些人可能會把你的餐館信息放到一些社交媒體上,Twitter、Facebook、Instagram或者其他的社交媒體,如果你有一個情感分類器,那么它就可以看一段文本然后分析出這個人對你的餐館的評論的情感是正面的還是負面的,這樣你就可以一直記錄是否存在一些什么問題,或者你的餐館是在蒸蒸日上還是每況愈下。
情感分類一個最大的挑戰就是可能標記的訓練集沒有那么多。對于情感分類任務來說,訓練集大小從10,000到100,000個單詞都很常見,甚至有時會小于10,000個單詞,采用了詞嵌入能夠帶來更好的效果,尤其是只有很小的訓練集時。
接下來你可以這樣做,這節我們會講幾個不同的算法。這是一個簡單的情感分類的模型,假設有一個句子"dessert is excellent",然后在詞典里找這些詞,我們通常用10,000個詞的詞匯表。我們要構建一個分類器能夠把它映射成輸出四個星,給定這四個詞(“dessert is excellent”),我們取這些詞,找到相應的one-hot向量,所以這里(上圖編號1所示)就是 O8928O_{8928}O8928? ,乘以嵌入矩陣 EEE , EEE 可以從一個很大的文本集里學習到,比如它可以從一億個詞或者一百億個詞里學習嵌入,然后用來提取單詞the的嵌入向量 e8928e_{8928}e8928? ,對dessert、is、excellent做同樣的步驟。
如果在很大的訓練集上訓練 EEE ,比如一百億的單詞,這樣你就會獲得很多知識,甚至從有些不常用的詞中獲取,然后應用到你的問題上,即使你的標記數據集里沒有這些詞。我們可以這樣構建一個分類器,取這些向量(上圖編號2所示),比如是300維度的向量。然后把它們求和或者求平均,這里我畫一個大點的平均值計算單元(上圖編號3所示),你也可以用求和或者平均。這個單元(上圖編號3所示)會得到一個300維的特征向量,把這個特征向量送進softmax分類器,然后輸出 y^\hat{y}y^? 。這個softmax能夠輸出5個可能結果的概率值,從一星到五星,這個就是5個可能輸出的softmax結果用來預測 yyy 的值。
這里用的平均值運算單元,這個算法適用于任何長短的評論,因為即使你的評論是100個詞長,你也可以對這一百個詞的特征向量求和或者平均它們,然后得到一個表示一個300維的特征向量表示,然后把它送進你的softmax分類器,所以這個平均值運算效果不錯。它實際上會把所有單詞的意思給平均起來,或者把你的例子中所有單詞的意思加起來就可以用了。
這個算法有一個問題就是沒考慮詞序,尤其是這樣一個負面的評價,“Completely lacking in good taste, good service, and good ambiance.”,但是good這個詞出現了很多次,有3個good,如果你用的算法跟這個一樣,忽略詞序,僅僅把所有單詞的詞嵌入加起來或者平均下來,你最后的特征向量會有很多good的表示,你的分類器很可能認為這是一個好的評論,盡管事實上這是一個差評,只有一星的評價。
我們有一個更加復雜的模型,不用簡單的把所有的詞嵌入都加起來,我們用一個RNN來做情感分類。我們這樣做,首先取這條評論,“Completely lacking in good taste, good service, and good ambiance.”,找出每一個one-hot向量,這里我跳過去每一個one-hot向量的表示。用每一個one-hot向量乘以詞嵌入矩陣 EEE ,得到詞嵌入表達 eee ,然后把它們送進RNN里。RNN的工作就是在最后一步(上圖編號1所示)計算一個特征表示,用來預測 y^\hat{y}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系統。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的2.9 情感分类-深度学习第五课《序列模型》-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.8 GloVe词向量-深度学习第五课
- 下一篇: 2.10 词嵌入除偏-深度学习第五课《序