揭祕任務型對話機器人(下篇)

騰訊雲加社群發表於2018-06-14

歡迎大家前往騰訊雲+社群,獲取更多騰訊海量技術實踐乾貨哦~

本文來自專欄語言、知識與人工智慧,作者騰訊知文實驗室

近年來比較熱門的任務型對話的研究主要集中在端到端的框架的研究,基本跟傳統任務型演算法框架——語言理解模組(Spoken Language Understanding,對話管理模組(Dialogue Management),自然語言生成模組(Natural Language Generation)有較大的差別。其中一些這類模型本質上實際為一些sequence-to-sequence結合知識庫的架構,如Manning 2017年的兩篇也是Encoder-Decoder的模型。不過,這類模型對資料標註要求很高(可以參見Stanford Dialog Dataset的標註),仍然處在探索階段,業界上真正實用性較強依舊以傳統的演算法框架為主。本篇文章也是著重介紹傳統演算法框架中的語言理解模組,著重於語言理解模組中的意圖與槽位的聯合模型。

本文的主要目錄結構

首先回顧一下任務型導向對話的要點,包括概念及例項(Ideepwise與阿里小蜜等);其次從任務型的語義表示說起到整體的對話方塊架也包括一些例項;最後也是本文的重點,我們將介紹傳統演算法框架中語言理解模組的意圖與槽位的聯合模型。

1. 什麼是任務型?

任務型的概念

物件 任務型導向的對話指特定條件下提供資訊或服務的對話。通常情況下是為了滿足帶有明確目的的使用者。

具體場景與功能

例如查流量,查話費,訂餐,訂票,諮詢等任務型場景。由 於使用者的需求較為複雜,通常情況下需分多輪陳述,使用者也可能在對話過程中不斷修改與完善自己的需求,任務型機器人需要通過詢問、澄清和確認來幫助使用者明確目的。

任務評價

首先要有解決問題的明確目標,評價指標較重要的一點為,輪次儘可能少,儘量直逼答案 ,如果答非所問嚴重影響使用者使用。

任務型與閒聊對比

Ideepwise產品:

img

阿里小蜜產品:

img

從上面可以看出任務型導向的對話目的十分明確,關鍵是獲取意圖與約束條件(槽位)以及對話狀態的追蹤。

任務型導向對話在大家族中的位置

img

這裡的分類是這樣分的:首先將對話分為問答與會話,在問答中按照文件是否結構化分為無結構化文件與結構化文件。無結構化文件中包含一些如IR資訊檢索(如QA對,查詢文件的問題),IE資訊抽取(如閱讀理解,查詢文件中的精確片段),這一塊的難點在於相似性的計算。結構化文件中包含資料庫,知識圖譜等,他們的輸入為結構化的片段,資料庫具有查詢的功能,知識圖譜具有查詢與推理的能力,這一塊的難點其實也是如何獲取自然語言中的約束條件(槽位)的問題。接下來重點看下會話,會話劃為為閒聊型,任務型等,傳統的任務型分為語言理解模組(SLU),對話管理模組(DM)以及自然語言生成模組(NLG)等。後續的介紹主要針對SLU模組中的聯合模型的一個介紹。

語義的表示方法是自然語言領域的難點,這對於任務導向的對話來說也是如此......

2. 任務型中的語義表示

自然語言如何解析成合適的語義表示一直是一個難題。下面主要介紹三種相關的語義表示方法。

1. 分佈語義表示(Distributional semantics) 主要包括詞level與句子level。詞level上主要有:Word2Vector, GloVe, ELMo, FastText...等句子level主要有Skip-Thoughts, Quick-Thoughts, InferSent...等分散式表示

2. 框架語義表示(Frame semantics) 主要包括三元組的形式,Action(slot,value),例如查詢幣種,Inform(貨幣=人民幣,...)

3. 模型論語義表示(Model-theoretic semantics) 這是十分有趣的一種表示方式,參見Paul Gochet著作《Philosophical Perspectives for Pragmatics》。

例如一些詞表示成兩個集合的運算 :

img

傳統的任務型演算法框架上一篇文章介紹過,這裡祭上圖回顧一下:

img

我們這裡以一個例子開始語言理解模組的擴充。對於一段對話我們需要通過語言理解模組對它進行解析,包括領域的識別如是航空還是酒店,以及每個片段的意圖,比如是購票還是退票,以及每個具體意圖下的約束資訊(槽位)。

img

3. 語言理解模組

語言理解模組主要包括意圖與槽位的識別。意圖的識別實際上是一個分類問題,如基於規則,傳統機器學習演算法 (SVM),基於深度學習演算法(CNN, LSTM, RCNN, C-LSTM, FastText)等。意圖在對話中還涉及轉換,這裡不在說明。Slot識別實際上是一種序列標記的任務,如基於規則 (Phoenix Parser),基於傳統機器學習演算法 (DBN; SVM),基於深度學習演算法(LSTM, Bi-RNN, Bi-LSTM-CRF)。有些人可能不大區別slot與實體的區別,下面以BIO標註舉個例子:

如”show flights from Boston to New York today“中對於實體來講Boston與New York都是標註為city,而對於slot來說區分為出發城市與目的地城市,可以這樣說槽位的種類相比與實體更加的多元化。

img

Joint Model (Intent+Slot)

1. 第一篇文章主要利用雙向的GRU+CRF作為意圖與槽位的聯合模型。

Zhang X, Wang H. A Joint Model of Intent Determination and Slot Filling for Spoken Language Understanding[C] IJCAI. 2016

模型如下:

img

  • 輸入為視窗化的詞向量:
    img
  • 利用雙向GRU模型學習到高維度特徵。
  • 意圖與槽位

對於意圖分類來說,利用每一個學習到的隱藏層特徵,採用max pooling槽位得到全句的表達,再採用softmax進行意圖的分類:

img

img

對於槽位來說,對每個隱藏層的輸入用前向網路到各個標籤的概率,並採用CRF對全域性打分得到最優的序列。

img

聯合的損失函式為槽位與意圖的極大似然

img

本文的模型簡單而且槽位識別的準確率與意圖識別的準確率都達到很高的水準,

本文的結果基於ATIS資料集:

Intent :98.32 Slot (F1):96.89

2. 第二篇主要採用利用語義分析樹構造了路徑特徵對槽位與意圖的識別的聯合模型。(RecNN+Viterbi)

Guo D, Tur G, Yih W, et al. Joint semantic utterance classification and slot filling with recursive neural networks[C] 2014 IEEE. IEEE, 2014

先介紹下本文的basic Recursive NN的模型

img

輸入為單個詞向量(後續優化輸入為視窗的詞向量),每個詞性被看作為權重向量(weight vector ),這樣每個詞在其路徑的運算為簡單的詞向量與詞性權重向量的點積運算。如上圖中的方塊為詞性的權重向量與輸入向量的點積運算後的結果。當一個父節點有多個孩子分支的時候,可以看成每個分支與權重點積的和運算。

意圖識別模組

意圖識別,該文章中直接採用根節點的輸出向量直接做一個分類。

槽位識別

這一模組引入了路徑向量的特徵

img

如”in“這個單詞,在語義分析樹中的路徑為”IN-PP-NP“,將該路徑的每個輸出向量做一個加權運算得到path的特徵,本文采用了三個詞的path特徵的concat作為tri-path特徵進行槽位的分類,從而進行對”in“的一個預測。

img

優化

文章中還在baseline的基礎上做了一些優化:

優化輸入為視窗的詞向量

img

節點用與先前簡單加權不同的網路,採用了非線性的啟用函式

img

採用基於Viterbi的CRF優化全域性,及採用了基於tri-gram的語言模型極大化標註序列

img

本文的結果基於ATIS資料集:

Intent :95.40 Slot (F1):93.96

3. 第三篇主要是基於CNN+Tri-CRF的模型

Xu P, Sarikaya R. Convolutional neural network based triangular crf for joint intent detection and slot filling 2013 IEEE Workshop on. IEEE, 2013

看一下篇CNN+TriCRF模型,模型框架如下:

img

對於槽位識別的模型

輸入的為每個的詞向量,經過一個卷積層得到高維特徵h,隨後經過Tri-CRF作為整體的打分。Tri-CRF與線性的CRF的區別是輸入前用了一個前向網路得到每個標籤的分類。我們來分析一下評分的公式:

img

上述的t(Yi-1,Yi)為轉移的打分,hij為CNN得到的高維特徵,每個時刻的高維特徵經過一個前向網路得到每個標籤的概率,這樣前兩者的結合就是整體的打分。

對於意圖識別

CNN採用同一套引數,得到每個隱藏層的高維特徵h,直接採用max pooling得到整句的表達,用softmax得到意圖分類。

img

將上述結合起來實際上就是聯合模型。

本文的結果基於ATIS資料集:

Intent :94.09 Slot (F1):95.42

4. 第四篇的主要是基於attention-based RNN

Liu B, Lane I. Attention-based recurrent neural network models for joint intent detection and slot filling[J]. 2016.

首先介紹一下context vector的概念,參見Bahdanau D, Cho K, Bengio Y. Neural machine translation by jointly learning to align and translate[J]. 2014.

img

上述公式中的g實際上是一個前向的網路得到decoder每個隱藏層與輸入序列中每個encoder隱藏層的相關,即attention分量,對encoder每時刻隱藏層的輸出與當前時刻的attention的加權即得到文字向量(context vector)

進入正文,本文采用的encoder-decoder模型如下:

img

槽位

圖a隱藏層非對齊attention的模型。decoder隱藏層非對齊的方式,decoder端的每個cell的輸入為上一時刻隱藏層s,上一時刻標籤的概率s與文字向量c的輸入。

圖b為隱藏層對齊無attention的模型,decoder端的每個cell的輸入為上一時刻隱藏層s,上一時刻標籤的概率s與對應的encoder的每個時刻隱藏層的輸出。

圖c隱藏層對齊attention的模型。decoder端的每個cell的輸入為上一時刻隱藏層s,上一時刻標籤的概率s,上一時刻標籤的概率s與文字向量c的輸入與對應的encoder的每個時刻隱藏層的輸出。

意圖

採用encoder的最後輸出加入文字向量作為intent的分類。

該模型基於ATIS資料集(+aligned inputs):

Intent :94.14 Slot (F1):95.62

本文還基於上述的idea得到另外一種基於attention RNN的聯合模型

img

BiRNN 隱藏層的輸入為

img

槽位

BiRNN得到的高維特徵與文字向量concat起來作為單層decoderRNN的輸入用於槽位識別,需要注意的是encoder的輸出概率只作用於BiRNN的正向傳輸層。

意圖

單層decoderRNN的隱藏層的輸出的加權得到最後的輸出向量,得到最後的意圖分類

該模型基於ATIS資料集(+aligned inputs):

Intent :94.40 Slot (F1):95.78

5. 第五篇主要是線上意圖與槽位,語言的聯合模型(Online-RNN-LU)。上述四種聯合模型之所以不是線上處理,主要一點是都是以整個句子為單位做解析,不能做到實時的解析。本文的亮點就是實時解析,對輸入到當前為止的時刻T得到最優意圖與槽位的解析以及一個詞語的預測。

Liu B, Lane I. Joint online spoken language understanding and language modeling with recurrent neural networks[J]. 2016.

img

上圖表示當前到時刻T的一個解析:

意圖

w為T時刻前(包括T)的詞語序列,c為T時刻前的意圖,s為T時刻前的槽位序列,根據上述三者作為當前時刻T的RNN的輸入,RNN隱藏層的輸出,通過不同的MLP層分別作為當前時刻T意圖與槽位的分類,同時該隱藏層的輸出concat意圖與槽位的資訊輸入MLP層得到下一個詞的預測。

img

實際如下操作,採用LSTM,輸入為上一時刻的詞語序列,意圖與槽位資訊。其中公式中的IntentDist,SlotLabelDist,WordDist為MLP層。

img

訓練的方法即上述三個模組的極大似然

img

值的注意的是本文由於線上的演算法,採用了greedy的思想,基於先前的意圖與槽位達到當前的最優。

img

上述幾種模型在ATIS上的評分

img

4.總結

上述的模型主要以深度學習的方法解決了傳統任務演算法框架中較為重要的意圖與槽位的識別,這些模型都能應用到實際中一個相關的任務型領域(本人使用過LSTM+CRF的方法實現專案中匯率的槽位提取)。如何使用對話管理模組結合該語言理解模組解決多輪對話的問題一直是一個較為頭疼的難題,儘管在傳統演算法框架上提出了一些例如傳統模型或者強化學習的方法,但資料的規範性,對話過程不流暢,死板等嚴重影響使用者在任務型對話的體驗。最近較為熱鬧的Task-Oriented 主要是基於sequence-to-sequence的模型結合知識庫,產生了一些意想不到的驚喜,下一篇主要介紹這類模型。

Reference:

[1] Zhang X, Wang H. A Joint Model of Intent Determination and Slot Filling for Spoken Language Understanding[C] IJCAI. 2016

[2] Guo D, Tur G, Yih W, et al. Joint semantic utterance classification and slot filling with recursive neural networks[C] 2014 IEEE. IEEE, 2014

[3] Xu P, Sarikaya R. Convolutional neural network based triangular crf for joint intent detection and slot filling 2013 IEEE Workshop on. IEEE, 2013

[4] Liu B, Lane I. Attention-based recurrent neural network models for joint intent detection and slot filling[J]. 2016.

[5] Bahdanau D, Cho K, Bengio Y. Neural machine translation by jointly learning to align and translate[J]. 2014.

[6] Liu B, Lane I. Joint online spoken language understanding and language modeling with recurrent neural networks[J]. 2016.


問答

如何用php檢測搜尋引擎機器人?

相關閱讀

任務型對話機器人簡介

文字情感分析綜述

當深度學習遇見自動文字摘要


此文已由作者授權騰訊雲+社群釋出,原文連結:https://cloud.tencent.com/developer/article/1147476?fromSource=waitui

歡迎大家前往騰訊雲+社群或關注雲加社群微信公眾號(QcloudCommunity),第一時間獲取更多海量技術實踐乾貨哦~

相關文章