首頁>技術>

本文主要介紹聊天機器人模型的關鍵技術,即Encoder-Decoder框架下的Attention-Based Model LSTM的聊天機器模型。第一小節介紹RNN Encoder-Decoder框架,並指出RNN在聊天對話中的侷限性以及傳統Encoder-Decoder中定長語義向量的資訊表示問題。第二小節為解決傳統Encoder-Decoder中定長語義向量資訊表示問題,介紹Attention Model的思想,以及加入Attention Model的Encoder-Decoder框架。第三小節為了解決RNN無法處理帶上下文資訊的長序列問題,介紹一種特殊的RNN結構,即長短時記憶網路,提出了Encoder-Decoder框架下的Attention-Based Model LSTM的聊天機器模型。第四小節針對模型訓練中由於引數過多產生過擬合現象介紹Dropout機制。第五小節引入了Beam Search,在模型的Decoder階段,尋找前K條機率最大的生成序列成句,提高了聊天機器人模型回覆的多樣性。

一、傳統的RNN Encoder-Decoder框架

Encoder-Decoder模型是一種用於序列到序列問題的模型,也稱編碼器-解碼器框架,常應用於機器翻譯、問答系統等,如圖所示即為一個Encoder-Decoder框架示意圖。例如在聊天機器人任務中,輸入序列是使用者輸入的聊天語句,經過模型生成後,輸出序列即為聊天機器人回覆語句。

RNN Encoder-Decoder框架

Encoder-Decoder框架可以理解為這樣一個過程:輸入一句話,透過模型方法,生成另一句話。Encoder用於對輸入序列

編碼化處理,將其轉化為中間語義向量

,Decoder用於預測當前m時刻的輸出序列

,根據已經生成的語義向量和在開始時刻到m-1時刻的輸出序列

1得到

顯而易見,當前m時刻的輸出取決於語義向量C和前面m-1個時刻的輸出,這個順序恰好符合人的打字順序。在實際的實現過程中,編碼器和解碼器使用的模型可能不同,即使是同一框架下的編碼器和解碼器也可能不同。在RNN中生成目標序列的公式為

其中表示輸出RNN中隱含層,可以看出基於RNN的Encoder-Decoder框架生成的輸出序列只與語義向量和前一個時刻的輸出相關,生成結果存在侷限性。

二、Attention-based Model思想

傳統的Encoder-Decoder框架中的編碼器與解碼器由定長的語義向量連線,存在很大侷限性。Encoder-Decoder中的語義向量是一個定長的向量C,它既無法完整表示全部輸入序列資訊,也不能隨輸入序列長度變化而變化,隨著時間增長,由覆蓋產生資訊丟失,為了解決這個問題,在模型中引入了注意力模型(Attention Model)。

注意力模型的基本思想是改變Encoder-Decoder結構網路在Decoder時都依賴於內部一個固定長度向量的限制。注意力模型其實為一個相似度向量,當前的輸入與目標狀態越相近,那麼當前的輸入權重就會越大,說明當前的輸出越依賴於當前的輸入。如圖所示注意力機制。

Attention Model

加入注意力機制之後,編碼器會將輸入的序列編碼成一個向量序列

,模型計算權重最大的向量作為解碼器的輸入,由此得到RNN中輸出序列計算式為

三、Attention-Based LSTM的聊天機器人模型

RNN的特點在於它能將先前的資訊傳遞到當前任務中,例如,我們預測句子“雲在____中”填空的內容,此時不需要上下文的背景,顯然“天空”就是缺失的詞語,這種情況下,如果相關資訊與所需資訊之間的差距很小,則RNN可以很好的解決。但這種情況並不常見於聊天對話中,當用戶輸入“我在中國長大,我說_____”時,空缺的詞語就需要依賴上下文來判定,所以本文中使用長短時記憶網路(Long Short-Term Memory) 解決長依賴(Long-Term Dependencies)問題。

長短時記憶網路是一種特殊的RNN網路,能夠學習長依賴關係,在處理更長的序列中表現更好。LSTM像迴圈神經網路一樣具有鏈式結構,如圖所示。

鏈式結構的長短時記憶網路

其中

表示三個時刻的輸入,

表示三個時刻的輸出,

表示使用Sigmoid作為啟用函式的網路層,tanh表示使用tanh作為啟用函式的網路層,

表示向量點乘運算,

表示向量加法運算。LSTM透過門控狀態來控制傳輸狀態,記住長時間的記憶,忘記不重要的資訊,LSTM中的遺忘門如圖所示。

LSTM遺忘門

LSTM的第一步是決定丟棄不重要的資訊,由使用Sigmoid作為啟用函式的網路層實現,它接受前一時刻的輸出

和當前時刻輸入

,併為上一時刻狀態

中每個數值輸出一個在0到1之前的數值。1表示完全保留,0表示完全捨棄。遺忘門輸出計算式為

輸入門生成儲存在當前單元中的資訊。首先,Sigmoid層決定更新輸入序列中的哪些值,tanh層建立候選向量

用於記錄當前狀態。LSTM輸入門如圖所示。

LSTM輸入門

可以得到Sigmoid層的輸出計算式和tanh層的輸出計算式分別為

3-1

(3-1)

3-2

(3-2)

此時使用輸入門的輸出去更新上一個狀態值

,將其記為

更新過程如圖(LSTM 輸入門更新當前狀態示意圖)所示,根據式(3-1)和(3-2)得到

的計算式為

LSTM 輸入門更新當前狀態示意圖

最後由輸出門決定輸出資訊,輸出過程如圖( LSTM輸出門)所示,首先,資訊經過一個sigmoid層決定將哪些資訊輸出,該層輸出的計算式為

3-3

(3-3)

LSTM輸出門

接著當前狀態

經過tanh層得到一個介於-1到1之間的數值並將其結果與sigmoid層的輸出點乘得到最終輸出部分,由式(3-3)得最終輸出結果的計算式為

在聊天機器人對話過程中,能夠理解對話上下文資訊至關重要,特別是使用者輸入較長時,為了處理含有上下文資訊的長序列輸入本文使用了長短時記憶網路,為了提高聊天機器人回覆的相關性,在模型中引入了注意力模型,綜上,本文將Attention-based Model應用於Encoder-Decoder框架中,框架中的每個模組都是一個LSTM,模型整體為圖所示。

Attention-Based LSTM Encoder-Decoder

如上圖所示,本文中的聊天機器人模型主要由詞向量表示部分、Encoder編碼部分以及Decoder解碼三個部分組成。(1)詞向量部分:將用於聊天機器人訓練的語料庫中的語句分詞後,透過word2vec工具訓練,把文字內容的處理簡化為K維向量空間中的向量運算,使用向量空間中的相似度來表徵詞的相近程度。(2)Encoder編碼部分:使用LSTM作為編碼器模組,輸入序列

經過訓練後得等到隱藏狀態

,每個狀態和注意力模型輸出結合得到語義序列

。(3)Decoder解碼部分:使用LSTM作為解碼器模組,前一部分生成的語義序列相結合最終得到目標序列

,當然,這裡得到的實數值向量還需經過word2vec工具還原成自然語言,也就是聊天機器人對使用者輸入的回覆。

四、Dropout機制

這一小節主要介紹在聊天機器人模型訓練中的最佳化方法,本文使用的神經網路由於其複雜性,容易產生過擬合現象,即將聊天語句中的助詞當做使用者想要表達的含義,例如使用者輸入“今天天氣很好!”,聊天機器人回覆“好好,你好”。並且引數過多訓練代價也越高,為了解決過擬合問題,Hinton等提出Dropout機制,其關鍵思想是在網路訓練過程中隨機地將網路中的某些單元以及連線從網路中刪除,這就防止了單元之間相互適應。在訓練過程中,從指數級的不同“變薄”網路中分離中樣本。在測試過程中只需要一個權重更小的“未變薄”網路,就可以很容易近似出對這些“變薄”網路的預測進行平均的效果,該方法成功提高了模型的泛化能力。圖為Dropout在深度神經網路中的應用。

應用Dropout的神經網路

五、Beam Search演算法

基於Encoder-Decoder框架下,模型根據極大似然估計選擇輸出的值,這正好符合統計語言模型,但是由於本文使用的語料庫來源於網際網路,語料庫存在諸多不合理的回覆,例如“呵呵”、“我不知道”、“也許吧”等,這類回覆資訊量少且重複率高,為了避免這種情況,本文使用Beam Search方法,也叫集束搜尋,是一種啟發式的搜尋方,基本思想是在每一步搜尋過程中進行剪枝,去除不太可能的結果。該方法首先確定Beam Size,假定為2,表示句子中當前詞後面出現機率最大的那兩個詞,如下圖所示,自底向上首先分為A、B代表聊天機器人模型回覆開頭出現機率最大的兩個詞,分別以A、B為字首繼續確定隨後出現機率最大的兩個詞,句子變成AA、AB、BA、BB,以此類推,直到句子結束。

Beam Search示意圖

18
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • nodejs介紹