姚俊華,湯代佳
(1.深圳市南山區(qū)政務(wù)服務(wù)數(shù)據(jù)管理局,廣東 深圳 518000;2.深圳市聯(lián)合信息技術(shù)有限公司,廣東 深圳 518000)
隨著“互聯(lián)網(wǎng)+”政務(wù)公開工作的不斷推進(jìn),各級(jí)政府網(wǎng)站的信息數(shù)量快速增加,對(duì)搜索結(jié)果的準(zhǔn)確度要求和搜索引擎的便利度要求進(jìn)一步提高。近年來,人工智能在機(jī)器視覺領(lǐng)域取得了突破進(jìn)展,人工智能與NLP(Natural Language Processing,自然語言處理)結(jié)合的NL2SQL將非專業(yè)用戶查詢數(shù)據(jù)庫的需求直接轉(zhuǎn)換為SQL查詢語句,無須人為構(gòu)造SQL語句再進(jìn)行查詢。
NL2SQL技術(shù)能有效降低數(shù)據(jù)檢索難度,在國內(nèi)外得到廣泛研究。對(duì)于英文NL2SQL,研究人員先后提出了將輸入語句轉(zhuǎn)為SQL的算法[1-2],增加查詢系統(tǒng)的維度和數(shù)量[3-4],基于語義規(guī)則和動(dòng)名詞列表實(shí)現(xiàn)語句和數(shù)據(jù)庫的映射[5-6];并開發(fā)Analyza系統(tǒng)[7]為缺少SQL基礎(chǔ)的用戶提供自行訪問數(shù)據(jù)的途徑和NL2SQL的相關(guān)系統(tǒng)和算法[8],以此提高自然語言處理和SQL查詢的轉(zhuǎn)換便利度。對(duì)于中文NL2SQL,則有構(gòu)建語義依存樹作為自然語言處理和SQL查詢的中介[9];基于狀態(tài)轉(zhuǎn)換圖的詞法分析和語法分析方法[10],將問題轉(zhuǎn)為SQL語句;構(gòu)建基于Nivre算法的語義依存樹生成模型[11],提出了一種歧義語言的解決方法;提出改進(jìn)單詞提取技術(shù)[12]簡(jiǎn)化自然語言與SQL代碼的轉(zhuǎn)換方法。
根據(jù)政務(wù)數(shù)據(jù)的應(yīng)用特點(diǎn),基于NL2SQL技術(shù)構(gòu)建了SQL Model(Structured Query Language Model,結(jié)構(gòu)化查詢語言模型),用于自動(dòng)生成SQL語句,并通過設(shè)計(jì)政務(wù)智能搜索引擎系統(tǒng),實(shí)現(xiàn)數(shù)據(jù)搜索并得到結(jié)果。為驗(yàn)證模型有效性,本文采用深圳市人口數(shù)據(jù)的多個(gè)維度信息進(jìn)行實(shí)驗(yàn)。
此部分主要介紹在單表查詢的場(chǎng)景下完成自然語言處理數(shù)據(jù)庫任務(wù)的SQL Model,它是一種以BERT(Bidirectional Encoder Representations from Transformer,雙向轉(zhuǎn)換的編碼器)模型和GRU(Gate Recurrent Unit,門控循環(huán)單元)模型為基礎(chǔ),融合SQL語法和增強(qiáng)列關(guān)系的神經(jīng)網(wǎng)絡(luò)模型。
2.1.1 融合SQL語法
目前,電子政務(wù)系統(tǒng)主要使用關(guān)系數(shù)據(jù)庫存儲(chǔ)數(shù)據(jù),需要采用SQL語句對(duì)關(guān)系數(shù)據(jù)庫進(jìn)行訪問和處理操作。根據(jù)SQL語法規(guī)則將SQL查詢語句分為查詢列、條件列、聚合符號(hào)、操作符、條件值,分別建立一個(gè)子模型完成預(yù)測(cè),在基于SQL語法規(guī)則建立模塊之間的關(guān)系依賴圖,如圖1所示。
圖1 SQL語法規(guī)則關(guān)系依賴圖Fig.1 SQL syntax rule dependency graph
圖1中,信息沿著箭頭的方向在子模型之間傳遞,子模型按照傳遞的順序執(zhí)行。這樣的設(shè)計(jì)既保證模型滿足語法約束,也符合SQL查詢語句編寫過程中的邏輯,模型在更新過程中會(huì)逐漸改進(jìn),使學(xué)習(xí)到的SQL查詢語句符合SQL語法規(guī)則。
2.1.2 列單元關(guān)系的增強(qiáng)
在實(shí)際場(chǎng)景中,用戶的表達(dá)同數(shù)據(jù)庫的列名及單元格相比并不總是一致的,這會(huì)導(dǎo)致列名和自然語言表述不一致的問題。列名能夠反映的信息是非常有限的,并且一個(gè)列名也會(huì)有不同的表述方式,這將會(huì)引起列信息不足的問題,即自然語言處理難以預(yù)測(cè)SQL語句需要操作的表列。
單元格信息是表列的具體表示,表列名是對(duì)該列所有單元格信息的概括。由于表列信息不足,因此經(jīng)常出現(xiàn)僅通過列名不能獲悉正確且具體的列信息,導(dǎo)致提取的數(shù)據(jù)錯(cuò)誤,無法滿足用戶需求。針對(duì)以上問題,采用的解決方案是將單元格信息加入表列信息中。已有一些學(xué)者將單元格信息加入表列中,比如將單元格向量和表列向量拼接為新的表列表示,其中單元格向量由以單元格的共現(xiàn)次數(shù)作為權(quán)重得到[6]。這種加入單元格信息的方式對(duì)模型的性能有一定的提升,但存在引入噪聲單元格的可能性。
通過注意力機(jī)制在表列信息中加入單元格信息,通過模型自動(dòng)學(xué)習(xí)得出信息增強(qiáng)的列,而不是簡(jiǎn)單的信息計(jì)算與拼接。由于BERT模型具有自我注意力機(jī)制的核心計(jì)算方式,故不需要額外搭建自我注意力機(jī)制模塊,從而降低了SQL Model的復(fù)雜度,提高了模型的優(yōu)化效率,加快了模型的優(yōu)化速度。
在SQL Model中實(shí)現(xiàn)了融合SQL語法和增強(qiáng)列單元關(guān)系,整個(gè)模型分為共享層和子任務(wù)層,模型的結(jié)構(gòu)如圖2所示。自然語言問題、表列信息和共現(xiàn)單元格信息先傳入共享層,由BERT和BI-GRU(Bi-directional Gated Recurrent Unit,雙向門控循環(huán)單元)學(xué)習(xí)到語義信息,并增強(qiáng)列單元格信息。共享層學(xué)習(xí)到的語義信息再傳輸?shù)阶尤蝿?wù)層,融合SQL語法,本模型將按照關(guān)系依賴圖依順序執(zhí)行子模型,組合所有子模型的預(yù)測(cè)結(jié)果即為最終的SQL查詢語句,SQL Model框架如圖2所示。
圖2 SQL Model框架Fig.2 SQL model framework
2.2.1 共享層
共享層主要是進(jìn)行信息融合和特征提取,由BERT和BIGRU構(gòu)成。首先將自然語言問題、表列和共現(xiàn)單元格輸入BERT完成信息融合和初步的特征提取,然后通過BI-GRU完成更深層次的特征提取工作。
對(duì)于給定的一個(gè)表格和自然語言問題,希望生成問題對(duì)應(yīng)的SQL查詢語句。使用BERT編碼器對(duì)輸入進(jìn)行編碼,對(duì)于輸入的每個(gè)單詞的字典索引,編碼器都能產(chǎn)生相對(duì)應(yīng)的輸出向量,BERT的自注意力機(jī)制可以將單元格信息融合到表列信息中,實(shí)現(xiàn)對(duì)表列的增強(qiáng)。
得到BERT模型的輸出之后,使用兩個(gè)BI-GRU分別完成自然語言問題和表列信息的提取,這兩個(gè)BI-GRU的工作方式不完全相同。如圖3所示,在自然語言問題上運(yùn)行BIGRU,能得到每個(gè)時(shí)間節(jié)點(diǎn)的輸出;對(duì)于表列,每一個(gè)列都運(yùn)行BI-GRU模型,并且只保留最后一個(gè)時(shí)刻的輸出。
圖3 BI-GRU完成深層次的特征提取Fig.3 Completion of deep feature extraction by BI-GRU
BERT和BI-GRU組合成為共享層,能夠進(jìn)行信息融合和特征提取,輸出自然語言問題及表列問題的特征向量,將這些特征向量輸入子任務(wù)層以完成SQL查詢語句的生成任務(wù)。
2.2.2 子任務(wù)層
SQL查詢語句的生成任務(wù)可以分成四個(gè)子模塊,分別為條件數(shù)子模型、條件列子模型、操作符子模型和查詢列子模型。每個(gè)模塊完成對(duì)應(yīng)的功能,將每個(gè)模塊的預(yù)測(cè)結(jié)果進(jìn)行合并得到最終的預(yù)測(cè)結(jié)果。
整體的預(yù)測(cè)流程如下:首先,對(duì)條件數(shù)進(jìn)行預(yù)測(cè),即預(yù)測(cè)WHERE(SQL中用于規(guī)定選擇標(biāo)準(zhǔn)的語法)子句的條件數(shù)量。其次,模型開始預(yù)測(cè)WHERE子句中每個(gè)條件的條件列、操作符及列值。最后,執(zhí)行SELECT(SQL中用于從數(shù)據(jù)庫中選擇數(shù)據(jù)的子句)子句部分,并引入條件列的信息。執(zhí)行完所有的模塊之后,將預(yù)測(cè)結(jié)果進(jìn)行組合得到最終的SQL查詢語句。
(1)條件數(shù)子模型
確定查詢語句的第一步是要預(yù)測(cè)WHERE語句的條件數(shù),本文采用的條件數(shù)個(gè)數(shù)為0—4,將本問題看作一個(gè)五分類的問題。本任務(wù)需要預(yù)測(cè)與自然語言問題相關(guān)聯(lián)的表列,所以需要將自然語言問題與表列信息進(jìn)行深度融合。
對(duì)條件數(shù)進(jìn)行預(yù)測(cè)具體包括以下步驟。
步驟5:將表列向量Tw-num作為GRU的初始化向量,并將自然語言問題HQ輸入GRU中,得到融合率表列信息的自然語言問題向量序列。
步驟6:在問題表示上應(yīng)用一個(gè)多層的感知器,得到SQL查詢語句中概率最大的條件數(shù)Kw-num,如式(2)所示。
其中,W1、W2、W3都是模型的訓(xùn)練參數(shù)。
(2)條件列子模型
該子模塊的任務(wù)是對(duì)條件列進(jìn)行預(yù)測(cè),是整個(gè)WHERE子句中最重要的部分。關(guān)鍵在于預(yù)測(cè)表列是如何學(xué)習(xí)出自然語言問題與該列的相關(guān)信息,具體步驟如下。
步驟1:計(jì)算自然語言問題中每個(gè)詞關(guān)于每個(gè)表列的注意力得分矩陣,如式(3)所示。
步驟2:在矩陣Vw-col上,應(yīng)用softmax 函數(shù),如式(4)所示。
步驟3:通過哈達(dá)馬計(jì)算進(jìn)行加權(quán),如式(5)所示。
步驟4:對(duì)Mw-col在第二維度進(jìn)行求和得到自然語言問題關(guān)于表列信息,如式(6)所示。
步驟5:將注意力信息表示和表列表示在最后一個(gè)維度進(jìn)行拼接,如式(7)所示。
步驟6:通過relu 函數(shù)和softmax 函數(shù)獲取條件列的最終預(yù)測(cè)pw-col,如式(8)所示。
公式中的W4、W5、W6、W7都是模型的訓(xùn)練參數(shù)。根據(jù)條件數(shù)的預(yù)測(cè)結(jié)果,選擇前K個(gè)概率最高的列作為條件列的最終預(yù)測(cè)結(jié)果。
(3)操作符子模型
該模塊是對(duì)條件列的操作符進(jìn)行預(yù)測(cè),本文的數(shù)據(jù)集的操作符只有(<,>,=),所以可以將該任務(wù)視為一個(gè)三分類問題。在自然語言問題和條件列已知的情況下,只需要計(jì)算它們之間的注意力信息。
對(duì)于注意力信息的計(jì)算,首先從共享層學(xué)習(xí)到的表列矩陣HT中提取得到條件列的向量表示,組成一個(gè)新的表列矩陣,其中每一行表示為一個(gè)條件列的特征,當(dāng)預(yù)測(cè)的條件列個(gè)數(shù)少于4時(shí),把不足4的行用數(shù)字零進(jìn)行填充;并通過式(6)對(duì)這個(gè)新的表列矩陣進(jìn)行列注意力機(jī)制計(jì)算,然后參照式(7)進(jìn)行向量拼接,最終計(jì)算得到操作符,如式(9)所示。
(4)查詢列子模型
該查詢列子模型的任務(wù)是對(duì)查詢列進(jìn)行預(yù)測(cè),查詢列與條件列的任務(wù)相似,兩者的區(qū)別在于條件列查詢的結(jié)果只有一列,而查詢列子模型查詢的結(jié)果可以是多列,即將本任務(wù)看作一個(gè)N分類問題,N代表當(dāng)前表格的列數(shù),該子模型的關(guān)鍵是通過學(xué)習(xí)得出自然語言問題,并按照每個(gè)表列信息進(jìn)行表示。
首先通過執(zhí)行式(3)—式(6)的列注意力機(jī)制得到注意力信息;其次將條件列的信息Ew-col引入這個(gè)查詢列子模型中,采用拼接的方式將條件列信息、表列信息和注意力信息在第二個(gè)維度進(jìn)行拼接,得到最后通過relu 函數(shù)和softmax 函數(shù)得到查詢列的最終預(yù)測(cè),如式(10)所示。
NL2SQL屬于語義分析的子領(lǐng)域,其本質(zhì)是將自然輸入語言問句轉(zhuǎn)換成計(jì)算機(jī)可讀懂、可執(zhí)行、符合計(jì)算機(jī)規(guī)則的語義表示,使計(jì)算機(jī)理解自然語言,并能夠準(zhǔn)確生成表達(dá)語句語義的可執(zhí)行程序式語言。NL2SQL具有廣闊的應(yīng)用場(chǎng)景,一方面可用于基于結(jié)構(gòu)化知識(shí)的智能交互(問答),通過提取用戶提問中的時(shí)點(diǎn)、地點(diǎn)、事件等多個(gè)維度的信息,完成檢索需求,解決復(fù)雜的多維度問題;另一方面可用于搜索引擎優(yōu)化,在搜索時(shí)區(qū)別對(duì)待常規(guī)文本和表格文本,提高搜索引擎的智能化程度。NL2SQL的應(yīng)用改善了用戶體驗(yàn),讓用戶使用感更好,能夠更方便快捷地獲得信息服務(wù)。此外,可以有效激活企業(yè)數(shù)據(jù)庫的知識(shí)價(jià)值,讓數(shù)據(jù)庫直接通過人工智能為用戶服務(wù),減少專業(yè)人員和中間流程引入的信息壁壘。
政務(wù)智能搜索引擎系統(tǒng),以SQL Model算法為基礎(chǔ),整體可以分為前端服務(wù)、后端平臺(tái)、解析引擎及執(zhí)行引擎四個(gè)模塊。其中,解析引擎是NL2SQL系統(tǒng)的核心功能部件,包括信息抽取、表格篩選、模型編輯及指令編輯四個(gè)子模塊,通過將用戶搜索需求輸入解析引擎,解析引擎根據(jù)用戶搜索需求生成對(duì)應(yīng)的SQL指令,如圖4所示。
圖4 智能搜索引擎系統(tǒng)流程圖Fig.4 Flow chart of intelligent search engine system
在搜索需求輸入模型之前,系統(tǒng)先對(duì)其中的關(guān)鍵信息進(jìn)行抽取,該信息可以用于表格的篩選。雖然理論上SQL Model可以編碼多張表格,但是為了提高系統(tǒng)的性能,通常會(huì)對(duì)所有的表格先進(jìn)行一次預(yù)篩選。預(yù)篩選的方式是用問句中抽取出的信息對(duì)所有表的表名及表頭進(jìn)行檢索,召回頭部的表格再送入模型中。系統(tǒng)完成對(duì)數(shù)據(jù)檢索后,將數(shù)據(jù)應(yīng)用形態(tài)進(jìn)行呈現(xiàn)。例如,當(dāng)有關(guān)部門無法通過自行操作相關(guān)頁面獲得數(shù)據(jù)時(shí),就可以通過智能搜索引擎直接輸入“南山區(qū)人口數(shù)據(jù)”,此時(shí)后臺(tái)能自動(dòng)得出數(shù)據(jù),輸出數(shù)據(jù)結(jié)果如圖5所示。
圖5 智能搜索引擎界面Fig.5 Interface of intelligent search engine
例如,有關(guān)部門如需在征兵季了解南山轄區(qū)內(nèi)適齡男性的數(shù)量,就可以在系統(tǒng)中輸入“南山區(qū)人口年齡分布情況”和“南山區(qū)人口街道分布情況”進(jìn)行搜索。對(duì)于搜索方式,通常做法是開發(fā)公司在后臺(tái)數(shù)據(jù)庫中用SQL語句進(jìn)行處理和統(tǒng)計(jì)得到相關(guān)的數(shù)據(jù)。而通過政務(wù)智能搜索引擎系統(tǒng),用戶不僅可以基于搜索數(shù)據(jù)結(jié)果獲取相關(guān)信息,還可以向下鉆取詳細(xì)數(shù)據(jù),通過表格、圖形等方式直觀地展示數(shù)據(jù)結(jié)果,如圖6所示。
圖6 政務(wù)智能搜索引擎系統(tǒng)搜索結(jié)果Fig.6 Search results of intelligent search engine system
基于NL2SQL技術(shù)搭建了政務(wù)智能搜索引擎系統(tǒng),業(yè)務(wù)部門可以直接在搜索界面上輸入自然語言查詢語句,NL2SQL會(huì)自動(dòng)在后臺(tái)將輸入的自然語言查詢語句轉(zhuǎn)化為SQL語句后直接執(zhí)行SQL語句,最后獲得數(shù)據(jù)并顯示數(shù)據(jù),如圖7所示。
圖7 NL2SQL總體流程圖Fig.7 NL2SQL overall flow chart
利用NL2SQL技術(shù)搭建政務(wù)智能搜索引擎,可以提高政務(wù)數(shù)據(jù)搜索效率,降低數(shù)據(jù)應(yīng)用的復(fù)雜度。本文結(jié)合數(shù)據(jù)治理技術(shù)理論和政務(wù)大數(shù)據(jù)搜索實(shí)際場(chǎng)景,提出政務(wù)智能搜索引擎技術(shù)框架,探索智能搜索應(yīng)用新模式,可為開發(fā)和構(gòu)建政務(wù)智能搜索引擎提供新的思路和具體的實(shí)現(xiàn)途徑。
在人工智能和大數(shù)據(jù)技術(shù)高速發(fā)展的背景下,深度學(xué)習(xí)技術(shù)與各個(gè)領(lǐng)域的融合逐漸加深,自然語言處理領(lǐng)域中,傳統(tǒng)的方法需要在后臺(tái)數(shù)據(jù)庫中用SQL語句進(jìn)行處理統(tǒng)計(jì),效率低,不能滿足用戶需求,而使用深度學(xué)習(xí)技術(shù)與自然語言處理領(lǐng)域相結(jié)合的方法可以快速且直觀地將數(shù)據(jù)呈現(xiàn)給用戶,并且數(shù)據(jù)的呈現(xiàn)方式多樣化,符合用戶的不同需求。本文通過構(gòu)建SQL Model,將自然語言問題轉(zhuǎn)化為查詢語句應(yīng)用于政務(wù)智能搜索引擎系統(tǒng)。
目前,NL2SQL還是一個(gè)比較新的技術(shù),尤其是將其應(yīng)用到電子政務(wù)領(lǐng)域,是一次創(chuàng)新性探索。通過將NL2SQL技術(shù)與實(shí)際業(yè)務(wù)需求相結(jié)合,能夠有效地提升相關(guān)部門的行政工作效率。本文在保證數(shù)據(jù)安全、數(shù)據(jù)權(quán)限可控的基礎(chǔ)上,圍繞NL2SQL技術(shù)應(yīng)用的關(guān)鍵難點(diǎn)和場(chǎng)景要求,開發(fā)了政務(wù)智能搜索引擎,采用用戶提出自然語言搜索需求,解析引擎將自然語言搜索需求轉(zhuǎn)換成SQL語言搜索需求的應(yīng)用方式,將用戶的自然語言輸入轉(zhuǎn)化為可用的SQL語句,然后自動(dòng)輸出用戶所需的數(shù)據(jù),在降低數(shù)據(jù)應(yīng)用復(fù)雜度的同時(shí),也實(shí)現(xiàn)了一切數(shù)據(jù)皆可查的目的,并且支持多維度復(fù)雜查詢,使得業(yè)務(wù)部門數(shù)據(jù)搜索應(yīng)用難度降低,極大地提高了政務(wù)數(shù)據(jù)搜索效率。