天天看點

如何做一款聊天機器人 如何做一款聊天機器人

如何做一款聊天機器人

目錄

  • 前言
  • 什麼是我認為的對話機器人
  • 語音助手
  • 如何去做一個像上述提到的那樣的東西
  • 解釋一下上述架構圖
  • 如何将上述理論和實際結合呢?
  • 結論
  • 參考文獻(文章) 

前言

以此開題,并不是一定要做一款對話機器人,隻是做事一定要以目标為驅動,目前所要研究的語義方向是一個太大的方向,是一個讓人完全摸不到頭腦的方向。是以,選取其中一個分支作為切入點,開始我的認知過程。在這個過程中,我會不斷更新我的認識,以聊天機器人開篇,結尾處也許會面目全非!

什麼是我認為的對話機器人

關于這個問題?相信大家都已經看過很多了。之前的小i、小白、圖靈機器人、微軟小冰、Cortana、HUBOT,google now,amazon echo 等。到底這些都是個什麼鬼?大家可以簡單了解下,更詳細的請自行google。上面的幾個機器人是我聽過的,應該具有一定的代表性。 

在google完這幾個鬼之後,我發現我們需要的其實不僅僅是一款對話機器人,更确切的說,應該是個機器人助手。這個助手,應該能夠跟人交流,這個交流不僅僅是你問我答,還可能有你說我做,你困惑我解釋等。 

給大家個直覺的印象,貼一個Amazon echo的連結(如果不能通路,請翻牆): 

* https://www.youtube.com/watch?v=KkOCeAtKHIc 一個關于echo的視訊,雖然并沒有上下文語義,但是無論從立體聲效果和應答的情感都是相當完美的。 

* https://www.youtube.com/watch?v=24Hz9qjTDfw Echo dot是echo的迷你版 

* https://www.youtube.com/watch?v=nVEEbKzaZFQ Echo tap 帶有藍牙和wifi功能,可以利用語音控制裝置

總結下來,其實我們更需要的是一個語音助手。

語音助手

通過上面的得出的結論,對我們想要的東西,應該有個模糊的想象,我覺得就是那個樣子,沿着這個思路,繼續其明确我們的目标與實作途徑。

如何去做一個像上述提到的那樣的東西

簡單的流程大約如下: 

使用者輸入一段話(不一定隻是單詞)->後端語義引擎對使用者輸入的語句進行語義解析->推斷使用者最可能的意圖->調用對應的知識庫、應用、計算引擎->傳回結果給使用者。 

實作方式有下面這麼幾種: 

* ### 最初級的實作方法:關鍵詞比對(個人覺得我們的第一版實作可以采用這種方式)

建一個關鍵詞詞庫,對使用者輸入的語句進行關鍵詞比對,然後調用對應的知識庫。
           

此種方式入門門檻很低,基本上是個程式員都能實作,例如現在微信公衆平台的智能回複、諸多網站的敏感詞過濾就是此類。 

但此種方式存在諸多問題,例如: 

1. 由于是關鍵詞比對,如果使用者輸入的語句中出現多個關鍵詞,此時由于涉及關鍵詞權重(與知識庫的關鍵詞對比)等等問題,此時關鍵詞比對的方法就不擅長了 

2. 不存在對使用者輸入語句語義的了解,導緻會出現答非所問的現象。當然在産品上對回答不上的問題就采用賣萌的方式來規避掉。 

3. 基本上無自學習能力,規則隻能完全由人工維護,且規則基本是固定死的。 

4. 性能、擴充性較差。還是上面的一句話中包含多個關鍵詞的例子,采用普通程式語言來做關鍵詞比對,性能奇差。即便采用一些文本處理的算法來做(例如Double-array trie tree),也很難滿足大規模場景需求。

  • 稍微進階點的實作方法:基于搜尋引擎、文本挖掘、自然語言處理(NLP)等技術來實作

    相對于1的關鍵詞比對,此種實作方法要解決的核心的問題可以大緻了解為:根據一段短文本(例如使用者問的一句話)的語義,推測出使用者最可能的意圖,然後從海量知識庫内容中找出相似度最高的結果。 

    具體技術實作就不細說了。舉一個很粗糙的例子來簡單說一下此種實作方法處理的思路(不嚴謹,隻是為了說明思路)。 

    假如使用者問:北京後天的溫度是多少度? 

    如果采用純搜尋引擎的思路(基于文本挖掘、NLP的思路不盡相同,但可參考此思路),此時實際流程上分成幾步處理:

    1. 對輸入語句分詞,得到北京、後天、溫度3個關鍵詞。分詞時候利用了預先建好的行業詞庫,“北京”符合預先建好的城市庫、“後天”符合日期庫、“溫度”符合氣象庫
    2. 将上述分詞結果與規則庫按照一定算法做比對,得出比對度最高的規則。假定在規則庫中有一條天氣的規則:城市庫+日期庫+氣象庫,進而大緻可以推測使用者可能想問某個地方某天的天氣。
    3. 對語義做具體解析,知道城市是北京,日期是後天,要擷取的知識是天氣預報
    4. 調用第三方的天氣接口,例如中國天氣網-專業天氣預報、氣象服務門戶 的資料
    5. 将結果傳回給使用者

    以上例子其實很粗糙,實際上還有諸多問題沒提到:語義上下文、語義規則的優先級等等。 

    例如使用者上一句問:北京後天的溫度是多少度?下一句問:後天的空氣品質呢?這裡實際上還涉及語義上下文、使用者曆史喜好資料等等諸多問題。 

    此種處理方法存在的最大問題:規則庫還主要依賴于人工的建立,雖然有一定的學習能力,但自我學習能力還是較弱。可以借助一些訓練算法來完善規則,但效果并不是很好。而這也是目前流行的深度挖掘技術所擅長的。

  • 當下時髦且進階的玩法:基于深度挖掘、大資料技術來實作

    這種做法,要基于的技術就比較多了,總結為以下架構(盜圖,來源已在參考文章中注明): 
    如何做一款聊天機器人 如何做一款聊天機器人

解釋一下上述架構圖

  • ### 存儲層 

    對于這一層,個人認為就是網際網路上或是本地的一切能夠擷取到數字資源(網頁、視訊等等等等),對于一些受限的資源(如QQ聊天記錄等),也可以通過一定的方式擷取到。

  • 數字聚合層

    這一層的存在,其實是将網際網路上雜亂無章的資料,進行各簡單的分類,可能會用到一下三種方式:
    1. 人工維護錄入資料(不做細說)
    2. 第三方開放平台接口資料 
      • 通俗的講,所有你在網上注冊的使用的,你以為是免費的東西,都能提供一種資料接入的方式,你的各種資訊都被平台擷取。當然,這隻是一種方式,其他還有很多方式,請自行google。
      • 再舉個例子,現在我用的是搜狗輸入法,如果你真的是它想免費給你提供輸入法,那你就太天真了,too young, too naive
    3. 垂直爬蟲爬取資料
      • 所謂垂直爬蟲,通俗的講,可以認為是針對某一領域或行業的爬蟲。網上的資料畢竟是錯綜複雜的,使用者所需擷取的資訊是需要有針對性的。比如,在垂直搜尋的索引建立之前,我們需要到垂直網站上抓取資源并做一定的處理。垂直搜尋與通用搜尋不同之處在于,通用搜尋不需要理會網站哪些資源是需要的,哪些是不需要的,一并抓取并将其文本部分做索引。而垂直搜尋裡,我們的目标網站往往在某一領域具有其專業性,其整體網站的結構相當規範(否則使用者體驗也是個災難,想想東一篇文章西一篇文章基本沒人會喜歡),并且垂直搜尋往往隻需要其中一部分具有垂直性的資源,是以垂直爬蟲相比通用爬蟲更加精确。
      • 兩個垂直爬蟲簡介的連結:

      http://www.oschina.net/question/163158_109450

      http://liangqingyu.com/page/category.html#細說垂直型網絡爬蟲

    推薦幾個資料擷取的網站:
    • http://www.datatang.com/freelimit 資料堂
    • http://www.datamall.com/ 資料商城
    數字聚合層的資料,其實還是一些原始資料,是下一步針對性抽取的前提。
  • 資料挖掘層

    這一層體系,基本上是在有行業資料的基礎上,進一步的對興趣點進行提煉。基本也分為三個方向:
    1. 文本挖掘 
      • 從海量文本中提取出有用的資訊。如,處理和文本的表示,詞的關聯性挖掘及分析,話題的挖掘和分析,觀點挖掘和情感分析,基于文本的預測。如, 根據一段話來判斷它的情緒,看看有沒有反動言論等,這個都算是其中的一種。
      • 給出幾個連結,可以簡單了解下: 
        • 文本挖掘和分析初步 http://www.jianshu.com/p/a98ac6847181
        • 知識庫 : 文本挖掘概述 http://udn.yyuap.com/doc/ae/919872.html
        • 資料科學18:文本挖掘1 http://jackycode.github.io/blog/2014/06/18/text-mining1/
      • 從狹義的角度看,文本挖掘是不做推理的,但現在挖掘技術總是和深度學習結合在一起的。
    2. 協同過濾 
      • 協同過濾是利用集體智慧的一個典型方法。要了解什麼是協同過濾 (Collaborative Filtering, 簡稱 CF),首先想一個簡單的問題,如果你現在想看個電影,但你不知道具體看哪部,你會怎麼做?大部分的人會問問周圍的朋友,看看最近有什麼好看的電影推薦,而我們一般更傾向于從口味比較類似的朋友那裡得到推薦。這就是協同過濾的核心思想。換句話說,就是借鑒和你相關人群的觀點來進行推薦,很好了解。
      • 你會發現微網誌或淘寶下面經常就會給你推薦小廣告,這就是協同過濾。
      • 接着連結兩篇文章: 

        https://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy2/

      • 對于我們來說,協同過濾的理念完全可以應用到産品中,幫使用者進行各種需求的推薦。
    3. 深度學習 
      • 其實,這一點是與其他技術相結合的。通過資料,按照各種算法進行學習訓練,進而形成一套模型架構。利用訓練好的模型,可以對未知的資料進行分析。這方面相關的東西太多,大家可以自行google。
    資料挖掘層的輸出,就是各種各樣的知識庫,是語義系統能夠用到的最直接的東西。
  • 知識庫層

    這一層很好了解,其實更接近我們目前所能了解的東西。文本分析之後,去相應的知識庫尋求問答。例如,對于一個機器人對話系統,你說一句話,語音轉成文字之後,根據文字的分詞、句法、語義分析結果,去對應的語言庫中,尋求或自動生成最合理的應答。對于語音助手,那麼先分析出,需要哪樣的知識庫,在去相應的知識庫中尋求結果,或回一句話,或放個音樂,或開個空調,等等等等。介紹下知識庫:
    1. 通用知識庫
    2. 專用知識庫 
      • 比如針對人機對話,音樂,地圖等的庫,都屬于專用庫。
    3. 媒體庫 
      • 你在google或百度用文字進行搜尋,結果中有網頁,也會有視訊或圖檔,這就是從媒體庫中進行的抽取
    4. 社會化媒體庫 
      • 簡單介紹下,自行了解: 

        http://wiki.mbalib.com/wiki/%E7%A4%BE%E4%BC%9A%E5%8C%96%E5%AA%92%E4%BD%93

    5. 語義庫和規則庫 
      • 在我們的課題中,語義庫和規則庫,主要指文字到答複或是控制指令的轉換規則。這種規則一部分是自己定義的,一部分可以利用深度學習,從大資料中進行訓練學習得到的。
    知識庫,是我們要做這件事的重中之重,或購買第三方,或自己進行訓練提取,難度呵呵哒!!!
  • 引擎層

    • 就個人看來就是個架構,沒有知識庫,它什麼都幹不了,大家概念一下就好。
  • 解決方案層

    • 也不多說了,實際上就是你選擇做個聊天機器人還是個語音助手之類的,巴拉巴拉!!! 

如何将上述理論和實際結合呢?

這一步的假設是需求的資源都能擷取到。

已做一個聊天機器人為例,講述一下如何通過上述架構來實作:

  1. 存儲層,就是網上所有的資料,文字的、視訊、音頻都算。
  2. 資料聚合層,在所有網上雜亂無章的資料中,其實我更需要的是QQ的聊天記錄或是視訊、音頻的對話記錄,需要有針對性的擷取這部分資料。
  3. 資料挖掘層,那麼如何擷取這些資料呢,可以通過購買或者是爬蟲技術進行爬取。因為這些東西屬于使用者隐私,在使用爬蟲進行爬取的時候可能需要一些黑客的技術融入其中,針對很多大的資料網站是有反爬機制的,還要想辦法繞過這一關。在此實作的基礎上,對對話内容進行NLU的分詞、句法分析等操作,并将輸出結果,作為深度神經網絡的輸入,進行訓練。得到一套應答機制4。
  4. 知識庫層,利用3輸出的結果,建構應答的語義和規則庫
  5. 引擎層, 這一部分包括語音識别(聲音轉文字),語義了解引擎(對文字進行分詞和句法分析,将分析結果輸入上面訓練的神經網絡,得到答複),語音合成(将輸出的結果最終的讀出來)。
  6. 解決方案層, 建構一個聊天機器人的應用,包括UI界面和互動邏輯等。 

結論

整個上面的過程,實際上是我一個門外漢,對整個我們要做的事情的一個了解的過程。

參考文獻(文章)

  • 微軟小冰智能聊天是如何實作的? https://www.zhihu.com/question/23952075
  • 垂直爬蟲
    • http://www.oschina.net/question/163158_109450
    • http://liangqingyu.com/page/category.html#細說垂直型網絡爬蟲
  • 文本挖掘
    • 文本挖掘和分析初步 http://www.jianshu.com/p/a98ac6847181
    • 知識庫 : 文本挖掘概述 http://udn.yyuap.com/doc/ae/919872.html
    • 資料科學18:文本挖掘1 http://jackycode.github.io/blog/2014/06/18/text-mining1/
  • 協同過濾
    • 探索推薦引擎内部的秘密,第 2 部分: 深入推薦引擎相關算法 - 協同過濾https://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy2/
  • 語義了解
    • 地圖中的語義了解 | 硬創公開課 http://weibo.com/ttarticle/p/show?id=2309351000223982624799503109
  • 社會化媒體
    • http://wiki.mbalib.com/wiki/%E7%A4%BE%E4%BC%9A%E5%8C%96%E5%AA%92%E4%BD%93

繼續閱讀