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


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

本文來自雲+社區專欄語言、知識與人工智能,作者騰訊知文實驗室

近年來比較熱門的任務型對話的研究主要集中在端到端的框架的研究,基本跟傳統任務型算法框架——語言理解模塊(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),第一時間獲取更多海量技術實踐干貨哦~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM