任務型對話(二)—— DST(對話狀態追蹤)

1,概述html

  關於任務型對話的簡介看任務型對話(一)—— NLU(意識識別和槽值填充)網絡

  首先咱們來看下對話狀態和DST的定義。post

  對話狀態:在$t$時刻,結合當前的對話歷史和當前的用戶輸入來給出當前每一個slot的取值的機率分佈狀況,做爲DPL的輸入,此時的對話狀態表示爲$S_t$。性能

  DST(對話狀態追蹤):就是根據全部對話歷史信息推斷當前對話狀態$S_t$和用戶目標。學習

  因爲在ASR和NLU這兩個環節會存在偏差,所以輸入到DST中的內容是N-best列表(對於ASR,不是輸入一條句子,而是N條句子,每條句子都帶一個置信度。對於SLU,不是輸入一條意圖(槽值對),而是N個意圖(槽值對),每一個意圖(槽值對)都帶一個置信度)。因此DST每每也是輸出各個狀態的機率分佈,這樣的表示也方便在多輪對話中對狀態進行修改。具體的狀況以下圖所示:url

    

2,DST的經常使用方法spa

  DST的經常使用方法主要有三種:基於規則的方法,生成式模型,判別式模型,目前來看判別式模型的表現最好,也是當前研究的最多的方向。翻譯

  1)基於規則的方法3d

  基於規則的方法通常是用1-best的結果做爲輸入,並且輸出的狀態也是肯定型,基於規則的方法須要大量的人工和專家知識,所以在較複雜的場景適用性不強。固然基於規則的方法也有它的優勢,基於規則的方法不依賴於對話數據,所以在沒有對話數據的狀況下很適合冷啓動。基於規則的方法用N-best的結果做爲輸入也有研究,但總的來講實現起來很複雜。htm

  2)生成式模型

  生成式模型主要是利用貝葉斯網絡推斷來學得整個狀態的機率分佈,其通用表達式以下:

    

  上面式子中$b(s)$表明上一時刻狀態的機率分佈,$b'(s')$表明當前時刻的狀態分佈,$u'$表明當前時刻的用戶輸入,$\tilde{u}'$表明當前用戶輸入的觀測輸出,$s'$表明當前時刻的狀態,$s$表明上一時刻的狀態,$a$表明上一時刻的動做,$\eta$是一個常數。

  能夠看出上面的公式仍是比較複雜的,所以實現起來也比較複雜,傳統的生成式方法還要列出全部可能的狀態,以及狀態機率轉移矩陣等。

  3)判別式模型

  判別模型用一個最簡單的公式建模,能夠表示成:

    $b'(s') = P(s' | f')$

  其中$b'(s')$表示當前狀態的機率分佈,而$f'$表示對ASR/NLU的輸入的特徵表示,早期的判別模型會利用SVM,最大熵模型,CRF等來建模。隨着神經網絡的興起,DNN,RNN等模型也愈來愈多的佔領了這個領域。

3,DSTC數據集

  DSTC全稱爲Dialogu State Tracing Challenge(對話狀態最終挑戰)。在閱讀接下來的論文的時候須要對這些數據集有所瞭解,以DSTC2爲例,一個餐館預約的數據集,數據集中提供了N-best ASR的結果,N-best SLU的結果。還提供了槽以及對應的值的信息。具體的能夠去這裏下載。

4,判別式模型在DST上的相關工做

  接下來咱們將按照,DNN,RNN,NBT,遷移學習等模型的順序來介紹一些相關的論文。

  論文一:Deep Neural Network Approach for the Dialog State Tracking Challenge 

  在判別模型中是把DST看成一個分類問題,而且對ASR/NLU提取相關的特徵做爲模型的輸入,這篇論文提出了一種特徵工程來提取N-best NLU的一系列特徵,而後用一個前向的DNN來做爲分類器,具體的模型結構以下:

    

  接下來看下整個輸入輸出流程:

  在$t$論對話中給定一個槽$s$,$S_{t, s}$表示在這$t$論對話中每一輪NLU的N-best列表中關於槽$s$所對應的值$v$,爲了應對未知的值,還額外給定了一個Unknow來表示未知的值,咱們將這$|S_{t, s}| + 1$個值做爲模型的輸入,那麼問題來了咱們該怎麼去提取這些槽值的特徵呢?如上圖所示,$f_1, f_2, ......, f_M$就是表示不一樣的特徵,論文中給出了12中特徵,爲了保證閱讀感(主要翻譯的不到位),就直接截圖了:

    

  可是論文的輸入並非對前$t$輪一樣的方式處理,而是有區分的處理,從$t$往前數前$T$輪直接用上面12中特徵來表示,可是對於$t-T$輪以前的所有相加做爲一個總體。那麼問題來了,若是$t < T$怎麼辦,對於$t - T < 0$的狀況下,$f_i(t', v) = 0$。

  對一個slot的不一樣的值,模型的參數是共享的,而對於不一樣的slot之間參數是不共享的,也就是說每一個slot都有一個屬於它本身的分類器。

  最後的輸出結果以下:

    

  上面的式子其實相似於softmax,惟一不一樣的是對於不屬於$s$的槽統一用一個參數$B$來處理,而對於屬於槽$s$中的值$v$輸出是$E(t, v)$。

 

  論文二:Word-Based Dialog State Tracking with Recurrent Neural Networks 

  上面的論文是用NLU的結果做爲輸入,但從這篇文章開始的後幾篇文章都直接用ASR(語音識別)的結果做爲輸入,那這樣作的結果有什麼好處呢?主要有兩個優勢:

  1)NLU單獨做爲一個子模塊的時候,也會產生偏差,這樣ASR+NLU的偏差傳遞會致使在進入到DST的時候就已經存在較大偏差了,所以合併NLU和DST能夠減小這種偏差傳遞的影響。

  2)在對任務型對話系統作評測時,沒法判斷真個系統產生的錯誤時來源於哪一個子模塊的,也就沒法有效的定位錯誤的來源,所以減小子模塊能夠提升錯誤定位的準確率。

  這篇論文時基於詞級的對話狀態追蹤,由於它的輸入時N-best ASR的結果,使用RNN模型來序列建模,採用n-grams來提取ASR的特徵。一樣本篇論文也是對每一個slot單獨建模,每一個模型都是一個多分類器,類別的個數和該slot下對應的value的個數相等。

  1)特徵表示

  首先來看下是如何利用n-grams來表徵輸入的,具體的見下圖所示:

    

  模型的輸入除了當前輪的ASR,還有上一輪的對話動做(對話動做表示爲act-type (slot = value)),對這二者分別取1-gram,2-gram,3-gram。

  從上圖能夠看出,主要包含$f,f_s,f_v$這三種特徵,$f$是直接對ASR的結果和對話動做取n-grams的結果,$f_s$和$f_v$都是對$f$中的詞進行$tag$(對slot用<slot>替換,對value用<value>)替換獲得的模板泛化特徵,其中$f_s$是對槽提取的特徵,適用於該槽下對應的全部的值,而$f_v$對每一個value都進行提取,屬於每一個值的特有特徵,這樣作有助於模型泛化。

   而後$f,f_s,f_v$都是有ASR和對話動做兩部分鏈接而成。ASR是N-best列表,分別提取分別取1-gram,2-gram,3-gram,而後對於重合的n-gram就按照置信度相加;對話動做也是一樣,不過幾率置1;具體能夠參考上圖,其實本質上就是對ASR和對話動做提取n-gram,進行各類組合,目的是經過這種低階的多維組合,能夠在高層重構出各類特徵組合的可能性,來模擬甚至超越人工提取的各類特徵。那麼每一個n-gram怎麼用向量表示的呢,我猜應該是相似於one-hot,以$f$爲例,將整個訓練集提取相應的n-grams,而後將$f$組成一個大的n-gram詞彙表$M$,先初始化一個長度爲$|M|$的0向量,而後對於當前的輸入提去n-gram,再用相應的n-gram的分數去填充那個0向量(以上一段我的猜想,主要是論文中沒有提到,不過論文中提到了$f$的維度是高維,達到3500,再加上在計算的過程當中一系列的向量拼接操做,因此這也符合這種狀況)。

  2)模型結構

  輸入的表徵肯定好以後就要看看模型的結構了,模型的結構以下圖所示:

    

  上圖中的$m$是一個記憶向量,$p$是某個slot下對應的value的機率分佈,用一個$h$向量來表示特徵$f$的低維表示$f, p, m$中的操做符是拼接的意思。

    

  而後爲了利用$f_s, f_v$的特徵,提出了下面的表達式:

    

  $g$向量保證了模型的泛化性能,更新$m, p$。

    

    

 

  論文三:Neural Belief Tracker: Data-Driven Dialogue State Tracking

  這篇論文提出了NBT這個模型,本論文也是合併了NLU和DST,直接用ASR的結果做爲輸入,而且引入了詞向量來進行表徵,總體上理解較上面兩篇論文要簡單。

  話很少說,先上一張模型結構圖:

    

  上圖中的最上一層是輸入,能夠看到總共有三個輸入,分別是當前用戶的輸入$r$,當前的槽值對候選集$c$,上一時刻系統的對話動做$t$。首先咱們來看下用戶的輸入怎麼表徵:

  1)用戶的輸入表徵

  本文對用戶的輸入$r$分別提出了兩種表徵方法:NBT-DNN,NBT-CNN。

  NBT-DNN的結構圖以下:

    

  具體的表達式以下:

    

  上面式子中$u_i$表示句子中第$i$個詞的詞向量,$V_i^n$表示從第$i$個位置開始取的n個詞的向量拼接的結果。其實就是n-gram的方式取詞。

    

    

    

  這裏取了1-gram,2-gram,3-gram的結果,最後相加獲得用戶輸入的向量表示$r$。

  NBT-CNN的模型結構圖:

    

  其表達式以下:

    

  其實這裏用卷積替代了n-gram,上面式子中的$n$表示卷積核的大小,$n = 1, 2, 3$,而後用最大赤化得到最終的向量表示:

    

    

  這樣就獲得了最終的用戶輸入的向量表示。

  2)語義解碼

  從第一幅圖能夠看到,用戶的輸入$r$和候選的槽值對是有相互做用的,這個相互做用該怎麼表示呢?

    

  上面$c_s$是槽$s$的詞向量,$c_v$是對應的值的詞向量,$r$ 和$c$之間是element-wise相乘的。

  3)上下文建模

  也是第一幅圖中描述的,用戶的輸入$r$和系統對話動做$t$之間的關係。

  做者在這裏定義了兩種系統的動做:一是系統請求用戶告知某個槽的值,如「what proce range would you like」,這種請款系統會提到一個槽的信息,用$t_q$表示;二是系統向用戶確認槽值對是否正確,如「how about Turkish food 」,在這種請款下用戶會提到一對槽值的信息,其中槽用$t_s$表示,值用$t_v$表示。

    

  在上面如$(c_s . t_q)$是計算點積獲得一個類似度能夠做爲門控機制用來控制對$r$的選擇,這種作法在系統問「how about Turkish food」,用戶回答「yes」的時候特別有用,由於此時用戶並無傳遞任何槽值的信息進來。這樣就能夠利用上一個系統對話動做的信息。

  由於候選槽值對每次只選一個,所以最後作一個二分類的決策:

    

  其中$\phi_dim = \sigma(Wx + b)$, $dim$表示輸出的維度。

  4)信念狀態更新機制

  上面只是對某個槽值對作了二分類,那該怎麼更新整個狀態機率呢?本文定義了一個基於規則的信念狀態更新機制。

  在$t$輪對話時,用$h^t$表示ASR的N-best集合,$h^n_i$表示第$i$條句子,$p^n_i$表示第$i$個句子的置信度,$sys^{t-1}$表示系統在上一時刻的動做。則對於槽$s$更新其全部的值的機率分佈:

    

  結合以前全部的對話歷史,能夠表示爲:

    

  以後取機率大於0.5的槽值對出來更新當前的狀態值,沒有的話就依然保留上一時刻的值。這句話怎麼理解呢?也就是下面的式子成立了才執行上面的式子,不然就不對上一時刻的信念狀態作修改。

    

 

  論文:Fully Statistical Neural Belief Tracking

  這篇論文是在上一篇論文的基礎上作了改進的,在上篇論文中提出了一個基於規則的信念狀態更新機制,對於這種基於規則定義的機制遷移到新的任務時須要大量的修改,所以本文提出了新的信念狀態更新機制。

  一樣先上模型結構圖:

    

  首先定義一下問題:在一個給定的$s \in V_s$,讓$b_s^{t -1 }$ 表示$t-1$時刻的信念狀態(一個長度爲$|V_s| + 2$的向量,這裏的2是指還包含兩個值:None和「dont care」)。在上一篇文章中更新信念狀態的機制以下:

    

    

  做者認爲這種機制並無學到$b_{s, v}^{t-1}$的內容,只是簡答的相加而已,並且還要在$b_{s,v}^t ≥ 0.5$的時候才執行更新。所以這種方法並很差。做者也就提出了兩種新的方法:

  1)One-Step Markovian Update

  其表達式以下,直接用softmax生成機率分佈:

    

  上面式子中給出的兩個矩陣的每一行都是對一個槽值對的操做。所以這種方式有一個問題,訓練樣本的稀疏性,每一個對話中可能只包含一個槽值對,在訓練的時候沒法更新$W_{curr}$和$W_{past}$,所以做者提出了第二種方法。

  2)Constrained Markovian Update

  在這裏做者構造了一種不一樣的矩陣,其表達式以下:

    

  讓對角線的元素相同,其他的元素相同,這樣就能夠起到訓練的時候能更新到全部的參數。結果也代表這種方法的性能更好。

 

  論文:INCREMENTAL LSTM-BASED DIALOG STATE TRACKER

  這篇文章提出了一個簡單的方法,直接用LSTM來表示ASR的1-best的輸入,而後對每一個slot作多分類,總體來講效果也還行。

  模型結構圖以下:  

    

  其表達式以下:

    

  上面式子中$a$爲ASR的輸出,$r$爲對應的置信度。利用一個網絡來進行表徵,而後倒入到LSTM中,並softmax多分類。

    

    

  最終在DSTC2上的結果對比:

    

  在作了一些小處理以後的結果還行,不過這篇文章是15年的,可是實現起來簡單。

參考文獻:

MACHINE LEARNING FOR DIALOG STATE TRACKING: A REVIEW 

The Dialog State Tracking Challenge Series: A Review

相關文章
相關標籤/搜索