1. 程式人生 > >深度學習【8】基於迴圈神經網路(RNN)的端到端(end-to-end)對話系統

深度學習【8】基於迴圈神經網路(RNN)的端到端(end-to-end)對話系統

注:本篇部落格主要內容來自:A Neural Conversational Model,這篇論文。

http://blog.csdn.net/linmingan/article/details/51077837

        與傳統的基於資料庫匹配的對話\翻譯系統不一樣的是。基於RNN的end-to-end方法的對話\翻譯系統,不僅不需要擁有龐大的資料庫支援。而且該方法的對話\翻譯結果有時候往往更具有創造性,不會那麼死板。

        本文主要介紹一下基於RNN的對話系統的基本過程,關於RNN的知識這裡不做介紹。因為翻譯系統與對話系統都是序列到序列,只是翻譯系統的輸出語音不一樣,所以基於RNN的翻譯系統原理上與對話系統相差無幾。

        基於RNN的對話系統由兩個部分構成,分別為編碼和解碼器。編碼器的作用是對一句輸入語句進行編碼,使得對話系統能夠理解這句話的意思。而解碼器是利用編碼器輸出的編碼輸出對話句子。編碼器和解碼器由兩個RNN模型構成,編碼器沒有輸出層,只有輸入和隱藏層。而解碼器有輸出層。基於RNN的對話系統結構圖如下:

        系統結構圖解讀:圖中使用者的輸入為ABC(A,B,C可以看做三個不同詞),對話系統的輸出為WXYZ。編碼器:左邊沒有輸出的RNN是一個編碼器,該編碼器按照句子中單詞出現的順序進行編碼,前一個詞的隱藏層資訊反饋給當前詞的隱藏資訊。當遇到輸入句子的結束符eos時,整個句子的編碼就完成了,也就是RNN的隱藏層資訊作為該句子的編碼。解碼器:

右邊帶有輸出層的為解碼器,解碼器每次只產生一個詞;而產生的這個詞會作為解碼器的輸入,同時上一時刻的隱藏層資訊會反饋給當前時刻的隱藏,然後繼續輸出一個詞,直到輸出句子結束符eos為止。解碼器的輸入層的初始輸入為eos,隱藏層的初始輸入為編碼器對輸入句子的編碼結果(也就是隱藏層資訊)。

編碼器和解碼器的具體設定:

輸入節點數:詞典中的單詞個數v

隱藏層:自己設定,但是編碼器和解碼器的隱藏層個數必須一樣。

解碼器輸出層節點數:詞典中的單詞個數v

輸入和輸出特徵:該篇論文只是採用簡單的one-hot形式,即一個v大小的向量中只有一個點為1,其他的都為0。(也可以用詞向量作為輸入)

訓練問題:

屬於有監督訓練。

        這是利用RNN實現對話系統中,最簡單的例子。華為諾亞方舟實驗室用了一個比較複雜的RNN對話設定,詳見論文:Neural Responding Machine for Short-Text Conversation