劉宇杰,陳家豪,宋 暉,周浩冉
(東華大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,上海 201620)
近年來(lái),隨著大數(shù)據(jù)理論和機(jī)器學(xué)習(xí)技術(shù)的發(fā)展,構(gòu)建一個(gè)智能對(duì)話系統(tǒng)不再是一件難事。一方面,我們可以讓機(jī)器學(xué)習(xí)在給定輸入的情況下響應(yīng)什么以及如何響應(yīng),這使我們能夠構(gòu)建數(shù)據(jù)驅(qū)動(dòng)、面向特定任務(wù)的對(duì)話系統(tǒng)。另一方面,機(jī)器學(xué)習(xí)技術(shù)已被證明能有效捕獲數(shù)據(jù)中的復(fù)雜模式,并為自然語(yǔ)言處理和推薦系統(tǒng)等眾多研究領(lǐng)域提供了強(qiáng)大動(dòng)力。
對(duì)話系統(tǒng)按照對(duì)話的目標(biāo)可以分為4類:任務(wù)型對(duì)話系統(tǒng)、閑聊型對(duì)話系統(tǒng)、問(wèn)答型對(duì)話系統(tǒng)以及推薦型對(duì)話系統(tǒng)。任務(wù)型對(duì)話系統(tǒng)是通過(guò)自然語(yǔ)言交互的形式來(lái)幫助用戶完成某個(gè)特定的任務(wù),如行程安排、網(wǎng)上訂票、訂餐服務(wù)等;閑聊型對(duì)話系統(tǒng)通常不會(huì)有明確的目標(biāo),其關(guān)注點(diǎn)在于生成流暢、合理且自然的回復(fù),主要功能是消遣娛樂(lè);問(wèn)答型對(duì)話系統(tǒng)旨在基于特定的知識(shí)庫(kù),回答用戶的問(wèn)題,主要是用來(lái)幫助用戶獲取其關(guān)注的信息;而推薦型對(duì)話系統(tǒng)則可以看作問(wèn)答型對(duì)話系統(tǒng)的一種,主要是利用人機(jī)交互在知識(shí)庫(kù)中查找最符合用戶需求的產(chǎn)品或服務(wù)。
本文主要針對(duì)任務(wù)型對(duì)話系統(tǒng)實(shí)現(xiàn)所需要的理論和技術(shù)展開論述,在此基礎(chǔ)上面向企業(yè)服務(wù)領(lǐng)域詳細(xì)介紹如何使用Rasa框架搭建對(duì)話系統(tǒng),以及Rasa對(duì)話系統(tǒng)如何和其他部分協(xié)同完成一個(gè)完整的語(yǔ)音對(duì)話系統(tǒng)。
任務(wù)型對(duì)話系統(tǒng)又稱多輪對(duì)話系統(tǒng),其目的是完成特定的需求和任務(wù)。早期的任務(wù)型對(duì)話系統(tǒng)主要通過(guò)語(yǔ)義理解等方法來(lái)確定用戶意圖,并且通過(guò)狀態(tài)追蹤和策略選擇等方法來(lái)確定如何進(jìn)行答復(fù)。隨著人工智能技術(shù)的發(fā)展,越來(lái)越多的機(jī)器學(xué)習(xí)方法被應(yīng)用于任務(wù)型對(duì)話系統(tǒng),由此誕生了基于端到端(End-to-End)的任務(wù)型對(duì)話系統(tǒng)。
從實(shí)現(xiàn)技術(shù)上來(lái)看,任務(wù)型對(duì)話系統(tǒng)分為管 道(pipeline)方 法 和 端 到 端(End-to-End)方法。
1.2.1 管道方式
基于管道方法的任務(wù)型對(duì)話系統(tǒng)主要包括5部分:自動(dòng)語(yǔ)音識(shí)別(automatic speech recog?nition,ASR)、自然語(yǔ)言理解(nature language understanding,NLU)、對(duì)話管理(dialogue man?agement,D M)、自然語(yǔ)言生成(natural language generation,NLG)和語(yǔ)音合成(Text To Speech,TTS),其流程如圖1所示。
圖1 任務(wù)型對(duì)話系統(tǒng)流程
管道方法一般是由各個(gè)模塊級(jí)聯(lián)而成,各模塊需要定義各自相應(yīng)的接口模式,從而確定每個(gè)模塊的輸入輸出。在管道方法中,自然語(yǔ)言理解和對(duì)話管理這兩個(gè)模塊在整個(gè)方法中的邏輯聯(lián)系最緊密,是任務(wù)型對(duì)話系統(tǒng)的核心模塊。
(1)自然語(yǔ)言理解(natural language under?standing,NLU)。自然語(yǔ)言理解的目的是提取用戶的輸入為定義好的槽值和意圖,通常包括兩個(gè)任務(wù):意圖識(shí)別和語(yǔ)義槽填充。意圖識(shí)別屬于分類任務(wù),它根據(jù)用戶當(dāng)前的輸入,使用機(jī)器學(xué)習(xí)中的分類方法推斷用戶的意圖屬于預(yù)定義的候選集中的哪一個(gè)。語(yǔ)義槽填充與領(lǐng)域識(shí)別不同,其本質(zhì)上是一個(gè)序列標(biāo)注問(wèn)題,其目的是識(shí)別句中的語(yǔ)義槽和相應(yīng)的值。
(2)對(duì)話管理(dialogue management,DM)。對(duì)話管理分為兩部分:對(duì)話狀態(tài)跟蹤(dialogue state tracking,DST)和對(duì)話策略優(yōu)化(dialogue policy optimization,DTO)。對(duì)話管理模塊的流程如圖2所示。
圖2 對(duì)話管理模塊流程
1)對(duì)話狀態(tài)跟蹤。對(duì)話狀態(tài)跟蹤方法會(huì)在每一輪對(duì)話完成后更新并輸出當(dāng)前用戶對(duì)話狀態(tài)。其主要實(shí)現(xiàn)方法有基于規(guī)則的對(duì)話狀態(tài)跟蹤方法、基于統(tǒng)計(jì)方法的對(duì)話狀態(tài)跟蹤方法和基于神經(jīng)網(wǎng)絡(luò)的對(duì)話狀態(tài)跟蹤方法等。
2)對(duì)話策略優(yōu)化。對(duì)話策略是指根據(jù)當(dāng)前的對(duì)話狀態(tài)選擇合適的策略,而后生成相應(yīng)的回復(fù)。對(duì)話策略優(yōu)化的方法分為基于規(guī)則的方法和基于機(jī)器學(xué)習(xí)的方法兩種。
1.2.2 End-to-End方法
基于端到端的任務(wù)型對(duì)話系統(tǒng)和管道方法不同,其不通過(guò)各個(gè)子模塊的聯(lián)結(jié)來(lái)獲取回復(fù),而是直接根據(jù)問(wèn)題和系統(tǒng)回復(fù)去學(xué)習(xí)其中的映射關(guān)系。其方法可以大致分為兩類:基于檢索的方法和基于生成的方法。
本系統(tǒng)面向企業(yè)信息,為企業(yè)管理者提供數(shù)據(jù)查詢服務(wù)。下面先介紹Rasa框架以及如何基于Rasa框架根據(jù)企業(yè)數(shù)據(jù)來(lái)搭建對(duì)話系統(tǒng),然后再介紹Rasa對(duì)話系統(tǒng)和其他系統(tǒng)之間如何交互。
Rasa對(duì)話系統(tǒng)基于Rasa框架,Rasa是一個(gè)基于機(jī)器學(xué)習(xí)實(shí)現(xiàn)多輪對(duì)話的開源機(jī)器人框架。其中包含兩個(gè)主要模塊Rasa_nlu與Rasa_core和一些其他的工具模塊。Rasa_nlu模塊是自然語(yǔ)言理解模型集合,主要包括實(shí)體識(shí)別、意圖識(shí)別、特征提取、槽值提取等功能,主要完成對(duì)話系統(tǒng)中自然語(yǔ)言理解模塊的功能;Rasa_core模塊決定接下來(lái)系統(tǒng)對(duì)用戶的回復(fù),即實(shí)現(xiàn)與用戶的交互邏輯,主要完成對(duì)話系統(tǒng)中對(duì)話管理模塊的功能。其主要文件及其作用如表1所示。
表1 Rasa對(duì)話系統(tǒng)主要文件及其作用
針對(duì)企業(yè)服務(wù)領(lǐng)域數(shù)據(jù),Rasa對(duì)話系統(tǒng)根據(jù)數(shù)據(jù)表常用字段在domain.yml文件中定義了24個(gè)意圖(包括打招呼、感謝、再見等系統(tǒng)意圖和具體查詢意圖)、28個(gè)實(shí)體和一些模板回復(fù)語(yǔ)句。根據(jù)意圖定義的自然語(yǔ)言理解(對(duì)應(yīng)表1中的nlu.md)部分訓(xùn)練數(shù)據(jù)示例如程序1所示。
以上述意圖為例,“##”后為意圖名稱,該意圖為查詢園區(qū)內(nèi)/外資企業(yè)的數(shù)量;“-”后為該意圖具體訓(xùn)練數(shù)據(jù),數(shù)據(jù)采用實(shí)體標(biāo)注的形式。小括號(hào)內(nèi)為實(shí)體名,中括號(hào)內(nèi)為實(shí)體具體值。
對(duì)話管理部分(對(duì)應(yīng)表1中的story.md)訓(xùn)練數(shù)據(jù)以故事形式給出,程序1對(duì)應(yīng)的訓(xùn)練數(shù)據(jù)示例如程序2所示。
以上述故事為例,“*”后為用戶意圖,“-”后表示系統(tǒng)的具體反饋動(dòng)作,該示例表示系統(tǒng)識(shí)別到名稱為capital_nature的槽的具體值為外資,并且填充槽值后做出名為action_num?ber_foreign_capital_enterprises的反饋動(dòng)作。
系統(tǒng)做出的反饋動(dòng)作以類的形式定義,需要繼承Rasa對(duì)話系統(tǒng)提供的Action類并重寫其方法,需要重寫的方法如表2所示。
表2 Action類中需要重寫的方法
針對(duì)識(shí)別后的公司名(公司簡(jiǎn)稱)與數(shù)據(jù)庫(kù)中對(duì)應(yīng)字段的匹配問(wèn)題,系統(tǒng)使用基于動(dòng)態(tài)規(guī)劃的拼音相似度和余弦相似度來(lái)聯(lián)合計(jì)算識(shí)別到的公司名和數(shù)據(jù)庫(kù)中公司名的相似度,并根據(jù)設(shè)定閾值確定數(shù)據(jù)庫(kù)中是否存在與識(shí)別到的公司名對(duì)應(yīng)的數(shù)據(jù)。下面具體闡述系統(tǒng)使用的相似度計(jì)算方法。
將詞看作一個(gè)字符串序列,設(shè)搜索詞為,候選詞集合為{,,,…,w},對(duì)于搜索詞和每一個(gè)候選詞w,設(shè)其長(zhǎng)度分別為,,[][]為搜索詞從0位置到位置組成字符串與第k個(gè)候選詞w從0位置到位置組成字符串的相似度,則[][]為和w的相似度,動(dòng)態(tài)規(guī)劃的邊界條件為[][0]=,[0][]=,其中0≤≤,0≤≤,其狀態(tài)轉(zhuǎn)移方程為:
公式(1)中,[][]可由以下三種情況轉(zhuǎn)移而來(lái):
(1)[][]=[-1][]+1,表示搜索詞中0到1位置與當(dāng)前候選詞w中0到位置的相似度加1(減少的位置字符,1可視為與空字符是否相等)。
(2)[][]=[][-1]+1,表示搜索詞中0到位置與當(dāng)前候選詞w中0到-1位置的相似度加1(w減少的位置字符,1可視與空字符是否相等)。
(3)[][]=[][-1]+cost,表示搜索詞中0到-1位置與當(dāng)前候選詞w中0到-1位置的相似度加cos(tcost為的位置字符和w的位置字符是否相等)。
由于字符相等cost取0,字符不等cost取1,所以上述三種情況取最小值(結(jié)果越小相似度越高),即為[][]當(dāng)前結(jié)果,當(dāng)=時(shí),[][]即為當(dāng)前兩個(gè)字符串的相似度。
算法會(huì)遍歷所有候選詞,使用上述方法找出和當(dāng)前搜索詞相似度最高的前三個(gè)候選詞,分別再對(duì)每一個(gè)候選詞和搜索詞使用余弦相似度計(jì)算出聯(lián)合相似度,找出相似度最高的一組。如果相似度最高的候選詞大于設(shè)定閾值,那么認(rèn)為候選詞與搜索詞匹配,否則認(rèn)為無(wú)候選詞和搜索詞匹配。
在Rasa對(duì)話系統(tǒng)中使用該方法,雖然能在較大程度上解決公司名與數(shù)據(jù)庫(kù)中對(duì)應(yīng)字段的匹配問(wèn)題,但是由于算法復(fù)雜度較高,仍然存在當(dāng)候選詞過(guò)多導(dǎo)致匹配速度變慢的問(wèn)題。
對(duì)話系統(tǒng)分為App端、Rasa對(duì)話系統(tǒng)和企業(yè)信息查詢系統(tǒng)。App端負(fù)責(zé)系統(tǒng)和用戶交互,并且把對(duì)話信息持久化到數(shù)據(jù)庫(kù)中;Rasa對(duì)話系統(tǒng)負(fù)責(zé)接收App端的用戶問(wèn)題,經(jīng)過(guò)處理后將結(jié)果返回給App端;企業(yè)信息查詢系統(tǒng)負(fù)責(zé)查詢企業(yè)信息,并可以對(duì)查詢信息做簡(jiǎn)單統(tǒng)計(jì),對(duì)外提供接口供Rasa對(duì)話系統(tǒng)調(diào)用。系統(tǒng)之間各個(gè)部分交互如圖3所示。
圖3 對(duì)話系統(tǒng)交互
用戶在App輸入對(duì)話問(wèn)題,App端通過(guò)Http Post請(qǐng)求將問(wèn)題發(fā)送到Rasa對(duì)話系統(tǒng),對(duì)話系統(tǒng)通過(guò)Flask框架接收請(qǐng)求并且將問(wèn)題和用戶信息交給Rasa框架的NLU模塊,NLU模塊處理完成后將識(shí)別結(jié)果(意圖和實(shí)體)交給到Rasacore模塊,Rasa-core模塊選擇采取某個(gè)動(dòng)作,再進(jìn)入action模塊調(diào)用API(企業(yè)信息查詢系統(tǒng))得到具體結(jié)果和tracker中的信息(用戶對(duì)話歷史和用戶狀態(tài))一并返回給App端,App端顯示回答信息并將該輪對(duì)話和tracker中的信息持久化到數(shù)據(jù)庫(kù)中。
隨著人工智能技術(shù)的不斷發(fā)展,人機(jī)對(duì)話系統(tǒng)對(duì)于社會(huì)發(fā)展的貢獻(xiàn)會(huì)更加顯著。任務(wù)型對(duì)話系統(tǒng)會(huì)和人工智能技術(shù)、大數(shù)據(jù)理論更加緊密結(jié)合,向更加成熟和穩(wěn)定的方向發(fā)展。
本文提出的任務(wù)型對(duì)話系統(tǒng)可以替代原有的需要人工操作的后臺(tái)管理系統(tǒng),可以提高管理員進(jìn)行企業(yè)管理時(shí)的效率。使用語(yǔ)音輸入來(lái)替代繁瑣的頁(yè)面操作,可以讓管理者從后臺(tái)管理中脫離出來(lái),達(dá)到即說(shuō)即用即查的效果;同時(shí)也為面向企業(yè)服務(wù)領(lǐng)域的任務(wù)型對(duì)話系統(tǒng)提出一個(gè)工業(yè)級(jí)別可實(shí)現(xiàn)的解決方案。