張立新 于海亮 張棟棟 張珊珊 鄭勇峰



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