來源 | AI科技大本營在線公開課
算法
分享嘉賓 | 葛付江(思必馳 NLP 部門負責人)網絡
整理 | Jane架構
【導讀】天然語言對話系統正在覆蓋愈來愈多的生活和服務場景,同時,天然語言對話的理解能力和對精細知識的對話召回率在技術上仍有很大挑戰。機器學習
啓發式對話經過創建知識點之間的話題關聯,使對話系統可以主動發現相關知識,充分發揮知識的協同做用,引導對話過程,把知識在合適的時間主動送達用戶。知識不僅是以知識圖譜或問答庫等形式被動被搜索,啓發式對話中的知識結合了先驗經驗和用戶對話習慣,從而擁有知識角色,讓對話理解和對話流程更加天然,也更有用戶價值。函數
在本期公開課課程中,AI 科技大本營邀請到了思必馳 NLP 部門負責人葛付江針對「啓發式對話中的知識管理」作系統的講解和梳理。工具
回放地址:edu.csdn.net/huiyiCourse…學習
如下內容爲大本營公開課文字版整理。ui
今天給你們分享一下,關於啓發式對話中的知識管理系統,分享的內容包括如下五個方面:編碼
▌對話系統的架構.net
首先是對話系統的架構,咱們來看一下對話系統流程。
在通常的對話系統應用場景,好比在智能音箱、智能電視,包括如今車載的設備等,當用戶說了一個問句,智能客服自動的問答和對話,這樣的系統的基本流程是它接收到用戶的一個問句或者用戶說的一句話,而後系統裏作一些處理,給用戶一個答覆。
咱們今天說的對話系統和傳統的問答系統有一個重要的區別,對話系統它是維護上下文的,在作一個對話的時候是有上下文場景,在這個上下文的過程當中須要控制一些對話的狀態,來完整地理解用戶的意圖。
例如,用戶問一句明天會下雨嗎?系統會作一些預處理,即一些天然語言處理上的特徵處理,好比分詞、詞性標註、命名實體識別這樣的模塊,在這裏能夠識別到一些實體,好比裏邊的時間是明天,關於天氣現象是下雨,這是命名實體能夠作到的。
通過特徵的預處理以及命名實體的識別,而後進入正式的對於這句話的理解。首先是對於用戶的每個問句須要作一個領域的判斷,通常作這個領域判斷是由於在對話系統裏會支持各類場景,首先把用戶的這句話限定在一個固定的場景下,而後才能作相應的後續處理。
領域的判斷通常狀況下有各類方式,無論是寫模板,仍是一些分類的算法,好比這句話咱們送到一個分類器裏,它可能能判斷出它是一個天氣領域相關的。在這裏邊,經過 Slot Filling,它就能夠獲得天氣領域的一個意圖,這個意圖領域是天氣領域,有它的地點和時間。固然這句話沒有提到地點,由於通常這樣的系統會經過傳感器或者是定位的信息,或者是 IP,或者各類設備相關的場景的信息獲取到他一個默認的地點或者默認的城市,根據這些信息,而後咱們獲得一個結構化的意圖。
這個結構化的意圖,而後送給一個對話管理或者對話狀態追蹤的模塊,這個對話狀態的管理去作一個判斷,說以當前這個領域,好比天氣這個領域它的 Slot 是不是知足的。對於天氣這個領域比較簡單,發現這句話實際上它的領域意圖、時間、地點都已經知足了,而後把這些槽位都補充上。
根據這些補充好的信息,實際上它就是一個結構化的信息,根據它的時間、地點、天氣現象,而後去後臺的數據服務裏作一個查找,把真正的天氣,好比明天須要下雨或者是晴天這樣一個信息取出來,而後通過一個答案生成,Response Generation 這樣一個模塊,而後生成一句比較天然的話,好比說明天多是一個晴天,而後就說明天是一個晴天,若是再說得更天然一點,可能說是一個出遊的好時間,相似這樣的,整個流程大概是這樣,其實是一個比較簡單的過程。
經過這個流程我想跟你們分享一下對話系統的基本架構,首先它要處理一個用戶的 Query,而後它要通過一個對話管理的模塊,這個對話管理實際上就是維護上下文的信息。再下面是一個意圖的理解,這個意圖的理解可能有各類方式,包括知識庫或者叫知識圖譜,包括問答的形式,這種問句類似度匹配,還有一些通用的各類其餘的意圖的理解,包括意圖分類的這些東西。
在這個裏邊,對話管理在這個裏邊,通常狀況下對話管理其實是一個相似於流程圖的東西,好比以剛纔天氣的裏邊,它其實是一種叫 Slot Filling,有幾個信息填滿以後就能夠了。而後在一些其餘的對話過程當中,好比說典型的客服,實際上通常在客服的具體場景下,好比金融領域的某一種金融業務或者是用戶查詢一種金融產品,好比保險這種產品,某一種保險產品,它有一些信息,它其實是一個流程圖的形式。
還有一種是咱們後面會提到的啓發式的對話,這幾種形式的結合,實際上是一個對話的管理。如今通常的系統可能都是處理某一種對話,要麼就是 Slot Filling,要麼就是一個設定好的流程,要麼是一種啓發式,能把它作到融合的可能還不是特別多。
繼續在這個圖裏邊,剛纔提到對話管理就是 DM,對話的理解就是知識庫,問答對,還有一些通用的,好比說抱怨,一種通用的狀態,通常狀況下多是一種分類的方式來作的這種 NLU 的理解以後,各個模塊作到這個 NLU 以後,它須要去作一個抉擇,由於在各類系統裏邊,用戶的一句話可能都會找到一個答案,咱們到底選哪個答案,因此就作一個排序,排序完以後通過一個答案的生成,最後給用戶一個答覆。
固然這裏邊,邊上還有一個模塊就是上下文的管理,它在對話管理、NLU 以及排序和答案生成這些模塊裏都會用多,它會維護一些上下文的信息。固然這張圖結構是比較簡單的,可是每個裏邊實際上有挺多東西,咱們後面看具體的內容,最後咱們回過頭再來看這張圖,可能就會有一些不同的東西。
看以前咱們先總結一下如今一些對話機器人的現狀,通常對話機器人怎麼來評價或者它如今的狀態,通常評價的標準,咱們對機器人的評價是不太好評價的,咱們作一個系統或者作一個學術的研究,通常狀況下它怎麼來衡量這個機器人的效果,其實是一個很重要的事,咱們要作這個事前須要先定一個標準。
通常的像對話系統主要的幾種評價的東西,一個是準確率,準確率可能就是基於一些問答對仍是不對,或者對話答的對仍是不對,好比這個對話進行了十輪,這十輪裏有幾回對的,幾回錯的,直接給一個零一的判斷,而後算出準確率。
另一個,人工打分,由於這個對話過程當中它可能並非一個絕對的零一的判斷,有的時候它給的答案可能不那麼合理,可是必定程度上可以接受,因此人通常能夠給它打一個分數,好比說 1 到 10 分或者 1 到 5 分,給一個分數,最後給這個機器人一個綜合的打分。
學術上可能借鑑一些其餘系統的標準,好比說困惑度或者 BLEU 值這樣的方式來給一些打分,通常這種標準更可能是在一個限定的數據集裏去衡量這句話,生成的這句答覆它的語言流暢程度,可能更多的是從語言流暢程度的角度來衡量,固然這些困惑度或者BLEU值,它的好處是能自動地來判斷,可是壞處是它其實很難嚴格地從語意上來判斷這個系統好或壞。
在一些極窄的領域裏,好比說訂餐,甚至更窄一點,好比訂一個披薩或者訂咖啡,或者撥打電話,這種很窄的領域,實際上如今機器學習的方法和模板的方法都可以作到一個比較好的精度。
機器學習或者深度學習,可是深度學習在這種場景下它也依賴於一個比較大的數據量,相對於這個場景來講,由於通常在這種實驗上,它的場景仍是比較小的。若是場景比較多的話,如今在一個比較複雜的場景裏,可能如今深度學習的效果還不是很好,就是在多輪對話的場景下,而且有多個場景混合的話。
另外在一些較大的領域,好比客服,客服這個場景,它通常狀況下對於一個企業的客服,一個企業的客服可能會涉及到幾種產品,既使是一類產品也會涉及到這一類產品不一樣的產品線以及它各類型號這些東西,客服它相對來講是一個比較寬的領域。
如今無論是深度學習,仍是其餘傳統的機器學習,若是在總體都用深度學習的方式,它的準確率是比較低的,不多能作到 50% 以上的,就是在一個比較大的領域裏。因此如今在客服領域裏,不少系統是基於檢索式或者是基於模板的,檢索式就是它準備好了一些標準的問答對,由於企業作本身的客服的時候,通常狀況下積累了一些它本身對本身產品的標準問題和答案的,用戶的一個問題就到這裏找一個最類似的問題,而後給它一個答案。這種方式目前是用得比較多的。
另一種就是模板,人工去寫一些規則的模板或者叫語義的模板,而後去解釋用戶的這個問句包含哪些主要的信息,而後把它對到一個意圖上給一個答案,在這些領域裏邊,較大的領域實際上機器學習的算法仍是有一些挑戰的,即便用模板它也有不少的挑戰,由於模板多了以後它就會有衝突以及很差維護的問題。
▌啓發式對話系統
啓發式對話系統,是咱們正在作的一個啓發式對話系統,啓發式對話系統如今有一些類似的概念,好比說主動式對話,思必馳提出來這個啓發式對話可能主要是在這樣,在一些企業的場景下不少時候用戶其實是面對一個對話機器人,他不太清楚能問什麼樣的問題,以及這個機器人的能力是什麼樣,它能回答什麼樣的問題,或者用戶大概知道他要什麼東西,可是他對於問問題這個事,讓他去問不少問題仍是要費一點腦筋的。
啓發式對話大概就是這麼一個流程。它實際上經過這些問題背後的一些聯繫,能讓這個對話一直持續下去。固然你說你不想了解而後它就結束了。這是一個基本的概念。
咱們來看一下啓發式對話有哪些基本的特色,首先根據用戶的問題主動引導對話交互,用戶問了一個問題,系統會根據這個問題把一些相關的問題列出來或者問用戶他想不想了解。用戶的問題是以多種形式鏈接到知識點,固然這個對話後面,咱們叫知識點,以一個知識點的方式,鏈接一個知識點可能就是對於一個具體的問題,這個問題可能有各類不一樣的問法,咱們都認爲它是一個知識點。
以多種形式指的是如今常見的形式,它多是一個問答對的形式,在這個對話系統後面多是一個問答對的形式,也多是一個知識圖譜的形式來存在的,可是它們的鏈接是統一的,都是以一種知識點來管理它們。
知識點若是直觀地理解,咱們能夠認爲它就是問答對或者知識圖譜裏面的一個實體相關的屬性這樣的東西,這些知識點之間或者問題之間,它經過話題來融合,話題實際上對用戶是一個不可見的概念,它是爲了去作推薦,由於咱們把問題經過話題作一個鏈接以後,後面這個啓發式對話其實是根據話題來作一些選擇,用戶問了一個問題,咱們把這個問題所在的知識點,這個知識點它所在的話題,根據這個話題去找到一些相關的話題,而後在那些話題下面找到一些對應的問題,而後推薦給用戶。
話題之間有一些語義或者邏輯關係的,後面會具體講這些話題之間是怎麼組織的。整個對話過程可能就是根據話題來作總體的規劃以及跳轉的。這是如今整個啓發式對話它的一些特色。
這是一個具體的例子,這是一個產品的形態,就是說這個話題的組織。對於一個企業的客戶,它若是想作一個它的對話系統,它能夠人爲地去設定一些話題,這個話題是以樹型的組織,好比在這個裏邊就是一個關於花相關的話題,好比怎麼學習花藝,各類花藝相關的信息,每個話題,橙色的這部分是這個話題的組織,話題樹,用戶能夠設定這樣一個話題的組織。在這個話題下面,每個話題下面用戶均可以去定一些,好比花藝大師,花藝大師下面用戶能夠定義它在這下面一些人相關的信息,而後具體把這些人相關的信息列出來。
一個終端的用戶就能夠去問這些關於人的信息,因此話題大概有這麼幾種形式,首先以右邊這個圖的形式,某一個話題下面可能有兩三個這樣的話題,固然這個話題還能夠有層次,它能夠有子話題、孫子話題,這個層次結構能夠來組織擴展,固然一個話題下面能夠有不少話題,這個話題的一個組織形式,這些基本的概念。
▌對話系統中的知識管理
再咱們來看一下,在對話系統裏邊這些知識它在對話的理解以及對話管理中是怎麼來發生做用的,後面我會結合現有的技術,現有的你們常見的作對話裏邊的相關技術,而後和啓發式對話一塊兒來介紹對話系統中的知識管理。
首先來看幾個例子,在機器人理解語言中可能遇到的一些問題,這個給你們一個直觀的感受,可能遇到哪些問題。好比說在理解上,機器人理解語言的過程當中,好比說「今每天津適合洗車嗎」這樣一個輸入,若是是語音或者拼音輸入均可能會有這樣的問題,「今每天津適合洗車嗎」可能和「今每天津市河西」,天津市有一個河西區,可能就會理解錯,從拼音到文字可能就會出錯,實際上這個很是類似的。
這是咱們在語言上可能會有一些問題,機器來作這個事的時候,它實際上很難來判斷,人是有一些背景的知識和上下文知識的。
咱們來看一下,剛纔列了那麼多問題,通常狀況下來作這個對話裏邊核心的,剛纔咱們在最開始的架構圖裏已經看到對話系統裏邊核心的三大塊,一個是天然語言理解,一個是對話意圖理解,對話管理和對話答案的生成三個部分。
你們比較關注的是前兩個方面,對話的理解和管理,理解這部分可能最多見的是基於規則的系統,好比咱們就寫一個 pattern,科研人員、時間、發表過的文章,相似這樣的,這個規則系統裏有一些詞典和規則的組織,固然這有一系列規則組織的問題,實際上它也是一個比較浩大的工程,可是咱們從算法或者是咱們理解的角度,可能以爲它仍是一個比較簡單的方式,固然規則多了以後是挺難維護的。
另一種可能就是經過意圖的分類的方式,好比經過一些機器學習的方式給它作一個分類。好比咱們作一點簡單的,好比天氣,對話系統只要理解出來它是天氣,而後咱們就給它播一個天氣預報,不少場景下用戶也能夠接受,系統不理解它裏邊具體的東西,只理解是某一種意圖,而後就給它作一個播報。這裏面常見的這種分類的算法均可以用獲得。
另一種是問句檢索的方式,好比在閒聊或者客服中實際上都大量地用到。咱們說閒聊,實際上從學術上來講可能不少研究是在作深度學習的閒聊,但實際場景的閒聊裏邊,有不少也是經過問答檢索的方式檢索出來的,固然它須要有大量的問答對,這些問答對都是人手工事先整理出來的,這是一個比較耗費人力的東西,而且它覆蓋的範圍有限。
通常作這個事的方式是說先經過一個倒排索引,這個用戶問題來了以後檢索出一組問題,而後對它進行一個侯選,而後再作一些排序,這個排序的算法可能有各類加權,有傳統的 learning to rank,還有深度學習下來這種深度的語意匹配的算法,這些算法咱們後面能夠具體地看幾個例子。
問句分類也有一些直接拿如今深度學習的,好比embedding,實際如今深度學習,好比前面提到的 Sequence to sequence 模型能夠直接把用戶的問題 embedding 成一個向量,咱們直接拿這個向量實際上就能夠作一些問句的分類或者類似度計算,這張圖是大概 2000 多個用戶的問題,而後作了一個 embedding,就是用 Sequence to sequence 作了一個 embedding。
這個時候拿這種可視化的工具把它可視化出來,咱們能夠看出來它大概是能分出來的,這是三類問題,實上它確實也就是三類問題,雖然它們之間有一些交叉,如今這種深度學習的方法對於這種東西的建模能力仍是挺強的,基本的問題類別仍是能區分出來的。
下面這張圖,如今這種基本的深度學習裏邊的這些算法有一個很基礎的模型,就是 Sequence to sequence 的模型,它是基於把用戶說的裏邊的每個詞,好比 ABC 是一個輸入的詞,ABC 是輸入的這個問句,A 是一個詞,B 是一個詞,C 是一個詞,而後它的輸出有可能就是 XYZ,它把它送到 Sequence to sequence 這個神經網絡裏邊,A 是一個詞,進去以後是一個 RN 的模型,它就作這樣一個 embedding,實際上到了 ABC,而後 eos,就是這個句子結束了。
結束以後這個神經網絡中間層就是一個 W,這個 W 能夠表示這個句子的語意的表示,用這個 W 再去解碼出來一個答案,通過大量的數據訓練實際上就能夠生成一個答案,生成式的閒聊可能主要就是這麼來作的,這個模型,包括中間的這個表示 W,實際上也能夠用來作問句的分類或者問句類似度的計算。
這是一個基本的模型,如今作問句,咱們剛纔提到如今大量的實際使用中作問句的類似度匹配,可能一種方法就是作句子類似度的計算,這張圖是一個作句子類似度計算的基礎模型,這裏面這些都是現有的方法。
好比說用 LSTM 來對句子作一個編碼,這個 LSTM 這個基本的模型和剛纔的 Sequence to sequence 的編碼階段相似,用戶的一個問題和一個系統中的問題,兩個都通過一個 LSTM,這個 X 表明了輸入,H 表明的是模型中間的隱藏層,用戶的這句話通過 LSTM 把它編碼成一個 h3(a) 這麼一個狀態,還有一個標準問題(被檢索的問題),通過一個編碼,編碼成了 h4(b) 這麼一個狀態,兩個通過一個距離的計算,就能夠送到一個分類器裏,給它作一個類似或者不類似的判斷。
這個方法是把用戶轉換成一個分類的問題,二分類的問題,這個用戶的問題和咱們標準庫裏的問題類似或者不類似,而後作一個判斷。這樣也能夠作這個事,這是一種比較經典的方式,其實它的效果也還挺好,不少場景下都是挺適合的。
咱們看一下下面這篇文章,這篇文章我以爲是在作類似度計算方面比較經典的一篇文章,它還作得比較好。它左邊是輸入,好比有 u_一、u_n-一、u_n是用戶的輸入,u_1 到 u_n 是用戶輸入的整個上下文,他可能說了多句。r是response響應。
這個上下文通過一個 Word Embedding,每個均可以 Embedding 成一個詞向量的表示,而後通過一個 GRU 或者 LSTM 均可以,而後把它編碼成一個向量。這裏邊作了一個比較複雜的操做,中間這部分,M1M2 這部分,它是把用戶的輸入和答案分別交叉去作了一個內積的計算,都是向量,實際上表示出來都是矩陣,它們之間作一個內積混合的運算,充分的交叉以後再通過 CNN,CNN 而後通過一個Pooling,Pooling 以後再通過一個相似於這裏邊又過了一個 GRU,最後輸出一個分值。
這個和剛纔 LSTM 那個方式最大的區別是,首先它層數增多了,由於它最前面是 GRU,最後邊這兒也是一個 GRU,中間多了一個 CNN 的層,這個 CNN 層的做用其實是把問題和答案的信息充分地混合,去找到它裏邊匹配的類似或者結合的點,而後來給出一個答覆。這個模型在不少場景下的效果是比較好的,咱們在一些實驗中它的實際確實也是比較好的,可是它的問題是,由於它通過了一個很充分的混合,咱們看到它對輸入的要求是有必定要求的,這個輸入相對比較長一點,它的信息比較充分,這樣作是比較好的。可是在有一些對話場景下,當這個對話比較短的時候,它的效果其實是有限的。這是一種方式。
這張圖是谷歌的一篇文章裏,它只用 Attention來解決,好比 Input 和 Output 這兩個地方,通過一系列的 Attention 最後輸出出來,咱們作一個分類決策。咱們藉助於 Attention 的這個模型,多層 Attention 的模型去作這個分類任務的時候,這個在一些比較短文本的場景下,問題都比較短的狀況下,它的效果其實是比較好的。實際上這些模型可能都不是萬能的,每一種模型都有它適用的場景,根據數據咱們才能看到它在哪些場景下更好或者是有它的長處。每一種模型都有它的長處和缺點。
還有一些知識圖譜的方式,最直觀的可能知識圖譜是經過一些邏輯表達式來作的,好比說一個簡單的問題,就是姚明的老婆出生在哪裏這種,知識圖譜裏邊存儲了姚明以及他的配偶葉麗,這個方式咱們理解起來也比較簡單,就是作了這麼一個查找,可是當知識圖譜比較大的時候,實際上知識圖譜上的問答仍是比較難作的。主要是用戶的表達很難去和知識圖譜裏的東西嚴格地匹配上,通常狀況下這種方式,把用戶的一個問句嚴格地解析出來問句裏各個實體及其關係,而後把這些轉換成一個邏輯表達式,經過這個邏輯表達式到這個知識圖譜裏去查找。這種方式其實也很經常使用。
剛纔介紹瞭如今理解方面主要的方法,可是如今也有不少方式是說集成,我集成上面各類方法,而後作一個集成學習,好比問句理解的方法,問答的方式,就是檢索、知識圖譜、 embedding 的,均可以用來作問答,任務型的問答可能有規則的,也能夠作embedding,也能夠作分類,複雜問題可能就是客服裏邊有不少問題其實挺複雜,長度也比較長,能夠用這種分類或者檢索的,也能夠用更嚴格的語意解析的方式來作。這些不一樣的方式、算法作一個集成,實際上如今有挺可能是這樣作的,效果也仍是挺好。
就是咱們在作一個模型去作選擇,上面好比作了三個或者五個模型來去理解,用戶來一句話對這幾個模型都去理解,理解出來以後而後作一個集成,集成以後再作最後的輸出,集成其實是爲了作選擇,到底用哪一個模型的答案,固然集成方式主要是兩種,一種是流水線,這些模型我排成一個順序,哪一個模型解決了我就出了,我就把答案出出來,而後就再也不日後走了,另一個是模型集成,每一個模型都走,而後作一個決策判斷,選哪一個模型的結果。
上面是關於對話中 NLU 的部分,另一部分是關於對話中的知識管理,或者對話管理裏的知識管理,對話管理這部分。
對話管理通常是這樣,咱們在有上下文的狀況下,對話管理就是用戶當前咱們可能能分析出來一個意圖,有的時候甚至當前咱們都分析不出來一個意圖。好比說用戶說了一個上海,咱們實際上不知道用戶說上海是什麼意思,若是前面是在說天氣,那上海就是跟天氣有關,若是前面在說訂票,那上海就是和訂票有關。有當前的一個用戶的意圖,甚至這個都不是一個意圖,而後有上文,有一些上文是在哪一個領域裏邊,有用戶的信息,這個有時候可能還有一些用戶長時間的信息,根據這些信息作出一些行爲,究竟是要答覆,仍是拒絕,仍是去問用戶的補充,用戶須要補充一些信息。
對話管理裏面有幾種主要的形式,一種是基於 slot 的,slot 可能就是一個填槽,若是有三個槽位,時間、地點、天氣現象,我就把它填完就好了,缺哪一個我就問用戶有哪一個。另一種用 slot 不是特別好解決的就是有些流程很複雜的,特別是在客服,好比這張圖裏的場景,這是一個客服的場景,它的流程就很複雜,用戶到了某一個地方,他須要去判斷關於這個地方的信息,而後再作下一步的操做,這是這個對話管理主要的東西。
這張圖介紹一下關於最基礎的對話管理,好比 SlotFilling,它是在有沒有上下文,事先定義好了這張訂票的場景,而後它有一些上下文的信息怎麼來控制,這個場景是剛纔已經提到的,就不詳細說了。
在啓發式對話裏邊還有一種基於話題的對話管理,首先話題自己,由於它引入了一個新的概念就是話題,在問用戶的問題以外引入了話題,話題能夠是人工建的,也能夠是系統自動計算出來的,也能夠是系統引導用戶來建立,這個話題就是我剛纔在最開始講啓發式對話的時候,咱們看到的,好比說關於花的一些相關話題的組織,也能夠經過一些學習的方式去挖掘問題之間有哪些話題,特別在一些企業服務的場景中,由於企業自己有它明確的應用場景,因此它是有一些話題,它自己已經組織好的關於這些話題的組織。
固然話題的組織其實是有不少問題的,咱們好比拿樹型來組織這些話題,這個系統的後面怎麼來組織這個話題。好比按產品、人物來組織話題,全部的產品是一個話題,全部的人物是一個話題,可是當我真正要去問這個系統的時候,你會發現產品和人物它們之間是有交叉的,由於人物,好比說科技領域的人物和娛樂領域的人物,他們可能就沒有什麼交叉領域,咱們把它放在一個話題下面也不合適。因此說話題的劃分其實是有必定交叉的,固然咱們顯示出來通常狀況下是一種樹型的方式來組織,這樣對用戶也比較容易理解。可是它真正的管理後面實際上有不少的交叉。
對話的管理,實際上通常狀況下咱們能夠認爲它是這種狀態,這種狀態轉換的過程,比較典型的可能就是一個 Markov 決策過程,這裏邊 S 是一組狀態集,A 是一組動做,在某一個狀態下它遇到一個什麼東西,而後要作一個什麼樣的響應或者什麼樣的動做,機器學習的方式可能就須要把這個對話組織成這樣一個狀態,在這裏邊一個重要的地方是須要有一些回報的函數。
好比說在強化學習作這種對話的時候,不必定是作對話管理,作對話生成的時候也有這種場景,就是說它去定義一個在對話裏邊,它模擬多輪,根據一個定好的回報函數,而後來作一個判斷,這是對話管理,對話管理用強化學習能夠來作。實際上強化學習就是模擬多輪的對話,而後再回過來判斷當前的狀態到底走哪一步合適。
這是一個用深度強化學習來作對話狀態跟蹤的簡單狀態,好比用戶輸入了一句話,經過語音識別,它能夠有一個狀態的管理,而後去管理這個狀態,經過一個策略來控制它的輸出。固然它中間核心的一個部分是有這個 Reward 函數,在對話裏,這個 Reward 函數就很是重要,通常狀況下它也不太好定義,由於咱們對話,它到底什麼算合適,什麼算不合適,這個還不是特別好控制的。
咱們來看一下用強化學習來作對話,簡單總結一下,在一個狀態 S 下它可能有 m 種操做,咱們不知道這個 m 種操做哪種能帶來什麼樣的回報,因此咱們作一個探索,去探索每一種可能操做的回報,利用這種回報作一個響應,作一個決策或者對這個回報作一個打分。
另外也有用對抗網絡作的,但對抗網絡有一個問題,實際上也不太好控制,而且有些狀況下可能會強制這些對話的走向,而且對抗網絡它的穩定性也是一個問題,這個訓練過程當中的穩定性也是一個問題。
無論是深度學習,仍是傳統機器學習,在對話的 NLU 以及對話管理中的一些方法或者做用,前面講的都是一些現有的方法,怎麼來作的,可是它裏邊都會有一些問題,機器學習的方法不少時候,若是生成式的那就很差控制它到底生成的和這個相關仍是不相關,很難判斷。若是是檢索式的,用戶說的這句話,無論怎麼着都會給它一個檢索答案,到底這個答案是給用戶仍是不給用戶,用戶說了一個不相關的問題,我可能也會給它檢索出來一個答案,答案是給仍是不給?這也是一個問題。實際上這裏邊就用到知識,這個過程當中就很是重要了。
知識在這裏邊分爲兩種,一種是知識圖譜,嚴格的知識圖譜,這裏邊 KG 的這部分。另一些是語言的知識,好比說語言的搭配、語言語法的轉換、拼寫的問題、領域的問題,實際上還包括一些領域詞的問題,類似詞、同義詞,這些東西在天然語言發展,這麼多年實際上已經積累了不少這方面的知識,可是這些東西在如今深度學習裏邊實際上很難結合進去。
經過上面提到的類似度計算模型咱們能夠完成前面說的天然語言的類似度計算的問題,可是咱們給了這個答案頗有多是不對的,因此說通過這些語言的特徵以及 KG 的知識,把知識做爲驗證候選的證據,深度語義模型給出多個候選答案,咱們對於這種可能的各類侯選,經過知識圖譜或者語言現象對它作一個分析,而後去找到一些證據,這些證據再來驗證去選哪個答案。由於通常狀況下對於直接用嚴格的知識圖譜來解析一個問題的時候有一個問題,不少時候咱們沒法嚴格地去解析出來這個問題,只能解析出來一部分。
附葛付江老師建議,及相關基礎內容的工具包。