讀TextCnn文章

TextCnn,顧名思義,就是將卷積神經網絡應用在文本領域!

 

1.模型示意圖

  • 輸入是一個n*k的矩陣,n表示一個句子切分後的序列,k表示每個詞的詞向量的維度 ,即
  • input -> hidden layer 通過權重矩陣h*k大小的W,W就是CNN中的filter,k是固定的,在詞序列方向進行滑動,求卷積;然後加一個bias後做非線性激活,即
  • 對於序列長度爲n,filter大小爲h*k,不斷滑動,可以得到n-h+1 個卷積值 。這個比較好理解
  • 然後採用max_pooling進行操作,捕獲最重要的特徵!
  • 將下去就到全連接層了

通過這個圖更加好理解

 

2.模型的一些細節

  • textCnn 用了多個大小不同的filter
  • 對於輸入層的詞向量,採用兩種不同的方式進行對待, 第一種是訓練過程中維持不變,另外一種是通過bp進行更新,這樣會得到ci 的兩種結果
  • 正則化:實際上就是cnn中的dropout,以一定的概率剔除隱藏層的神經元
  • 另外,對W的2範式做了約束,當 ||w|| > s 時,就讓  ||w|| > s ,防止 ||w|| 過大

 

 

3. 試驗參數設置

  • 數據集包含MR,SST-1,SST-2 等共計7個文本數據
  • filter 的 h 爲3,4,5 ,分別有100個filter,共計 300個filter
  • dropout 設置爲0.5
  • ||w|| > s ,中的s 設置爲3
  • batchsize 設置爲50
  • 採用SGD進行梯度下降
  • 這些數據是基於SST-2的 驗證集(dev)得到的
  • 如果數據集中沒有專門的驗證集,那麼就把從訓練集中抽出10%作爲驗證集
  • 幾種模型:
    • CNN-rand:詞向量隨機初始化,並且隨着訓練進行更新

    • CNN-static:採用word2vec預訓練的詞向量,訓練過程中不更新

    • CNN-non-static:採用word2vec預訓練的詞向量,訓練過程中更新

    • CNN-multichannel:CNN-static+CNN-non-static

 

4.一些結論

  • 建議採用預訓練的詞向量,預訓練詞向量可以跨數據集使用,如果在此基礎上,採用non-static模式,做fine tune,能捕獲特定數據集的特徵,performance 也更好,如果詞,預訓練的詞向量沒有覆蓋到,通過fine tune,可以捕獲有意義的表徵
  • 建議採用multichannel模式,當初設計的本意是防止過擬合,試驗結果顯示錶現更好,特別是在小數據集上

 

 

 

refer:

https://arxiv.org/pdf/1408.5882.pdf  Convolutional Neural Networks for Sentence Classification

https://arxiv.org/pdf/1510.03820.pdf A Sensitivity Analysis of (and Practitioners’ Guide to) Convolutional Neural Networks for Sentence Classification

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章