上篇文章向大家介紹了用戶模擬器的結構、特點、基於統計建模及其優缺點,本篇文章將介紹幾種基於深度模型實現用戶模擬器的方法。

一、動機

基於統計建模和人工編寫規則的方法儘管落地性強,精準率高,但是成本很高,還有一些缺點: 【用戶模擬器】原理篇一:統計建模的方法

  • 無法考慮長時間的對話歷史;

  • 需要刻板的結構來保證用戶行爲的一致性;

  • 嚴重依賴於特定領域;

  • 在一次對話期間無法輸出多個用戶意圖。

因此尋求數據驅動的模型化方法是一個很好的途徑。利用對話語料進行端到端訓練的效果一般優於基於統計建模的方法,它的優點是數據驅動,節省人力。

下面介紹三種基於深度模型的建模方案,這幾種模型均是使用了DSTC2/DSTC3數據集進行模型訓練與效果評估。

二、DSTC數據集簡介

2.1 數據集整體介紹

DSTC1-DSTC3的數據情況如下所示:

  • DSTC1:公交線路查詢,目標固定不變。共5個slot(路線,出發點,重點,日期,時間),有些slot(時間和日期)的取值數量不固定。而且DSTC1的用戶目標在對話過程中不會發生變化;

  • DSTC2:餐館預訂,用戶查詢滿足特定條件下的餐館的某些信息(電話、地址等),用戶目標會在對話過程中發生變化;

  • DSTC3:在DSTC2數據的基礎上,增加了一些新的slot,而且添加了新的域:旅遊信息查詢。

DSTC2/DSTC3數據集槽位情況:

2.2 標註數據說明

一個完整的標註會話包含以下內容:

  • session-id:會話唯一id

  • caller-id:用戶唯一id

  • turns:輪次粒度進行標註的列表[

    • turn-index: 輪數,從0開始

    • audio-file:錄音文件

    • transcription:錄音轉文本

    • semantics:對話表徵

    • goal-labels:用戶目標(槽值映射)

    • method-label:使用的方法

    • requested-slots:用戶請求槽位 ]

  • task-information:任務信息

    • success: 任務是否成功

    • comments: 用戶評價

    • questionnaire:問卷(問題答案對列表)

    • text:任務描述

    • constraints:約束(槽值對列表)

    • request-slots:請求(槽位列表)

    • goal:給工作人員目標/任務的信息

    • feedback: 用戶反饋

一個樣本示例:

{

"caller-id": "03c2655d43",

"turns": [

{

"turn-index": 0,

"goal-labels": {

"food": "international",

"area": "east"

},

"transcription": "restaurant in the east part of town international food",

"method-label": "byconstraints",

"audio-file": "pt344x_0000956_0001231.wav",

"requested-slots": [],

"semantics": {

"json": [

{

"slots": [

[

"food",

"international"

]

],

"act": "inform"

},

{

"slots": [

[

"area",

"east"

]

],

"act": "inform"

}

],

"cam": "inform(type=restaurant,area=east,food=international)"

}

},

{

"turn-index": 1,

"goal-labels": {

"food": "international",

"area": "east"

},

"transcription": "phone number",

"method-label": "byconstraints",

"audio-file": "pt344x_0001609_0001668.wav",

"requested-slots": [

"phone"

],

"semantics": {

"json": [

{

"slots": [

[

"slot",

"phone"

]

],

"act": "request"

}

],

"cam": "request(phone)"

}

},

{

"turn-index": 2,

"goal-labels": {

"food": "international",

"area": "east"

},

"transcription": "thank you good bye",

"method-label": "finished",

"audio-file": "pt344x_0002245_0002362.wav",

"requested-slots": [],

"semantics": {

"json": [

{

"slots": [],

"act": "thankyou"

},

{

"slots": [],

"act": "bye"

}

],

"cam": "thankyou()|bye()"

}

}

],

"task-information": {

"goal": {

"text": "Task 09126: You want to find a restaurant in the east part of town and it should serve international food. Make sure you get the phone number of the venue.",

"request-slots": [

"phone"

],

"constraints": [

[

"food",

"international"

],

[

"area",

"east"

]

]

},

"feedback": {

"questionnaire": [

[

"The system understood me well.",

"slightly disagree"

]

],

"comments": null,

"success": true

}

},

"session-id": "voip-03c2655d43-20130327_194221"

}

三、深度建模的方法

3.1 固定用戶目標的端到端模型

3.1.1 論文思想

鑑於統計模型的缺點,論文 A Sequence-to-Sequence Model for User Simulation in Spoken Dialogue Systems 提出了一種考慮全部對話歷史,不依賴固定結構,基於編碼解碼的端到端模型,它將對話上下文序列作爲輸入,然後輸出一系列用戶動作序列。

3.1.2 工作機制

模型結構如下圖所示:

其中爲對話上下文序列,爲輸出的用戶動作序列。

  1. 在每次對話開始之前,統一的構建出一個 Goal G=(C,R),對於餐館查詢任務而言,約束條件C通常指的是菜品口味、菜品價格以及餐館所在方位,問詢內容R爲以下槽位:餐館名稱、餐館地址、餐館電話等。

  2. 在第 t 輪對話,一個上下文序列包含以下 4 部分:

    在每次對話的過程中,會根據 dialogue acts 的個數以及 Goal 的狀態,對以上 4 部分進行 one-hot 編碼,從而得到對話上下文的向量化表示。

  • 上一輪的系統動作;

  • 上一輪系統回覆的信息與 User Goal 不一致的部分;

  • 約束條件的狀態(告知與否);

  • 問詢內容的狀態(被告知與否)。

  1. 在 t 時刻,將上下文序列輸入到一個 encoder LSTM 網絡,得到一個向量作爲對話歷史的內部表示。

  2. 然後再將向量輸入到 decoder LSTM 網絡,輸出 dialogue acts 序列,比如 (inform, request)。接下來可以通過啓發式規則將 dialogue acts 映射爲帶槽的用戶行爲,比如 inform(food=Chinese), request(price_range);也可以訓練一個模型,讓它直接輸出最終的行爲,比如 request_area,inform_pricerange。這種方式的優點是不需要寫啓發式規則,可以做到更細粒度的建模。

3.1.3 結果對比

論文使用F1-score作爲評價指標,最後的實驗結果顯示該模型的效果優於基於議程的方法。

3.2 可變用戶目標的端到端模型

3.2.1 論文思想

上一篇論文中提到的一些端到端系統雖然對整個對話歷史都進行了跟蹤,並且用戶的行爲是從數據中學習得到的,但是依舊存在兩個問題:

  • 沒有對用戶的目標改變(goal change)進行建模;

  • 只在語義層面進行用戶模擬,需要耗費人力標註出每輪用戶語句的語義標籤進行模型訓練,而不是直接利用自然語句進行訓練。

因此論文 Neural User Simulation for Corpus-based Policy Optimization for Spoken Dialogue Systems 提出了基於 RNN 的 Neural User Simulator (NUS) 模型,對用戶的目標改變(goal change)進行建模,將對話上下文序列作爲輸入,然後輸出去詞彙化的自然語句。

3.2.2 工作機制

  1. 首先 NUS 通過用戶目標生成器,對原對話數據中的對話狀態標籤進行預處理,得到一個完整對話中每一輪的具體用戶目標,這樣就相當於對用戶目標改變進行了某種程度上的建模,如下表所示:

  2. 表中顯示某個對話一共有四輪,其中 第 2、3 輪之間出現了對 food 這個槽位的目標變化, 因此右邊處理之後得到了用戶目標也出現了變化。這樣的用戶目標不再是一成不變,而是充分根據對話數據給出了動態的用戶目標,更加貼近實際。

  3. 有了每輪的用戶目標,NUS 通過 RNN 來生成用戶語句:

    圖中 是每一輪提取出來的特徵,它一共包含四個向量

  • 是系統動作向量,包含,是一個長度等於所有可能的系統動作的二進制向量,是一個長度爲可告知槽(informable slots)總個數 4 倍的二進制向量,用來表示本輪系統動作是否出現了 request、select、inform 和 expl-conf 這四個以可告知槽爲參數的動作;

  • 稱作問詢向量,是一個長度和可問詢槽(requestable slots)總個數相等的二進制向量,用來標記哪些用戶目標中需要問詢的可問詢槽還沒有被用戶向系統提問;

  • 稱作不一致向量(inconsistency vector),  長度等於可告知槽總個數,一旦系統動作中對某個槽出現了和本輪用戶目標不一致的情況,對應的位置處元素置 1;

  • 是用戶目標約束向量,長度等於可告知槽總個數,用來表示本輪用戶目標中出現了哪些可告知槽。

  • NUS 生成的回覆是去詞彙化的自然語句,經過後處理則得到了用戶的自然語言回覆。

  • 3.2.3 結果對比

    論文爲了論證 NUS 效果優於 Agenda-based User Simulator (ABUS), 提出了一個交叉模型評估的方法,即在一個 User Simulator 上訓練一個 agent,在其他 User Simulator 上測試該 agent,如果 agent 效果依舊很好,說明用於訓練的 User Simulator 是更加貼近真實用戶。論文使用平均獎勵分數(任務完成+20,每輪-1)和任務完成率(同時滿足約束和請求)作爲評價指標。最終實驗結果證明,在 NUS 上訓練得到了的 agent,在 ABUS 和真實用戶上測試得到的成功率均優於 ABUS,而在 ABUS 上訓練得到的 agent 效果只在 ABUS 上測試好。

    3.3 聯合優化模型

    3.3.1 論文思想

    使用RL進行對話策略學習需要對話系統與用戶模擬器進行交互。然而,構建一個可靠的用戶模擬器並不簡單,它通常與構建一個好的對話系統一樣困難。用戶模型和對話管理模型功能十分接近,因此可以將用戶模擬器和對話系統進行聯合優化。

    論文 Iterative Policy Learning in End-to-End Trainable Task-Oriented Neural Dialog Models 對用戶模擬器和對話系統分別採用了 RNN 進行端到端的建模並使用同一個回報函數優化,兩者交替訓練共同最大化累計回報。

    3.3.2 工作機制

    1. 對話系統模塊:論文使用的對話系統是一個端到端的 LSTM 模型,如下圖所示:

      對話系統的狀態由 LSTM 的隱層節點編碼,每一輪都會進行更新。在第 k 輪對話,給定上一輪的系統語句,用戶語句,數據庫查詢結果作爲輸入,LSTM 模型更新上一輪的對話狀態爲。新的對話狀態通過前饋神經網絡可以直接預測出本輪各個槽的跟蹤分佈、系統應採取的對話動作和一個 one-hot 編碼的數據庫指針 。NLG 部分作者選擇採用模板的方法生成。

    2. 用戶模擬器模塊:對應的用戶模擬器的結構也是採用了端到端的 LSTM 模型,如下圖所示:

      輸入換作了用戶目標編碼,上一輪用戶語句和當前輪系統語句,模型每輪更新用戶狀態爲。新的用戶狀態也通過前饋神經網絡得到本輪用戶應採取的動作和槽值參數。NLG 部分採用模板的方法直接生成。

    3. 回報函數:作者對用戶模擬器和對話系統進行聯合策略優化,使用了策略梯度(policy gradient)算法,兩者各自的狀態爲和,動作爲和。回報函數採用:

      其中是用戶目標,是對話系統對用戶目標的估計,D(・) 是一個得分函數,論文中獎勵是根據任務完成的程度來計算的。根據相鄰輪得分函數之差可以得到單輪迴報函數。用戶模擬器和對話系統交替優化,共同最大化累計回報函數。

    4. 策略梯度:求解時使用策略梯度的方法,根據強化學習公式,目標函數可以寫爲:

      其中,爲折扣因子,通過尋找最優的對話系統參數和模擬器參數來使目標函數最大化。梯度計算公式分別爲:

    3.3.3 結果對比

    爲了降低策略梯度優化的方差,論文采用 Advantage Actor-Critic (A2C) 算法,並使用 ε-softmax 進行策略探索,在 DSTC2 數據集上進行了初步實驗,結果如下:

    四、總結

    針對統計模型需要通過人工編寫規則,成本高的缺點,本文介紹了幾種易於實現的數據驅動的模型化方法。利用對話語料進行端到端訓練的效果一般優於基於議程的規則方法,它的優點是數據驅動,節省人力;但缺點是複雜對話建模困難,對數據數量要求很高,因此對於一些對話語料稀缺的領域效果很差。

    五、參考文獻

    1. https://blog.csdn.net/c9yv2cf9i06k2a9e/article/details/98549007

    2. A Sequence-to-Sequence Model for User Simulation in Spoken Dialogue Systems

    3. Neural User Simulation for Corpus-based Policy Optimization for Spoken Dialogue Systems

    4. Iterative Policy Learning in End-to-End Trainable Task-Oriented Neural Dialog Models

    5. User Simulation in Dialogue Systems using Inverse Reinforcement Learning

    作者介紹

    劉娜,2019年6月畢業於北京郵電大學自動化學院,畢業後加入貝殼找房語言智能與搜索部,主要從事NLP及強化學習相關工作。

    相關文章

    【用戶模擬器】原理篇一:統計建模的方法

    下期精彩

    【用戶模擬器】實踐篇:用戶模擬器在貝殼IM場景中的應用

    推薦閱讀

    徵稿啓示| 200元稿費+5000DBC(價值20個小時GPU算力)

    文本自動摘要任務的“不完全”心得總結番外篇——submodular函數優化

    Node2Vec 論文+代碼筆記

    模型壓縮實踐收尾篇——模型蒸餾以及其他一些技巧實踐小結

    中文命名實體識別工具(NER)哪家強?

    學自然語言處理,其實更應該學好英語

    斯坦福大學NLP組Python深度學習自然語言處理工具Stanza試用

    太讚了!Springer面向公衆開放電子書籍,附65本數學、編程、機器學習、深度學習、數據挖掘、數據科學等書籍鏈接及打包下載

    數學之美中盛讚的 Michael Collins 教授,他的NLP課程要不要收藏?

    自動作詩機&藏頭詩生成器:五言、七言、絕句、律詩全了

    這門斯坦福大學自然語言處理經典入門課,我放到B站了

    關於AINLP

    AINLP 是一個有趣有AI的自然語言處理社區,專注於 AI、NLP、機器學習、深度學習、推薦算法等相關技術的分享,主題包括文本摘要、智能問答、聊天機器人、機器翻譯、自動生成、知識圖譜、預訓練模型、推薦系統、計算廣告、招聘信息、求職經驗分享等,歡迎關注!加技術交流羣請添加AINLPer(id:ainlper),備註工作/研究方向+加羣目的。

    閱讀至此了,點個在看吧 :point_down:

    相關文章