讀sequence to sequence 文章

      文章中首先提到DNN,不能解決sequence2sequence的問題,因爲輸入和輸出固定的,但是對於翻譯等問題,序列的長度是不固定的,這篇文章主要是用了多層的LSTM,把輸入映射到一個固定的維度,然後再用另外一個LSTM,從這固定的向量去還原抽取目標序列。這裏測試場景是採用了英文到法文的翻譯,採用BLEU來度量效果。

 

1. 模型示意圖

  • 輸入是ABC, 輸出是WXYZ
  • 當輸出的序列產生之後,就不再進行預測了

 

 

2. 模型目標

  • x1,...,xT 表示輸入 , y1,...,yt 表示輸出, v是什麼呢?v 就是 將輸入通過LSTM得到的最後一個hidden state , 因爲

最後一個hidden state 包含了整個sequence的信息.

  • 需要增加一個sequence的結束符號 <EOS>
  • 發現深度的LSTM 模型效果相比shallow的LSTM模型更好,所以用了4層的LSTM
  • LSTM是逆向讀取輸入序列,逆向讀取的好處,試驗板塊有一些解釋

 

3. 試驗

  • 數據集
    • 英 譯 法 的數據集,共計1200萬句子,包含3.48億個法文單詞,和3.04億個英文單詞
    • 對於輸入,除了最常用的16萬個詞之外,其他都定義爲unk,對於輸出,除了最常用的80000個詞外,其他都定義爲unk
  • 訓練的目標函數
  • 逆向讀取input 
    • 作者這麼解釋,當我們要把一個詞翻譯成另外一個詞的時候,比如 a,b,c 翻譯成 1,2,3的時候,對於目標1來說,a距離比較遠,相關性也較低,但每個source 和目標詞的平均距離是沒有改變的
  • 訓練的細節
    • 深度爲4的LSTM,每層1000個單元
    • 1000維的embedding,輸入是160000詞庫,輸出是80000個詞庫
    • 發現深度的LSTM對perlexity減少近10%,可能是因爲更多的隱層狀態
    • LSTM參數的初始化是參數服從[-0.08,0.08]的均勻分佈中抽取
    • 用SGD,學習率是0.7,在5個epoch之後,學習率減半,實際上訓練只用了7.5個epoch
    • LSTM不會遇到梯度消失的問題,但是會遇到梯度爆炸的問題,會把梯度限制在[10,25]範圍內
    • 設置句子長度是固定的

 

4.結論

  • 反向讀取效果比較好
  • LSTM對於長句子準確率也高

 

refer:Sequence to Sequence Learning with Neural Networks   Google團隊的

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