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