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

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

二、對話狀態:解釋對話行為

對話狀態包括到當時節點為止框架的整個狀態,需要總結使用者的整體限制條件(constraint)

對於如何判斷使用者的輸入是一個question、statement還是一個suggest,一個稍簡單的方法是對於yes-no類問題可使用語法原則aux-inversion(即助動詞出現在主語之前多為yes-no類問題),但是對於用yes-no問題包裝起來的請求(一種較為polite的說法)使之表面上看起來像個question但實質上是一個quest,同時也存在用statement包裝起來的question的情況,如check問題,這些都屬於是非直接的speech act。上述這些是屬於確定對話行為的function的問題。有一種解決方式是利用語音輸入時的語調來進行輔助判斷

1. 對話行為解釋演算法

一般來說,對話行為檢測和填槽操作是聯合在一起進行操作的。一個對話行為解釋演算法首先用一個分類器來確定句子的function到底是什麼,是一個監督分類問題,訓練語料的特徵包含很多unigram和bigram特徵、語調特徵、標點符號特徵、對話上下文等。第二個分類器是用於決定那個slot需要填,如用CRF或者基於IOB標籤的RNN演算法。同時,由於問題域已經確定,所以slot-value對的數量是有限的,因此也可以使用多分類演算法。

總體來說,對話行為解釋演算法是由兩個分類器組成,可以使用傳統的多分類模型(如LR、SVM等),如果訓練資料較為充分,也可使用端到端神經網路模型。

2. Detecting correction acts

有一些使用者輸入是非常重要的,對於這類輸入如果對話系統理解錯誤,使用者會通過重述來糾正錯誤,這種操作叫correction act。對話系統很有必要來對這類correction act進行檢測。但是通常這類act很難檢測出來!!雖然可以從使用者輸入的語調上提取出一些特徵,但是這樣同時會使一些非correction act的輸入誤判。這類correction act的特點是:要麼完全重複,要麼在原話的基礎上省略幾個詞。對於這類act的檢測可以用分類器,一些常用的特徵如lexical特徵、語義特徵、語音特徵、語調特徵等。

三、對話策略(即基於整個對話狀態來決定給使用者回覆什麼)

1.生成對話行為:確認或者拒絕

需要對使用者輸入的解釋正確性進行確認,通常有兩種方法:跟使用者確認一下理解是否正確(confirming)和拒絕(rejecting)。rejecting就是回覆比如說“沒聽明白”這類的東西。

對於第一種方法(confirming),可以用顯性確認策略,就是系統直接用一個yes-no類的問題對使用者進行提問。比如U說I'm leaving from Baltimore. 然後A就說Let's see then. I have you leaving from Baltimore. Is that correct? 也可以用隱性的確認策略,如在接下來的提問中重複一下系統對剛才對話的解釋。比如U: I want to travel to Berlin. A: When do you want to travel to Berlin?

這兩種方法各有利弊,顯性確認策略可使使用者更方便地糾正系統的誤理解,因為使用者可以直接回復一個yes或者no來進行確認,但這種方法比較尬,不自然,而且增加了對話的長度。隱性確認更加自然一些。

另一種方法(rejecting),即類似於I'm sorry, I didn't understand you.這類的回覆。當系統拒絕使用者輸入是,通常跟著一個需要確認detail的問題,一個更加detail的問題,類似於是一個guide,告訴使用者明確回答什麼。或者用一種rapid reprompting的方式,就是直接說"I'm sorry?"或者"What was that?",使用者一般對這種說法比較接受。

可以用很多特徵來決定是用顯性確認、隱性確認策略還是拒絕來回複用戶,如ASR系統中的置信度或cost of making an error,設幾個閾值來確定各個回覆策略的邊界。

2. 一個simple policy

對於整個對話狀態的跟蹤,可以直接簡單地將使用者輸入的slot-fillers都結合到一起,然後訓練一個分類器來得出概率。但是這種需要積累大量使用者資料,這是非常困難的!!

3.MDP

前邊說的方法是隻基於過去的對話內容,完全忽略了所進行的action是否會帶來成功的outcome(對於基於task的對話系統來說,就是指訂票成功等行為),但是隻有在經歷了較多輪對話之後才能知道是不是一個成功的outcome。對於這種情況,可以用RL來解決,RL意在是future reward最大化。馬可洛夫決策過程就是其中非常基礎的部分。

在對話系統環境下的MDP,我們假設一個狀態集S,表示agent可採取的對話狀態,動作集A表示agent可採取的對話行為,回報r(a,s)表示agent在一個狀態s中採取行為a獲得的回報,通過使回報最大化來確定應該給使用者反饋什麼。這裡的動作集中包含諸如speech act、查詢資料庫、詢問問題、終止對話等行為。

原則上,一個MDP的狀態可包含對話的任何可能的資訊,如整個對話歷史,但是這樣會使可能的對話狀態數量變得特別特別多,為了簡化,可採用一些和最近相關的行為,如當前對話行為的slot值、最近問使用者的一個問題、ASR置信度等。比如對於Day-and-Month這個問題來說,一共有411個狀態,其中包含既有月又有日的狀態(366個)、只含月的狀態(12個)、只含日的狀態(31個)、一個初始狀態再加上一個最終的狀態。需要明確使用者的目標是什麼,然後最有效地完成該目標(輪數少、錯誤少),確定回報函式。

一個directive的行為不易出錯,但是對話進度較慢,一個稍open-prompt的問題雖然輪數少,但是容易出錯。因此,最佳的策略需要依回報函式中的各個權重w和ASR元件的錯誤率來決定。如何計算一個給定狀態序列的期望回報?可以用discounted rewards,就是對各個狀態的回報加權衰減進行累加,引入一個值為0~1之間的衰減因子,是agent更關注當前的回報而不是future回報。用這個discounted reward構成的Bellman equation,可以計算任意狀態任意動作的期望累積回報。Bellman equation的含義是,一個給定狀態/行為對的期望累計回報Q(s,a),等於當前狀態的回報 + 所有可能的下個狀態、下個動作的回報的衰減期望之和。可用value iteration演算法來計算Bellman equation並確定合適的Q值。

MDP只對很小的example上有用,在現實的對話系統中沒有直接用這個的,一般都是用POMDP。在POMDP中,加入了隱變數來表示對真實對話狀態的不確定性。對於MDP和POMDP來說,都存在計算複雜度的問題,因為各種狀態的獲得都是靠模擬使用者產生的,不是真實的使用者行為。近期的一些研究把RL加入到神經網路中來建立真實的基於任務的對話系統。

三、NLG

在information-state框架通常分為兩個階段,content planning(說什麼)和sentence realization(怎麼說)。這裡先假設在dialog policy階段已經完成了content planning的部分了。這裡關注sentence realization的部分。這部分分為兩步,首先是生成一個delexicalized string,即把特定的詞用一個通用的representation來代替,可以是slot名字,這個是較容易生成的。一旦生成了這個delexicalized string,可以用從使用者輸入中得到的資訊填進去,也就是relexicalize。為了生成delexicalized string,需要從大量任何人之間真實交流的對話進行訓練。

可以用n-gram模型來對對話行為進行訓練逐個生成單詞,最後形成整個句子。對於語料中的句子還要一定的處理,如基於規則來給句子打分,懲罰過長和過短的句子。近期的工作將這種簡單的n-gram方法替換掉了,替換為神經網路模型。同時,也可以設計NLG演算法來處理特定的對話行為,如生成clarification question等。這種對話行為可以用rejecting來實現,但是現實生活中人們多用clarification question來重新得到誤理解的元素。這些clarification question可以用規則生成,也可以建立分類器來猜句子中那個slot可能被misrecognized。