NLU部分
這部分的功能其實就意圖識別和實體識別,比如用戶說了一句話:“我想定機票,從北京出發到上海的”。那對於這句話,我們通過NLU模塊就可以識別出來這個意圖是“訂機票”,同時,也提取出兩個實體“北京”和“上海”。當然,對於訂機票的意圖來講,我們只知道出發地和目的地是不夠的。另外,我們也需要知道時間。如果這三個信息都具備,後台系統即可以通過數據庫查詢來獲得滿足條件的機票信息,進而讓用戶選擇最合適的。
所以,你可以認為這種系統的核心無非就是需要從用戶那裡不斷地獲取相應的實體信息,如果獲取完畢就可以調用後台數據庫。相反,如果有些信息還沒有獲取到,那就直接跟客戶去問,比如“你想什麼時候出發呢?”對於聊天機器人來講,NLU部分至關重要,因為後續所有的工作依賴於NLU的結果。對於NLU我們會在下一節里給大家做更詳細的介紹。
DST部分
這部分其實就是來存儲對話的狀態。這個狀態無非就是來保存信息的完整性。比如目前的意圖是訂機票,那就需要來跟蹤針對於這個意圖的實體信息。
對於一個意圖其實有多個槽位,然後每個槽位一開始是空的。隨著對話的進行,槽位信息被不斷地填充。最終會觸發數據庫調用。槽位信息的獲取其實就是依賴於意圖識別模塊。
DPL部分
這部分是用來維護目前對話狀態和需要做的動作。舉個例子,比如目前的對話狀態是查機票,但缺少時間的信息。那這時候,機器要做的是詢問用戶時間信息。這里有個問題是:如果一
開始有三個槽位,分別是時間,目的地和出發地,而且都是空的。那接下來第一個要詢問的是哪方面信息呢?其實沒有一個固定的答案! 這就要看我們想如何設計。 也就是處於某一種狀態下,接下來要問
什麼,可以完全依賴於我們提前預定號的設計邏輯來實現。這部分我們通常使用有限狀態機來實現(finite state machine),具體什麼叫FSM不用太在意,看完下麵的這幅圖應該就明白了。