微信智言奪冠全球對話系統挑戰賽,冠軍解決方案全解析
前不久,微信智言團隊奪得第七屆對話系統技術挑戰賽(DSTC7)Track 2 賽道的冠軍。
DSTC7 挑戰賽由來自微軟研究院、卡耐基梅隆大學(CMU)的科學家於 2013 年發起,旨在帶動學術與工業界在對話技術上的提升,是對話領域的權威學術比賽。本屆挑戰賽分為三個方向,微信模式識別中心參加了其中一個方向:基於 Fact(如百科文章、Blog 評論)與對話上下文資訊自動生成回答。共有 7 支隊伍、26 個系統參加該競賽。
據瞭解,微信智言團隊的主要參賽成員是微信模式識別中心的暑期實習生 Jiachen Ding,目前在上海交通大學讀研;另一名成員 Yik-Cheung (Wilson) Tam 博士畢業於 CMU,現任職於微信模式識別中心,對這一參賽專案提供了指導。近日,Wilson 接受了機器之心的採訪,就任務詳情、模型結構、訓練細節等進行了介紹。
DSTC7 Track 2 任務簡介
DSTC7 Track 2「Sentence Generation」任務要求基於 Fact 和對話歷史自動生成回答。該任務與傳統 對話系統 不同的一點是,它要求利用端到端的對話系統自動讀取 Fact。這就像使對話系統具備閱讀理解的能力,能夠基於 Fact 產生正確的答案。
競賽提供的 Fact 可能是維基百科文章、新聞等。如下圖所示,DSTC7 Track 2 提供的資料集包括來自 reddit 社群的 300 萬對話問答,以及從 reddit 網頁上相關的網頁中提取的 2 億個句子。
DSTC7 Track 2 競賽的資料集構成示例。
Wilson 告訴機器之心,這個任務的難點在於:對話系統生成的答案需要與 Fact 相關,而 Fact 是非結構化資料,相對來講比較難處理。
傳統的聊天機器人沒有「閱讀」Fact 的機制,所以聊天回答可能會有偏差,例如:這家火鍋店好不好吃?機器人回答有時會說「這家店的菜很好吃」,有時也會說「這家店的菜很差」,沒有辦法給出與真實點評一致的回答。
而結合了 Fact 和對話上下文資訊的對話系統所生成的回答能夠基於 Fact 中的真實資訊作答,確保回答是有用、有資訊的。
模型架構
微信模式識別中心提出一種基於 注意力機制 來「閱讀」Fact 與對話上下文資訊的方法,並利用原創動態聚類解碼器,產生與 Fact 和上下文相關並且有趣的回答,在自動和人工評測都取得最佳成績。
上圖展示了該系統的整體架構,包括資料預處理、對對話歷史和 Fact 執行端到端的編碼器-解碼器注意力建模、改進版解碼策略。
下面我們來看一下每個模組的具體細節。
首先是資料預處理。這一步直接決定了系統的效能,Wilson 認為在所有模組中資料預處理是模型訓練中最重要的模組之一。該競賽提供的資料集中很多網頁存在大量無關資訊(如廣告),模型訓練時需要先進行資料預處理工作。
在資料清洗過程中,微信智言團隊去除了對話歷史資料中 reddit 網頁上的無用資訊(如廣告、導航欄、頁尾),並簡化 Fact 文章內容:從相關 Fact 文章中提取與對話歷史關聯度高的資訊,將平均 4000 單詞的文章壓縮至至多 500 個 word token。
若我們將 Fact 與對話歷史編碼為隱藏向量,再借助解碼器就能將這些資訊解碼為對應的回答。其中如上所示編碼器比較簡單,直接用 BiLSTM 就行了。而如果需要得到優質回答,虛框內的解碼過程就必須精煉候選回答,這也是該對話系統解決的核心問題。
為了解碼為優質回答,微信團隊主要利用了注意力機制、 k 均值聚類 和語言模型等方法,它們一方面保證整合對話歷史和 Fact 資訊,另一方面也最大限度地保障回答的多樣性和有趣。
其中 k 均值聚類主要對 Beam search 的候選回答進行聚類,這樣就能識別重複或類似的回答。然而由於該模型解碼器中使用了注意力機制,因此對話歷史和 Fact 中的 token 可能被重複關注,從而生成重複的 N-grams。因此微信團隊隨後會移除重複的 N-grams,減少垃圾回答。
在經過了兩次篩選之後,最終得到的 top n 個回答中仍可能包含安全卻無用的回答。微信智言團隊選擇構建一個語言模型(LM),過濾掉無用的回答。最後,只需要選擇概率最高的作為最終回答就可以了。
解碼過程
微信智言團隊使用雙向 LSTM 分別編碼對話歷史和 Fact,然後對二者執行注意力機制,即解碼器在每個時間步中通過注意力機制關注編碼器輸入的不同部分。然後利用模式預測和輸出詞概率估計來計算最終的單詞概率分佈。
解碼步流程。微信團隊使用 pointer generator 模型,允許複製對話歷史(H)和事實(F)。在每個解碼時間步中,計算三個動作概率,即從 h 中複製一個 token,從 f 中複製一個 token,生成一個 token。最終的單詞概率分佈是這三個概率分佈的線性插值。
傳統的 seq-to-seq 模型易遇到 OOV 問題。為此,智言團隊選擇使用斯坦福大學 Abigail See 等人提出的 pointer-generator 方法(原用於文字摘要任務)。他們將該模型從支援兩種模式(生成 token 和複製 token)擴充套件為支援三種模式:生成 token;從對話歷史中複製 token;從 Fact 中複製 token。然後模型在每個解碼步將所有可用特徵級聯起來,包括使用注意力機制後得到的對話歷史向量和 Fact 向量、解碼器隱藏狀態、最後一個輸入詞嵌入。再使用前饋網路和 Softmax 層進行模式預測。
最後,模型對上述三種模式的詞彙分佈執行線性插值,從而計算出最終的單詞概率分佈,其中 m 對應於複製機制中的模式索引:
Beam search 解碼策略
傳統的束搜尋方法主要目的是找到概率最大的假設,但對話系統中往往出現很多安全卻無用的回答,很可能概率最大的句子並非是最合適、最有趣的回答。因此微信智言團隊在束搜尋中繼承了 K 均值聚類方法,將語義類似的假設分組並進行修剪,以提高回答的多樣性。
如下所示為帶 k 均值聚類的束搜尋,首先模型會和常見的束搜尋一樣確定多個候選回答,在對這些候選回答做聚類後,每一個叢集都會是類似的回答。如果我們對每一個叢集包含的候選回答做一個排序,那麼就能抽取到更合理的候選回答,這樣也會因為叢集而增加回答的多樣性。最後,使用語言模型對聚類得到的所有候選答案進行評分,符合自然語言表達的假設就能輸出為最終的回答。
模型訓練 trick
除了介紹模型之外,Wilson 還向機器之心介紹了模型訓練過程中的具體技巧。
該模型基於TensorFlow框架構建,直接使用 pointer generator 模型的原始碼,改進以適應該競賽任務,從而在有限時間內完成比賽任務。
-
實現地址:https://github.com/abisee/pointer-generator
該模型訓練過程中,微信智言團隊最初使用了單機版 GPU,訓練時間為 5 天。
Wilson 表示訓練過程中遇到的最大困難是資料預處理,同時他也認為資料預處理是模型訓練中最重要的模組之一。其次是束搜尋,他們在束搜尋中結合了 K 均值聚類,從而有效地過濾掉無用的回答,提高回答的多樣性。
關於微信智言
微信智言是繼微信智聆之後,微信團隊推出的又一 AI 技術品牌。微信智言專注於智慧對話和自然語言處理等技術的研究與應用,致力於打造「對話即服務」的理念。目前已經支援家居硬體、PaaS、行業雲和 AI Bot 等四大領域,滿足個人、企業乃至行業的智慧對話需求。
在家居硬體方面,目前騰訊小微已經與多家廠商有合作,如哈曼•卡頓音箱、JBL 耳機和親見智慧屏等智慧裝置。
此外,騰訊小微定製了很多預置服務(如聽歌、查天氣、查股票等),但由於不同領域的需求不同,為提高可擴充套件性,微信智言團隊為第三方開放 PaaS 平臺,讓任何一個開發人員甚至產品經理都可以基於自己領域的業務邏輯、業務需求在 PaaS 平臺上搭建自己的應用和服務。
行業雲提供面向企業客戶的完整的解決方案,為企業快速搭建智慧客服平臺和行業任務智慧對話系統。以客服系統為例子,很多公眾號希望搭建對話機制,自動回答使用者的問題。開發人員只需將資料上傳到微信智言的平臺,微信智言團隊即可提供 QA 系統。此外,微信智言還提供定製服務,比如 NLP 方面的基礎服務,包括分詞、命名實體識別、文字摘要等,用服務的方式為客戶提供技術。
據瞭解,微信智言已經通過智慧對話技術服務於國內外數百萬的使用者。微信智言在 AI 技術研究上還將不斷探索和提升,為各行業夥伴和終端使用者提供一流的智慧對話技術和平臺服務——真正實現團隊「對話即服務」的理念。