目錄
1. 簡介
Seq2Seq的基本結構是encoder-decoder,這個模型的目標是生成一個完整的句子。這個模型曾經使得谷歌翻譯有較大幅度的提升,下面就以機器翻譯爲例子,來描述詳述這個模型。
注:學習此模型需要有LSTM深度學習模型相關基礎。
2. Seq2Seq
Seq2Seq框架依賴於encoder-decoder。 encoder對輸入序列進行編碼,而decoder生成目標序列。
2.1 Encoder
在encoder中輸入hao are you ,每個單詞,都被映射成一個維的詞向量,在這個例子中,輸入將被轉化成,經過LSTM後,我們可以得到每一個詞對應的隱狀態,,和代表這個句子的向量,在這裏,。
2.2 Decoder
現在我們已經得到了代表句子的向量,這裏我們將使用這個向量,輸入到另一個LSTM單元,以特殊字符作爲起時字符,得到目標序列。
當時間步等0時:
:Encoder輸出的句子向量
:特殊詞,代表起時位置,作爲當前時間步驟的輸入
:當前時間步驟的隱狀態。,隱層的維度
:詞表中,每個詞的得分。,詞表的大小
:函數(其實就是矩陣,w 和 b),
:經過歸一化後得到在詞表上的概率分佈,,詞表的大小
:中最大概率詞的索引。int值。
當時間步等於1時:
與時間步等0不同的時,LSTM的輸入
,隱狀態的輸入從e變成上一個時間步的隱狀態
,詞也變成上一個時間步預測的詞。
一直到預測到了特殊字符,才停止。
上面的方法其實就是做了這麼一個轉換:
3. Seq2Seq with Attention
通常來說,seq2seq 加入attention機制後,會使得模型的能力所以提高。模型在解碼階段時可以關注對encoder序列的特定部分,而不是僅僅依賴於代表整個句子的向量。
加入attention機制後,encoder的過程不變,decoder過程發生相應的變化
3.1 Decoder
:是上一個時間步的隱層輸入。
:當前時間步的隱層輸入,也是上一個時間步的輸出。
:是上一個時間步的詞向量,表示詞向量的維度
:是context vec,叫做上下文向量,是對encoder的output求加權和的結果,,是LSTM隱層的維度
,,, 在2.1 已經做了說明,這裏完全相同,下面看是怎麼得到的
:是encoder是時步爲的隱層;
:當前時間步驟隱層的輸入;
:decoder當前時間步對encoder時間步爲關注度的得分;
encoder每個時間步驟得分的向量
是進行softmax 歸一化的後的值,
:在decoder時間步驟爲時刻,對encoder的output求加權和的結果。
而對於函數,通常有以下幾種選擇,但是不限於以下三種,什麼運算效果好,用什麼運算。
4. Train
回顧例子,目標是進行翻譯,將“how are you” 翻譯成 "comment vas tu"
如果在訓練階段,decoder的過程中,將t-1時間步預測的詞,作爲t時間步的輸入詞,很有可能在某一步預測錯誤,後面的序列將會全部亂掉,導致錯誤積累,並且使得模型無法在正確的輸入分佈中進行,會導致模型訓練緩慢,甚至無法進行下去,爲了加快處理速度。一個技巧是 輸入token序列:,並且預測對應位置的下一個token。
decoder模型,每一個時間步的輸出是詞表上的一個概率,是詞表的大小,對於給定的目標序列,,我們可以計算出整個句子的概率:
這裏是指decoder第t和時間步上,生成第個單詞的概率,我們要使得這個這個概率在目標序列上最大化,等價於使得:
最小化,我們定義式子18這個作爲損失函數。
再具體的例子中,我們的目標就是最小化:
這裏的損失函數其實就是交叉熵損失(Cross Entropy)
5. Decoding
這裏主要是說明解碼過程,不是解碼器
5.1 理論
在解碼的過程中,採用一種貪婪的模式,將上一步預測的最後可能的詞,作爲輸入,傳入到下一步。但是這種方法,一旦在一步發生錯誤,就可能會造成整個解碼序列的錯亂,爲了儘可可能降低(目前並不能消除)這個風險,採用一種Beam Search的方法,我們的目標不是得到當前時間步上的最高的分,而是得到前個的最高得分。
那麼對於在時間步上的解碼假設集合一共組,下角標代表時間步,上角標代表top_k的第k個word。
那麼是如何從在時刻得到候選集合呢?
,這個候選集合一共有個,然後再從中選取個最高的,作爲。
注意:這裏時從詞表中選取的詞彙,詞表一共個詞,因爲這裏將會是一個非常重要的點,與下一篇指針網絡有所不同。
5.2 實例
假設,假設,假設decoder一共就三個詞可選,。
那麼在一共有2種輸出,在時,認爲此時模型的,,將輸入模型,得到的輸出是的是。一共6個,即爲候選集合:
從中挑選出時刻最高2個詞,再從中挑出最高的2個
組成
然後後再從中挑選整個句子得分最高的個。得到
下面說明的計算方法:
目標,從中挑選個最大的句子。代表中第個句子的得分,。
這裏之所以是要除以句子長度,是因爲句子的長度會印象得分,我們以作爲例子
如果不開3次方,那麼句子的長度越大,連乘的概率越小,那麼在做最終的預測時,模型預測出的結果將會偏向於預測較短的句子
得到後,知道預測到結束字符<eos>這個句子就停止生成了,然後從候選的結果中,返回score最高的句子,作爲最終的輸出。
6 總結
從上至下,分別講述了seq2seq模型的基本結構,和attention機制,並且介紹了這一類模型如何進行訓練,如何進行生成。博客的內容如果不足之處,歡迎批評指正。
說明,這一篇博客,沒有做項目代碼的實現,因爲下一篇博客,的指針生成網絡會包含seq2seq+attention,並且有實現代碼。以及結果的展示。
實現的博客鏈接(注:不是單純的實現了seq2seq,是實現了一個基於seq2seq的模型,指針生網絡,論文地址)