本文包含以下内容
- 2020年剛出的大規模中文多輪對話資料集的介紹
- 多輪對話的一些常見任務
- 多輪對話的一些常見模型
基本概念
什麼是對話?
我:你好!
機器人:你也好!
多輪對話呢?
我:你好!
機器人:你也好!
我:吃飯了伐?
機器人:當然沒有
(來回好幾回合)
任務導向多輪對話呢?
我:幫我訂一張機票!
機器人:哪裡呢?
我:北京的。
機器人:訂好了。
(不是閑聊,有目的性的對話)
跨領域任務導向多輪對話呢?
我:幫我訂一張機票!
機器人:哪裡呢?
我:北京的。
機器人:訂好了。
我:再在附近訂個五星酒店。
機器人:北京飯店你看可以嗎?
(使用者有兩個以上目的(訂機票和酒店)要通過對話實作)
中文?突出中文是因為之前的大規模開源多輪對話資料集MultiWOZ是英文的。MultiWOZ在推動英文多輪對話誕生了很多研究。是以這次清華大學計算機系制作了中文的資料集以填補中文任務導向對話資料的空白。

論文位址:https://arxiv.org/pdf/2002.11893.pdf
資料集介紹
資料集參數
CrossWOZ包含 6K 個對話,102K 個句子,涉及 5 個領域(景點、酒店、餐館、地鐵、出租)。平均每個對話涉及 3.2 個領域,遠超之前的多領域對話資料集,增添了對話管理的難度。
特點
- 使用者在某個領域的選擇可能會影響到與之相關的領域的選擇,在跨領域上下文了解更有挑戰。
- 第一個大規模中文跨領域任務導向資料集。
- 在使用者端和系統端都有詳細的對話狀态記錄,标注資訊全面。
與其他資料集的對比
跨領域對話的資料樣例
資料标注方法
- 基礎資料庫的建構。通過爬蟲從網絡上擷取了北京市的酒店/旅遊景點/飯店以及地鐵和計程車資訊。
比如說Attract景點有465個,景點有9個槽。Hotel和8+37個槽。比如是否要叫醒服務等。
- 目标建構。論文通過算法自動生成标注人員的對話目标。
上面的id1,2,3就是自動生成的目标。标注人員要以完成這三個目标(尋找免費旅遊景點和訂附近酒店以及計程車)作為目的和系統進行對話。
3. 資料标注。論文雇傭大量勞工分别充當使用者和系統。使用者向系統訂酒店景點,然後系統回複使用者預約的相關資訊。所有的對話資料都是使用者生成的。同時使用者在對話過程中還需要對使用者狀态和系統狀态進行标注。具體的過程如下圖。
資料和模型下載下傳位址:https://github.com/thu-coai/CrossWOZ
常見任務
有了多輪對話資料集,而且标注這麼詳細,我們就有研究多輪對話的條件了。
多輪對話有以下五個研究方向:
- 多輪對話下的自然語言了解(Natural Language Understanding)
- 對話狀态追蹤(Dialogue State Tracking)
- 對話政策學習(Dialogue Policy Learning)
- 自然語言生成(Natural Language Generation)
- 使用者模拟器(User Simulator)
多輪對話下的自然語言了解(NLU)
多輪對話下的NLU通常是對使用者的輸入語句讓模型填滿這樣一個四元組
(intent=Inform, domain=Attraction, slot=fee, value=free)
通過意圖識别和ner我們就可以完成nlu。本文提出了一種BERTNLU-context的模型來做多輪對話下的nlu。BERTNLU不必多說,就是把bert作為encoder對輸入文本進行編碼。然後為了利用上下文資訊,BERTNLU-context會把對話曆史的之前三句話用sep分割作為文本輸入另一個BERT模型,取出那個模型的cls位置變量作為上下文表征。然後把該上下文表征和使用者輸入的語句的特征向量一一concat再進行ner和文本分類,效果很好。
對話狀态追蹤(DST)
DST的目地是根據使用者和系統的對話曆史,動态識别出使用者的目地,并轉為預先定義好的格式。
本文介紹了兩種方法做DST
- RuleDST。設計一些規則動态識别使用者狀态,比如識别到使用者說任意一個槽就給它填上。
- TRADE。TRADE模型需要專門的篇幅來介紹它。
TRADE模型
首先它要解決的問題是如何在一個涉及多個領域的對話中利用跨領域(domain)的資訊來完成一個綜合的任務。舉個例子:吳先生要去一家餐廳約會,使用智能助手訂好了餐廳,其中收集了 餐廳名 時間 這些資訊(slot),而之後吳先生還需要預約一輛計程車回家,那麼此時他會期望智能助手明白上車點就是餐廳。那麼問題來了,在傳統的基于一個個獨立領域的對話系統中,兩個不同領域之間互相獨立,不共享資訊,你訂你的餐廳,訂完了說一句“我要訂餐館回家的計程車”,好嘞進入到訂車的領域,從頭開始問”您從哪出發呀“。顯然不夠聰明。TRADE就是試圖所有的domain使用同一個模型,并利用起前面幾句對話曆史,來預測出目前吳先生說的這句話的狀态(state):(domain,slot,slot value)。就能判斷這是【訂計程車】的domain,slot是出發點,還能從之前吳先生确認的餐館名知道出發點就是XX大酒店。
那麼,這麼聰明的性能要如何做到呢?
TRADE由三部分組成:
複制
Utterance Encoder, Slot Gate, State Genrator。
Utterance Encoder(雙向GRU) :把包括目前句子的對話曆史所有單詞embedding拼接(l輪)編碼,得到H_t=[H_1,H_2,...,H_XL]。
State Generator:首先将所有可能的domain和slot配對得到J個(domain,slot)對,将它們用用GRU解碼,解碼過程中得到一個隐藏層 h_dec^jk 将他映射到詞彙空間P_vocab^jk,同時還用這個隐藏層來計算對話曆史的attention P_history^jk,權重而後得到context vector cj0. P_vocab和P_history權重相加(權值是另一個可訓練sigmoid元得出)後就是最終某個(domain,slot)對基于目前對話曆史的在所有單詞上的機率分布。這一過程要做J次。考慮P_history和P_vocab的目的是能讓模型同時可以從對話曆史中找出資訊,又有機會得到未在曆史中出現過的單詞。
Slot Gate G_j: 每個(domain,slot)對都有一個Gate,将它們每個都對上面由對話曆史得到的context vector cj0做一個計算Gj = Softmax(Wg ·(cj0)>) ∈R3,得到don't care, none,ptr三個選項的機率。如果是前兩者,那麼無需填入特定槽值,若為ptr則将State Generator得到的槽值填入對應槽。也即Slot Gate的工作是找出要填的哪個domain的哪個槽。而State Generator是找出這個槽的值。
至此,TRADE便利用對話曆史得到了狀态(domain,slot,value), 對每一段對話曆史的計算都不依賴于某一個domain。
複制
對話政策學習(DPL)
DPL就是根據之前的對話狀态和使用者輸入,生成一個系統action。在我們做傳統的基于狀态機的多輪對話中,對話政策通常是基于規則的。本論文介紹了ConvLab-2對話平台下使用SL polciy完成了監督學習下的對話政策學習模型。
自然語言生成(NLG)
我們有了使用者和系統的狀态和對話動作,同時又有使用者生成的自然語言。那麼便可以制作生成模型來生成靈活的系統回複語言。本文用兩種方式做這個,一個是基于模闆的TemplateNLG,一個是SC-LSTM。兩個效果如下:
SC-LSTM模型參考位址:https://github.com/andy194673/nlg-sclstm-multiwoz
使用者模拟器
使用者模拟器是用來模拟使用者說話的。最簡單的模拟器就是規則型的比如約定第一句話說訂酒店,第二句話說要五星的。
使用者模拟器對多輪對話系統的自動化評估和對話政策學習都是很有幫助的。本文也建構了一種rule-based 使用者模拟器。比如當使用者的目标中有未填充的槽時,使用者模拟器就會不斷追問該槽值,直到所有目标的槽全部填充為止。
論文結果
1 BERTNLU部分準确率都很高。
2 DST/SL policy準确率在80以下,具有很大提高空間。
3 越是跨領域,對話狀态越難追蹤。