深度學習【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的隱藏層資訊作為該句子的編碼。解碼器:
編碼器和解碼器的具體設定:
輸入節點數:詞典中的單詞個數v
隱藏層:自己設定,但是編碼器和解碼器的隱藏層個數必須一樣。
解碼器輸出層節點數:詞典中的單詞個數v
輸入和輸出特徵:該篇論文只是採用簡單的one-hot形式,即一個v大小的向量中只有一個點為1,其他的都為0。(也可以用詞向量作為輸入)
訓練問題:
這是利用RNN實現對話系統中,最簡單的例子。華為諾亞方舟實驗室用了一個比較複雜的RNN對話設定,詳見論文:Neural Responding Machine for Short-Text Conversation