基于深度學習方法的對話狀態跟蹤綜述
1. 引言
1.1 研究背景
隨著互聯網和個人智能終端的普及和廣泛應用,各種各樣的互聯網應用和個人應用如雨后春筍般不斷涌現,如出行預定、網上購物和提醒事項設置等。這使得人們的日常生活和出行變成越來越方便,但是越來越多的應用增加了用戶的時間成本和使用難度,因此對虛擬個人智能助手的需求日益增加。對話式人工智能是實現虛擬個人智能助手的核心技術,可以分為開放域對話系統和面向任務的對話系統兩個大類。然而,人類對話本質上是復雜的、含有歧義的,距離創造出一個可以面向任意場景的開放域對話人工智能仍有很長的路要走。因此,工業實踐上聚焦于建立完成特定任務的對話系統,即任務型對話系統。任務型對話系統首先通過理解消息、主動詢問和解釋澄清來確定用戶的需要,隨后通過調用應用程序接口完成對相關資源的查詢,最后返回正確的結果。在用戶和對話系統的交互過程中產生的對話可以被叫做任務對話,它是一段由任務驅動的多輪對話。一個典型的模塊化任務型對話系統如圖1所示,由四個關鍵部分組成:
- 自然語言理解模塊:將用戶文本消息轉化為可以被機器理解的語義標簽,如意圖、槽位和槽值;
- 對話狀態跟蹤模塊:在對話中的每一輪基于對話歷史維護最新的對話狀態,通常表示為一組槽位-槽值對;
- 對話策略模塊:基于當前的對話狀態,決定對話系統的下一步動作,比如確認用戶的需要,查詢資源庫和提供滿足條件的結果等。另外,對話狀態跟蹤和對話策略模塊的組合被稱為對話管理器;
- 自然語言生成模塊:將對話策略模塊決定的系統對話行為轉換成人類的語言,回復給用戶。
圖1 模塊化任務型對話系統結構圖
其中,對話狀態跟蹤的研究是任務型對話系統領域中十分重要的研究課題之一。具體來說,對話策略和自然語言生成兩個模塊需要基于當前的對話狀態,才能選擇下一個系統動作并生成系統回復。因而,對話狀態的正確識別對于增強任務型對話系統的整體性能至關重要。
1.2 動機
近年來,隨著深度學習方法在圖像、語音和文本領域的突破,它的應用范圍逐漸地擴張到對話系統領域。得益于其強大的表示能力,建立在深度學習之上的任務型對話系統的性能不斷提升,逐漸地成為了主流。而對話狀態跟蹤作為任務型對話系統的核心模塊,許多基于深度學習的對話狀態跟蹤器(可以被稱作神經對話狀態跟蹤器)也被提出,展現出了優異的性能和更強的泛化能力。另一方面,許多基準數據集的提出,如DSTC2[1]、WOZ 2.0[2]、MultiWOZ 2.0[3]和CrossWOZ[4]等,讓使用深度神經網絡結構解決對話狀態跟蹤任務成為可能,同時提供了測試平臺以廣泛地、公平地評估對話狀態跟蹤系統的性能。蓬勃發展的神經對話狀態跟蹤研究呼吁系統性地調研和分析最新進展的工作出現。對此,我們在本篇文章中深入整理總結了基于深度學習方法的對話狀態跟蹤的發展歷程。
1.3 對話狀態跟蹤的新范式
自然語言理解和對話狀態跟蹤模塊緊密相關。從模塊的輸出形式來說,兩者都完成了對話的槽位填充,事實上他們卻扮演了不同的角色。自然語言理解模塊嘗試對當前的用戶文本消息進行分類,比如意圖、領域類別以及消息中每個單詞的所屬槽位。也就是說,它通常通過為用戶文本消息中的每個單詞標注槽位標簽的方式完成槽位填充。然而,對話狀態跟蹤模塊不分類或者標注用戶消息。而是基于整個對話歷史,嘗試為預先定義的槽位列表中的每個槽位名找到相應的槽值。在對話的每一輪,它在到當前輪的整個對話歷史中進行檢索,決定哪些內容可以被填入槽位列表中的某個特定槽位中。不難發現,與對話狀態跟蹤模塊相比,自然語言理解模塊有如下幾個缺點:
- 它的輸入一般只有本輪的用戶消息,分類過程缺少了系統消息以及對話歷史的幫助;
- 不能識別槽值不直接出現在文本中的槽位。例如,用戶在預定酒店時要求其房間有無線網絡,此時“網絡”槽位的槽值應為“是”,該槽值并沒有直接出現在用戶輸入的文本中;
- 錯誤的語義槽識別結果可能會對后續模塊產生不良影響。
早期的對話狀態跟蹤方法將自然語言理解模塊的輸出作為對話狀態跟蹤模塊的輸入,而最近的方法考慮到自然語言理解模塊的諸多限制,直接使用原始用戶消息來跟蹤對話的狀態。
2. 任務概覽
在這一節中,我們首先給出對話狀態跟蹤的任務定義,然后簡要描述常用的數據集和評價指標。
2.1 任務定義
對話狀態
對話狀態跟蹤的目標是,在對話的每一輪,從系統回復和用戶話語中抽取相關信息更新對話狀態。對話狀態是連接用戶和對話系統的橋梁,包含了對話系統完成一系列決策時需要的所有重要信息。考慮到諸如跟蹤效率、跟蹤準確率、領域適應性和端到端訓練等眾多要求,對話狀態存在許多的表現形式。接下來以第二屆對話狀態跟蹤挑戰DSTC2提供的任務型對話數據集為例,簡單介紹該數據集的對話狀態的定義。
在對話中,用戶通過指定約束條件尋找合適的餐廳,也可能要求系統提供某些槽位(如餐廳的電話號碼)的信息。數據集提供了一個本體(ontology),其中詳細地描述了所有可能的對話狀態。具體來說, 中列出了用戶可以詢問的屬性,被叫做可請求槽位(requestable slot),比如餐廳提供的菜品類型或者餐廳的電話號碼。它也列出了可以被用戶提出作為約束條件的屬性及其可能的取值,這些屬性被叫做可通知槽位(informable slot)。圖2展示了DSTC2中的 的細節。因此,某個對話輪的對話狀態被定義為三個部分:
- 目標約束(Goal Constraint):每個可通知槽位的值都可以由用戶指定,作為用戶達成某一目標(如預定一個西苑餐廳周日下午6點的6人桌)的約束條件。槽值可以來自 ,也可以是特殊值 或 。其中,表示用戶對該槽位的取值沒有偏好, 意味著用戶尚未為這個槽位指定一個有效的目標;
- 被請求槽位(Requested Slots);這些槽位的槽值可以被用戶詢問,應該由系統通知給用戶;
- 當前輪的搜索方法(Search Method):搜索方法表明了用戶與系統交互的類別。 表示用戶嘗試發起一個約束, 表示用戶需要一個替代選項, 表明用戶想要詢問某個槽位名對應的槽值, 表明用戶想要終止對話,而其他情況的類別都為 。
圖2 DSTC2的本體ontology
在DSTC2關于對話狀態的定義中,當前輪的搜索方法也可以看作是一個特殊的槽位 Search_Method,它的取值有5種可能。由此可見,任務型對話的對話狀態可以統一定義為一組(槽位,槽值)對,隨著對話的進行不停的更新。接下來給出對話狀態跟蹤任務的形式化描述。
形式化定義
令 表示一個 輪對話, 和 分別表示對話第 輪的系統回復和用戶話語。假設我們有 個 預定義的槽位 ,那么對話第 輪的對話狀態被定義為 。其中, 表示槽位 的相應槽值, 是槽位 的取值空間。把所有槽位的取值空間放在一起,可以構建出一個本體 。
基于對話 和本體 ,任務被定義為學習一個對話狀態追蹤器 ,該追蹤器可以有效地捕捉用戶在對話中表達的意圖。根據定義可以看出,跟蹤器可能需要在每一輪預測多個槽位的值。除此之外,一些槽位的取值空間可能是巨大的,也就是說,這些槽位存在大量的可選值。這些現象讓對話狀態的預測變得更有挑戰性。
值得注意的是,我們使用“槽位”這個術語表示領域名稱和槽位名稱的組合,從而包含領域和槽位信息。例如,我們使用餐廳-價格范圍而不是價格范圍,去表示餐廳領域的價格范圍槽位。當對話包含多個領域時,這種格式非常有用,它也被許多之前的研究工作廣泛采納。
2.2 數據集
神經對話狀態跟蹤器需要一定規模的面向任務的對話數據集進行訓練或者驗證,同時在這些數據集中每個對話輪都應該有相應的對話狀態。由于面向任務的對話數據獲得難度高且標注對話狀態費時費力,大大地增加了人工標注工作量。目前大部分方法,采用的訓練測試數據集主要以DSTC2、WOZ、MultiWOZ和CrossWOZ數據集為主,數據集的統計數據見表1。
表1 常用任務型對話數據集統計
其中,CrossWOZ 是中文任務型對話數據集,DSTC2和WOZ 是單領域任務型數據集。
2.3 評價指標
運用已經構建好的開放數據集,研究人員可以對神經對話狀態跟蹤器進行訓練,而判斷已訓練的跟蹤器的優劣則需要建立一個通用的評價標準。評估對話狀態跟蹤器的常用指標是聯合目標準確率(Joint Goal Accuracy)和槽位準確率(Slot Accuracy)。
聯合目標準確率
在對話的每一輪,將對話狀態跟蹤器的輸出和人工真值標注進行對比。其中,人工真值標注包括了所有可能的(領域,槽位)對的槽值。聯合目標準確率被定義為每個槽位的值都被正確預測的對話輪的比例。如果一個槽位還未被提及,它的人工真值標注被設為 ,而且值為 的槽位也需要被預測。聯合目標準確率是一個相對嚴格的評價指標,即使一個對話輪中只有一個槽位被錯誤地預測,該輪的對話狀態也是錯誤的。因此,一個對話輪的聯合目標準確率的取值要么是 ,要么是 。
槽位準確率
槽位準確率獨立地將每個(領域,槽位,槽位)三元組和其對應的人工真值標注進行比較。與聯合目標準確率相比,它的評價粒度更為精細,但不適合評價對話跟蹤器的整體性能。每個對話輪中大多數的槽位未被提及(即槽值為 ),即使槽值全部被預測為 ,槽位準確率也會很高。
3. 現有方法及分類
對話狀態跟蹤的歷史由來已久。早期的研究工作使用人工設計的規則或者統計方法實現對話狀態的跟蹤。
- 由于人工總結的規則無法覆蓋對話中的所有情形,基于規則的方法有許多的限制,如有限的泛化性能、高錯誤率、較差的領域適配能力等等。
- 而統計方法建立在數據的概率分布之上,其性能被數據中的噪音、歧義、矛盾等嚴重損害。
隨著硬件計算資源的快速提升以及深度學習的崛起,研究人員開始考慮把各種各樣的深度神經網絡結構引入到對話狀態跟蹤器中,代表性的研究工作如DNN[5]、RNN[6]、NBT[7]和TRADE[8]等。這些神經對話狀態跟蹤器在大量的有標注數據集上訓練之后,其性能超越了基于規則和統計的方法。相比于早期方法,該類方法將研究者從設計規則的繁雜工作中徹底解放出來,同時也增加了對話狀態跟蹤器相對于不完美數據的魯棒性。
典型的神經對話狀態跟蹤器以對話歷史、本輪對話和預定義的槽位列表為輸入,輸出到本輪對話為止的最新對話狀態。為了更為具體地總結現有方法的核心特點,我們提出了神經對話狀態跟蹤器的通用結構,包含三個部分:特征抽取、狀態操作預測和狀態解碼。
3.1 特征抽取
3.1.1 槽位與對話的特征抽取
由于需要跟蹤對話狀態中的所有槽位,研究人員關注如何從對話文本中抽取與每個槽位相關的信息,這不僅需要對槽位和對話進行語義表示,還可能需要交互式地對兩者進行建模。因此,槽位與對話之間的信息交互可以分為兩種類型:
- 分離式建模;分別表示槽位和對話
- 交互式建模:獲得的對話表示與槽位相關,槽位表示同樣與對話相關
分離式建模
Mrkšić等人在2017年提出NBT模型,見圖3,
- 利用表示學習方法分別將候選槽位-槽值對和對話中的詞語嵌入到稠密的單詞向量中,
- 在狀態解碼階段,NBT模型才在兩者的表示上進行推理計算,從而判斷該槽位-槽值對是否出現在對話中。
圖3 NBT模型結構圖
這類分離式特征提取方法有如下特點:
(1)得到的槽位特征與對話歷史特征互相獨立;
(2)在一個對話回合內,無論槽位-槽值對有多少,對話歷史的特征提取只需要進行一次。
交互式建模
如果選擇對候選槽位-槽值對和對話進行交互式建模,會有以下兩個缺點
(1)對于完整的本體 的依賴:在應用時,需要明確每個槽位的可能取值,無法識別槽位的未見槽值;
(2)當槽位的可選槽值的數量過多時,這類方法的時空復雜度較高。
為了避免以上的缺點,研究者轉變方向探索建模槽位與對話間關系的方法。Shan等人[9]提出CHAN(Contextual Hierarchical Attention Network)模型(結構如圖4),
- 使用slot-word attention機制從之前每一輪對話中抽取與槽位相關的信息,
- 利用slot-turn attention機制進一步地從整個對話歷史中選取與槽位最相關的特征。
圖4 CHAN模型結構圖
相比于分離式建模,
- 聯合建模槽位和對話歷史可以幫助槽位更精確地定位對話歷史中與該槽位緊密相關的部分;
- 然而,聯合建模的時空復雜度高于分離建模。
3.1.2 槽位間的關系建模
除了建模槽位與對話之間的相關性,有些工作還考慮到槽位與槽位之間可能存在的關系[10, 11, 12, 13],如共指和槽值共現等。
- 共指關系表示一個槽位的值來自于另一個已經存在的槽位;
- 槽值共現指的是槽值間可以有很高的共現概率,如餐廳的名字與它提供的菜品類型高度相關。
不考慮槽位間關系的對話狀態跟蹤器,獨立地預測每個槽位的槽位,忽略了槽位之間存在的聯系。CSFN-DST[10]和SST[11]模型構建了一個schema graph試圖捕獲不同槽位之間的相關性。SAS[12]模型計算了一個槽位相似度矩陣,從而實現相似槽位之間的信息流動和信息交互。在槽位相似度矩陣中,若兩個槽位被認為相似,兩者之間相似度設為 ,否則為 。判斷槽位的相似性有兩種方式:(1)計算不同槽位的名稱和類型之間的余弦相似度,根據兩個超參數判斷是否相似;(2)槽位名稱和類型的K-means聚類結果。
然而,CSFN-DST和SST模型不具有擴展性。在這兩個模型中,人工構建的schema graph不能完全地反映出槽位間的相互關系,同時構建圖的過程中使用了許多先驗知識。對于SAS模型,一方面,超參數難以設定,另一方面,非 即 的相似度設置方案明顯不合理。除此之外,以上三種方法都只依據槽位名稱衡量槽位相關性,可能會忽略或者高估一些槽位之間的關系。為了解決上述缺陷,Ye等人[13]提出了STAR模型,利用槽位的名稱和相應的槽值更精確地建模槽位關系。
3.2 狀態操作預測
對槽位和對話文本進行表示和特征抽取之后,提取后的特征可以被用來確定針對槽位的操作類別,即狀態操作預測。根據不同的槽位更新機制,我們可以將狀態操作分為兩個大類:面向狀態識別和面向狀態更新。采用前者的跟蹤器注重于從整個對話中抽取狀態,而后者更關心狀態跟蹤的效率提升。
面向狀態識別的操作
采用這類狀態操作的方法直接利用提取后的特征預測從對話開始到當前的最新對話狀態,可以不設置狀態操作,也可以設置特殊操作輔助模型完成狀態識別。如圖5中的TRADE模型使用三類狀態操作判斷槽位是否屬于特殊值,即 、 和 。
圖5 TRADE模型結構圖
盡管包括TRADE在內的方法已經取得了不錯的效果,這類方法仍然存在問題:在對話的每一輪,模型都需要預測從對話開始到當前對話為止出現的所有槽位-槽值對。隨著對話的繼續,從越加冗余的對話歷史文本中抽取對話狀態就越加困難,這類解決方案可以稱之為獨立方案,如圖6所示。
圖6 獨立方案示意圖
從方案的表現形式上來說,獨立方案將包含 輪交互的完整對話的對話狀態生成問題拆解成了獨立的 個子問題,子問題間互不干擾。每個子問題的解法是把到當前輪為止的對話歷史看作一個整體,直接從其中生成所有已出現的對話狀態。可以看出這類方法重復預測不變槽位的槽值,這一缺陷導致跟蹤狀態的效率低下,在實際使用中很難達到極短響應速度的要求。
面向狀態更新的操作
采用面向狀態更新操作的方法追求高效地完成狀態跟蹤,盡可能地減少對不變槽位的重復計算,進而減少任務型對話系統的響應速度。比如,SOM-DST(Selectively Overwriting Memory for Dialogue State Tracking)模型[14]通過減少冗余計算和并行跟蹤所有槽位,可以將每輪對話的狀態跟蹤推理時間縮減為TRADE模型的 8%。
具體來說,SOM-DST把對話狀態看作一個可以選擇性重寫的存儲結構(memory),進而將對話狀態跟蹤解耦成兩個子任務:
(1)狀態操作預測子任務決定了對memory中的每個槽位執行的操作類型,包括 、 、 和 等操作;
(2)槽值生成子任務為memory 中需要重寫的槽位生成新的槽值。圖7展示在對話的第 輪,SOM-DST如何更新對話狀態, 操作發生在第 和 個槽位上,第 個槽位的新槽值需要推理并引用第一個槽位的槽值 “center”。
圖7 選擇性重寫示例圖
如圖8中的模型圖所示,SOM-DST將前一輪對話 、本輪對話 和前一輪的對話狀態 作為輸入,對本體 中的所有槽位并行處理,輸出本輪的對話狀態 。實際上,解耦之后的模型只需要生成需要改動的槽位(所有槽位的最小子集)的槽值,狀態操作預測器負責篩選需要生成新值的槽位,槽值生成器只為被選擇的槽位解碼槽值。減少需要解碼的槽位和對所有槽位并行處理使得SOM-DST模型的平均響應時間達到了27ms,相比于TRADE模型的340ms,這是一個更可以被用戶接受的響應時間。
圖8 SOM-DST模型結構圖
與之類似,Lin等人[15]提出最小信念跨度(minimal belief span),認為當系統與不同領域的API交互時,從頭開始生成對話狀態是不可擴展的。他們提出的MinTL框架基于最小信念跨度,在上一輪的對話狀態上進行 、 和 這三種操作,從而實現對話狀態的更新。
我們將這類方法稱為遞進方案,如圖9所示,遞進方案將每一輪的對話狀態看作一種明確的數據結構,在生成當前輪的對話狀態時不光可以看到對話歷史,還可以利用之前輪已生成的對話狀態。該類方法可以根據當前輪對話對之前輪的對話狀態進行更新,從而更快速地完成對話狀態的生成。
圖9 遞進方案示意圖
3.3 狀態解碼
作為神經對話狀態跟蹤器的最后一個分量,狀態解碼部分基于前面分量獲得的所有信息完成對槽值的解碼。雖然跟蹤器的目的是從對話中找出某一槽位的槽值,但是面向不同的應用場景,可以有不同的方式解碼槽值。
3.3.1 基于預定義本體
如果應用中,槽位的所有可能槽值已知,那么在對話的每一輪,狀態解碼器可以試圖尋找與對話歷史最相關的槽位-槽值對。這種解碼方式需要事先知道完整的本體 ,因此歸納為基于預定義本體 的狀態解碼器。
多分類解碼器
對于每個槽位,多分類解碼器從所有可能的槽值中選擇正確的那個,如STAR模型[13]。圖10中,槽位特征 經過一個線性層轉換,獲得的 與該槽位所有槽值的向量表示計算相似度,相似度最高的值作為結果。
圖10 STAR模型結構圖
二分類解碼器
采用這種解碼器的對話狀態跟蹤器,一次完成一個槽位-槽值對和對話歷史的特征抽取。基于抽取后的特征,二分類解碼器判斷該槽位-槽值對是否出現在對話之中,如圖3中的NBT模型。
由于每個槽位需要完成多次完整的模型推理計算,二分類解碼器增加了系統的響應時間。
3.3.2 基于開放詞表
然而,在任務型對話系統的實際應用場景下,某些槽位的槽值列表不能完整地獲得。
- 比如與時間相關的槽位,預約的就餐時間等,設計者很難將所有可能的槽值全部枚舉出來;
- 也可能因為沒有遍歷后端數據庫的權限,對話系統無法訪問到所有已存在的餐廳名稱。
面向這類應用場景,許多研究工作設計了基于開放詞表的狀態解碼器直接從對話中找出或者生成槽值。
復制生成機制
在一個槽值的每一步解碼步中,TRADE模型[8](圖5)結合復制機制(copy mechanism)和生成機制,對兩種機制得到的詞表概率分布加權平均,概率最高的單詞作為解碼步的輸出。其中,復制機制實現從對話歷史中選擇值,生成機制生成未直接出現在對話中的單詞,兩者的結合提高了對話跟蹤器的實用性和開放性。
識別文本跨度
基于文本跨度(text span)的解碼器,通過在對話歷史文本中選取子序列的方式,直接從對話歷史中抽取槽值。如高等人[16]將對話狀態跟蹤任務轉化為抽取式的問答任務,隨之提出的DST-Reader模型通過預測子序列的開始和結束從輸入的對話文本中抽取槽值。
圖11 DST-Reader模型結構圖
如圖11的示意圖所示,模型
- 將對話文本序列 看作一段篇章(passage),針對每一個槽位 ,構建一個問題(question)去詢問當前對話中的某一個槽位的槽值是什么,如“what is the value for slot i?”;
- 若狀態操作類型為 ,則從對話中選取子序列的開始位置和結束位置,得到的子序列即為槽值。
3.3.3 混合方法
根據槽位的槽值可枚舉性,槽位可以被分為可枚舉槽位和不可枚舉槽位。可枚舉槽位指的是該槽位的可能槽值固定不變,如“酒店星級”一般被分為一星至五星。而不可枚舉槽位是之前提到的預約的就餐時間和餐廳名稱這類槽位。
上述的兩類狀態解碼器都是以同等的方式對待所有的槽位。然而,
- 基于預定義本體 的狀態解碼器在面對不可枚舉槽位時,無法解碼出未出現在槽值列表中的值。
- 基于開放詞表的狀態解碼器理論上雖然可以生成沒有直接出現在對話中的槽值,但顯然基于預定義本體 的狀態解碼器更適合處理可枚舉的槽位。
因此,一些研究工作提出了混合方法,使用兩種狀態解碼器分別處理可枚舉槽位和不可枚舉槽位。
4.結論
基于深度學習方法的對話狀態跟蹤模型,即神經對話狀態跟蹤模型,在過去幾年受到研究者的廣泛關注。針對這一任務型對話系統中的重要模塊,本文首先介紹了對話狀態跟蹤任務的重要性、定義、常用數據集以及評價指標。隨后,提出一個通用框架細致地梳理了近些年的神經對話狀態跟蹤模型,分為特征抽取、狀態操作預測和狀態解碼三個階段。
在特征抽取階段,跟蹤器完成對槽位和對話歷史的特征抽取,獲得蘊含豐富信息的文本表示;有的模型更進一步地對兩者進行交互式的建模,得到分別與槽位和對話更為相關的特征表示,幫助后續模塊更準確地跟蹤槽位狀態;更有甚者建模槽位間的特征表示,充分利用槽位間的共指和槽位共現等關系。在狀態操作預測階段,提取后的特征可以被用來確定針對每一個槽位的操作類別。在每一個對話輪,面向狀態識別的操作幫助跟蹤器在對話歷史中尋找所有槽位的槽值;而面向狀態更新的操作識別出需要更新的槽位,在狀態解碼階段對其槽值進行解碼,這減少了冗余的計算,但可能會損失一定的跟蹤準確率。狀態解碼器將前面分量獲得的所有信息作為輸入,輸出槽位的槽值。基于預定義本體的解碼方式需要完整的本體,在每個槽位的所有可能槽值上完成分類;基于開放詞表的解碼方式直接從對話歷史中獲得槽值,可以通過復制加生成的模式,也可以通過識別文本跨度在對話歷史中確定包含槽值的連續子序列;混合方法對可枚舉和不可枚舉的槽位分別采用第一種和第二種解碼方式,從而同時保證了對話狀態跟蹤的準確率、實用性和開放性。