雷鋒網(公眾號:雷鋒網)AI研習社按:對話系統是自然語言處理的一個熱門話題,而自然語言理解則是對話系統的關鍵組成部分,現有的很多自然語言理解工具往往以服務的方式獲取(Google 的 API.ai, Facebook 的 Wit.ai 等),使用這些服務往往需要向服務提供商提供自己的數據,並且根據自己業務調試模型很不方便。本文為大家介紹了一種新方法,即如何基於 rasa 搭建一個中文對話系統。
在近期雷鋒網AI研習社舉辦的線上免費公開課上,來自北京郵電大學網絡技術研究院的張慶恆分享了基於 rasa nlu 構建自己的自然語言理解工具,並結合 rasa core 搭建對話系統框架的一些經驗,方便初學者入門,加深對對話系統的理解。本文根據分享者的直播視頻內容整理而成。(推薦觀看直播回放)
張慶恆,北京郵電大學網絡技術研究院,網絡與交換技術國家重點實驗室碩士,主要研究方向為機器學習與自然語言處理。曾在百度實習且多次參加機器學習、深度學習比賽,獲阿里雲安全算法挑戰賽獲冠軍,中文標註開源項目Chinese-Annotator主要開發成員。
分享主題:基於 rasa 搭建中文對話系統
分享提綱:
2.1 rasa nlu 中文自然語言理解實現,及其背後的原理
2.2 rasa core 對話管理實現,結合源碼介紹其實現方法
主要內容:
大家好,今天的分享內容首先是為大家介紹基於任務型對話系統的主要概念和它的幾個模塊。第二部分是基於Rasa搭建電信領域任務型對話系統的實操訓練。分別是基於Rasa nlu實現自然語言理解和基於rasa core實現對話管理。
自然語言理解(NLU)和對話管理是任務型對話的主要模塊。自然語言理解是問答系統、聊天機器人等更高級應用的基石。下面列舉三個典型的問答系統:
任務型對話系統示意圖
任務型對話主要包括四部分 ,語音識別,自然語言理解,對話管理,最後是自然語言生成。
下面是一個訂餐應用的例子。
接下來分別來看每個模塊具體實現的方式
首先是自然語言理解。做自然語言理解首先要有一種表示自然語言含義的形式,一般用傳統的三元組方式即:action, slot , value。action就是意圖,slot是需要填充的槽值,value是對應的值。
具體可以用哪些技術做這些事情呢?下面列出了三個方法。
第一個是語法分析,可以通過語法規則去分析一句話,得到這句活是疑問句還是肯定句,繼而分析出用戶意圖。相應的也可以通過語法結構中找到對應的槽值。
第二種方法是生成模式,主要兩個代表性的HMM,CRF, 這樣就需要標註數據。
第三種方法是分類思想,先對一句話提取特徵,再根據有多少個槽值或意圖訓練多少個分類器,輸入一句話分別給不同的分類器,最終得到包含槽值的概率有多大,最終得到這個槽值。
還有一種採用深度學習方式,使用LSTM+CRF兩種組合的方式進行實體識別,現在也是首選的方法 ,但有一個問題是深度學習的速度比較慢 ,一般輕量型的對話系統還是通過語法分析或分類方式或序列標註來做。
對話狀態應該包含持續對話所需要的各種信息。DST的主要作用是記錄當前對話狀態,作為決策模塊的訓練數據。
系統如何做出反饋動作?
下面是自然語言生成部分。自然語言生成也有多種方法。這裡舉三個方法:基於模板,基於語法規則和基於生成模型方法; 具體可觀看視頻回放。
任務型對話其他模塊
第二部分是用Rasa實現任務型對話系統。Rasa nlu是自然語言理解框架,主要實現實體識別,意圖識別等。Rasa core是對話管理框架,主要實現狀態跟蹤、policy訓練,在線學習等。
實操部分使用rasa nlu和 rasa core 實現一個電信領域對話系統demo,實現簡單的業務查詢辦理功能『』具體代碼實現過程推薦觀看AI慕課學院提供的視頻回放。
雷鋒網更多公開課直播預告敬請關注微信公眾號【AI研習社】)。如果錯過了直播課程,還可到AI慕課學院查找該期的視頻回放。
雷鋒網原創文章,未經授權禁止轉載。詳情見轉載須知。