【導讀】自然語言對話系統正在覆蓋越來越多的生活和服務場景,同時,自然語言對話的理解能力和對精細知識的對話召回率在技術上仍有很大挑戰。
啟發式對話透過建立知識點之間的話題關聯,使對話系統能夠主動發現相關知識,充分發揮知識的協同作用,引導對話過程,把知識在合適的時間主動送達使用者。知識不只是以知識圖譜或問答庫等形式被動被搜尋,啟發式對話中的知識結合了先驗經驗和使用者對話習慣,從而擁有知識角色,讓對話理解和對話流程更加自然,也更有使用者價值。
在本期公開課課程中,AI 科技大本營邀請到了思必馳 北京研發院NLP 部門負責人葛付江針對“啟發式對話中的知識管理”做系統的講解和梳理。
以下內容為大本營公開課整理。
今天給大家分享一下,關於啟發式對話中的知識管理系統,分享的內容包括以下五個方面:
▌對話系統的架構
首先是對話系統的架構,我們來看一下對話系統流程。
在一般的對話系統應用場景,比如在智慧音響、智慧電視,包括現在車載的裝置等,當使用者說了一個問句,智慧客服自動的問答和對話,這樣的系統的基本流程是它接收到使用者的一個問句或者使用者說的一句話,然後系統裡做一些處理,給使用者一個答覆。
我們今天說的對話系統和傳統的問答系統有一個重要的區別,對話系統它是維護上下文的,在做一個對話的時候是有上下文場景,在這個上下文的過程中需要控制一些對話的狀態,來完整地理解使用者的意圖。
例如,使用者問一句明天會下雨嗎?系統會做一些預處理,即一些自然語言處理上的特徵處理,比如分詞、詞性標註、命名實體識別這樣的模組,在這裡可以識別到一些實體,比如裡邊的時間是明天,關於天氣現象是下雨,這是命名實體可以做到的。
經過特徵的預處理以及命名實體的識別,然後進入正式的對於這句話的理解。首先是對於使用者的每一個問句需要做一個領域的判斷,一般做這個領域判斷是因為在對話系統裡會支援各種場景,首先把使用者的這句話限定在一個固定的場景下,然後才能做相應的後續處理。
領域的判斷一般情況下有各種方式,不管是寫模板,還是一些分類的演算法,比如這句話我們送到一個分類器裡,它可能能判斷出它是一個天氣領域相關的。在這裡邊,透過 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_1、u_n-1、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 的知識,把知識作為驗證候選的證據,深度語義模型給出多個候選答案,我們對於這種可能的各種侯選,透過知識圖譜或者語言現象對它做一個分析,然後去找到一些證據,這些證據再來驗證去選哪一個答案。因為一般情況下對於直接用嚴格的知識圖譜來解析一個問題的時候有一個問題,很多時候我們無法嚴格地去解析出來這個問題,只能解析出來一部分。
推薦:講師建議,及相關基礎內容的工具包。