聊天機器人

1、聊天機器人分類
(1)按功能分類可分爲:問答型聊天機器人、任務型聊天機器人、閒聊型聊天機器人。算法

      實現不一樣功能的聊天機器人所用技術也不盡相同,例如在作問答型聊天機器人時,咱們須要提取問句中的焦點詞彙,以此去三元組或知識圖譜中檢索,且爲了提升檢索的精度,經常須要對問句和關係進行分類操做。可是對於閒聊型聊天機器人則能夠直接將其當作序列標註問題處理,將高質量的數據丟進深度學習模型中進行訓練,最終獲得目標model。數據庫

(2)按模式分類可分爲:基於檢索模式和生成式模式。網絡

a.    基於檢索的模型,它使用預約義響應的數據庫和某種啓發式推理來根據輸入和上下文選擇適當的響應。換句話說就是構建FAQ,存儲問題-答案對,以後用檢索的方式從該FAQ中返回句子的答案。  這些系統不會產生任何新的文本,他們只是從固定的集合中選擇一個響應。這種方法有明顯的優勢和缺點。 因爲使用手工打造的存儲庫,基於檢索的方法不會產生語法錯誤。 可是,它們可能沒法處理沒有預約義響應的場景。 出於一樣的緣由,這些模型不能引用上下文實體信息,如前面提到的名稱。框架

b.     生成式模型,這種方法要更難一些,它不依賴於預約義的響應,徹底從零開始生成新的響應。 生成式模型一般基於機器翻譯技術,但不是從一種語言翻譯到另外一種語言,而是從輸入到輸出(響應)的「翻譯」。ide

這方法有明顯的優勢和缺點。它能夠引用輸入中的實體,給人一種印象,即你正在與人交談。 然而,這些模型很難訓練,並且極可能會有語法錯誤(特別是在較長的句子上),而且一般須要大量的訓練數據。函數

(3)按領域分類可分爲:開放領域和封閉領域。學習

a.    開放領域的chatbot更難實現,由於用戶 不必定有明確的目標或意圖。  像Twitter和Reddit這樣的社交媒體網站上的對話一般是開放領域的 - 他們能夠談論任何方向的任何話題。 無數的話題和生成合理的反應所須要的知識規模,使得開放領域的聊天機器人實現至關困難。同時這也須要開放域的知識庫做爲其知識儲備,加大了信息檢索的難度。優化

b.    封閉領域的chatbot比較容易實現,可能的輸入和輸出的空間是有限的,由於系統試圖實現一個很是特定的目標。 技術支持或購物助理是封閉領域問題的例子。 這些系統不須要談論政治,只須要儘量有效地完成具體任務。 固然,用戶仍然能夠在任何他們想要的地方進行對話,但系統並不須要處理全部這些狀況 - 用戶也不指望這樣作。網站

2、聊天機器人技術之語義類似度計算
       在基於檢索模式的聊天機器人中,咱們常須要計算問句與FAQ中的問題集合的類似度,現根據本身的經驗介紹幾種文本類似度計算的方法:翻譯

(1)最長公共子序列

       該方法思路較爲簡單,直接使用最長公共子序列算法,設字符串A長度爲L1,字符創B長度爲L2,它們的最長公共子序列爲lcs,那麼這兩個字符串的類似度的度量爲sim=2*lcs/(L1+L2)。

(2)向量類似度計算

        這種方法思路一樣較爲簡單,將兩個字符串進行分詞轉換成空間中的向量點,計算兩個文本的餘弦類似度或歐氏距離便可。

(3)編輯距離

       編輯距離是兩個字串之間,由一個轉成另外一個所需的最少編輯操做次數。詳情能夠參考連接。

(4)CNN計算文本類似度

a.     爲何用cnn進行文本類似度計算

       這是由於傳統文本類似度算法,側重於文本自己的類似度計算,所以須要大量的歸一化的過程,例如中文數字和阿拉伯數字的歸一化,中英文 單位的歸一化(例如kg和千克)。可是即便經過歸一化的方法,仍然有不少語義類似文本沒法經過這種方法獲得滿意的結果。好比兩道數學題, 題1 = '一個蘋果+二個蘋果等於多少個蘋果?', 題2=‘一個香蕉+二個香蕉等於多少個香蕉’,顯然這兩道題語義是高度接近的,可是用傳統的文本類似度計算方法,計算獲得的類似度是很是低的,這不能知足現代互聯網或其餘領域對文本語義類似度任務的須要,因而須要使用cnn和詞向量的方式來計算文本語義類似度,這是由於詞向量的固有特性。換言之,文本類似度計算不只僅計算兩個字符串在物理意義上的類似度,還計算文本的語義類似度,而這時由於詞向量固有的特性。

       簡要介紹下上面的圖,第一層數據輸入層,將文本序列展開成詞向量的序列,以後兩個不一樣的輸入流 ,這裏由於有兩個輸入(字符串A和字符串B),垂直方向則放置了2個徹底同樣的層組合(卷積層、激活層、池化層的組合)。以後鏈接全鏈接層和激活層,激活層採用sigmoid並輸出該文本屬於某類的機率,這個輸出的值是個0-1之間的浮點數,該值表明 文本A和文本B的類似程度,值越大類似程度越大。

       全鏈接層的目的是什麼呢?由於傳統的網絡咱們的輸出都是分類,也就是幾個類別的機率甚至就是一個數--類別號,那麼全鏈接層就是高度提純的特徵了,方便交給最後的分類器或者回歸。

3、聊天機器人技術之序列標註問題
       聊天機器人的生成時模型能夠當作機器翻譯的序列標註問題,即將問句encode以後獲得隱狀態h,將這個隱狀態做爲decode的輸入,最終返回問句的答案。下面介紹一下seq2seq的原理,該模型最先出如今2014年發表的論文Sequence to Sequence Learning with Neural Networks。模型圖: :

       能夠看到該模型從輸入到輸出有一條完整的流,:ABC爲encoder的輸入,WXYZ爲decoder的輸入。將encoder最後獲得的隱藏層的狀態ht輸入到decoder的第一個cell裏,從總體上看,從輸入到輸出像是一條「線性的數據流」。本文的論文也提出來,ABC翻譯爲XYZ,將encoder的input變爲「CBA」效果更好。即A和X的距離更近了,更有利於seq2seq模型的交流。

        具體來講,encoder的過程以下圖,是基於LSTM的,固然也能夠基於RNN。

decoder的階段:

       獲得encoder的最後一個時間步長的隱層ht之後,輸入到decoder的第一個cell裏,而後經過一個激活函數和softmax層,獲得候選的symbols,篩選出機率最大的symbol,而後做爲下一個時間步長的輸入,傳到cell中。(即當前的輸出做爲下一個狀態的輸入)這樣,咱們就獲得了咱們的目標(1)。

seq2seq with attention

    咱們前面提到,距離decoder的第一個cell越近的輸入單詞,對decoder的影響越大。但這並不符合常理,這時就提出了attention機制,對於輸出的每個cell,都檢測輸入的sequence裏每一個單詞的重要性。即論文NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE。attention在NMT基於seq2seq的改進模型再進行改進,原理以下:

      上圖中,encoder和decoder都發生了變化。首先說encoder,使用了雙向RNN,由於但願不只能獲得前向的詞的順序,還但願可以獲得反向的詞的順序。使用hj→hj→表明hj前向的隱層狀態,hj←hj←表明hj的反向隱層狀態,hj的最終狀態爲將二者鏈接(concat)起來,即hj=[hj→;hj←]hj=[hj→;hj←]。詳情請參考連接。

3、聊天機器人技術之其餘問題彙總
        在參加了2018中文信息學會ATT前沿技術暑期班時,有幸聽到了香儂科技的李紀爲老師的講座,現就講座內容作簡單的整理:

(1)針對於檢索模型的聊天機器人,當FAQ中沒有合適的答案,咱們返回的是FAQ中與問句最相近問句-答案對中的問句,而不是答案,這樣作的目的是爲了從提問者處獲得更多的問句信息,便於返回給其正確的答案。

(2)互信息解決泛化回答,當用seq2seq訓練聊天機器人模型的時候,會產生不少無聊的信息,其緣由多是訓練預料多爲電影對話集合,質量不高。例如

機器總會回答一些「萬能文本」,不利於聊天的開展,解決這些問題,人爲添加規則的效果不大,現階段大多用強化學習來解決這一痛點,也就是開放域多輪對話中每一輪迴復的選擇,不只須要考慮是否可以有效回覆當前輸入,更須要考慮是否有利於對話過程的持續進行,讓聊天持續更久一些,咱們能夠採用互信息的方式來解決這一痛點。

        第一種思路,seq2seq框架解決。改變在於,從傳統的最大似然法的優化目標函數(^R = arg max_R{log p(R|M)})改成最大互信息的目標函數(^R = arg max_R{(1-lambda)log p(R|M) + lambdalog p(R|M)}),其中R和M分別表明Response和Message。新的目標函數除了最大化從Message生成Response的機率,也加入了反向優化目標,即互信息,這個目標函數不只要考慮哪一個R出現機率更大也要考慮M和R的密切相關,從而下降常見回答的生成機率【仍是得實際看看效果】。

(3)用戶一致性問題(一樣的問題,不一樣的回答),

       對於個性化問題好比愛好,年齡可能屢次提問回答不一樣,這就是個性信息的一致性問題。經典的seq2seq模型訓練的聊天機器人就有這樣的問題,由於seq2seq模型訓練用的是單句的Message和單句的Response的映射關係,沒有統一維護個性信息。此外,每一個用戶喜歡的聊天機器人的聊天方式可能不一樣,也就是說不一樣個性的用戶可使用與之聊天方式相似的聊天助手。

       一種思路,seq2seq的結構,可是每種身份對應一種word embedding,把聊天助手的個性信息導入到解碼decoder的過程當中(每一個t時刻,LSTM除了標準的輸入,也將身份個性化的word embedding信息輸入,獲得的生成結果就會傾向於符合身份特徵的個性化信息。

        總之,核心思想是把個性信息在decoder階段加入體現出來,維護個性一致。

(4)問句長鏈接

       咱們回答一個問句的時候,可能須要考慮其上面n次交互信息,那麼這就須要神經網絡模型可以記錄其歷史問答信息。解決這一問題的常見思路是在seq2seq模型中,加入Attention機制。

(5)聊天機器人循環體

相關文章
相關標籤/搜索