pytorch自然語言處理之Pooling層的句子分類

來自微信公眾號 深度學習自然語言處理

Pooling作為最簡單的層其實也可以作為句子分類任務。Pooling有很多種,max_Pooling,avg_Pooling,min_Pooling等。常用的還是max_Pooling:取同維度的最大值。

先看看流程圖:

這裡的Linear Layer後面應該經過一個Softmax的,可是由於交叉熵cross_entropy里隱含有Softmax,這裡我就沒有畫了。

第一步搭建網路

這裡除了劃線的和類的名字外,其他都是pytorch固定模板。__init__就是搭建網路的函數,forward是數據怎麼在你剛搭建的網路中流動的寫出來就行,注意數據矩陣的維數,要前後對上。該維度可以用view(),t(),transport()按照想法進行改變。我在這個維度上浪費了很長時間,就是對不上。慢慢理解了,就會了。

這裡的Embeding層就是把現實客觀特徵轉成電腦識別的特徵,也就是特徵向量化。

第二步讀入數據並將數據數字化

數據是這個樣子:

前面文本後面類別

讀取文本的類

清洗英文文本的函數,這個寫過一次後,下次清洗文本直接複製直接用。

文本讀取完後,建立詞典,為只有數字序列化做準備。函數如下:

字典為:

然後通過函數調用就能生成數字序列:

第三步開始訓練

因為用SGD很多時候不能夠收斂。。。特別悲催。所以推薦用Adam優化。

這是計算精確度的函數,在一遍跑好的模型上走一遍Dev數據,得出開發集準確率。torch和numpy交換就用 .numpy()。

最後得出結果:

這個賊耗時間

精確度慢慢增長。。。(慢是因為沒有寫batch)


在此,非常感謝劉宗林師兄的技術支持。


推薦閱讀:

TAG:機器學習 | 深度學習DeepLearning | 自然語言處理 |