王海良老師
本文根據Chatopera聯(lián)合創(chuàng )始人&CEO王海良老師在DataFunTalk人工智能技術(shù)沙龍“自然語(yǔ)言處理技術(shù)應用實(shí)踐”中分享的《多輪對話(huà)提升自動(dòng)化流程服務(wù)》編輯整理而成,在未改變原意的基礎上稍做修改。
多輪對話(huà)提供自動(dòng)化流程服務(wù)
今天主要分享兩部分,一部分是技術(shù)分享,第二部分是介紹一下Chatopera提供的企業(yè)聊天機器人應用解決方案。目前開(kāi)發(fā)企業(yè)聊天機器人很麻煩,需要用大量的數據,依賴(lài)機器學(xué)習和熟悉自然語(yǔ)言處理的專(zhuān)家,成本比較高,我們能提供快速落地、穩定的、低成本實(shí)現聊天機器人的方案,下圖是我們的解決方案。
Chatopera面向企業(yè)業(yè)務(wù)人員發(fā)布了
多輪對話(huà)設計器,用于設計滿(mǎn)足企業(yè)需求的聊天機器人,從多輪對話(huà)設計器中可以導出
對話(huà)應用。對話(huà)應用可以導入到
智能問(wèn)答引擎中,智能問(wèn)答引擎是面向企業(yè)IT人員的,它可以管理聊天機器人,包括多輪對話(huà)、知識庫、意圖識別和監控接口使用情況。
智能問(wèn)答引擎暴露接口對外集成,也包含基于Web的管理控制臺,這套方案可以支持將企業(yè)內部流程和在客服、營(yíng)銷(xiāo)過(guò)程中的話(huà)術(shù)轉化為聊天服務(wù),接入到企業(yè)微信、微信公眾號等,從而提供企業(yè)的智能化和自動(dòng)化。閑話(huà)不多說(shuō)了,下面開(kāi)始分享一些自然語(yǔ)言處理的知識。
語(yǔ)言模型是計算一個(gè)句子出現的可能性,比如我問(wèn)機器人一個(gè)問(wèn)題,那么它的不同回答出現的可能性是什么樣的。自然語(yǔ)言處理經(jīng)歷過(guò)很多階段,不同發(fā)展時(shí)期有不同的特點(diǎn),經(jīng)歷過(guò)經(jīng)驗主義主導和理性主義主導的時(shí)期,前者主要是語(yǔ)言學(xué)家推出的一些方法,后者則大量使用統計學(xué)方法。自然語(yǔ)言處理又應用于很多任務(wù)中,比如機器翻譯、信息檢索和閱讀理解,近年來(lái)取得重大突破的主要是基于統計學(xué)方法的。用大量的數據統計出語(yǔ)言的特征,從中找到規律,從而對給定輸入預測出結果。第一位提出用數學(xué)解決語(yǔ)言問(wèn)題的是香儂,他是信息論的開(kāi)創(chuàng )者,也是人工智能之父。現在很多用于人工智能的方法更多的是來(lái)源于通信領(lǐng)域,比如最大熵、最大似然都來(lái)自于信息論。
檢驗一個(gè)語(yǔ)言模型的好壞是通過(guò)“困惑度”來(lái)衡量,就是你說(shuō)了一個(gè)字,下一個(gè)字有幾種可能,可能數越少說(shuō)明語(yǔ)言模型越準確。描述一個(gè)語(yǔ)言模型的格式常用ARPA,很多工具都支持這種格式,用很大的語(yǔ)料訓練形成一個(gè)文件,文件帶有N-Grams的token列表,第一列是token,第二列是它出現的概率,通常是以L(fǎng)og10函數換算后的結果,第三列是backoff加權,主要用來(lái)平滑。計算一句話(huà)出現的可能性用途有很多,比如糾錯中看那個(gè)字是錯誤的。公式7就是具體計算一句話(huà)可能性的,它將目標分成兩個(gè)部分,然后分別求,右半部分是對應的backoff權值,如果它不存在,就使用1.0作為默認值,左半部分如果在語(yǔ)言模型中也不存在,就迭代計算。
如果解決一個(gè)翻譯任務(wù),就可以用歷史數據去訓練模型,我們的目的是得到一個(gè)函數,通過(guò)它預測未來(lái)輸入的句子的翻譯結果。我們不能知道完整的特征空間,但是基于大數定理,我們認為在訓練數據很大的情況下,訓練后的模型與完整特征空間是一致的,這就是用已知數據去擬合完整的特征空間,利用數學(xué)原理,我們能得到的解不一定是最優(yōu)解,但可以保證是局部的最優(yōu)。最大熵原理是指導這個(gè)求解過(guò)程的重要思想,它的核心就是對未出現的事件,認為是等可能的,這樣保證熵最大。因為熵增定律認為系統總是朝著(zhù)最無(wú)序,最混亂的方向發(fā)展,那么保證熵最大,可以最接近真實(shí)情況。上圖可以用來(lái)描述最大熵模型,首先定義計算熵的公式,然后目標是最小化它的對偶問(wèn)題(公式8),然后描述它的限制條件,限制條件為若干特征函數,特征函數的構造一般是輸出值為0或1的函數,再一個(gè)條件就是對于一個(gè)輸入x,各種輸出的概率和是1。然后將目標函數和限制條件通過(guò)拉格朗日乘子法建立方程組,對每個(gè)方程求偏導,進(jìn)行求解。這是一個(gè)凸優(yōu)化問(wèn)題。
中文分詞、詞性標注、命名實(shí)體識別是自然語(yǔ)言處理中的“三姐妹”,是其它任務(wù)的基礎。中文分詞這些年來(lái)出現了很多方法,在九幾年的時(shí)候主要通過(guò)字典和人為指定的規則完成,比如MMSEG算法,提出語(yǔ)素自由度概念,前向或后向的算各種分詞情況下的分數,然后確定最優(yōu)解。2000年以后,多用機器學(xué)習算法,準確率也大幅提升,解決了識別新詞等困難,有些分詞器準確率能達到96%以上。隱馬爾可夫模型是很經(jīng)典的模型,也很簡(jiǎn)單,很多分詞器基于它實(shí)現。使用隱馬爾可夫模型可以解決三類(lèi)問(wèn)題:
- 概率計算問(wèn)題:計算可觀(guān)測序列出現的概率;
- 預測問(wèn)題:根據可觀(guān)測序列找到最有可能的隱藏狀態(tài)序列;
- 學(xué)習問(wèn)題:估計隱馬爾可夫模型的參數。
隱馬爾可夫模型包含五個(gè)參數:不可觀(guān)測的
狀態(tài),可觀(guān)測的
觀(guān)測序列,初始狀態(tài)概率向量,觀(guān)測概率矩陣和狀態(tài)轉移概率矩陣。在中文分詞中,由字構詞法就是將狀態(tài)分為(B,M,E,S),它們分別代表一個(gè)字出現在詞匯的開(kāi)始、中間、結尾或獨立成詞。近年來(lái),基于條件隨機場(chǎng)的分詞效果超過(guò)了隱馬爾可夫,主要是因為條件隨機場(chǎng)能更充分的利用一個(gè)字的上下文關(guān)系,能更好的描述序列化任務(wù),因為隱馬設定了比較強的依賴(lài),只是利用了前一個(gè)字。
在很多自然語(yǔ)言處理任務(wù)中,比如搜索、摘要和關(guān)鍵詞提取都與相似度計算關(guān)系很大,尤其是兩個(gè)句子和兩個(gè)詞之間的相似度。目前基于詞向量的相似度計算用的比較多的是Word2vec,它的網(wǎng)絡(luò )設計是很簡(jiǎn)單的,比如C-BOW模型,就是利用前后詞去預測當前詞。Synonyms是一個(gè)開(kāi)源的可以用于計算相似度的庫,它融合了語(yǔ)義上的距離以及匹配,利用開(kāi)源的算法和開(kāi)放的wikidata數據制作的。
https://github.com/huyingxi/Synonyms
在最近受到了一些關(guān)注,在Github上,star數量在穩定增長(cháng),我是這個(gè)項目的作者之一,歡迎大家使用和提Issue。
Synonyms star 趨勢
常見(jiàn)的信息檢索系統就是基于倒排索引,在2011年以后,召回后進(jìn)行排序時(shí),又多用深度學(xué)習技術(shù),比如Pointwise, Pairwise等方法。
倒排索引是一個(gè)詞可能出現在很多文章中,那么就將詞建一個(gè)列表,然后出現它的文章都建一個(gè)id,然后這些文章按照遞增的順序關(guān)聯(lián)到這個(gè)詞上。在查詢(xún)時(shí),根據不同條件得到文章集合,使用歸并算法輸出。
Apache Lucene是幫助實(shí)現信息檢索系統的開(kāi)源項目,它的query語(yǔ)法很豐富,性能也很出眾。Lucene的查詢(xún)語(yǔ)法也給Chatopera團隊實(shí)現聊天機器人的對話(huà)引擎很大的啟發(fā)。另外在搜索時(shí),Lucene也支持使用近義詞,通過(guò)簡(jiǎn)單擴展、簡(jiǎn)單收縮、簡(jiǎn)單映射和姻親擴展讓檢索更智能。
另外一個(gè)知名開(kāi)源項目 - Elasticsearch也是面向企業(yè)快速搭建信息檢索系統的,是實(shí)現搜索引擎的非常棒的項目,它的文檔相關(guān)度計算如上圖,它不但使用了TF-IDF、也支持對一個(gè)詞進(jìn)行加權,還根據文檔長(cháng)度進(jìn)行規范化。
搜索引擎的評測標準有很多指標,比如MAP、MPP,基于混淆矩陣的準確率和召回率是經(jīng)典的方法。準確率和召回率是矛盾的,所以,常使用二者結合起來(lái)計算的F1值評價(jià),F1值越高,效果越好。
在自然語(yǔ)言處理中,另一個(gè)比較難的點(diǎn)就是分析詞與詞之間關(guān)系,在分詞后,一個(gè)詞在句子中充當什么成分。依存關(guān)系分析依賴(lài)于分詞的結果,也依賴(lài)于詞性標注的結果。標注依存關(guān)系數據集也是很難的任務(wù),詞之間的關(guān)系會(huì )有幾十種。我個(gè)人認為,從近幾年學(xué)術(shù)上的成果看,依存分析分析已經(jīng)處于從學(xué)術(shù)向實(shí)際應用過(guò)渡的節點(diǎn)了,2017年在依存關(guān)系分析任務(wù)上,就出現了準確率95%的論文。
目前,用于依存關(guān)系分析的流行算法有基于Transition-based和Graph-based兩種。Transition-based parser基本理念就是將待分析的句子放入buffer中,然后順序進(jìn)入parser,oracle是一個(gè)分類(lèi)器,它會(huì )給出針對這個(gè)詞作出哪種行為,比如SHIFT, 右附加關(guān)系,左附加關(guān)系。下面是有關(guān)依存關(guān)系分析的兩個(gè)開(kāi)源項目:
https://github.com/Samurais/text-dependency-parser # 經(jīng)典的transition-based parser
https://github.com/elikip/bist-parser # 使用神經(jīng)網(wǎng)絡(luò )實(shí)現Oracle的Parser
以上內容是自然語(yǔ)言處理的部分,但是本次分享的主題是“多輪對話(huà)提升自動(dòng)化流程服務(wù)”,目前信息檢索服務(wù)不斷向更智能的方向發(fā)展,搜索引擎公司越來(lái)越了解我們,但是在企業(yè)里,隨著(zhù)業(yè)務(wù)的發(fā)展,它更需要的是通過(guò)多輪對話(huà)完成流程服務(wù),一問(wèn)一答的服務(wù)解決不了太多問(wèn)題。企業(yè)里對業(yè)務(wù)流程引擎有著(zhù)極大的熱情,業(yè)務(wù)流程引擎也在幾十年的發(fā)展中,不斷標準化,完善化。比如當前的標準BPMN2.0用50多個(gè)元素去幫助業(yè)務(wù)人員建模,編排流程服務(wù)。結合對業(yè)務(wù)流程引擎和自然語(yǔ)言處理的理解,Chatopera開(kāi)發(fā)了
對話(huà)引擎,并基于它開(kāi)發(fā)了
多輪對話(huà)設計器和
智能問(wèn)答引擎。
對話(huà)引擎是以自然語(yǔ)言為輸入的,描述對話(huà)的,它根據這些腳本,梳理規則,形成機器人的思維邏輯導圖。對話(huà)引擎也有自己的一套強大的語(yǔ)法規則,能讓機器人更加智能。
上圖是多輪對話(huà)設計器的對話(huà)編輯窗口,左側寫(xiě)腳本,右腳上是實(shí)時(shí)渲染的機器人思維邏輯導圖,右下角是測試窗口。多輪對話(huà)設計器通過(guò)
函數完成系統集成,比如在對話(huà)中依賴(lài)CRM或訂單管理數據等,
函數和
腳本可以相互調用,這樣能滿(mǎn)足企業(yè)的各種業(yè)務(wù)需求,并且靈活調整。下面的鏈接提供一個(gè)具體的例子,怎么通過(guò)多輪對話(huà)設計器實(shí)現一個(gè)查詢(xún)天氣的機器人。
https://github.com/chatopera/conversation-sampleapp
在Chatopera,自然語(yǔ)言處理和機器學(xué)習主要應用于幫助業(yè)務(wù)人員快速實(shí)現聊天機器人,比如客服人員輸入“訂單下單后怎么查看物流狀態(tài)”,那么這就話(huà)有哪些不同的說(shuō)法,基于對話(huà)引擎,它的規則是什么樣的,它的回復有幾種可能。也就是,Chatopera利用先進(jìn)的技術(shù)幫助業(yè)務(wù)人員寫(xiě)機器人的對話(huà)腳本。在Chatopera看來(lái),這是企業(yè)實(shí)現聊天機器人過(guò)程中,一個(gè)重要的環(huán)節。那么,怎么做呢?一方面,要熟悉業(yè)務(wù)流程引擎的設計理念,比如流程狀態(tài)機、流程的編排、企業(yè)業(yè)務(wù)人員的工作習慣等,另外一方面,要對信息檢索、分詞、近義詞挖掘、依存關(guān)系和機器閱讀理解等自然語(yǔ)言處理任務(wù)不斷研究,持續創(chuàng )新。
今天分享的內容包括一些經(jīng)典的、成熟的,同時(shí),這些方法也能啟發(fā)大家創(chuàng )新,比如分詞的技術(shù)應用于機器閱讀理解、Lucene的查詢(xún)語(yǔ)法應用于多輪對話(huà)技術(shù)等。期待于大家進(jìn)行更深度的交流,我今天的分享就到這里,想要進(jìn)一步了解Chatopera的產(chǎn)品請訪(fǎng)問(wèn):
https://docs.chatopera.com/