tensorflow(十一)--利用seq2seq的Decoder-Encoder機制實現序列生成模型(上)

前言:

由於本社羣打算組隊參加京東的多輪對話系統挑戰賽,比賽內容主要是做一款功能強大的聊天機器人,由於之前一直都是在做視覺,而seq2seq又是聊天機器人不可或缺的,因此打算學一下nlp的東西。(PS:大佬們如果對比賽感興趣的,可以聯繫羣主。)

一、初識

seq2seq 即“Sequence to Sequence”,是一個 Encoder–Decoder 結構的網絡,它的輸入是一個序列,輸出也是一個序列, Encoder 中將一個可變長度的信號序列變爲固定長度的向量表達,Decoder 將這個固定長度的向量變成可變長度的目標的信號序列。
這個結構最重要的地方在於輸入序列和輸出序列的長度是可變的,可以用於翻譯,聊天機器人,句法分析,文本摘要等。

seq2seq最早由兩篇文章獨立地闡述了它主要思想,分別是
《Sequence to Sequence Learning with Neural Networks》
地址:https://arxiv.org/pdf/1409.3215.pdf
和《Learning Phrase Representation using RNN Encoder-Decoder for Statistical Machine Translation》
地址:https://arxiv.org/pdf/1406.1078.pdf

二、深入

Encoder-Decoder的基本結構如圖所示:

模型讀取一個輸入句“ABC”,並生成“WXYZ”作爲輸出語句。該模型在輸出句尾標記後停止進行預測。注意,LSTM讀取輸入相反,因爲這樣做在數據中引入了許多短期依賴項,使得優化問題更加容易。

LSTM 的目的是估計條件概率 p(y1, … , yT′ |x1, … , xT ) ,
它先通過最後一個隱藏層獲得輸入序列 (x1, … , xT ) 的固定長度的向量表達 v,
然後用 LSTM-LM 公式計算輸出序列 y1, … , yT′ 的概率,
在公式中,初始狀態就是 v,公式如下:

在這個方程中,每個p(yt|v,y1,…,yt−1)分佈都表示爲詞彙表中所有單詞的softmax。請注意,我們需要在每個句子的結尾都有一個特殊的句尾符號“”,這使得模型能夠在所有可能長度的序列上定義一個分佈。總體方案如上圖所示。其中所示的LSTM計算“A”、“B”、“C”、“”的表示,然後使用這種表示計算“W”、“X”、“Y”、“Z”、“”的概率。

(1) Encoder階段:

Encoder過程很簡單,直接使用RNN(一般用LSTM)進行語義向量生成:

ht=f(xt,ht−1)

c=ϕ(h1,…,hT)

其中f是非線性激活函數, ht−1
是上一隱節點輸出, xt

是當前時刻的輸入。向量c通常爲RNN中的最後一個隱節點(h, Hidden state),或者是多個隱節點的加權和。

(2) Decoder階段

該模型的decoder過程是使用另一個RNN通過當前隱狀態 ht
來預測當前的輸出符號 yt ,這裏的 ht 和 yt

都與其前一個隱狀態和輸出有關:

ht=f(ht−1,yt−1,c)

P(yt|yt−1,…,y1,c)=g(ht,yt−1,c)

三、瞭解注意力機制

在seq2seq網絡中存在的問題:即壓縮損失了大量的信息
如下圖:由於rnn的特性,網絡最後的節點幾乎包含了前面節點的全部信息。因此解碼部分的很大一部分信息是來源於eat後面的單元,因此損失了前面節點的大量信息。

通俗的來說,注意力機制很像圖像領域中的ROI區域,即部分的內容主要由部分來決定。如下圖:這裏的knowledge很大程度上是又知識得到的,那麼我們在設置權重的時候,便可以將知識的權重設置的高一些,而其他的權重設置的低一些。這便是attention機制。

四、seq2seq應用領域

1、機器翻譯
機器翻譯(Neural Machine Translation)是 NLP 中最經典的任務,也是最活躍的研究領域之一,Seq2Seq 提出之後,最早應用於 nmt 任務。當前,主流的在線翻譯系統都是基於深度學習模型來構建的,包括 Google、百度等,整體效果取得了非常顯著的進步(當然,在剛剛推出的時候還是有很多槽點的)。每年都有特別多的paper在 Seq2Seq 模型上提出一些改進方案。

2、文本摘要
文本摘要也是一個非常經典的 NLP 任務,應用場景非常廣泛。我們通常將文本摘要方法分爲兩類,extractive 抽取式摘要和 abstractive 生成式摘要。前者是從一篇文檔或者多篇文檔中通過排序找出最有信息量的句子,組合成摘要;後者類似人類編輯一樣,通過理解全文的內容,然後用簡練的話將全文概括出來。
基於 Seq2Seq+attention 模型在 nmt 任務中的成功,2016 年有很多的工作都是套用 Seq2Seq+attention 來做 abstractive 摘要任務,取得了一定的突破。
3、對話生成
Seq2Seq 模型提出之後,就有很多的工作將其應用在 Chatbot 任務上,希望可以通過海量的數據來訓練模型,做出一個智能體,可以回答任何開放性的問題;而另外一撥人,研究如何將 Seq2Seq 模型配合當前的知識庫來做面向具體任務的 Chatbot,在一個非常垂直的領域(比如:購買電影票等)也取得了一定的進展。
4、其他
此外還有很多其他的應用,如詩詞生成,風格轉換,代碼補全等,應用範圍十分廣泛。

(具體用seq2seq實現序列轉化的代碼請見下一篇文章)

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