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