作者:Haoyang Wen, Yijia Liu, Wanxiang Che*, Libo Qin, Ting Liu

來源:COLING 2018

原文鏈接:aclweb.org/anthology/C1

轉載請註明出處:學習ML的皮皮蝦

Introduction

面向任務型對話中,傳統流水線模型要求對對話狀態進行顯式建模。這需要人工定義對領域相關的知識庫進行檢索的動作空間。相反地,序列到序列模型可以直接學習從對話歷史到當前輪迴復的一個映射,但其沒有顯式地進行知識庫的檢索。在本文中,我們提出了一個結合傳統流水線與序列到序列二者優點的模型。我們的模型將對話歷史建模為一組固定大小的分散式表示。基於這組表示,我們利用注意力機制對知識庫進行檢索。在斯坦福多輪多領域對話數據集上的實驗證明,我們的模型在自動評價與人工評價上優於其他基於序列到序列的模型。

本文著眼於Seq2Seq模型,通過嘗試解決《A Copy-Augmented Sequence-to Sequence Architecture Gives Good Performance on Task-Oriented Dialogue》(Eric and Manning, 2017)中對話狀態表示和對外部數據檢索的問題來提升對話模型的性能。本文將對話歷史表示為一組分散式表示(《Efficient attention using a fixed-size memory representation》2017)來對對話狀態進行表示,然後通過計算這組表示與外部知識庫中每一個條目的相似度完成對條目的檢索,解碼時通過生成屬性標籤來完成對需要生成的屬性進行檢索。

Model

1.編碼器

輸入:包含一組用戶和agent的對話utterances。

編碼器是為了將整個對話歷史編碼為utterances的序列表示。先前的對話歷史中的每個單詞都被編碼進一個單獨的序列裏,用 (x_{1},x_{2},...,x_{n}^{IN}) 來逐詞表示整個的對話歷史,其中 n^{IN} 是這個序列的長度。詞被編碼為詞向量,句子被編碼為LSTM的隱層表示,記為

2.對話狀態表示

傳統意義上的DST其實就是將先前的對話歷史轉換成一個Belief state,每個slot都有一組value的概率分佈,主要用於知識庫檢索和實體生成。為了將對話狀態引入Seq2seq學習中,我們用模型來表示belief state,我們不去精確的計算每個slot的概率分佈,而是計算一組分散式表示。

我們假設每輪對話有m個slots,則它的對話狀態可以表示成矩陣:

我們同時假設m也是知識庫的列數量,每個狀態表示 u_{k}^{IN} 由整個歷史表示的attention計算所得:

得分由下式計算:

其中, W^{A}=[w_{1}^{A},...,w_{m}^{A}]R^{d	imes m} 裏的參數矩陣。

3.知識庫表示

本文將查詢知識庫條目的過程轉換為一個attention網路。

第一步就是編碼知識庫表格。每一個知識庫單元都由它的命名向量 phi^{EMB}(f) 和value向量 phi^{EMB}(c) 串聯而得,並且送入給一個非線性tanh函數,最後可以表示為:

知識庫條目 C_{k} 將被表示為 [c_{k,1},...,c_{k,m}] ,包含所有單元的表示。

第二步就是對知識庫條目運用了軟attention,並且attention的值表示的是該條目能夠被用來解碼的可能性。我們用 C_{k}U^{IN} 之間的相似度來表示第k個條目的attention得分。這個相似度是用以下公式計算的:

其實就是兩個向量的點積和。

這種相似分佈被softmax函數轉換為了一種概率分佈,這個概率分佈表示了通過對話歷史 x<i 生成response時,第 e_{k} 個條目能夠被用來解碼的可能性:

知識庫表示 U^{KB} 可以用求和的方法來計算:

其中|T|表示知識庫的條目數量。

因為參數的維度和知識庫的大小是無關的,所以允許在運行中隨時更改知識庫。不僅如此,它不需要去定義調用API抽取信息時的特殊操作。因為我們是直接對條目進行的建模,所以同時也允許通過從非實體中心的知識庫抽取信息。最後,我們通過把對應向量連接起來的方法連接這兩種信息,並且把它們送入一個帶有激活函數的線性層。用 U^{CAT} 來表示 U^{IN}U^{KB} 的連接。兩個矩陣分別由級聯的相應向量連接,這個過程可以記為: U=tanh(W^{CAT}U^{CAT}) ,這裡的U可以被認為是一個基於對話歷史和知識庫的固定大小的內存表示。

4.解碼器

解碼器就是使用先前計算出來的信息來生成句子。Seq2seq解碼器通過編碼器的最後一個隱藏狀態來生成單詞序列。我們記 (h_{1}^{DEC},...,h_{n^{OUT}}^{DEC}) 為解碼器的隱藏狀態, (y_{1},...,y_{n^{OUT}}) 為輸出的句子。模型通過attention機制來結合知識庫表示和對話歷史表示。

(1)Input attention

引入常規attention機制以擴展解碼器,中間步驟 c_{t}^{IN} 其實就是對編碼器隱藏層的加權求和:

(2)Memory attention

除了使用input attention,我們同時還使用另一個來自內存矩陣U的attention向量。

這兩種attention向量和最近的隱藏表示一起被用來解碼。

我們同時引入了copying機制來直接從知識庫抽取實體。生成slot類型的概率可以表示為從知識庫中生成該slot的值的概率之和。所以生成一個詞的概率可以描述為:

5.訓練

通常訓練seq2seq模型都是使用負對數似然(NLL)。

因為缺少對軟知識庫attention的監督,所以只用NLL的話容易造成過擬合,於是我們引入策略梯度來提升軟知識庫attention的表現。也就是說除了傳統的負對數似然外,本文還引入了強化學慣用來加強對條目檢索的訓練。

Action:從知識庫中選擇某一個條目來幫助生成響應。

Reward:該條目中實體出現在對話歷史與當前標準回復中的個數。

所以,條目中的實體出現在對話上下文中越多,此條目用於生成響應的可能性就越高。

最後的聯合loss定義為, lambda 是為了平衡兩個因素的超參數:

Experiment

數據集:斯坦福KVRET數據集中的天氣和導航。

評估指標:

Entity F1 和BLEU。

Entity F1 包括micro-average(微平均)和macro-average(宏平均),主要是為了區分系統中的實體還是黃金響應中的實體。

BLUE就是評估響應的質量。

我們選取了Seq2Seq、CopyNet、KVnet三個典型的模型進行比較,由於實驗設置的不同,我們對上述模型都進行了調整,以便進行一致的比較。模型在兩個領域上分別進行了訓練,其結果如下所示:

模型對比結果

可以看出,模型在大多數的指標上都有較為明顯的提升。

只有weather領域的BLEU分數略低。這是因為兩個原因:第一,response的形式在這個領域相對有限。第二,輸入中的實體很可能在response中被提及,例如「location」。這兩個原因表明,更簡單的模型可能在這種情況得分會更高。

我們還進行了人工評價,主要用於衡量生成回復的自然程度、準確程度、和與人類回復的相似程度:

模型的人工評估結果

可以看出模型在相關指標上較基線也有著明顯提升。

我們對生成對話狀態表示的注意力機製做了可視化,如下圖所示。可以看出,歷史中相關實體較為成功地匹配到了相關的屬性的表示上:

Conclusion

本文提出的框架結合了傳統pipeline和seq2seq模型的優點。對話狀態是通過一個隱式的seq2seq學習。傳統狀態追蹤裏的分佈被建模成一組基於attention網路計算的表示向量,這被認為是集合了每個slot信息的對話狀態表示。我們的模型查詢知識庫條目時也是運用了一種基於attention的方法,所以這種查詢有效緩解了領域特地的問題。同時,我們計算知識庫的表示是通過條目級的attention,並且利用對話狀態表示來聚合,以形成對話歷史和知識庫信息的存儲矩陣。在解碼的時候,我們使用了兩種attention向量,一個是基於內存的attention,一個是基於輸入的attention,引入copying機制來從知識庫中直接複製單詞以提升檢索精確實體的能力。

推薦閱讀:

相關文章