【NLP-ChatBot】能閑聊的端到端生成型聊天機器人背後都有哪些技術?

  • 2019 年 11 月 1 日
  • 筆記

我們之前介紹過,按照應用場景的不同,聊天機器人可以分為問答系統,對話系統以及閑聊機器人三類。今天我們就來詳細講一講其中的生成型閑聊機器人。

作者&編輯 | 小Dream哥

1 什麼是生成式聊天機器人

我們前面介紹的QA,會事先存在一個對話庫,聊天系統接收到用戶輸入句子後,通過在對話庫中以搜索匹配的方式,選擇合適的回答返回給用戶;對話系統,則是通過NLU和對話管理模組,驅動自然語言生成模組,返回相應的話術給用戶。

總的來說,前面兩種聊天系統通常面對的是一個封閉的場景,而生成式通常面對的是開放場景。因而很難像前面兩種機器人那樣,先把答案集設置好,再通過對話管理或者檢索等模組選到合適的答案返回給用戶。

生成式聊天機器人需採取不同的技術思路,在接收到用戶輸入句子後,採用一定技術手段自動生成一句話作為回答,生成式聊天機器人的好處是可以覆蓋任意話題的用戶問句,缺點是生成的回答品質很可能會存在問題,比如可能存在語句不通順存在句法錯誤等看上去比較低級的錯誤。

2 seq2seq框架

基於深度學習的聊天機器人技術,總體而言,絕大多數都是基於Encoder-Decoder(或者稱作是Sequence to Sequence)框架,這個框架是非常簡單而且可擴展的。

該框架可以看作是一種文本處理領域的研究模式,應用場景非常的廣泛,不僅僅可以用在聊天機器人領域,還可以應用在機器翻譯、文本摘要、句法分析等各種場合。下圖是文本處理領域裡常用的Encoder-Decoder框架一種抽象表示:

具體到我們聊天機器人的情況,非常簡單的系統生成答案的過程由如下兩步構成:

1.Encoder對用戶輸入querry進行編碼,生成語義編碼c;

2.Decoder對語義編碼c進行解碼,得到答案Response返回給用戶。

3 Attention機制的引入

因為RNN模型對於自然語言這種線性序列來說是最常用的深度學習模型,因而在實際實現聊天系統中,一般Encoder和Decoder都採用RNN系列的模型,其中最常用的是LSTM以及GRU模型,對於長序列的情形,LSTM和GRU模型效果會明顯優於傳統RNN模型。儘管如此,當句子長度超過30以後,LSTM模型的效果會急劇下降。

基於此,seq2seq框架中開始引入attention機制,用來實現輸出Y和輸入X句子單詞之間的對齊,能夠明顯提升系統對於長序列的處理能力。

如上圖所示,展示了attention機制實現的細節,其實現共分為如下的幾步:

1.Encoder編碼輸入序列,得到對應的表徵h =[h1,h2,…,hT]=A(X1,X2,…,XT)

2.解碼器輸出目標yt之前,會結合將上一步的隱藏狀態St-1和Encoder編碼得到的表徵[h1,h2,…,hT]進行運算,得到一個向量e=[e_t_1, e_t_2,…, e_t_T],它表徵的是在當前的解碼時刻,h1,h2,…,hT這T個隱藏狀態分別應該輸入到解碼器的權重。e = G(St-1, h)

3.將向量e進行歸一化,得到向量a,即a=[a_t_1, a_t_2,…, a_t_T] = softmax(e)

4.加權求和,獲得t解碼時刻的語義編碼,Ct = a_t_1*h1+a_t_2*h2+…+a_t_T*hT

5.進行t時刻的解碼,St = F(St-1, Ct )

總結以下上面的步驟,attention機制其實就是在解碼的時候,根據當前的解碼狀態(上一時刻的解碼隱藏狀態St-1)來獲得當前時刻的語義編碼向量Ct。這樣,在當前的解碼時刻就能夠取到當前所需要的語義編碼,提高系統的解碼能力。

4 多輪會話的探索

基於上述seq2seq框架,聊天機器人可以根據用戶當前輸入,自動生成回答,形成了一個有效的對話系統。但是一般人們聊天並不是單純的一問一答,在回答對方的時候,到底說什麼,常常要參考上下文。所謂對話上下文,就是在用戶當前輸入問句Querry之前兩者的對話資訊。因為存在多輪的一問一答,這種情形一般稱為多輪會話。在多輪會話中,一般將上下文稱作Context,當前輸入稱為Querry,回答用Response表示。

深度學習解決多輪會話的關鍵是如何將上下文聊天資訊Context引入到Encoder-Decoder模型中去的問題。一般來說,上下文聊天資訊Context都是加入到Encoder中,因為這是除了當前輸入Querry外的額外資訊。增加編碼資訊,有助於Decoder生成更好的Response內容。

目前大部分的方案都是這樣的思路,區別在於如何將Context資訊在Encoder端建立模型或者說具體的融入模型的方式。

下面介紹一個典型的例子,讓讀者理解這種方式。

如上圖所示,是一種層級神經網路(Hierarchical Neural Network,簡稱HNN)。HNN本質上也是Encoder-Decoder框架,主要區別在於Encoder採用了二級結構。其編碼過程由如下幾個步驟組成:

1.用「句子RNN(Sentence RNN)」對每個單詞進行編碼形成每個句子的中間表示;

2.第二級的RNN則將第一級句子RNN的中間表示結果按照上下文中句子出現先後順序序列進行編碼,這級RNN模型可被稱作「上下文RNN(Context RNN)」,其尾節點處隱層節點狀態資訊就是所有上下文Context以及當前輸入Querry的語義編碼;

3.根據S1,S2,S3,M以及當前輸入Querry的語義編碼解碼出當前的輸出,得到response。

總的來說,目前多輪對話的優化都是基於如何在Encoder端編碼進更多的Context資訊。

關於多輪對話,如需更多學習,可參考如下的文獻:

[1] Oriol Vinyals and Quoc Le. 2015. A neural conversational model. In Proc. of ICML Deep Learning Workshop.

[2] Alessandro Sordoni, Michel Galley,Michael Auli, ChrisBrockett, Yangfeng Ji, Meg Mitchell, Jian-Yun Nie,JianfengGao, and Bill Dolan. 2015. A neural network approach to context-sensitivegeneration of conversational responses. In Proc. of NAACL-HLT.

[3] Iulian V Serban, Alessandro Sordoni,Yoshua Bengio,Aaron Courville, and Joelle Pineau. 2015. Building end-to-enddialogue systems using generative hierarchical neural network models. In Proc.of AAAI.

總結

生成式的聊天機器人技術框架非常簡潔,在構建過程是端到端(End-to-End)的,數據驅動的,只要給定訓練數據即可訓練出效果還不錯的聊天系統,省去了很多特徵抽取以及各種複雜中間步驟的處理,比如省去句法分析與語義分析等傳統NLP繞不開的工作,使得系統開發效率大幅提高;同時,增加訓練數據也能持續提升系統效果。

但目前該技術仍處於發展初期。不管是技術手段也好,亦或是實際系統效果也好,都有非常大的進步空間。

我們在知識星球實現了一個完整的生成式聊天機器人,感興趣的同學可以掃描下面的二維碼了解。

讀者們可以留言,或者加入我們的NLP群進行討論。感興趣的同學可以微信搜索jen104,備註"加入有三AI NLP群"

下期預告:ALBERT模型詳細講解

知識星球推薦

掃描上面的二維碼,就可以加入我們的星球,助你成長為一名合格的自然語言處理演算法工程師。

知識星球主要有以下內容:

(1) 聊天機器人。考慮到聊天機器人是一個非常複雜的NLP應用場景,幾乎涵蓋了所有的NLP任務及應用。所以小Dream哥計劃以聊天機器人作為切入點,通過介紹聊天機器人的原理和實踐,逐步系統的更新到大部分NLP的知識,會包括語義匹配,文本分類,意圖識別,語義匹配命名實體識別、對話管理以及分詞等。

(2) 知識圖譜。知識圖譜對於NLP各項任務效果好壞的重要性,就好比基礎知識對於一個學生成績好壞的重要性。他是NLP最重要的基礎設施,目前各大公司都在著力打造知識圖譜,作為一個NLP工程師,必須要熟悉和了解他。

(3) NLP預訓練模型。基於海量數據,進行超大規模網路的無監督預訓練。具體的任務再通過少量的樣本進行Fine-Tune。這樣模式是目前NLP領域最火熱的模式,很有可能引領NLP進入一個全新發展高度。你怎麼不深入的了解?

轉載文章請後台聯繫

侵權必究