以CNN(卷積神經網絡)為例做情感分類(二分類)


    我是在來到NLP實驗室才接觸的深度學習,我們實驗室入門深度學習的門檻(可以說門檻吧),是寫一個分類器,在剛開始的時候自己也是看了很多的文檔以及我BOSS的代碼,啃了好久,一直到現在接觸了很多的任務,才慢慢的算是正式入門了。也提醒正在鑽研深度學習的你,多做,多思考!下面我就以CNN作為模型來做一個情感分類(在這里是二分類,因為涉及情感有兩個,0表示消極,1表示積極)。

    假如我是選取5句話(5句話好畫圖和舉例)作為一個batch(也就是一個批次,通俗來講就是在整個大文件中選取一部分句子做一個batch一起過模型),如下:(數據格式就是句子標簽(金標)

  1. the film is strictly routine.|||0
  2. too bad.|||0
  3. a fun ride.|||1
  4. lurid and less than lucid work .|||0
  5. it 's worth taking the kids to .|||1

    我們的任務是根據所給的句子和金標去訓練模型,然后再將新的句子(測試數據)放進模型中來預測這個句子的情感,再將預測值和實際的金標值放在一起算出誤差,再反向傳播更新參數,不斷調整模型使之能夠達到最好的預測效果。

    分類的步驟是:1.數據處理。就是將每個句子轉化成向量矩陣去過模型,怎么轉化呢?看上面所給出的五句話,每句話長度是不一致的,所以我們先找出每個batch(批次)中最長的句子,根據它的長度構建feature map,其他短句子不足的地方用pad填充(你會在建詞典的時候明白pad在詞典中的唯一標識為1)假設這些句子都在詞典中。最長的句子是6(即6個單詞),下面構建feature map:(圖片是在wps上畫好截下來的)

 

    以第一句話為例建立feature map,可以看到這句話是五個單詞,不夠6個,就用<pad>進行了填充,那小格格表示的是每個單詞的向量表示,初始化幾維就是幾維。在這里假設10維(具體數據怎么處理,請參考具體代碼)其余的4個句子也是如此,都是6行10列的矩陣(短句子用pad填充,同理)。

    2.接下來就是過模型。假設你設置的filter_size = 1,2,3(表示定義了三種類型的卷積核((1,dim),(2,dim), (3,dim)這里的dim就是詞向量的維度,在這里我設置的為10) filter_num = 5(是每種卷積核的數量),下邊分別用(1,10),(2,10),(3,10)進行卷積:

    用紅色表示(1,10)卷積核卷積:(只顯示出第一步,一次走一步,接下來卷積第二個詞,第三個詞,以此類推...)

最后得到的是一個6*1的列向量:

再用(2,10)的卷積核去卷積:

一次往下移動兩個,步長為1(即交叉),可得到一個5*1的列向量:

用(3,10)卷積核進行卷積:

最后得到一個4*1的列向量:

因為這三種卷積核各5個,最后一個句子的feature map 經過這三個卷積核卷積得到的輸出分別是6*5,  5*5,  4*5,(單詞個數*單詞維度),然后再經過一個maxpooling層(作用是:找出這一句話中最有信息量的一個單詞,這個單詞最具有代表性)所以這個句子的三個特征經過maxpooling后變成1*5, 1*5 ,  1*5 ,這樣就可以將三個特征cat在一起了(這樣特征信息越多,模型學習的越細致)經過maxpooling層之后輸出的結果就為1*15,總共5句話,每句話都是1*15,這些就組成了一個5*15的矩陣,最后過一個線性層,輸出的結果就是5*n的矩陣,這個n 就是您定義的幾分類(一般情況下,最后一個輸出層的節點個數與分類任務的目標數相等),就比如剛開始說的二分類,最后會的出5*2的一個矩陣。

    神經網絡的原始輸出不是一個概率值,實質上只是輸入的數值做了復雜的加權和與非線性處理之后的一個值而已,那么如何將這個輸出變為概率分布?這就是Softmax層的作用。下面我推薦一個博客:看這里哦,關於softmax層(這一作用就是在模型求出預測值之后,和金標比較計算交叉熵損失函數的時候應用的)的介紹,寫的非常詳細,很容易懂,一定要看下,多借鑒才能更好的理解。

 

    如果對上邊的卷積用到的conv2d()函數不太清楚的話,請參考博客:here  ,這里邊參數的意思要搞懂,還有要注意這是一個4維的Tensor,在輸入句子特征圖之前,要進行變換成4維(具體還是看代碼吧)。多動手,多思考,才能掌握的更好!

  附上我的github 情感分類代碼:Mine(我的代碼是參考boss框架)

  我boss的情感分類代碼:My boss's(寫的模型很多還可以再看看bilstm,可以參考,多了解)

 

 

 

   

   




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM