美團對話理解技術及實踐
閱讀數:73892019 年 6 月 4 日 08:00
智能客服是一種使用自然語言與用戶交互的人工智能系統,通過分析用戶意圖,以人性化的方式與用戶溝通,向用戶提供客戶服務。
本議題首先介紹美團智能客服的對話交互框架,然后就我們在其中意圖挖掘、意圖理解、情緒識別、對話管理等核心模塊中用到的機器學習算法進行詳細的介紹。
美團點評的使命是 " 幫大家吃得更好,生活更好 " 。美團線上服務的 APP 涵蓋了生活服務方方面面,包括餐飲、外賣、打車、酒店業務等。2018 年全年美團的總交易金額達 5156.4 億元人民幣,同比增加 44.3%;2018 年美團單日外賣交易筆數超過 2100 萬筆。美團的各個 APP 上具有大量的客服信息類的數據,這也為工程師提供了很好的練兵場。
一、智能客服對話框架
當用戶進入到客服界面時往往是帶着一個問題來的,那么我們需要做的就是對這個問題進行理解,然后根據理解結果去請求相應服務,去解決用戶的問題。這里面主要分為兩大塊,一方面是離線訓練和知識庫整理部分,另一部分是在線處理部分。
在在線部分,首先需要對問題進行基礎特征的提取,比如:分詞、語義標簽抽取、情緒分析、NER 識別等;進而進入下面一層 - 意圖理解層,主要有問題領域分類、意圖識別和屬性抽取;意圖理解之后就進入到了對話管理這個階段,對話管理模塊主要包括兩個部分,狀態追蹤 ( DST ) 和對話決策,DST 根據上下文狀態明確當前用戶的領域和意圖,而對話決策模塊則根據用戶當前意圖決定后續動作;再之下是業務服務層,包括各業務的數據服務接口以及業務數據呈現樣式等。
二、意圖理解
美團圍繞着生活服務有着許許多多場景和業務,針對客服服務而言,用戶可能是從單一的業務窗口進入到客服中,這時我們是知道該客服服務屬於哪個領域;用戶也有可能是從美團的綜合門戶入口進入到客服中,在這種情況下我們無法判斷用戶需要進行哪個業務領域方面的咨詢。
除此之外,在場景方面,主要涉及單輪 QA 和多輪 Task,針對一些簡單的問題,單輪的 QA 就可以解決,舉個例子:
U: 美團送餐時間
S: 用戶您好,能否配送是以商家營業時間為准的。如您所選的商家正在營業,便代表可以提供點餐及配送服務。
而大量復雜的業務通過單輪的 QA 是無法完成的,這時候就需要多輪對話,舉個例子:
如何成為美團商家?
像這種就需要多輪的任務 Task 才能解決。
由於美團涵蓋眾多的業務領域,所以當用戶提出一個問題時,我們首先要將這個問題進行領域分類,把它分到某個業務領域去,然后用業務知識去解決這個問題;領域明確后就是意圖分類,根據問題的不同類別,比如問答類的、閑聊類的等,采用的方式也會有所差異。接下來將對這兩個方面做詳細介紹。
2.1 領域分類
針對領域分類任務,如上圖所示,我們首先會從不同的業務中收集大量的業務數據,作為基礎的訓練數據,雖然這些數據來自不同的業務,但是依然存在一些問題,主要有以下兩方面:
- 標簽不准:用戶有可能會在某個業務對話中提問其它領域的問題;
- 領域重疊:某些問題可能會在多個領域中出現。
所以,原始數據不能直接拿來作為訓練數據,必須要經過人工篩選和標注方可使用。 為了節約人力成本和提高迭代速度,我們采用了主動學習框架,模型的迭代主要分為如下幾步:
- 搜集業務數據,為每條業務數據打上相應的業務標簽
- 對數據進行模型訓練
- 將上步訓練好的模型對樣本進行預測
- 標注人員對預測樣本進行標注,選出錯誤和難分開的樣本
- 返回第 2 步,對標注好的數據重新進行訓練
我們同時也在不同的模型上測試領域分類效果,實踐中的各模型效果如上圖所示。 從結果中我們可以看出,BERT 的效果是非常高的,但是呢我們也會考慮模型在實際運行中的效率問題。 對於一個 15 個字左右的 query 來說,用 TextCNN 模型在 10ms 以內就可以解決,如果用 BERT 模型的話可能需要 70ms 左右,這個時間還是比較長的,當前實際上線的時候我們采用的是 TextCNN 模型。 這是 2014 年 Yoon Kim 提出的一種方法。
2.2 意圖分類
針對意圖分類,主要包括問答型意圖理解和任務型意圖理解兩個方面。
這兩類問題有着各自的特點,針對問答類,我們采用檢索和相似度排序的策略,下圖是問答類的設計架構。
針對任務型的意圖理解,我們采用規則和模型結合的方式,一種是通過規則的方式,比如上下文無關文法,另一種是采用模型訓練的方式。
上下文無關文法
上圖就是其中一個例子,在工業界這種方式還是非常通用的,對於問題冷啟動,高頻出現的問題和常規的問題,采用規則的方式能夠很好的解決。
多任務學習模型
模型部分我們把意圖分類和屬性抽取聯合建模,作為一個多任務學習 ( Multi-task Learning ) 任務,如上圖所示 ( 算法詳見 Zhang, Xiaodong 2016IJCAI ) 。雙向 LSTM 處理后,一方面會通過 softmax 分類輸出意圖多分類的結果 ( 右邊的 y^u );另外通過 CRF 層,標記每一個詞的槽位標簽。具體來說,對於 " 幫我找一家明天中午適合 10 人聚餐的川菜館 ",模型應該能識別出來它是屬於訂餐意圖,同時又能夠抽取出時間 " 明天中午 " 、人數 " 10 " 和口味菜系 " 川菜 " 等屬性信息。
2.3 對話狀態追蹤 ( DST )
DST 解決的還是一個意圖的問題,根據當前上下文的環境或者狀態來明確當前用戶的確切意圖。
上圖是我們當前的框架,這個 session context 為上下文信息,NLU 模塊的輸出信息可能是多個意圖,我們需要根據其他的一些信息,比如,訂單信息、門戶信息,入口信息等,結合 session context 去明確它是屬於哪個領域。
如果這個領域不能明確怎么辦?我們的做法是會跟用戶進行一輪的澄清,反問用戶一次,來解決這個問題,也就是框架最左邊的 " domain 不明確進行澄清 " 邏輯。
領域一旦明確后,下一步會進入到意圖這一塊,我們要明確它當前是什么意圖,當然接收到的 query 也面臨多意圖判斷的問題,同樣我們也可以去做澄清,澄清包括利用上下文信息判定,或者增加一輪與用戶的交互來澄清,如果明確則繼續下面的流程,這是我們整體的架構。
舉個栗子:
如果接收到一個信息是 " 牛肉湯撒了 ",首選我們要判斷它是屬於哪個領域的,它是屬於外賣商家這個領域,接着判斷其意圖,對意圖進行澄清后得知意圖是 " 如何申請餐損 ",然后走餐損的流程。
三、知識發現
3.1 人在回路
客服的目的是為了解決用戶的問題,AI 在現有的 work flow 中節省人力,但是機器解決不了的事情還是要交給人來解決。所以在下圖中,我們一定要加一條轉人工的服務。另外我們利用無監督學習從日志中挖掘出的知識點也需要人工 " 業務運營 " 來 check 。在整個環路里監督學習從知識庫中學習到的語義表示能力又可以提供給無監督學習使用,這個在下面會進一步提到。
3.2 無監督學習在知識發現中應用
無監督機器學習主要涉及兩個問題,一個是句子的語義表示,另一個就是如何做知識聚類。
在語義表示問題上,我們做了大量的試驗,在迭代的過程中,我們用到了 DSSM 模型、seq2seq 模型和 BERT 模型來做意圖的相似度計算,在這個過程中我們發現不同的模型有各自的特點,它可能抓住不同維度的特征,在離線模型中我們用多個模型的拼接的方式來表示其語義向量。
在知識點聚類這個問題上,我們采用用了最通用的 K-means 模型來做的。
上面講到的是意圖和說法的挖掘,在實際業務中我們有大量的 Task 的問題。下圖呈現的是一個 " 如何申請餐損 " 的 Task 樹。
當用戶的問題觸發 Task 后,Task 機器人根據和用戶的交流來獲取槽信息,調用不同 API 接口來獲取槽信息,進而回復用戶。上圖 " 如何申請餐損 " Task 需要明確的槽包括 " 配送方式 " 、" 餐損原因 " 、 " 申請狀態 “,其中 " 配送方式 " 和 " 餐損原因 " 是通過與用戶的交互來明確,” 申請狀態 " 則是通過請求后台服務來明確。
在這個環節中我們需要做的就是輔助運營人員構建 Task 類的知識。
我們根據用戶的日志數據提取相應意圖,然后根據意圖共現,回復共現去挖掘,當一個用戶問了一個問題之后還會提問哪些問題,當用戶收到反饋之后還會反問哪些問題。根據這些去構建 Task 子樹,離線構建好之后交給運營的同學,運營同學審核通過之后就可以上線了。
四、情緒識別
4.1 背景介紹
客服熱線是我們公司對外服務的重要交流通道,在售前、售中和售后的各個環節中發揮着重要作用,為用戶提供意見處理、資料管理、技術支持等多項服務。然而目前客服熱線在運營過程中還存在一些痛點,如客服人工坐席的服務水平參差導致客戶的體驗存在差異,另外個別客戶還存在動機復雜等問題。因此如何利用技術提升客服熱線的服務水平、檢測熱線中可能的風險是目前需要解決的一個問題。 本項目對客服熱線中的語音數據進行挖掘與分析,通過量化用戶的情緒能量值,實現對用戶情緒狀態 ( 是否激動、情感傾向等 ) 的追蹤,並且在客戶情緒超過設定閾值時提供預警信息,以便相關人員和應急措施的及時介入,從而為相關業務部門提供運營數據支撐和智力支持,最終提升客服熱線的服務質量和服務效率。
4.2 特征提取
FTT:短時傅里葉變換
每幀語音都對應於一個頻譜 ( 通過短時 FFT 計算 ),頻譜表示頻率與能量的關系。
梅爾濾波:實驗觀測發現人耳就像一個濾波器組一樣,它只關注某些特定的頻率分量 ( 人的聽覺對頻率是有選擇性的 ) 。也就說,它只讓某些頻率的信號通過,而壓根就直接無視它不想感知的某些頻率信號。
4.3 模型選擇
特征處理完成之后就是采用哪種模型來進行訓練。
在迭代中我們采用過傳統的機器學習模型,比如 LR、SVM 模型,神經網絡模型,和一些預訓練好的模型,在這個里面我們遇到的一個挑戰就是,一個情緒是不是激動的標簽是針對整個通話記錄標注的,但是用戶在通話的過程中,不是一直的激動,而是在某個通話階段情緒激動,而一個標簽無法體現出到底是那一部分激動,是全程激動,還是部分激動,還是全程平靜的,其實這個里面就涉及到一個弱標簽的學習,如下圖所示。
這是 19 年提出的一個算法,在實際應用中效果不錯,感興趣的同學可以根據信息去查找。
在實際的效果上,各個模型的表現如下:
MFCC + LSTM < MFCC + CNN < VGGish + ferture level attention < VGGish + decision level attention
五、展望
- 多輪上下文建模,意圖理解
- 讓用戶做選擇題,做意圖預判,意圖推薦
- 語音與文本多模態,弱標記學習,情緒風險識別
- 對話歷史的話題抽取及切割,話術推薦,坐席助理
以上是當前我們正在開展及探索的智能客服理解部分的內容,從 ToC 的用戶側,以及 ToB 的坐席助理側兩方面來優化整個客服閉環。
作者介紹:
江會星博士,美團點評搜索與 NLP 部 NLP 中心的研究員,智能客服團隊負責人,主要負責美團智能客服業務及對話平台的建設。曾在阿里達摩院語音實驗室從事智能語音對話交互方向研究,主要負責主導的產品有斑馬智行語音交互系統、YunOS 語音助理等。
團隊介紹:
美團點評搜索與 NLP 部 NLP 中心秉承 " 讓機器理解人類語言,讓機器與人自然對話,用數據打造知識大腦 " 的信條,致力於建設世界一流的自然語言處理核心技術和服務能力,打造智能客服對話平台,打造自然語言處理平台及知識圖譜 ( 美團大腦 ),助力美團業務場景智能化轉型,提升美團科技水平和品牌影響力。
當前我們在 NLP 多個方向,包括但不限於意圖理解,對話交互,意圖推薦,風險識別,知識圖譜等崗位招聘算法及工程崗位,Base 北京、上海兩地。歡迎加入我們團隊,簡歷請投遞至郵箱:
本文來自 DataFun 社區
原文鏈接:
Deep Reinforcement Learning for Dialogue Generation
本文將會分享一篇深度增強學習在bot中應用的文章,增強學習在很早的時候就應用於bot中來解決一些實際問題,最近幾年開始流行深度增強學習,本文作者將其引入到最新的bot問題中。paper的題目是Deep Reinforcement Learning for Dialogue Generation,作者是Jiwei Li,最早於2016年6月10日發在arxiv上。
現在學術界中bot領域流行的解決方案是seq2seq,本文針對這種方案拋出兩個問題:
1、用MLE作為目標函數會導致容易生成類似於“呵呵呵”的reply,grammatical、safe但是沒有營養,沒有實際意義的話。
2、用MLE作為目標函數容易引起對話的死循環,如下圖:
解決這樣的問題需要bot框架具備以下的能力:
1、整合開發者自定義的回報函數,來達到目標。
2、生成一個reply之后,可以定量地描述這個reply對后續階段的影響。
所以,本文提出用seq2seq+增強學習的思路來解決這個問題。
說到增強學習,就不得不提增強學習的四元素:
- Action
這里的action是指生成的reply,action空間是無限大的,因為可以reply可以是任意長度的文本序列。
- State
這里的state是指[pi,qi],即上一輪兩個人的對話表示。
- Policy
policy是指給定state之后各個action的概率分布。可以表示為:pRL(pi+1|pi, qi)
- Reward
reward表示每個action獲得的回報,本文自定義了三種reward。
1、Ease of Answering
這個reward指標主要是說生成的reply一定是容易被回答的。本文用下面的公式來計算容易的程度:
其實就是給定這個reply之后,生成的下一個reply是dull的概率大小。這里所謂的dull就是指一些“呵呵呵”的reply,比如“I don’t know what you are talking about”等沒有什么營養的話,作者手動給出了這樣的一個dull列表。
2、Information Flow
生成的reply盡量和之前的不要重復。
這里的h是bot的reply表示,i和i+1表示該bot的前后兩輪。這個式子表示同一個bot兩輪的對話越像reward越小。
3、Semantic Coherence
這個指標是用來衡量生成reply是否grammatical和coherent。如果只有前兩個指標,很有可能會得到更高的reward,但是生成的句子並不連貫或者說不成一個自然句子。
這里采用互信息來確保生成的reply具有連貫性。
互信息與多元對數似然比檢驗以及皮爾森校驗有着密切的聯系 [3] ——
- 楊立娜. 基於相位相關理論的最大互信息圖像配准[D].西安電子科技大學,2010.
什么是點互信息機器學習相關文獻里面,經常會用到PMI(Pointwise Mutual Information)這個指標來衡量兩個事物之間的相關性(比如兩個詞)。其原理很簡單,公式如下: ![]() ![]() 在概率論中,我們知道,如果x跟y不相關,則p(x,y)=p(x)p(y)。二者相關性越大,則p(x,y)就相比於p(x)p(y)越大。用后面的式子可能更好理解,在y出現的情況下x出現的條件概率p(x|y)除以x本身出現的概率p(x),自然就表示x跟y的相關程度。 這里的log來自於信息論的理論,可以簡單理解為,當對p(x)取log之后就將一個概率轉換為了信息量(要再乘以-1將其變為正數),以2為底時可以簡單理解為用多少個bits可以表示這個變量。 至此,概念介紹完了,后面是例子和相關背景,不感興趣的話就可以不用看了。 舉個自然語言處理中的例子來說,我們想衡量like這個詞的極性(正向情感還是負向情感)。我們可以預先挑選一些正向情感的詞,比如good。然后我們算like跟good的PMI,即: PMI(like,good)=logp(like,good)p(like)p(good) 其中p(like)是like在語料庫中出現的概率(出現次數除以總詞數N),p(like,good)表示like跟good在一句話中同時出現的概率(like跟good同時出現的次數除以N2)。 PMI(like,good)越大表示like的正向情感傾向就越明顯。 點互信息PMI其實就是從信息論里面的互信息這個概念里面衍生出來的。 互信息即: ![]() ![]() 其衡量的是兩個隨機變量之間的相關性,即一個隨機變量中包含的關於另一個隨機變量的信息量。所謂的隨機變量,即隨機試驗結果的量的表示,可以簡單理解為按照一個概率分布進行取值的變量,比如隨機抽查的一個人的身高就是一個隨機變量。 可以看出,互信息其實就是對X和Y的所有可能的取值情況的點互信息PMI的加權和。因此,點互信息這個名字還是很形象的。 The following table shows counts of pairs of words getting the most and the least PMI scores in the first 50 millions of words in Wikipedia (dump of October 2015) filtering by 1,000 or more co-occurrences. The frequency of each count can be obtained by dividing its value by 50,000,952. (Note: natural log is used to calculate the PMI values in this example, instead of log base 2) ![]() ![]() |
|
最終的reward由這三部分加權求和計算得到。
增強學習的幾個要素介紹完之后,接下來就是如何仿真的問題,本文采用兩個bot相互對話的方式進行。
step 1 監督學習。將數據中的每輪對話當做target,將之前的兩句對話當做source進行seq2seq訓練得到模型,這一步的結果作為第二步的初值。
step 2 增強學習。因為seq2seq會容易生成dull reply,如果直接用seq2seq的結果將會導致增強學習這部分產生的reply也不是非常的diversity,從而無法產生高質量的reply。所以,這里用MMI(Maximum Mutual Information,這里與之前Jiwei Li的兩篇paper做法一致)來生成更加diversity的reply,然后將生成最大互信息reply的問題轉換為一個增強學習問題,這里的互信息score作為reward的一部分(r3)。用第一步訓練好的模型來初始化policy模型,給定輸入[pi,qi],生成一個候選列表作為action集合,集合中的每個reply都計算出其MMI score,這個score作為reward反向傳播回seq2seq模型中,進行訓練。整個仿真過程如下圖:
兩個bot在對話,初始的時候給定一個input message,然后bot1根據input生成5個候選reply,依次往下進行,因為每一個input都會產生5個reply,隨着turn的增加,reply會指數增長,這里在每輪對話中,通過sample來選擇出5個作為本輪的reply。
接下來就是評價的部分,自動評價指標一共兩個:
1、對話輪數。
很明顯,增強學習生成的對話輪數更多。
2、diversity。
增強學習生成的詞、詞組更加豐富和多樣。
下圖給出了一個MMI seq2seq與RL方法的對比結果:
RL不僅僅在回答上一個提問,而且常常能夠提出一個新的問題,讓對話繼續下去,所以對話輪數就會增多。原因是,RL在選擇最優action的時候回考慮長遠的reward,而不僅僅是當前的reward。
本文是一篇探索性的文章,將seq2seq與RL整合在一起解決bot的問題是一個不錯的思路,很有啟發性,尤其是用RL可以將問題考慮地更加長遠,獲得更大的reward。用兩個bot相互對話來產生大量的訓練數據也非常有用,在實際工程應用背景下數據的缺乏是一個很嚴重的問題,如果有一定質量的bot可以不斷地模擬真實用戶來產生數據,將deep learning真正用在bot中解決實際問題就指日可待了。
RL解決bot問題的文章在之前出現過一些,但都是人工給出一些feature來進行增強學習,隨着deepmind用seq2seq+RL的思路成功地解決video games的問題,這種seq2seq的思想與RL的結合就成為了一種趨勢,朝着data driven的方向更進一步。
一點思考,歡迎交流。