基於檢索與深度神經網路的人機對話

關於NLP的交流分享,下面簡單梳理下自己的所得

1.      一個10個詞語的句子出現3個或以上的錯別字那麼這個句子基本沒有

2.      規則模型與生成式模型

在做對話系統或者問答系統的過程中,他們採用的是混合模型,包括Deep Learning以及檢索系統,首先要說一說各種模型的優缺點,見下表:

表1. 兩種對話模型的比較表

  • 規則模型,就是按照某種規則去做字串匹配。基於檢索的問答系統就是規則演算法的一種,檢索問答系統需要事先窮舉可能出現的問答對,這樣,一旦新出現相似的問題,根據模糊匹配演算法去回答庫中檢索匹配回答語句。在智慧電視的應用場景之中,對話基本上限定在一個特定領域,所以基於規則的對話模型無論是準確度還是效率都優於基於深度學習的模型。
  • 任何一個有效的對話系統都不僅僅某一個單獨的系統組成,而是二者的混合模型。首先,對話會經過檢索系統,經過模糊匹配得到一個答案,一旦這個答案的置信率過小,那麼將該問題送到深度神經網路,生成其對話
  • 現實的處理情況,特定領域的對話,通過這樣的混合模型,100句中僅3句是通過生成模型得到

3.      Knowledge Graph(知識圖譜,簡稱KG)

基於分散式等因素的考慮,決定採用arangoDB。KG是一個實體-屬性的圖。基於KG能解決的問題類似於:A的B等於C,A對應實體,B對應其屬性,C為該屬性的值,凡是具備這種結構的資料,都可以作為一種圖譜。下圖是知識圖譜簡圖:

實體於實體之間存在相互關係,比如:姚明的女兒的母親的身高是多少?姚明是一個 實體,女兒是姚明的屬性,但該屬性也是一個實體,通過姚明出發,找到該屬性結點,  再通過姚沁蕾的母親屬性找到葉莉,最後得到葉莉的身高。

4.      具體的問答流程:

  • 句型判斷 — 判斷該語句是閒聊還是問答,比如:姚明有多高;這是一個問句,而不是閒聊;閒聊語句,比如:白日依山盡
  • 句子實體提取  —  姚明
  • 實體匹配  —  查到可能不止一個姚明,百度百科中有四個叫“姚明”的人,可根據熱度等演算法得出具體指的誰
  • 相似度匹配  —  “有多高”對應的是“身高”,三種方式,一種模糊匹配,一種詞向量方式,或者二者混合
  • 查圖譜    —  得到姚明身高答案
  • 回答模板組織回答問題  —  知識圖譜中僅僅是一個數字,比如2.2米,這個答案但會給使用者會顯的冷冰冰,不友善,所以需要我們準備一種回答模板,這種模板可以用事先準備的人工模板,也可以使用生產式模型的模板,但生成式模板不可控,不建議。
  • 如果在知識圖譜之中沒有查到該實體,那麼可以通過模糊匹配檢索,檢索語料中是否存在這樣的問題,如果沒有則,通過神經網路生成

5.      多輪對話

多輪對話,就是考慮上下文的對話,

比如:甲:你吃飯了麼?

          乙:吃了,你呢?

在乙回答的語句之中,的“你呢?”,脫離上下文單獨處理的話,不知道什麼意思,而回看上文就知道該語句同樣問的是“你吃飯了麼?”,所以需要對原句進行改(rewrite),“吃了,你吃飯了麼?”,這樣在後續處理中,就能知道這句話的完整意思。因為,上下文對話,要改寫當前語句,涉及到回溯幾句的問題,回溯太多的話,計算量大,問題複雜,一般回溯3-6句。句子改寫,依據是句子主、謂、賓,成分做改寫。

總結

1.    雖然每一個步驟看似簡單,但每一個步驟都是一個大的工程,簡單舉例:

  •  知識圖譜的建立,單這一步,需要命名實體識別技術,舉例:姚明在上海的房子的主臥門有多高;怎麼讓計算機知道“姚明”、“上海”是一個實體,目前這是一個挑戰性的問題。
  • 中文自然語言處理都繞不開分詞,分詞的效果一定程度決定了系統效能的好壞。比如,你好煩,正確的分詞結果為:“你”、“好”、“煩”,如果分成“你好”、“煩”’就嚴重影響效能。

2. 在工程處理過程中,設定一個cache,儲存常用問句請求,這樣能保證效率。這個設計非常巧妙。

3. 在處理QPS的時候,系統設計一個master,單獨一臺做database,排程所有worker,這樣,每一臺worker之間是相互獨立的,僅僅是master、database相同