Seq2Seq

自編碼器

  • 構建一個自編碼器主要包括兩部分:編碼器(Encoder)和解碼器(Decoder)。 編碼器將輸入壓縮爲潛在空間特徵,解碼器將潛在空間特徵重構輸出。
  • 自編碼的核心價值是在於提取潛在的高階空間特徵信息。主要應用是兩個方 面:數據去燥以及進行可視化降維。在這裏插入圖片描述在這裏插入圖片描述

什麼是seq2seq

  • Seq2Seq(Sequence to Sequence),它被提出於2014年,最早由兩 篇文章獨立地闡述了它主要思想,分別是Google Brain團隊的 《Sequence to Sequence Learning with Neural Networks》和Yoshua Bengio團隊的《Learning Phrase Representation using RNN EncoderDecoder for Statistical Machine Translation》。
  • Seq2Seq屬於一種Encoder-Decoder結構。在這裏插入圖片描述

Encoder-Decoder

在這裏插入圖片描述

  • Encoder-Decoder 的這種結構,其中 Encoder 是一個RNNCell(RNN ,GRU,LSTM 等) 結構。每個 time-step, 我們向 Encoder 中輸入一個字/詞(一般是表示這個字/詞的一個實數向量),直到我們輸入這個句子的最後 一個字/詞 XTX_T ,然後輸出整個句子的語義向量 c(一般情況下,c=hT=F([XT;hT1]Wc=h_T=F([X_T;h_{T-1}]W), XTX^T 是最後一個time-step輸 入)。因爲 RNN 的特點就是把前面每一步的輸入信息都考慮進來了,所以理論上這個 c 就能夠把整個句子 的信息都包含了,我們可以把 c 當成這個句子的一個語義表示,也就是一個句向量。在 Decoder 中,我們根 據 Encoder 得到的句向量 c, 一步一步地把蘊含在其中的信息分析出來。
    在這裏插入圖片描述在這裏插入圖片描述

Seq2Seq圖解

在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述

Seq2Seq預測

在這裏插入圖片描述

Seq2Seq應用總結

  • Seq2Seq應用場景,包括了經典的機器翻譯、文本摘要和對話生成等,也包括了 一些非常有趣的應用
    比如:根據公式圖片生成 latex 代碼,生成 commit message 等。
  • 自然 語言生成(NLG)是一個非常有意思,也非常有前途的研究領域,簡單地說,就是解決一個 條件概率 p(output| context)的建模問題,即根據 context 來生成 output,這裏的 context 可 以非常零活多樣,大家都是利用深度學習模型對這個條件概率進行建模,同時加上大量的 訓練數據和豐富的想象力,可以實現很多有趣的工作。
  • Seq2Seq 是一個簡單易用的框架,開源的實現也非常多,但並不意味着直接生搬硬套就可以了,需要具體問題具體分析。此外,對於生成內容的控制,即 decoding 部分的研究也是一個非常有意思的方向,
    比如:如何控制生成文本的長度,控制生成文本的多樣性,控制生成文本的信息量大小,控制生成文本
    的情感等等。

Seq2Seq原理

  • 最基礎的Seq2Seq模型包含了三個部分,即Encoder、Decoder以 及連接兩者的中間狀態向量
    • Encoder通過學習輸入,將其編碼成 一個固定大小的狀態向量c,繼而將c傳給Decoder
    • Decoder再通過對狀態向量c的學習來進行輸出。
  • 下圖中,圖中每一個box代表 了一個RNN Cell單元,通常是LSTM或者GRU。
    在這裏插入圖片描述
  • Encoder-Decoder框架可以這麼直觀地去理解:可以把它看作適合 處理由一個句子(或篇章)生成另外一個句子(或篇章)的通用 處理模型。對於句子對<X,Y>,我們的目標是給定輸入句子X,期待通過Encoder-Decoder框架來生成目標句子Y。X和Y可以是同一 種語言,也可以是兩種不同的語言。而X和Y分別由各自的單詞序 列構成: X=(x1,x2,...,xm)X=(x_1,x_2,...,x_m)Y=(y1,y2,...,yn)Y=(y_1,y_2,...,y_n)
  • Encoder顧名思義就是對輸入句子X進行編碼,將輸入句子通過非 線性變換轉化爲中間語義表示C:C=F(x1,x2,...,xm)C=F(x_1,x_2,...,x_m)
  • 對於解碼器Decoder來說,其任務是根據句子X的中間語義表示C 和之前已經生成的歷史信息y1,y2,.,yi1y_1,y_2,….,y_{i-1}來生成i時刻要生成的單詞 yiy_i
  • 每個 yiy_i都依次這麼產生,那麼看起來就是整個系統根據輸入句子X生成了目標句子Yyi=G(C,y1,y2,...,yn)y_i=G(C,y_1,y_2,...,y_n)

舉個例子

輸入下x,輸出y,如下圖

Inputs Target
How are you? I am good
Can you fly that thing? Not yet

在這裏插入圖片描述
幾個重要的符號:

  • <PAD> 在訓練中,我們將數據按批次輸入。但同一批次中必須有相同的Sequence Length(序列長度 /time_steps)。所以我們會用<PAD>填充較短的輸入。
  • <EOS> 它能告訴解碼器句子在哪裏結束,並且它允許解碼器在其輸出中表明句子結束的位置
  • <UNK> 忽視詞彙表中出現頻率不夠高而不足以考慮在內的文字,將這些單詞替換爲 <UNK>
  • <GO> 解碼器的第一個時間步驟的輸入,以使解碼器知道何時開始產生輸出

下圖爲:word2id

在這裏插入圖片描述

編碼器

在輸入中,一個批次數據的長度大小需要一致,所以要進行填充。在這裏插入圖片描述對照word2id可以得到輸入向量:在這裏插入圖片描述在這裏插入圖片描述

解碼器

在這裏插入圖片描述
更具word2id找到對應的輸出
在這裏插入圖片描述

  • 將RNN模塊換成LSTM,則效果如下圖。Encoder 和 Decoder 都是 4 個時間步 長的 LSTM(但是隻有兩個RNN Cell)。在這裏插入圖片描述
    小技巧:將源句子順序顛倒後再輸入 Encoder 中,比如源句子爲“A B C”,那麼輸入 Encoder 的順序爲 “C B A”, 經過這樣的處理後,取得了很大的提升,而且這樣的處理使得模型能夠很好
    地處理長句子。
發佈了22 篇原創文章 · 獲贊 19 · 訪問量 3976
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章