嘗試實現一個chatbot的漫漫長路
GIF
寫在前面
又好久沒有寫總結啦,果然跟我之前想的一樣會慢慢荒廢啊最近大家的方向主要是人工智慧,當然了還處於特別特別基礎的階段。。起因是95522要配置一個智能回訪項目,就是當我們買了保險之後是要進行回訪的。目前這項工作都是由人工進行的,但是由於每套話術流程都是基本相同的,所以現在考慮用機器代替人工進行回訪。背景就醬,所以最近大家都看了一下關於智能對話機器人的資料。
wode
1
關於智能機器人
智能機器人近幾年發展的十分迅速,一個智能語音助手似乎成了許多智能硬體的標配。其中的代表有我們十分熟悉的Siri,Cortana,以及今年表現令人大吃一驚的Google Assistant。
對話機器人使用的領域很廣,現在不管是網站還是APP還是硬體什麼的,沒有配個智能機器人都不好意思出來見人。按照使用領域細分可分為很多種,但是按我的理解大致上可分為兩大類:
問答機器人
多用於垂直領域,例如購物、保險類智能客服等,它的特點總結一下有如下幾個方面:
知識領域非常有限,針對性較強,因此一般會有一套題庫來保證回答的準確度,不必考慮感情因素
聊天機器人
聊天機器人則適用範圍更廣,主要用於閑聊等場景,對於用戶提出的任何問題都應給予合適的回答,通常應對用戶的輸入做出個性化回復。類似於Siri和Cortana這種智能助手都可以分為該類。
2
架構與相關技術
智能機器人的架構與主要技術大致可以用下圖表示,整個流程還是比較容易理解。
自動語音識別技術(Automatic Speech Recognition,ASR)即將用戶輸入的語音識別成為文本。
語音合成(Text to Speech,TTS)即將文字轉換為語音進行播放。
自然語言理解(Natural Language Understanding,NLU):當我們跟計算機說「我想買個可以保障意外傷害的保險」,計算機如何能夠準確識別我的意圖是「買保險」呢?這就是NLU的職責所在。正如人與人交流一樣,理解對方的真實意圖是交流的基礎。
對話管理(Dialog Management,DM):相當於整個流程中的大腦,控制著人機對話的過程,主要任務為在NLU之後,決定系統對於用戶的輸入所做出的行為,或為某種具體操作,例如打開照相機;或為根據用戶輸入給出一句回答。
例如任務驅動型的對話,當用戶提出「我想聽一首歌」,機器會提問「您想聽誰的歌?」、「您想聽搖滾還是抒情類的?」等問題來完善用戶的需求。
自然語言處理(Natural Language Processing,NLP):當理解了用戶的輸入後,計算機應生成返回給用戶的回復,回復語句的生成即是NLP的工作。如何能讓計算機給出的回復符合自然語言邏輯並且符合用戶的需求是NLP的難點。
3
關於NLU
最近看的比較多的是NLU,所以下面主要圍繞它多說一些。NLU是保證我們得到所需輸出的第一步。它主要包含下列步驟與難點:
1
分詞、分句、詞性標註等基礎處理
由於語言結構的區別,在英文體系中,詞與詞之間本身就有空格加以區分,並且通常一個詞即表達一個獨立的意思。而我們博大精神的中文則完全不同,如果我們想讓機器正確理解我們的意思,需要進行很多處理工作,比如對一句話進行正確的斷句(即分詞),標註出各個詞句在句子中的成分等等。例如:我想去北京看天安門。機器應能正確將句子分解為:我/想/去/北京/看/天安門。這樣才能為後續的處理打好基礎。
2
指代消解。
在語言表達中我們會經常使用代詞,比如「今天我和媽媽去逛街,她買了一件衣服」,「她」此時指代的是「媽媽」。然而對於計算機我們怎麼能讓它理解這些呢?
指代消解問題可分為顯性代詞消解、零代詞消解、共指消解。自然語言處理知識體系中提供了多種研究方法用於處理指代消解。大致可以分為基於啟發式規則的、基於統計的和基於深度學習的方法,目前基於有監督統計機器學習的消解演算法是其中主流。這裡沒有任何了解就不多說了。
3
特徵處理和模型訓練
NLU的重點是能夠正確識別用戶的意圖(intent)。例如當用戶說「今天北京多少度?」,機器應能夠判斷出用戶的意圖為「查天氣」,以進行下一步動作。目前實現NLU的方法主要有兩大類:基於規則,基於數據(檢索、生成)。
基於規則:也就是說我們為計算機提供了一些模板,當用戶輸入的信息與這些模板匹配時,計算機即做出相應的回答。例如,同樣是「查天氣」的意圖,用戶的問法可能有「今天天氣怎麼樣?」、「今天多少度?」、「今天的氣溫是多少?」等等。我們將這些問法全部作為規則提供給計算機,當其接收到這些問題時,即可作出統一的回答「今天的氣溫是XXX」。
感覺很多簡單的機器人都是通過配置規則的方式實現的,當年十分有名的Alice也是這樣。我並不認為這樣的實現方式可以稱作人工智慧,所以很難理解它們是怎樣通過圖靈測試的。。
基於數據:其實我認為基於數據的機器人才可以叫做人工智慧。使用演算法通過計算和預測來生成對於用戶的回答是目前大部分研究的方向。這段時間看到了很多關於機器學習相關方面的演算法,可以說是非常崩潰了,Word2vec、RNN、CNN之類的,希望之後能有更多了解吧。
4
嘗試搭建一個Chatbot吧
很多公司都提供了Chatbot開發架構,比較有名的有LUIS,Wit.ai,Rasa,Alice,Bot Framework,Pandorabot等,github上也有很多知名項目,感興趣的話可以玩一下。我們最近分別嘗試了幾個開源Chatbot項目,下面主要介紹兩個。
Rasa
Rasa是一個自然語言處理框架,主要分為Rasa NLU 和Rasa Core兩部分,分別負責自然語言理解和對話流程管理。
Rasa的環境配置對我來說太複雜了,對機器要求也很高,所以沒有進行實際嘗試,只是大致看了一下文檔,有同事用它搭了一個簡易模型,效果還不錯。github上有源碼,可以了解一下。
PandoraBot
PandoraBot是基於AIML語言實現的聊天對話機器人,入門還比較快。
AIML即人工智慧標記語言,聽著特別高大上,其實就是基於XML格式的標籤。獲得了多項人工智慧大獎的ALICE機器人即是由它編寫,有興趣的同學可以看一下。它的語法十分簡單,由幾個主要的標籤構成;
:定義一個AIML文件的開始與結束
:定義一個知識的單元
:定義一個模板,來匹配用戶可能的輸入
:定義根據用戶的輸入需要返回的回答
當然只使用這幾個基本的標籤是遠遠不夠的,AIML提供了多個通配符及標籤可用於匹配用戶的輸入。例如*,?,,,等,具體可以搜索一下相關資料。總體來看,AIML易於理解,對於新入門的選手來說十分友好,構建一個bot的難度大大降低。但是這樣一個基於
前幾天用Pandorabots做了一個小Demo,就是基於AIML的。Pandorabots提供了構建聊天機器人的IDE,叫The Pandorabots Playground,感興趣的同學可以試一試,過程十分簡單。
5
總結一下
人工智慧是個很深奧的學科,在剛剛接觸這方面的過程中真心感覺非常吃力,需要學習的東西太多,尤其在對於數學和演算法知識非常缺乏的情況下,有時候看到1個名詞不太懂,在去了解的過程中又看到了10個不懂的名詞。。在知識體系並不完善的情況下,從底層研究不是個好的選擇。其實有很多公司和機構都提供了功能強大的介面和應用,直接調用介面實現功能,而將精力集中於如何在應用層開發更多功能是一個可以考慮的方向。
GIF
寫在後面
對看到結尾的同學們鞠躬表示感謝!這次排版看起來是不是進步了一點?突然感覺到那些公眾號運營和自媒體人也是很不容易的。今天傳說北京有大暴雨,南方有大颱風,希望都快快退散啊~~就醬,再次謝謝收看,遙遠的下期再見啦
GIF


※奢侈品你也買了,怎麼還是沒自信
※get這個護髮訣竅,爆炸頭都能秒變順滑直!
TAG:全球大搜羅 |