張立新 于海亮 張棟棟 張珊珊 鄭勇峰
摘要:該文提出了將NL2SQL技術(shù)在應(yīng)用到企業(yè)業(yè)務(wù)應(yīng)用中,采用的軟件架構(gòu)、針對業(yè)務(wù)復(fù)雜度模型建模方法、基于知識圖譜技術(shù)的模型預(yù)訓(xùn)練和SQL生成時多表關(guān)聯(lián)生成模型。在軟件架構(gòu)方面,提出了基于虛機(jī)機(jī)器人引擎的總體架構(gòu),和基于Master/Dispatch/Worker線程模型的主題機(jī)器人的高并發(fā)處理模型;針對企業(yè)復(fù)雜的業(yè)務(wù)領(lǐng)域,采用業(yè)務(wù)主題模型對主題機(jī)器人處理的業(yè)務(wù)進(jìn)行建模和設(shè)置;通過知識圖譜技術(shù),實(shí)現(xiàn)了對NL2SQL需要處理的數(shù)據(jù)表的預(yù)訓(xùn)練,提出了基于子圖查詢技術(shù)的SQL生成模型。
關(guān)鍵詞:人工智能;NL2SQL;知識圖譜;語義識別
中圖分類號: TP182? ? ? ? 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2020)35-0083-04
開放科學(xué)(資源服務(wù))標(biāo)識碼(OSID):
Research and Application of Intelligent Question-Answer System Based on NL2SQL
ZHANG Li-xin1, YU Hai-liang1, ZHANG Dong-dong1,2, ZHANG Shan-shan1, ZHENG Yong-feng1
(1.State Grid Information Communication Co., Ltd & China-Power Information Technology Co., Ltd, Beijing 100192,China; 2. State Grid Information and Communication Industry Group, Beijing 100031,China)
Abstract: This paper proposes a method that apply NL2SQL technology to enterprise business applications. Key techniques used in this approach include using software architecture building the model for business complexity, model pre-training based on knowledge graph technology and generating a SQL model on associated multiple tables. In terms of software architecture, the overall architecture based on virtual machine robot engine and the high-concurrency processing based on Master/Dispatch/Worker thread model are proposed. According to the complex business domain, the business subject model is used to build and set up handled by the subject robot. Through knowledge graph technology, the pre-training of data table is realized, and the model of SQL generating based on subgraph Matching is proposed.
Key words: artificial intelligence (AI); NL2SQL; knowledge graph; semantic recognition
國家電網(wǎng)公司信息化建設(shè)歷經(jīng)SG-186、SG-ERP和SG-ERP2.0等三個階段的建設(shè),在輸電、變電、配電以及人資、財務(wù)、物資等領(lǐng)域積累了海量的結(jié)構(gòu)化數(shù)據(jù),隨著公司數(shù)據(jù)中臺建設(shè)的深入推廣,對各個業(yè)務(wù)領(lǐng)域數(shù)據(jù)的價值挖掘和應(yīng)用,逐漸成為電力物聯(lián)網(wǎng)建設(shè)的重要內(nèi)容。但是隨企業(yè)業(yè)務(wù)的深入推廣和發(fā)展,各級業(yè)務(wù)部門需要跨專業(yè)了解公司整體運(yùn)行情況以及其他部門的業(yè)務(wù)發(fā)展?fàn)顩r,存在著各層級業(yè)務(wù)人員在需要在不同業(yè)務(wù)系統(tǒng)中查找、匯總所需數(shù)據(jù)信息的要求,面臨數(shù)據(jù)查詢困難、數(shù)據(jù)匯總不符合要求、獲取數(shù)據(jù)遲緩等諸多問題。
隨著近幾年人工智能技術(shù)的迅猛發(fā)展,語音識別技術(shù)、語義識別技術(shù)日趨成熟,為NL2SQL(Natural Language to SQL)技術(shù)在信息系統(tǒng)中的應(yīng)用提供了前提條件。NL2SQL解決通過自然語言自由查詢數(shù)據(jù)庫的問題,解決了非該業(yè)務(wù)領(lǐng)域的用戶也可以按需查詢數(shù)據(jù)庫,降低了對業(yè)務(wù)人員的要求,降低人機(jī)交互的距離和門檻。
1 NL2SQL研究現(xiàn)狀
1.1 NL2SQL的歷史與現(xiàn)狀
早在20世紀(jì)中后期,已提出通過自然語言直接訪問數(shù)據(jù)庫中存儲數(shù)據(jù)的應(yīng)用(Natural Language Interfaces to Databases,NLIDB),通過對問句的句式語法分析,回答關(guān)于從阿波羅任務(wù)中帶回的月巖的地質(zhì)學(xué)分析問題。受限于當(dāng)時技術(shù)發(fā)展,系統(tǒng)語言的支持上限以及對于語言的理解上限不明確、語言上邏輯和含義的歧義、生僻字的出現(xiàn)等,都極大限制了該領(lǐng)域的發(fā)展。2016年,Ghosal等人提出了一個系統(tǒng),能夠很好地處理多表簡單查詢。2017年,Google開發(fā)了Analyza系統(tǒng),以自然語言為人機(jī)交互的接口的系統(tǒng),支持用戶用自然語言做數(shù)據(jù)探索與數(shù)據(jù)分析。2018年,Utama, Prasetya等人開發(fā)了DBPal工具,面向數(shù)據(jù)庫的端到端的自然語言接口 [1]。
3.2 NL2SQL 在企業(yè)級業(yè)務(wù)中的應(yīng)用
NL2SQL通過自然語言查詢業(yè)務(wù)數(shù)據(jù)庫中的數(shù)據(jù),查詢結(jié)果通過報表展示;在該場景的實(shí)現(xiàn)過程中,涉及中文語音識別技術(shù)、語義識別技術(shù)、SQL生成技術(shù),本文重點(diǎn)分析討論上述技術(shù)集成形成企業(yè)級應(yīng)用,需解決的問題如下:
1)單擊此處輸入文字。企業(yè)級軟件特性和系統(tǒng)工程化問題。目前語音識別、語義識別、語義合成、SQL語句構(gòu)造和智能報表生成技術(shù)僅僅是解決了各種領(lǐng)域中的關(guān)鍵問題,NL2SQL智能查詢系統(tǒng)需要將各類技術(shù)集成在一起,形成一個功能完備的系統(tǒng) [2],解決人工智能系統(tǒng)前期投入人工工作量的問題,降低系統(tǒng)使用門檻;
2)SQL腳本構(gòu)造支持多表關(guān)聯(lián)。在目前公開的數(shù)據(jù)集中,對多表關(guān)聯(lián)支持率不高,在企業(yè)級應(yīng)用中,多表關(guān)聯(lián)查詢是很普遍的需求,需解決SQL腳本構(gòu)造時支持多表關(guān)聯(lián)的需求;
3)業(yè)務(wù)的復(fù)雜化問題。在企業(yè)中,存在多類業(yè)務(wù),比如:物資、規(guī)劃、營銷、財務(wù)等,需要解決多業(yè)務(wù)的配置問題。
本文提出基于NL2SQL的企業(yè)級軟件應(yīng)用架構(gòu),解決NL2SQL智能查詢系統(tǒng)的企業(yè)級特性和等工程化問題;提出基于圖技術(shù)解決SQL腳本構(gòu)造支持多表關(guān)聯(lián)問題;提出基于主題的業(yè)務(wù)模型,解決復(fù)雜業(yè)務(wù)領(lǐng)域問題。
2 軟件架構(gòu)設(shè)計(jì)
2.1 目標(biāo)、需求和約束
技術(shù)框架和組件的堆砌和集成并不能形成一套完備的、可用的企業(yè)級信息化軟件系統(tǒng);需要一個完整可靠的系統(tǒng)架構(gòu)機(jī)制將技術(shù)框架和組件有機(jī)地組合起來形成一個可靠、健壯的軟件架構(gòu),作為企業(yè)級軟件的骨架,滿足系統(tǒng)的功能性、非功能性和工程化需求。對企業(yè)級軟件而言,滿足功能需求,只達(dá)到了系統(tǒng)的最低要求,在復(fù)雜的生產(chǎn)環(huán)境中,需要滿足其非功能性需求和工程化需求保證系統(tǒng)在生產(chǎn)中“可用”和“易用”。
對于NL2SQL技術(shù)而言,其包括的語音識別、語義識別、SQL腳本構(gòu)造、SQL腳本執(zhí)行和報表自動展示等技術(shù)已經(jīng)成熟,系統(tǒng)的目標(biāo)設(shè)計(jì)一套企業(yè)級NL2SQL智能查詢系統(tǒng)[3]。
企業(yè)級NL2SQL智能查詢系統(tǒng)核心功能需求為:自然語言問答和報表智能展示功能,支持企業(yè)的多個業(yè)務(wù)域。
2.2 總體功能結(jié)構(gòu)設(shè)計(jì)
NL2SQL智能查詢系統(tǒng)提供包括問答服務(wù)、語音識別引擎、語義識別引擎、SQL腳本構(gòu)造引擎、SQL腳本執(zhí)行引擎、答案合成(語義合成)引擎、答案報表展示等功能,以及答案反饋和評估、業(yè)務(wù)主題配置、模型自動化訓(xùn)練評估等運(yùn)營和配置功能[4]。如圖1。
用戶通過PC端以瀏覽器方式訪問,提出文本格式問題,比如“2019年北京市電力公司售電量是多少?”;或者通過移動端直接語音方式提問。
NL2SQL智能查詢系統(tǒng)接收到請求,提交給語義識別引擎進(jìn)行語義理解,預(yù)測用戶問題的所屬的業(yè)務(wù)主題,生成JSON格式的語法樹。
SQL腳本構(gòu)造引擎,解析語法樹,是否滿足語法要求,解析要點(diǎn)包括:Select節(jié)點(diǎn)、From節(jié)點(diǎn)、Where節(jié)點(diǎn)是否存在,不滿足要求,直接返回用戶,該問題答案不存在[5]。
系統(tǒng)核心架構(gòu)設(shè)計(jì)以虛擬機(jī)器人為核心元素,每個虛擬機(jī)器人獨(dú)立提供問答服務(wù),每個虛擬機(jī)器人對應(yīng)一個業(yè)務(wù)主題,由機(jī)器人實(shí)例管理引擎負(fù)責(zé)管理虛擬機(jī)器人,每個機(jī)器人實(shí)例引擎包含一個到多個機(jī)器人實(shí)例。機(jī)器人實(shí)例管理引擎架構(gòu)如圖2。
系統(tǒng)啟動后,機(jī)器人實(shí)例管理引擎,根據(jù)系統(tǒng)配置的機(jī)器人類型,啟動機(jī)器人實(shí)例;在系統(tǒng)配置中,為每一個主題配置一個機(jī)器人,機(jī)器實(shí)例的名稱為:“XX主題機(jī)器人實(shí)例”,用戶第一次交互問答時,機(jī)器人實(shí)例引擎的請求分發(fā)組件,分析用戶問答語義,為該用戶自動分配一個機(jī)器人實(shí)例,如果請求分發(fā)組件不能識別出主題,則列出相關(guān)的主題由用戶選擇,“會話記錄管理”組件管理所有的活動的會話記錄,記錄當(dāng)前用戶和機(jī)器人實(shí)例的映射和問答交互歷史;當(dāng)用戶第二次提交問題時,“請求分發(fā)組件”直接將用戶的交互信息提交給該主題的機(jī)器人實(shí)例。
在系統(tǒng)實(shí)現(xiàn)上,在Master/Slave線程模型進(jìn)行擴(kuò)展,提出Master/Dispatch/Worker的線程模型,Master線程職責(zé)保持不變?yōu)檎埱蠼邮站€程,接收到請求后分發(fā)給Dispatch線程,該線程基于線程池Dispathc Pool,負(fù)責(zé)識別請求中的主題,將請求按照主題分發(fā)給主題機(jī)器人線程,機(jī)器人線程。1)調(diào)用語義識別引擎進(jìn)行語義識別[6];2)生成SQL語法樹,構(gòu)造SQL;3)委托SQL執(zhí)行引擎查詢數(shù)據(jù);4)返回結(jié)果。
2.3 基于原生云的技術(shù)架構(gòu)
系統(tǒng)實(shí)現(xiàn)采用云架構(gòu),即系統(tǒng)由多個微服務(wù)構(gòu)成,每個微服務(wù)獨(dú)立的部署在docker容器中,保證了系統(tǒng)易發(fā)布、易部署,具有高可靠性和高峰階段的彈性伸縮提供高性能[7]。在NL2SQL智能查詢系統(tǒng)中,基于微服務(wù)架構(gòu),不同的功能采用了不同的技術(shù)棧,均封裝為獨(dú)立的微服務(wù),見表1。
3 業(yè)務(wù)主題模型設(shè)計(jì)
NL2SQL智能查詢系統(tǒng)在系統(tǒng)應(yīng)用中,涉及多個業(yè)務(wù)領(lǐng)域,比如:物資、規(guī)劃、營銷、財務(wù)等,按照業(yè)務(wù)分主題,業(yè)務(wù)域或者問題業(yè)務(wù)范圍為主題,比如:財務(wù)主題、銷售年度月報主題等;每個主題關(guān)聯(lián)主題詞庫、詞典庫、業(yè)務(wù)指標(biāo)配置信息、業(yè)務(wù)數(shù)據(jù)庫的數(shù)據(jù)源定義和智能報表模型。
主題詞詞庫:包括該主題域特定的主題詞,通過主題詞標(biāo)識一個業(yè)務(wù)主題,語義識別時主題來確定業(yè)務(wù)域;每個用戶、部門設(shè)置默認(rèn)主題。詞典包括:分詞詞典、近義詞詞典和特殊詞詞典;特殊詞詞典是指該領(lǐng)域有固有含義的詞。 業(yè)務(wù)指標(biāo)配置包括:指標(biāo)定義、維度定義、計(jì)算公司、數(shù)據(jù)表和表間關(guān)系。
4 NL2SQL引擎關(guān)鍵技術(shù)實(shí)現(xiàn)方法
NL2SQL智能查詢系統(tǒng)屬于人工智能類的業(yè)務(wù)應(yīng)用系統(tǒng)。本文采用基于知識圖譜技術(shù)提供對主題業(yè)務(wù)數(shù)據(jù)的自動化訓(xùn)練和對多表關(guān)聯(lián)的SQL腳本的生成。
4.1 基于業(yè)務(wù)數(shù)據(jù)庫表元數(shù)據(jù)的模型預(yù)訓(xùn)練
在NL2SL智能查詢系統(tǒng)運(yùn)行之前,需要針對具體的業(yè)務(wù)表進(jìn)行預(yù)訓(xùn)練,訓(xùn)練的目標(biāo)為語言模型能夠識別業(yè)務(wù)表中的表名和字段名[8]。在業(yè)務(wù)系統(tǒng)的建設(shè)中,對于表和字段的說明以注釋的形式存在數(shù)據(jù)庫中,本次的目標(biāo)就是1)識別表名、列名;2)通過對注釋分析建立實(shí)體和表名和列名的實(shí)體鏈接;3)識別表之間的關(guān)系;4)根據(jù)注釋生成NL2SQL訓(xùn)練集。
識別過程包括三個階段:第一階段,識別表名、列名,建立訓(xùn)練集;第二階段,通過外接識別實(shí)體(表)之間的關(guān)系,建立表關(guān)聯(lián)的訓(xùn)練集;第三階段,將識別出的實(shí)體、屬性導(dǎo)入圖數(shù)據(jù)庫,根據(jù)圖數(shù)據(jù)庫表、列的關(guān)系,生成NL2SQL的訓(xùn)練集。過程如圖3。
第一階段將結(jié)構(gòu)化數(shù)據(jù)庫表、表字段等注釋作為中文文本語料,通過專業(yè)詞典和近義詞等詞庫,對文本語料做中文分詞,提取并構(gòu)建特征向量,通過模型訓(xùn)練自動識別實(shí)體和實(shí)體關(guān)系,對于數(shù)據(jù)源涉及的具有相同標(biāo)識的實(shí)體進(jìn)行記錄,人工參與實(shí)現(xiàn)實(shí)體對齊和共指消歧,實(shí)現(xiàn)同一實(shí)體的融合;將識別出的實(shí)體和關(guān)系導(dǎo)入到專業(yè)詞典庫中。
在第二階段通過實(shí)體的主鍵和外鍵的自動識別與匹配,結(jié)合主外鍵的注釋,識別表之間的關(guān)系,將關(guān)系實(shí)體導(dǎo)入專業(yè)詞典,同時建立表關(guān)聯(lián)的訓(xùn)練樣本集合測試樣本集[9]。
4.2 基于知識圖譜的多表關(guān)聯(lián)SQL生成設(shè)計(jì)
在實(shí)際的業(yè)務(wù)場景中,存在多種多樣的數(shù)據(jù)指標(biāo)及維度相關(guān)的查詢,為滿足復(fù)雜的業(yè)務(wù)場景需求,采用基于知識圖譜的子圖匹配算法,對指標(biāo)定義、事實(shí)表以及指標(biāo)對應(yīng)的維度進(jìn)行靈活的子圖配置,通過SQL生成引擎,最終生成目標(biāo)查詢的SQL語句[10]。圖6是基于圖技術(shù)的多表關(guān)聯(lián)設(shè)計(jì)的查詢執(zhí)行過程。
多表關(guān)聯(lián)SQL的生成,基于子圖查詢技術(shù),首先對數(shù)據(jù)庫表進(jìn)行知識圖譜的建模[11],本體(節(jié)點(diǎn))要求包括:1)一個關(guān)系表對應(yīng)一個節(jié)點(diǎn);2)一個查詢目標(biāo)對應(yīng)一個節(jié)點(diǎn);3)一個查詢條件定義一個節(jié)點(diǎn);4)聚合函數(shù)對應(yīng)一個節(jié)點(diǎn);關(guān)系(邊)定義為:條件、目標(biāo)、包含關(guān)系等[12]。
5 系統(tǒng)運(yùn)行及驗(yàn)證
系統(tǒng)預(yù)訓(xùn)練階段,將目標(biāo)數(shù)據(jù)庫的表名、列名作為實(shí)體,實(shí)體分為:表實(shí)體、指標(biāo)實(shí)體和維度實(shí)體,生成知識圖譜[14],導(dǎo)入到數(shù)據(jù)庫中,見圖4。
其次,用戶提出問題,語義識別模型度問題進(jìn)行預(yù)測,預(yù)測槽位包括“Select $G1,$G2 From $T2 ,$T1 Where $C1=$V1 and $C2=$V2”,表實(shí)體為$T1、$T2,指標(biāo)實(shí)體為$G1,$G2,維度實(shí)體為$C1,$C2,$V1、$V2。在上圖中,售電量代表的是一個指標(biāo),它擁有自己的屬性,公司、年度代表的是維度實(shí)體,CW_SDL代表的是事實(shí)表實(shí)體[15]。
系統(tǒng)針對問題“2019年6月北京市售電量和利潤總額”給出的答案包括兩個部分:1)直接答案:將SQL模型查詢的數(shù)值結(jié)果與問句進(jìn)行封裝,給出問題的直接答案,即文本型答案:2019年6月,機(jī)構(gòu):北京,售電量:51,880.82萬千瓦時,利潤總額: 359.1億元 ;2)關(guān)聯(lián)答案:根據(jù)SQL查詢模型的條件表達(dá)式即維度實(shí)體進(jìn)行查詢,展示與用戶提問問題關(guān)聯(lián)維度的答案,即圖表答案。
問答系統(tǒng)一般以用戶為導(dǎo)向,從答案角度評價其性能,因此需要構(gòu)建問題+正確答案的測試集對系統(tǒng)進(jìn)行測試,將問答系統(tǒng)給出的結(jié)果與測試集中的標(biāo)準(zhǔn)答案進(jìn)行比對,從而判斷其答案的正確性。為了測試系統(tǒng)運(yùn)行的實(shí)際效果,準(zhǔn)備了兩個業(yè)務(wù)主題域的數(shù)據(jù)進(jìn)行測試集的構(gòu)建。分別為經(jīng)營主題數(shù)據(jù)和疫情主題數(shù)據(jù),經(jīng)營主題數(shù)據(jù)測試用例為400個,疫情主題數(shù)據(jù)測試用例為112個。使用共計(jì)512個用例對系統(tǒng)進(jìn)行交叉測試驗(yàn)證,測試樣例如表2所示。
實(shí)驗(yàn)采用實(shí)例召回率(IR)、實(shí)例準(zhǔn)確率(IP)和F-Measure(IF)對問答系統(tǒng)進(jìn)行評測,測試的結(jié)果為實(shí)例召回率91.21%,實(shí)例準(zhǔn)確率95.70%,F(xiàn)-Measure(IF)93.10%。測試錯誤的用例主要出現(xiàn)在類似“2019年北京平均電價”這種類型的問題,由于“平均”本身是個聚合函數(shù),而“平均電價”是經(jīng)營主題域中的一個指標(biāo)類型,問答系統(tǒng)在解析的過程中難以區(qū)分實(shí)際的業(yè)務(wù)場景,需要進(jìn)一步根據(jù)實(shí)際業(yè)務(wù)場景確定問答系統(tǒng)解析的規(guī)則,使該類問題進(jìn)行正確解析。
6 結(jié)論
基于NL2SQL技術(shù)的智能語音查詢系統(tǒng),總體技術(shù)路線采用原生云技術(shù),其核心智能問答引擎采用虛擬機(jī)器人架構(gòu),每個主題機(jī)器人實(shí)例采用Master/Dispatch/Worker的線程模型,滿足了系統(tǒng)并發(fā)性、可靠性的要求;通過基于知識圖譜技術(shù)的預(yù)訓(xùn)練模型,解決系統(tǒng)啟動前人工訓(xùn)練工作量的問題;通過基于圖技術(shù),解決了SQL生成時的多表關(guān)聯(lián)問題,并構(gòu)建測試集對系統(tǒng)實(shí)際運(yùn)行的效果進(jìn)行測試,實(shí)例準(zhǔn)確率可達(dá)95.70%,能夠達(dá)到實(shí)際業(yè)務(wù)場景應(yīng)用的需求。
參考文獻(xiàn):
[1] 宗成慶.統(tǒng)計(jì)自然語言處理[M].北京:清華大學(xué)出版社,2008: 122-129.
[2] Douglas Schmidt, Michael Stal, Hans Rohnert,等. 面向模式的軟件架構(gòu) 卷2[M].北京: 人民郵電出版社, 2014: 253-344.
[3] 劉譯璟,徐林杰,代其鋒.基于自然語言處理和深度學(xué)習(xí)的NL2SQL技術(shù)及其在BI增強(qiáng)分析中的應(yīng)用[J].中國信息化,2019(11):62-67.
[4] 孟明明,張坤,論兵,等.一種面向知識圖譜問答的語義查詢擴(kuò)展方法[J].計(jì)算機(jī)工程,2019,45(9):276-283,290.
[5] 吳謀碩. 問答式信息檢索查詢優(yōu)化技術(shù)研究[J]. 信息與電腦(理論版), 2014(11): 38.
[6] 關(guān)勝, 羅一鳴. 基于多級圖的自適應(yīng)智能客服算法框架研究[J]. 計(jì)算機(jī)產(chǎn)品與流通, 2020(8): 221.
[7] 佘維,楊曉宇,田釗,等. 基于用戶偏好的電力資源去中心化配置方法[D].哈爾濱: 哈爾濱工業(yè)大學(xué), 2014: 16-18.
[8] 楊夢琴.語義驅(qū)動的數(shù)據(jù)查詢與智能可視化研究[D].重慶:重慶大學(xué),2018:7-9.
[9] 李兆兆.基于語義理解的智能問答系統(tǒng)關(guān)鍵技術(shù)研究[D].西安:西安郵電大學(xué),2019:7-9.
[10] 黃魏龍.基于深度學(xué)習(xí)的醫(yī)藥知識圖譜問答系統(tǒng)構(gòu)建研究[D].武漢:華中科技大學(xué),2019:18-22.
[11] 張心潔,王建.基于語義分析的D5000遙信信息生成與校核方法[J].中國電力,2019,52(5):134-141.
[12] 王鳳林.受限域問答式自然語言數(shù)據(jù)庫查詢研究[D].昆明:昆明理工大學(xué),2010:11-14.
[13] 張濤,賈真,李天瑞,等.基于知識庫的開放領(lǐng)域問答系統(tǒng)[J].智能系統(tǒng)學(xué)報,2018,13(4):557-563.
[14] 王瑛, 何啟濤. 智能問答系統(tǒng)研究[J]. 電子技術(shù)與軟件工程, 2019(5): 174-175.
[15] 李舟軍,李水華.基于Web的問答系統(tǒng)綜述[J].計(jì)算機(jī)科學(xué),2017,44(6):1-7,42.
【通聯(lián)編輯:唐一東】