1. 程式人生 > >Dialog System and Chatbots —— DA學習筆記2

Dialog System and Chatbots —— DA學習筆記2

對於Seq2Seq型別的chatbot:

在意識到和MT問題的不同之後,用seq2seq的方法貌似不能解決chatbot的問題,在2015年的時候,提出了轉換模型(transduction model)用於應答生成。

如果非要用seq2seq模型來解決這個問題的話,需要進行大量調整。

(1) 基本的seq2seq模型傾向於生成predictable but repetitive therefore dull response,類似於"I'm OK."或者"I don't know"那類的聊天終結者的回答。對於這個問題,可以修改seq2seq模型的目標函式,使用互資訊目標函式,或者修改beam decoder來使beam中的回答更加多樣化。

(2) 基本的seq2seq結構沒有辦法聯絡長時間前的對話上下文。對於這個問題,可使模型聯絡prior turns,例如使用層次模型來總結多輪之前的資訊

(3) 基本的seq2seq關注於生成單輪對話,對進行多輪對話來說基本是無力的。對於這個問題,可用強化學習或者對抗網路來解決,選擇response來使整體的對話更加自然,17年的時候有大神用對抗網路解決這個問題發了牛paper。

對於chatbot的評估:

一般來說,是由人來評估chatbot的效果。用於task-based的對話的slot-filling評估方法在這裡不適用,對於詞交疊的測評方法,如BLEU也不適用,這是因為對於一個使用者turn來說,很多問題的回答並不一定含有某個詞,可對應的回答語句太多太多了。BLEU只有在MT這種反饋域很小且lexically交疊很大的問題上是可行的。

雖然說由人來評估chatbot的效果,但是最近有提出自動評估的一些方法,如ADEM,用一個分類器來進行回答的合理性評估,訓練語料是由人為標註的。另一種是用對抗評估的方式,基本想法是訓練出一個類圖靈分類器來區分人類生成的回答和機器生成的回答,能fool這個分類器的資料越多,chatbot效果越好。

三、基於框架的DA

現在的task-based對話系統是基於domain ontology的,所謂domain ontology就是代表系統從使用者說的話中抽取到的意圖的知識結構。ontology定義了很多種框架,每一個框架由一系列的槽(slot)構成,並規定了每個slot可取的值。這種框架是在1977年的時候提出來的GUS框架,當時用於travel planning這個domain。基於框架的DA大多是基於模板進行NLG,就是說已經有了預設的模板,需要根據使用者的輸入往裡填詞。

1. 基於框架的對話的控制結構(圍繞frame來設計的)

個人理解這個控制結構就是一系列的flowgraph,說白了就是一個套路,先說什麼,然後說什麼,如果答案為是的話說什麼,為否的話又該說什麼,一直到結束為止。其中會空出來很多的slot,這個控制結構的目的就是為了填slot!!根據使用者的回答往裡填,大部分的基於框架的對話系統都是一個由對話設計者搞出來的一個有窮狀態自動機(FSA)。比如說在travel planning這樣一個情景下,有4個slot需要填充,出發城市、抵達城市、出發及抵達時間、單程還是往返。對於每個slot,設定對應的問題來獲取想要的答案。此時,FSA中的節點代表slot問題,邊代表後繼操作,整個對話是由機器主導的,忽略掉那些非直接的回答然後接著問下一個問題。但是在真實的人與人之間的對話情境中,對話的主導權(initiative)並不是一直由一方掌控,而是在兩個人之間來回轉換的!!

這種由機器主導的對話的優點是:可以很明確地知道使用者的回答是在針對什麼問題,也就是說,知道這個問題的域是什麼,這意味著系統可以準備一個語言模型來方便地進行NLU。對於可以在任何部分都出現的universal的問題,可以視為是回到某一預設的start state。這種簡單的FSA結構的對話一般用於執行簡單的任務,比如說輸入信用卡卡號、姓名等。

在很多情景下,使用者很可能一句話可以用來填好幾個slot,而且會有frame shifting的情景。個人理解一個frame就是完成一個子操作,比如說從預定航班,隨之出現的租車、預訂酒店操作,這就是屬於3個frame。GUS框架結構是mixed initiative的,使用者可以有一定的對話主導權。該框架還可以完成自動關聯多個frame自動填slot的操作。為了完成多個frame之間動態shifting,可以用一個graphical interface來將幾個frame連結起來。

2.用NLU進行填slot

這部分分為三塊:domain識別(個人理解是大類識別)、intent識別(個人理解是具體子任務識別,具體想完成什麼任務)、填slot。其中前兩個可以認為是分類問題,第三個可以認為是sequence labling的問題。針對這三個問題,有傳統方法和NN方法兩大類。

傳統方法:

現在在工業界還是有很多在用正則的這種hand-carfted的方式來進行設計以及識別,是基於rule的實現方式。稍稍加進去一點ML演算法的是用CFG進行語義拆分,形成一個樹形層次結構,進而將語料中的特定部分填入slot裡。這種基於規則的方式有高識別率,且若域很窄、專家知識可以簡單獲得,這種方法的覆蓋率也會較好。但是這種方法耗時耗力,而且會出現recall problems。

稍高階一點的傳統方式是使用監督ML,訓練分類器來將句子map到不同的domain和intent類中,再用一個sequence model預測句子中有哪些slot要填,然後將句子map到slot fillers中。在這些分類器中,造各種特徵,如用n-gram、命名實體、特定的lexicon等。

NN方法:

除了用這種分類的模型去做之外,還可以用序列模型去做,直接為句子中的每個詞分配一個slot label,如MEMM、CRF、RNN等模型。同樣需要標註好的訓練集和測試集,採用IOB方式進行語料標註,對於每個slot label,標註I和B,再整體標註一個O,若有n個slot,則一共有2n+1個tag。對於像MEMM、CRF這種傳統方法,造各種特徵。NN方法不用造特徵,輸入是words,用word embedding或者one-hot的形式表示,輸出是各個單詞對應的IOB tag和domain、intent分類。然後就可以進行slot filling操作,對各個槽的內容進行規範化的話,可以用一個同義字典。

在工業界中,經常將基於規則的系統和基於ML的方法進行結合做半監督學習。

3.評估slot filling:

intrinsic:Slot Error Rate、slot precision、recall、F-score等

extrinsic:task error rate

4.其他元件:ASR(automatic speech recognition)、記錄對話狀態(dialog state)

四、VoiceXML —— 基於框架的DA的一個簡單的XML方式實現

在VoiceXML中,每個slot叫field,每個field都有一個對應的變數名。會有特定的prompt進行錯誤處理。一旦一個field已經被填,則標記成filled狀態。升級版的VoiceXML是有內建的data type的,而且mixed initiative。

五、評估對話系統

評估使用者滿意度:

直接用調查問卷的方式,但是這種基本不可行。間接的方法可以是用task完成率(maximize)和問題出現率(minimize)來進行衡量。

Task completion success:可用slot錯誤率或者子任務完成百分比衡量

Efficiency cost:使用對話時長或者使用者correct error的時長百分比衡量

Quality cost:ASR不回答或者發生聽不懂回答的次數、slot error rate

六、對話系統設計

1.理解使用者意圖本質、理解使用者和任務

2.Wizard-of-Oz 原則:使用者以為是在和軟體打交道,實際上幕後操縱的是human

3.對使用者進行反覆迭代測試