來關(guān)軍 于丹 閆曉宇 肖鵬



摘? 要:世界上很多高價(jià)值的數(shù)據(jù)信息儲存在關(guān)系數(shù)據(jù)庫中,訪問這些數(shù)據(jù)需要掌握專門的結(jié)構(gòu)化查詢語言(SQL),普通人很難直接使用。基于對現(xiàn)有對話機(jī)器人存在的問題和相關(guān)關(guān)鍵技術(shù)的梳理,本文融合了數(shù)據(jù)倉庫、數(shù)據(jù)同步、數(shù)據(jù)庫查詢、消息推送、自然語言理解及語音識別等相關(guān)技術(shù)及產(chǎn)品,設(shè)計(jì)了數(shù)據(jù)庫驅(qū)動的對話機(jī)器人。方案可以實(shí)現(xiàn)用戶理解、消息推送、事實(shí)數(shù)據(jù)查詢和分析數(shù)據(jù)查詢四個(gè)功能,使得用戶能夠快速地獲取信息。本文提出的數(shù)據(jù)庫驅(qū)動的對話機(jī)器人具有較強(qiáng)的泛化性和可擴(kuò)展性。
關(guān)鍵詞:關(guān)系型數(shù)據(jù)庫;對話機(jī)器人;SQL;消息推送
Abstract: Many high-value data in the world are stored in relational databases. Access to these data requires a special Structured Query Language (SQL), which is difficult for ordinary people to use directly. Aiming at problems of the existing chatbot, this paper proposes to design database-driven chatbots by integrating related technologies and products, such as data warehouse, data synchronization, database query, message push, natural language understanding and speech recognition. The solution realizes four functions: user understanding, message push, fact-data query and analysis-data query, so that users can quickly obtain information. Database-driven chatbots proposed in this paper has a capability of strong generalization and scalability that enable chatbots to work with data-driven conversations.
Keywords: relational database; chatbot; SQL; message push
1? ?引言(Introduction)
數(shù)據(jù)庫驅(qū)動的對話機(jī)器人是指人們可以通過自然語言完成信息查詢或者得到關(guān)注信息推送的對話系統(tǒng)。數(shù)據(jù)庫是指長期存儲在計(jì)算機(jī)內(nèi)有組織的、可共享的數(shù)據(jù)集合,它的概念比較寬泛,在本文中數(shù)據(jù)庫特指關(guān)系型數(shù)據(jù)庫。對話機(jī)器人是一種以自然語言在計(jì)算機(jī)與人之間進(jìn)行交互的軟件[1]。近年來,它開始應(yīng)用于日常生活的方方面面,例如服務(wù)臺工具、自動電話應(yīng)答系統(tǒng)等,以促進(jìn)教育、醫(yī)療、電子商務(wù)等領(lǐng)域服務(wù)質(zhì)量的提升。
研究數(shù)據(jù)庫驅(qū)動的對話機(jī)器人具有深遠(yuǎn)的應(yīng)用價(jià)值。對于企業(yè)的各種應(yīng)用系統(tǒng),其信息更多地存儲在業(yè)務(wù)數(shù)據(jù)庫中,包括Oracle、SQL Server、MySQL等關(guān)系型數(shù)據(jù)庫。而關(guān)系型數(shù)據(jù)庫的查詢還是一個(gè)比較專業(yè)的領(lǐng)域,對大眾并不友好。采用人機(jī)對話的方式,通過對話機(jī)器人來查詢數(shù)據(jù)是一個(gè)很好的方向,它使用戶直接以自然語言的方式,向數(shù)據(jù)庫系統(tǒng)發(fā)問并獲得所需信息,從而大大提升人機(jī)交互的容易程度;另一方面,當(dāng)人們關(guān)注的主要信息在數(shù)據(jù)庫中有所更新時(shí),也能第一時(shí)間主動地通知用戶。這樣的對話機(jī)器人能夠提高用戶獲取信息的友好性和便捷性,具有更廣泛的實(shí)用價(jià)值和社會意義。
關(guān)于數(shù)據(jù)庫驅(qū)動的對話機(jī)器人的研究和技術(shù)實(shí)現(xiàn),遇到的主要問題包括以下三個(gè)方面:
(1)對話機(jī)器人理解用戶的需求和自然語言非常困難。由于自然語言的創(chuàng)造性、遞歸性、多義性、主觀性和社會性等特點(diǎn)[2],既讓人類的自然語言具備強(qiáng)大的表達(dá)力和生命力,同時(shí)呈現(xiàn)出非常復(fù)雜且難以捉摸的情景,因此讓計(jì)算機(jī)去準(zhǔn)確理解人類語言是首要的問題。
(2)現(xiàn)在對話機(jī)器人對于數(shù)據(jù)庫的查詢通常是被動的,缺少主動推送信息。即針對用戶的提問和聊天,對話機(jī)器人或者被動應(yīng)答,或者被動查詢數(shù)據(jù)庫,總之,被動地提供反饋,主動性不足。
(3)現(xiàn)在對話機(jī)器人對業(yè)務(wù)數(shù)據(jù)庫進(jìn)行直接查詢通常會對現(xiàn)有業(yè)務(wù)系統(tǒng)造成性能和安全影響,特別是對統(tǒng)計(jì)性結(jié)果的查詢影響更大。
針對以上問題,本文基于現(xiàn)有開放的軟件產(chǎn)品和服務(wù),提出了數(shù)據(jù)庫驅(qū)動的對話機(jī)器人的一種技術(shù)實(shí)現(xiàn)方案。該方案可以方便快捷地構(gòu)建對話機(jī)器人,使用戶通過語音或者文本查詢數(shù)據(jù)庫內(nèi)容,并在數(shù)據(jù)庫相關(guān)內(nèi)容更新時(shí)主動地向用戶發(fā)送推送信息,使用戶能夠更便捷地獲得數(shù)據(jù)庫中的內(nèi)容,簡化了用戶的信息獲取方式。
2? ?相關(guān)研究和技術(shù)(Literature review)
數(shù)據(jù)庫驅(qū)動的對話機(jī)器人技術(shù)實(shí)現(xiàn)所面臨的主要技術(shù)挑戰(zhàn)分別是自然語言理解、消息推送以及數(shù)據(jù)庫設(shè)計(jì)和優(yōu)化。
在自然語言理解和實(shí)現(xiàn)方面,隨著1995年以來信息檢索技術(shù)的發(fā)展,Baidu、Google等搜索引擎公司計(jì)算能力的飛速提升,以及2005年后互聯(lián)網(wǎng)業(yè)的蓬勃發(fā)展和移動終端的迅速普及,自然語言理解的研究進(jìn)展迅猛,也產(chǎn)生了一系列比較成熟的聊天系統(tǒng),比如蘋果的Siri、微軟的Cortana、Facebook的Messenger、Google的Assistant等[3]。這些跨平臺型人工智能機(jī)器人借助本公司在大數(shù)據(jù)、自然語義分析、機(jī)器學(xué)習(xí)和深度神經(jīng)網(wǎng)絡(luò)方面的技術(shù)積累,精煉形成自己的真實(shí)語料庫,在不斷訓(xùn)練的過程中通過理解對話數(shù)據(jù)中的語義和語境信息,實(shí)現(xiàn)超越一般簡單人機(jī)問答的自然交互。相比國外,我國在智能聊天領(lǐng)域的投入規(guī)模和研究水平上都有著不小的差距,研究成果并不顯著。但是有多所高校在此領(lǐng)域成績顯著,主要集中在自然語言處理工具的開發(fā)上,比如哈爾濱工業(yè)大學(xué)的HIT工具(中文詞法分析、句法分析和語法分析)以及臺灣“國防大學(xué)”的CQAS中文問答系統(tǒng)(側(cè)重于命名實(shí)體及其關(guān)系的處理)等[4]。因此,借助現(xiàn)有成熟的自然語言理解平臺和工具,開發(fā)對話機(jī)器人可以起到事半功倍的效果。
在消息推送的研究和實(shí)現(xiàn)方面,目前服務(wù)端給客戶端推送消息,普遍做法是客戶端與服務(wù)端維持一個(gè)長連接,客戶端定時(shí)向服務(wù)端發(fā)送心跳以維持這個(gè)長連接。當(dāng)有新消息過來的時(shí)候,服務(wù)端查出該消息對應(yīng)的TCP Channel的ID,并找到對應(yīng)的通道進(jìn)行消息發(fā)放[5]。在此之上,又衍生出針對消息的發(fā)布/訂閱模型,客戶端可以訂閱某一個(gè)Topic,服務(wù)端根據(jù)Topic找到對應(yīng)的Channel進(jìn)行批量的消息發(fā)放。在此基礎(chǔ)上又衍生出了如MQTT等開源協(xié)議用于定義以上過程[6]。在如今動輒成千上萬用戶量的情況下,如何應(yīng)對大規(guī)模的消息下發(fā)以及如何保證消息推送的及時(shí)性、高可靠性和高可用性是消息推送的技術(shù)難點(diǎn)。目前,國內(nèi)較為常用的第三方推送服務(wù)工具有極光推送、騰訊信鴿、百度云推送、華為推送、小米推送等。通過基于第三方的消息推送云服務(wù),來保障消息推送的及時(shí)性、高可靠性和高可用性。
在數(shù)據(jù)庫設(shè)計(jì)和優(yōu)化方面,近年來各種數(shù)據(jù)庫層出不窮,解決各領(lǐng)域內(nèi)具體的業(yè)務(wù)問題。經(jīng)過了60多年發(fā)展的關(guān)系型數(shù)據(jù)庫主要存儲和管理結(jié)構(gòu)化的數(shù)據(jù),應(yīng)用于聯(lián)機(jī)事務(wù)處理系統(tǒng)(On-line Transaction Processing, OLTP),但對超大規(guī)模的數(shù)據(jù)管理,特別是橫向擴(kuò)展方面支持不足[7]。NoSQL數(shù)據(jù)庫是關(guān)系型數(shù)據(jù)庫的一種補(bǔ)充,不使用模式(Schemaless)或使用靈活的模式追求高性能和高吞吐量,可以支撐超大規(guī)模數(shù)據(jù)的橫向擴(kuò)展,主要管理非關(guān)系型數(shù)據(jù),但它不支持ACID和事務(wù),不支持關(guān)聯(lián),缺少標(biāo)準(zhǔn)接口[8]。隨著數(shù)據(jù)量的增加以及數(shù)據(jù)統(tǒng)計(jì)、分析和挖掘的需求,各種數(shù)據(jù)倉庫和大數(shù)據(jù)處理平臺也同步快速發(fā)展,包括MPP平臺和Hadoop生態(tài)平臺,可以廣泛應(yīng)用于聯(lián)機(jī)分析處理系統(tǒng)(On-line Analytical Processing, OLAP)。針對不同的業(yè)務(wù)需求以及數(shù)據(jù)規(guī)模,采用不同的適合的數(shù)據(jù)庫并進(jìn)行優(yōu)化,是實(shí)現(xiàn)技術(shù)方案適用性的首要準(zhǔn)則。
3? ?技術(shù)方案(Solution)
一個(gè)數(shù)據(jù)庫驅(qū)動的對話機(jī)器人應(yīng)該包括四個(gè)功能。首先,該對話機(jī)器人能夠通過文字或語音理解用戶的意圖;其次,該對話機(jī)器人在用戶關(guān)心的信息發(fā)生變化后能夠主動通知用戶;第三,該對話機(jī)器人能夠幫助客戶在不知道數(shù)據(jù)庫表結(jié)構(gòu)的情況下,從數(shù)據(jù)庫中查詢到特定的事實(shí)數(shù)據(jù);最后,該對話機(jī)器人能夠從數(shù)據(jù)庫中查詢到分析型的數(shù)據(jù)。
基于以上四種功能,本文提出的總體框架包括用戶理解、消息推送、事實(shí)數(shù)據(jù)查詢、分析數(shù)據(jù)查詢四個(gè)服務(wù),具體如圖1所示。
首先,用戶理解服務(wù)實(shí)現(xiàn)對話機(jī)器人能夠通過文字或語音理解用戶意圖的功能,包括文本處理模塊、語音識別模塊和自然語言理解模塊三個(gè)部分。
其次,消息推送服務(wù)實(shí)現(xiàn)對話機(jī)器人在用戶關(guān)心的信息發(fā)生變化后主動通知用戶的功能,包括文本處理模塊、數(shù)據(jù)庫監(jiān)聽模塊和業(yè)務(wù)數(shù)據(jù)庫三個(gè)部分。
第三,事實(shí)數(shù)據(jù)查詢服務(wù)實(shí)現(xiàn)對話機(jī)器人幫助用戶在不知道數(shù)據(jù)庫表結(jié)構(gòu)的情況下從數(shù)據(jù)庫中查詢到特定事實(shí)數(shù)據(jù)的功能,包括SQL解析器、以個(gè)體為中心的數(shù)據(jù)集市、業(yè)務(wù)數(shù)據(jù)庫及ETL四個(gè)部分。
最后,分析數(shù)據(jù)查詢服務(wù)實(shí)現(xiàn)對話機(jī)器人從數(shù)據(jù)庫中查詢分析型數(shù)據(jù)的功能,包括SQL解析器、分析型多維數(shù)據(jù)倉庫、業(yè)務(wù)數(shù)據(jù)庫及ETL四個(gè)部分。
3.1? ?用戶理解服務(wù)
用戶理解服務(wù)是與用戶溝通的接口,主要功能是理解用戶的語音和文本,并將結(jié)果或者消息告知用戶。其結(jié)構(gòu)如圖2所示。
其中,文本處理模塊把用戶的文本輸入直接傳遞給自然語言理解模塊;語音識別模塊把用戶的語音輸入轉(zhuǎn)換成文本傳遞給文本處理模塊,并最終傳遞給自然語言理解模塊。另外,文本處理模塊接收來自自然語言理解模塊的文本,并將文本展示給用戶查看。語音識別模塊主要是接收語音,并把語音轉(zhuǎn)化為文本,在本技術(shù)實(shí)現(xiàn)中采用百度的語音識別服務(wù)。自然語言理解模塊則接收文本,理解文本,并進(jìn)行語義表示,生成意圖和實(shí)體,在本技術(shù)實(shí)現(xiàn)中采用Google的API.AI服務(wù)。
在語音識別模塊中,當(dāng)用戶輸入為語音時(shí),需要將語音轉(zhuǎn)換為文本,采用的技術(shù)為語音識別技術(shù)(Automatic Speech Recognition, ASR)。ASR是以語音為研究對象,通過語音信號處理和模式識別讓機(jī)器自動識別和理解人類口述的語言,本質(zhì)上是一種模式識別系統(tǒng),包括特征提取、模式匹配、參考模式庫等三個(gè)基本單元[9]。目前市場上有很多家的語音識別接口可用,國內(nèi)的百度、阿里巴巴、騰訊、華為和科大訊飛,國外的微軟和谷歌都提供了中文的語音識別接口,包括SDK和Web API。百度語音識別技術(shù)領(lǐng)先,近場中文普通話識別準(zhǔn)確率達(dá)98%,簡單快速且支持API及多種SDK接入。本文采用百度語音識別接口,完成語音向文本的轉(zhuǎn)換。
在自然語言理解模塊中,根據(jù)用戶的自然語言輸入來理解用戶的意圖,其目標(biāo)是將自然語言文本信息轉(zhuǎn)換為可被機(jī)器處理的語義表示。語義表示可以用“意圖+槽位”的方式來描述。意圖即這句話所表達(dá)的含義,槽位即表達(dá)這個(gè)意圖所需要的具體參數(shù)。自然語言理解(Natural Language Understanding, NLU)的挑戰(zhàn)主要包括三個(gè):首先,語音識別錯(cuò)誤率通常在10%—20%,這會影響語義理解的準(zhǔn)確性;其次,通過自然語言表達(dá)的語義存在不確定性,同一句話在不同語境下的語義可能完全不同;最后,在自然語言中往往存在不流暢性、錯(cuò)誤及重復(fù)等情況[10]。針對這些挑戰(zhàn),目前有一些公司將NLU作為一種云服務(wù)提供,方便其他產(chǎn)品快速地具備語義理解能力,比如Facebook的WIT.AI、Google的API.AI
和微軟的LUIS。使用者上傳數(shù)據(jù),平臺根據(jù)數(shù)據(jù)訓(xùn)練出模型并提供接口供使用者調(diào)用。
API.AI是一個(gè)為開發(fā)者提供服務(wù)的機(jī)器人搭建平臺,幫助開發(fā)者迅速開發(fā)一款bot并發(fā)布到各種message平臺上。使用API.AI可以將用戶輸入的自然語言翻譯成一種“程序能讀懂”的語言,并以JSON的格式返回結(jié)果。使用API.AI包括五個(gè)步驟:首先是自定義Entity,然后是自定義Intents和Action,接著上傳數(shù)據(jù),再使用API.AI的訓(xùn)練器進(jìn)行模型的訓(xùn)練并得到分類器,最后是整合和發(fā)布,可以用Web Service的方式提供服務(wù)。使用API.AI的好處是能夠快速地搭建出數(shù)據(jù)驅(qū)動的NLU模塊,本文采用API.AI提供的云服務(wù)完成自然語言理解的功能。
3.2? ?消息推送服務(wù)
消息推送服務(wù)的主要功能是監(jiān)控?cái)?shù)據(jù)庫中用戶特別關(guān)注的信息的變化,當(dāng)相應(yīng)的信息發(fā)生變化后,準(zhǔn)實(shí)時(shí)且主動地通知用戶。其結(jié)構(gòu)如圖3所示。
其中,業(yè)務(wù)數(shù)據(jù)庫為關(guān)系型數(shù)據(jù)庫,具體選擇為MySQL數(shù)據(jù)庫,用于存儲數(shù)據(jù)和信息;數(shù)據(jù)庫監(jiān)聽模塊監(jiān)控MySQL的Binlog日志,準(zhǔn)實(shí)時(shí)增量更新用戶關(guān)注的信息,并將更新的信息以消息的形式發(fā)送至消息推送模塊;當(dāng)消息推送模塊接收到要推送的消息任務(wù)后,將消息推送給相關(guān)用戶的文本處理模塊;文本處理模塊則將消息以文本的方式展示給用戶。其中,數(shù)據(jù)庫監(jiān)聽模塊采用阿里巴巴的Canal工具,消息推送模塊采用百度云推送。
在消息推送模塊中,消息推送是指通過后臺將用戶強(qiáng)烈關(guān)心的信息主動地發(fā)送給用戶,可通過短信、即時(shí)信息(Instant Message, 如微信、釘釘?shù)龋⒎羌磿r(shí)消息(比如手機(jī)App中新聞資訊類、活動推送類、產(chǎn)品推薦類、系統(tǒng)功能類的通知)等方式發(fā)送,其中短信的用戶查看率高,但價(jià)格昂貴,非即時(shí)消息成本次之,即時(shí)信息免費(fèi)。消息推送的實(shí)現(xiàn)有兩種主要方式,第一種方式是自己研發(fā),但由于研發(fā)成本較高,難度非常大,大多數(shù)App都會選擇使用第二種方式,即使用第三方工具進(jìn)行推送。本文采用百度云推送。百度云推送(Push)是百度云平臺向開發(fā)者提供的消息推送服務(wù),通過云端與客戶端之間建立穩(wěn)定、可靠的長連接來為開發(fā)者提供向用戶端實(shí)時(shí)推送消息的服務(wù)。
在數(shù)據(jù)庫監(jiān)聽模塊中,需要實(shí)時(shí)監(jiān)控業(yè)務(wù)數(shù)據(jù)庫的變化,當(dāng)數(shù)據(jù)庫中用戶最關(guān)心的數(shù)據(jù)發(fā)生變化時(shí),要將相應(yīng)的變化發(fā)送給特定的人。監(jiān)控業(yè)務(wù)數(shù)據(jù)庫變化的方法有多種,一種方法是在數(shù)據(jù)庫增加觸發(fā)器(Trigger)。觸發(fā)器是由事件來觸發(fā)某個(gè)操作,這些事件包括INSERT語句、UPDATE語句和DELETE語句,當(dāng)數(shù)據(jù)庫系統(tǒng)執(zhí)行這些事件時(shí),會激活觸發(fā)其執(zhí)行相應(yīng)的操作。這種方法操作簡單,但是會對原業(yè)務(wù)系統(tǒng)造成很大的影響,特別是性能壓力方面。第二種方法是通過第三方軟件平臺,比如阿里巴巴的開源框架Canal,監(jiān)控?cái)?shù)據(jù)庫的Binlog,進(jìn)而同步增量數(shù)據(jù)。這種方法對原業(yè)務(wù)系統(tǒng)的影響更小。Canal的工作原理是模擬MySQL Slave的交互協(xié)議向MySQL Mater發(fā)送Dump請求,MySQL Mater收到請求后,向Canal推送Binlog,然后Canal解析Binlog,再發(fā)送數(shù)據(jù)到存儲目的地,實(shí)現(xiàn)數(shù)據(jù)庫鏡像、數(shù)據(jù)庫實(shí)時(shí)備份、增量數(shù)據(jù)處理等。Canal的好處在于對業(yè)務(wù)代碼和數(shù)據(jù)庫沒有侵入,實(shí)時(shí)性也能做到準(zhǔn)實(shí)時(shí),因此是在很多企業(yè)中廣泛應(yīng)用的一種比較常見的數(shù)據(jù)同步方案。
本文采用Canal監(jiān)控用戶關(guān)心的增量數(shù)據(jù),并將數(shù)據(jù)發(fā)送到消息隊(duì)列,然后通過百度云推送,發(fā)送給用戶。
3.3? ?事實(shí)數(shù)據(jù)查詢服務(wù)
事實(shí)數(shù)據(jù)查詢服務(wù)的主要功能是根據(jù)意圖和實(shí)體,查詢數(shù)據(jù)庫中用戶關(guān)心的實(shí)際數(shù)據(jù)(業(yè)務(wù)數(shù)據(jù)、存儲的數(shù)據(jù)),并將查詢結(jié)果反饋出去,其結(jié)構(gòu)如圖4所示。
其中,SQL解析器根據(jù)意圖和實(shí)體,生成相應(yīng)的數(shù)據(jù)庫查詢語句(SQL):意圖是指要查詢的表;實(shí)體(槽)是參數(shù),包括主鍵和需查詢的列名。以個(gè)體為中心的數(shù)據(jù)集市是一種數(shù)據(jù)倉庫,內(nèi)容是根據(jù)用戶的所有業(yè)務(wù)活動,使用ETL(Extract-Transform-Load)工具重新組織的業(yè)務(wù)數(shù)據(jù)。業(yè)務(wù)數(shù)據(jù)庫為關(guān)系型數(shù)據(jù)庫,具體選擇為MySQL數(shù)據(jù)庫。
在構(gòu)建以個(gè)體為中心的數(shù)據(jù)集市方面,由于業(yè)務(wù)數(shù)據(jù)庫邏輯復(fù)雜,且運(yùn)行穩(wěn)定,通過SQL解析器生成的SQL直接訪問業(yè)務(wù)數(shù)據(jù)庫,一方面會對原始業(yè)務(wù)造成很大的影響,另外一方面也會增加上游自然語言理解模塊的訓(xùn)練復(fù)雜度,因此需要將原始的業(yè)務(wù)數(shù)據(jù)庫通過ETL轉(zhuǎn)化為以主數(shù)據(jù)為中心的新型數(shù)據(jù)倉庫。ETL將數(shù)據(jù)從來源端經(jīng)過抽取(Extract)、轉(zhuǎn)換(Transform)、加載(Load)到目的端。其中,Extract即數(shù)據(jù)抽取,就是把數(shù)據(jù)從數(shù)據(jù)源讀出來;Transform即數(shù)據(jù)轉(zhuǎn)換,就是把數(shù)據(jù)轉(zhuǎn)換為特定的格式;Load即數(shù)據(jù)加載,把處理后的數(shù)據(jù)加載到目標(biāo)處。
在構(gòu)建以個(gè)體為中心的數(shù)據(jù)集市中,主數(shù)據(jù)(Master Data)是指具有高業(yè)務(wù)價(jià)值的、可以在企業(yè)內(nèi)跨越各個(gè)業(yè)務(wù)部門被重復(fù)使用的數(shù)據(jù),是單一、準(zhǔn)確、權(quán)威的數(shù)據(jù)來源,比如教學(xué)系統(tǒng)中的學(xué)生、老師等。建立以主數(shù)據(jù)為中心的數(shù)據(jù)庫是指首先識別出主數(shù)據(jù),然后將所有的業(yè)務(wù)數(shù)據(jù)同主數(shù)據(jù)直接關(guān)聯(lián)。以學(xué)校管理系統(tǒng)中的學(xué)生為例,其數(shù)據(jù)庫ER圖如圖5所示。
學(xué)生是學(xué)校中各個(gè)部門都要使用的基礎(chǔ)數(shù)據(jù),必須要保證準(zhǔn)確唯一,通過學(xué)號可以確定唯一的學(xué)生。學(xué)生會涉及選課、住宿、考試、食堂消費(fèi)等活動,這些活動的數(shù)據(jù)即是業(yè)務(wù)數(shù)據(jù),所有這些業(yè)務(wù)數(shù)據(jù)都可以通過學(xué)號與學(xué)生關(guān)聯(lián)起來。這樣在對數(shù)據(jù)庫進(jìn)行查詢時(shí),只需要知道學(xué)號以及要查詢的具體內(nèi)容(選課、考試、住宿、食堂),即可由SQL解析器生成相應(yīng)的SQL,查詢得到相應(yīng)的結(jié)果。這樣的好處是可以將原始的業(yè)務(wù)數(shù)據(jù)同對話機(jī)器人的數(shù)據(jù)庫進(jìn)行隔離,提高了系統(tǒng)的穩(wěn)定性和安全性;另一方面,在自然語言理解方面,可以更明確地定義意圖和相關(guān)的語義,在不需要了解底層數(shù)據(jù)庫結(jié)構(gòu)的情況下得到相應(yīng)信息。
3.4? ?分析數(shù)據(jù)查詢服務(wù)
分析數(shù)據(jù)查詢服務(wù)的主要功能是根據(jù)意圖和實(shí)體,查詢數(shù)據(jù)庫中用戶關(guān)心的分析型結(jié)果,并將查詢結(jié)果反饋出去。其結(jié)構(gòu)如圖6所示。
其中,SQL解析器和業(yè)務(wù)數(shù)據(jù)庫內(nèi)容與事實(shí)數(shù)據(jù)查詢服務(wù)中的內(nèi)容相同;分析型多維數(shù)據(jù)倉庫是將業(yè)務(wù)數(shù)據(jù)庫中的數(shù)據(jù)經(jīng)過ETL過程整理得到的多維數(shù)據(jù)倉庫模型。本文選用Apache Kylin對多維數(shù)據(jù)倉庫中的統(tǒng)計(jì)結(jié)果進(jìn)行提前計(jì)算,以備查詢需要。
在構(gòu)建分析型多維數(shù)據(jù)倉庫方面,用戶對數(shù)據(jù)庫的查詢并不都是對某一條記錄的查詢,有時(shí)查詢的內(nèi)容是統(tǒng)計(jì)結(jié)果,比如某門課的學(xué)生人數(shù)是多少,食堂里每人的平均消費(fèi)是多少等,本文稱這類查詢?yōu)榉治鲂筒樵儭M恚跀?shù)據(jù)安全性、業(yè)務(wù)數(shù)據(jù)庫的壓力以及查詢的效率考慮,需要通過ETL將業(yè)務(wù)數(shù)據(jù)庫中相對分散和孤立的數(shù)據(jù)轉(zhuǎn)換到分析型多維數(shù)據(jù)倉庫中。
本文的多維數(shù)據(jù)倉庫具體采用星型模式。星型模式的核心是一個(gè)大的中心表(事實(shí)表)和一組小的附屬表(維表)。其中,事實(shí)表用來記錄具體事件,包含每個(gè)事件的具體要素和具體發(fā)生的事情,主要包含維和度量兩方面的信息。維的具體描述信息記錄在維表,事實(shí)表中的維屬性只是一個(gè)關(guān)聯(lián)到維表的鍵,并不記錄具體信息。度量記錄事件的相應(yīng)數(shù)值,比如商品銷售中產(chǎn)品的銷售數(shù)量、銷售金額等。某零售行業(yè)的數(shù)據(jù)倉庫星型模式示例如圖7所示。
其中銷售為事實(shí)表,時(shí)間、物品、品牌和商店為維度表,這樣對于銷售事實(shí)表來說,時(shí)間、物品、品牌和商店是維,銷售金額和銷售個(gè)數(shù)是度量值。
采用星型模式這種多維數(shù)據(jù)倉庫模型的優(yōu)點(diǎn)是其面向分析優(yōu)化的數(shù)據(jù)組織和存儲模式。由于在實(shí)時(shí)查詢統(tǒng)計(jì)信息時(shí),直接計(jì)算速度比較慢,本文選擇Apache Kylin對多維數(shù)據(jù)倉庫進(jìn)行管理和計(jì)算。Apache Kylin是一個(gè)開源的、分布式的分析型數(shù)據(jù)倉庫,提供Hadoop/Spark之上的SQL查詢接口及多維分析(OLAP)能力以支持超大規(guī)模數(shù)據(jù),它能在亞秒內(nèi)查詢巨大的表。
4? ?結(jié)論(Conclusion)
本文提出了一種數(shù)據(jù)庫驅(qū)動的對話機(jī)器人的技術(shù)實(shí)現(xiàn)方案,可以實(shí)現(xiàn)用戶通過語音或自然語言文本同對話機(jī)器人溝通,查詢數(shù)據(jù)庫中的事實(shí)記錄和統(tǒng)計(jì)結(jié)果,并在用戶關(guān)注的信息發(fā)生改變時(shí)主動通知用戶的功能。該技術(shù)方案的主要思想是立足于“以用戶為中心”的服務(wù)理念,借鑒語音識別、自然語言處理、消息推送、數(shù)據(jù)庫設(shè)計(jì)和優(yōu)化方面的先進(jìn)技術(shù)和方案,整合成一個(gè)對用戶更友好的平臺,幫助用戶便捷地獲得高價(jià)值的信息。針對語音識別、自然語言理解、消息推送和數(shù)據(jù)庫優(yōu)化方面的技術(shù)難點(diǎn),本技術(shù)方案分別采用了百度語音識別、Google API.AI、百度云推送、阿里巴巴Canal、Apache Kylin等成熟的云服務(wù)、技術(shù)和平臺,在滿足功能的同時(shí),也能夠?qū)崿F(xiàn)可靠性、可用性、魯棒性以及擴(kuò)展性方面的需求。
不過,現(xiàn)有的技術(shù)方案還只是把查詢結(jié)果或者推送的消息直接反饋給用戶,沒能實(shí)現(xiàn)以更自然的語音或者自然語言文本的方式告知用戶,這涉及自然語言生成相關(guān)的技術(shù)。另一方面,本文提出的是一種技術(shù)實(shí)現(xiàn)方案,還沒有針對一個(gè)行業(yè)具體落地。因此,下一步我們計(jì)劃針對高校的學(xué)生,實(shí)現(xiàn)數(shù)據(jù)庫驅(qū)動的對話機(jī)器人,以滿足其對學(xué)習(xí)、考試方面信息的查詢需求。
參考文獻(xiàn)(References)
[1] 侯佳騰,常薇,林冠峰.基于自然語言理解技術(shù)的智能客服機(jī)器人的設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)與軟件工程,2019(23): 238-240.
[2] Hafezi Manshadi, Mohammad. Dealing with quantifier scope ambiguity in natural language understanding[D]. Rochester: University of Rochester, 2014.
[3] 王浩暢,李斌.聊天機(jī)器人系統(tǒng)研究進(jìn)展[J].計(jì)算機(jī)應(yīng)用與軟件,2018,35(12):1-6;89.
[4] 夏艷輝,聶百勝,胡金鳳.中文開放域問答系統(tǒng)的問題分類研究[J].價(jià)值工程,2019,38(016):147-149.
[5] 曹鵬飛,李杰,楊君.云環(huán)境下實(shí)時(shí)消息推送服務(wù)構(gòu)建研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2020,30(03):204-208.
[6] 關(guān)慶余,李鴻彬,于波.MQTT協(xié)議在Android平臺上的研究與應(yīng)用[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2014,23(04):197-200;196.
[7] 連樂,付杰.無線監(jiān)測系統(tǒng)的數(shù)據(jù)處理方法研究[J].計(jì)算機(jī)科學(xué),2018,45(0z1):580-582.
[8] 申德榮,于戈,王習(xí)特,等.支持大數(shù)據(jù)管理的NoSQL系統(tǒng)研究綜述[J].軟件學(xué)報(bào),2013(08):96-113.
[9] 程建軍,胡立志.關(guān)于深度學(xué)習(xí)的語音識別應(yīng)用研究[J].科技經(jīng)濟(jì)導(dǎo)刊,2019,27(12):195.
[10] 侯沐瀾.面向自然語言理解的新槽值問題研究與應(yīng)用[D].北京:北京郵電大學(xué),2019.
作者簡介:
來關(guān)軍(1984-),男,碩士,中級研究員.研究領(lǐng)域:大數(shù)據(jù)分析,人工智能.
于? ?丹(1976-),女,博士,研究員.研究領(lǐng)域:數(shù)據(jù)分析與挖掘,人工智能.
閆曉宇(1995-),女,碩士,初級研究員.研究領(lǐng)域:自然語言處理,對話系統(tǒng).
肖? ?鵬(1993-),男,碩士,初級研究員.研究領(lǐng)域:計(jì)算機(jī)視覺,自然語言處理.