






摘 要:當前深度學習技術對數(shù)據(jù)庫自然語言查詢的實現(xiàn)起到了很大的推動作用,但是仍存在難以實現(xiàn)復雜查詢、準確率不高等問題。因此,提出了新型數(shù)據(jù)庫自然語言查詢實現(xiàn)方案,設計了一種基于謂詞的、類Prolog語言的中間語言,以自然語言—中間語言—SQL的方式實現(xiàn)了很高的準確率,解決了自然語言與SQL語句之間語義差距大的問題,可以投入到實際應用中。還提出了一種學習樣本自動生成的方法,降低了數(shù)據(jù)庫自然語言查詢技術的使用難度。
關鍵詞:數(shù)據(jù)庫自然語言查詢;NL2SQL;謂詞推理;學習樣本自動生成
中圖分類號:TP391.1;TP311 文獻標識碼:A 文章編號:2096-4706(2024)15-0051-05
A New Implementation Scheme for“Database Natural Language Query”
FU Tingxuan, CHEN Qiming, YANG Huaiyu
(Faculty of Information Engineering and Automation, Kunming University of Science and Technology, Kunming 650504, Unc+nQZzFYvhlqL+Hb+APA==China)
Abstract: The current Deep Learning technology has played a significant role in promoting the implementation of natural language query in databases, but there are still problems such as difficulty in implementing complex queries and low accuracy. Therefore, a new implementation scheme for natural language query in databases has been proposed, and an intermediate language based on predicate and language similar to Prolog has been designed to achieve high accuracy in a natural language—intermediate language—SQL manner, solving the problem of large semantic differences between natural language and SQL statements. It can be put into practical applications. A method for automatically generating learning samples has also been proposed, which reduces the difficulty of using natural language query techniques in databases.
Keywords: database natural language query; NL2SQL; predicate inference; automatic generation of learning sample
0 引 言
非專業(yè)人員在對數(shù)據(jù)庫中的信息進行統(tǒng)計分析時,結構化查詢語言(SQL)是一個必須要克服的障礙。隨著深度學習技術在自然語言處理領域中廣泛的應用,利用自然語言查詢生成SQL語句(NL2SQL)的研究也獲得了很大的進展,比較引人注目的是出現(xiàn)一系列基于BERT解決NL2SQL問題的模型結構,如SQLNet [1]、Type SQL [2]、SQLova [3]、X-SQL [4]、M-SQL [5]等。
但是仍存在如下一些問題:
1)對于單表的查詢準確率較高,文獻[6-7]對追一科技的NL2SQL數(shù)據(jù)集準確率達到90%以上。但是仍低于期望值,而且在實際應用中,僅僅是單表查詢遠遠不能滿足實際需求。
2)對于多表查詢準確率一般,文獻[6]對于多表查詢的DuSQL數(shù)據(jù)集準確率達到80%左右的,但是這個準確率達不到實用標準。
3)基于深度學習技術來實現(xiàn)NL2SQL,必然面對一個問題,就是學習樣本的建立面臨較大困難。深度學習需要大量的學習樣本數(shù)據(jù),當前理論研究所使用的數(shù)據(jù)集都是手工創(chuàng)建或半自動創(chuàng)建的[8],若將NL2SQL技術投入實際應用,如何簡單快捷的創(chuàng)建樣本數(shù)據(jù)是一個必須解決的問題。
4)在一些場景下,由于業(yè)務邏輯的復雜性,一些查詢要求很難用一個SQL查詢語句去描述,也很難用自然語言來表達查詢要求。
1 一種新的解決思路
在一些應用場景中,具有復雜的數(shù)據(jù)表關系和復雜的業(yè)務邏輯,這時候自然語言與查詢語句具有很大的語義差距,直接實現(xiàn)NL2SQL的難度很大[9]。為了在復雜應用場景中提供一種實用的數(shù)據(jù)庫自然語言查詢技術,本文采用了一種新的解決思路。
鑒于自然語言(NL)和SQL語句之間語義差距很大,引入一種過渡性的中間語言,實現(xiàn)一個NL—中間語言—SQL的流程。
本文受到GEO數(shù)據(jù)集[10]的啟發(fā),設計一個類Prolog語言的中間語言。此種基于謂詞的中間語言的作用,一是準確提取NL中的查詢語義(實現(xiàn)NL—中間語言);二是準確的實現(xiàn)數(shù)據(jù)庫查詢(實現(xiàn)中間語言—SQL)。
GEO數(shù)據(jù)集是一個美國地理的小型英文數(shù)據(jù)庫,其訓練語料包括一些自然語言及其相對應的查詢語句。其數(shù)據(jù)集中主要包括各州信息、人口密度、地區(qū)主要城市、山川河流等信息。
與GEO數(shù)據(jù)集類似,我們的中間語言也包括一系列謂詞,這些謂詞表達了各種數(shù)據(jù)庫查詢的要求和操作,每個謂詞可以轉化為一個或一些SQL來實現(xiàn)查詢,各個謂詞之間的邏輯推理則由一個推理引擎來實現(xiàn)。
下面建立一個簡單的應用場景,以此為背景討論我們的技術。
2 應用場景
假設有一個簡單的電商平臺,所需的信息保存在數(shù)據(jù)庫中,如圖表1、表2、表3所示。以下為結構和相關樣例數(shù)據(jù)介紹。
商品類別表中的“類別ID”字段的賦值規(guī)則可以表示父類和子類關系。例如“手機”的類別ID值“01”是“折疊手機”的ID值“0101”的前綴,說明“手機”是“折疊手機”的父類。利用這種方法可以靈活地將不同類商品分出不同層級,具有很好的通用性。
商品詳細參數(shù)表的設計方法,使得不同類的商品可以定義不同的參數(shù),極大地增加了系統(tǒng)的靈活性。
下面以此應用場景為例來詳細說明我們的方案。
3 自然語言查詢接口實現(xiàn)方案
3.1 中間語言的謂詞設計
針對此電商平臺的查詢需要,我們?yōu)橹虚g語言設計了謂詞。
3.1.1 變量類型定義謂詞
_answer(A,()):表示語句的查詢最終結果要保留在A變量中。
_goods(A):聲明變量A用來保存商品概要信息。
_info(A): 聲明變量A用來保存商品詳細信息。
3.1.2 信息提取謂詞
_getgoods(A,B):在商品概要信息表中,以A變量的值為“商品名”字段的查詢條件,查詢相關商品概要信息保存到變量B。
_getinfo(A,B):在商品詳細信息表中,以A變量的值為“商品名”字段的查詢條件,查詢相關商品詳細信息保存到變量B。
_belongto(A,B):在商品概要信息表中,以A變量的值為“公司”字段的查詢條件,找到相關的商品名保存在B變量中。
_property(A,B,C):從商品詳細信息表中,獲取屬性名為A、屬性值為B對應的商品名,保存在C變量中。
3.1.3 常量類型定義謂詞
_typename(A):在商品類別表和商品概要信息表中,以A常量的值為“類別名”字段的查詢條件,查詢相關的“商品名”。
_goodsname(A):聲明常量A是一個商品名。
_companyname(A):在商品概要信息表中,以A常量的值為“公司名”字段的查詢條件,查詢相關的“商品名”。
_price(A):聲明常量A是一個價格。
3.1.4 變量從常量賦值謂詞
_const(A,XXX)謂詞表示將常量XXX(或常量集合)賦值給變量A。
3.1.5 數(shù)值比較謂詞
_BT(B,A):查詢A變量中的數(shù)值大于B的對象,結果保存在A變量中。
_LT(B,A):查詢A變量中的數(shù)值小于B的對象,結果保存在A變量中。
3.2 自然語言轉中間語言的實現(xiàn)
我校的研究團隊在文獻[11]中給出了一種利用對偶學習完成數(shù)據(jù)庫查詢的方案。采用對偶學習不僅可有效解決NL2SQL領域中需要大量標注訓練集問題,還能增強模型質(zhì)量及數(shù)據(jù)利用效率,提高模型的準確度。這種方案對GEO數(shù)據(jù)集可以達到90%的正確率。我們設計的中間語言比GEO數(shù)據(jù)集還要簡潔,可以達到98%以上的正確率,完全可以滿足實際應用的需要。
3.3 從中間語言推理查詢結果
基于上述謂詞,可以表示常見的商品查詢要求。例如,對于“查詢折疊手機類商品的詳細信息”這個要求,轉換為下述的中間語言:
_answer(A,(_info(A),_getinfo(B,A),_const(B,_typename (折疊手機))))
對于此語句的推理過程如下:
1)執(zhí)行_typename(折疊手機)謂詞,查詢出“折疊手機”類商品有哪些。
2)執(zhí)行_const(B,_typename(折疊手機)),將上一部查詢結果保存到變量B中。
3)執(zhí)行_getinfo(B,A),以B變量保存的各個商品名作為查詢條件,查詢相關商品詳細信息保存到變量A。
4)_answer(A,()),把A變量的結果作為最終結果返回。
對于“查詢?nèi)A為公司的價格大于7 000的手機有哪些顏色是紅色的”這個要求,轉換為下述的中間語言:
_answer(A,(_goods(A),_getgoods(B,A),_const(B,_typename(手機),
_belongto(C,B),_const(C,_companyname(華為)),
_BT(D,B),_const(D,_price(7000)),_property(E,F(xiàn),B),
_const(E,_propertyname(顏色)),
_const(F,_propertyvalue(紅色)) ))
上述語句的推理過程比較復雜,可以用圖1來表示。
此語句的推理過程被表示成樹狀結構,推理是從樹的葉子開始,逐漸向上層運算。不同的謂詞實現(xiàn)了不同的數(shù)據(jù)表查詢和處理要求。
如果將這個查詢要求直接轉成一條SQL,那么會很復雜,因為這涉及三張數(shù)據(jù)表的多表連接。實際上這里有一個業(yè)務邏輯用一條SQL語句很難實現(xiàn),就是我要查詢的不是“手機”這個類別,而是這個類別下面所有的子類別。忽略這一點不計,其他的查詢邏輯也是很復雜的,直接使用深度學習方法,不會有理想的識別效果。
但是,將這個查詢要求轉為中間語言去表達,則會簡單很多。將“華為公司”轉換為“_belongto(C,B),_const(C,_companyname(華為))”,將“價格大于7 000”
轉換為“_BT(D,B),_const(D,_price(7000))”,將“顏色是紅色的”轉換為“_property(E,F(xiàn),B),_const(E,_propertyname(顏色)),_const(F, _propertyvalue(紅色))”,這樣的轉換對于當前的“機器翻譯”技術來說是容易實現(xiàn),可以達到理想的識別效果。而利用中間語言進行數(shù)據(jù)查詢則能夠保證100%的正確率??梢钥闯?,“NL—中間語言—SQL”這個流程,可以在比較復雜的查詢場景下,實現(xiàn)令人滿意的正確率。
3.4 學習樣本的自動生成
基于深度學習的數(shù)據(jù)庫自然語言查詢技術在實際應用中,有一個重要的障礙就是構建學習樣本。深度學習需要大量的學習樣本數(shù)據(jù),如果手工創(chuàng)建或半自動創(chuàng)建,會耗費很多人力,極大地阻礙這種技術的推廣和應用。我們必須要尋求自動生成學習樣本的方法。
自動生成學習樣本數(shù)據(jù)集最基本的方法就是基于模板和規(guī)則。例如設計如下模板:
查詢{companyname}公司的價格大于{price}的{class}類商品有哪些。
_answer(A ,(_goods(A), _getgoods(B,A), _const (B,_typename({class}), _belongto(C,A),_const(C,_companyname({companyname})),_BT(D,A),_const(D,_price({price})) ))
只要從數(shù)據(jù)表中獲取不同的{companyname}、{price}、{class}信息,分別填寫到問題模板和中間語言模板中,即可自動生成一條學習樣本。
這種方法雖然簡單易行,但是缺點是生成的自然語言明顯模板化,語句形式不夠豐富,這樣的樣本在學習之后泛化能力較差。
所以,本文在樣本集的自動生成過程中,引入“中間語言—NL”的方法?!爸虚g語言—NL”的處理與“NL—中間語言”的處理是一個反向的過程,其主要任務是輸入中間語言語句,輸出此中間語言語句對應的自然語言查詢的問句。圖2表示了“中間語言—NL”的處理過程。
在此過程中,先用預先設計好的模板結合數(shù)據(jù)表的信息,自動生成各種中間語言查詢語句,然后經(jīng)過中間語言—NL模型訓練生成自然語言。輸入一個中間語言查詢語句,經(jīng)過一個帶有注意力機制的雙向LSMT模型之后,可以獲取k種可能的自然語言結果(k為束搜索的大?。T偻ㄟ^預訓練中文字典的轉換,最后就形成自然語言查詢問句。這樣生成的自然語言查詢問句,具有句式靈活多樣的特點,避免了問句模板化的問題。有了“中間語言—NL”的幫助,很大程度上消除了部署到不同應用場景時面臨的一個障礙,有利于提高模型的通用性。
4 實驗結果
基于上述技術方案,我們完成了一個簡單的電商平臺,驗證了相關技術的正確性。下面展示兩個示例。
第一個示例是演示以主表的字段為查詢條件,查詢兩個從表的信息,如圖3所示。
第二個示例是演示三個表的字段都是查詢條件這種復雜的查詢場景,如圖4所示。
我們的深度學習框架是用TensorFlow 2.0.0+Keras 2.3.1實現(xiàn)的,樣本的批量大小為16,采用Adam作為優(yōu)化器,訓練過程中采用的學習率為1×10-5,采用Dropout正則化方法(比率為0.3)來預防過擬合。
我們?yōu)殡娚唐脚_供設計了42個樣本模板,在“中間語言—NL”模型的支持下,共生成了兩批學習樣本,第一批1 272個、第二批3 386個。我們對這兩批樣本分別進行了訓練,測試集和驗證集都按9:1進行分配。第一批的127個驗證樣本,有2個出錯,準確率達到了98.4%;第二批的338個驗證樣本,有5個出錯,準確率達到了98.5%,已經(jīng)可以滿足實際應用的需要。我們對出錯的7個樣本進行了分析,其中有6個是由于“中間語言—NL”模型生成的查詢問句不合理造成的。從此實驗可以看出,第一,通過進一步提高樣本數(shù)的方法難以獲得更高的準確率,第二,“中間語言—NL”模型的準確率成為系統(tǒng)進一步提高準確率的瓶頸。
5 結 論
本文提出的數(shù)據(jù)庫自然語言查詢實現(xiàn)方案具有如下優(yōu)點:
1)中間語言與NL的語義差距小,進行機器翻譯的難度小很多,正確率很高。
2)中間語言由多個謂詞組成,每個謂詞可以單獨對應到一個查詢,并通過簡單的推理計算最終的結果,實現(xiàn)難度低。
但是此方法也有如下缺點:
1)只能針對特定場合設計專用的中間語言謂詞,缺少通用性。
2)利用中間語言進行查詢的處理過程,實際上是將一個查詢要求分解成多個子查詢,最后通過推理計算出最終的結果,所以處理速度比單一SQL語句實現(xiàn)查詢要慢。
我們未來的研究方向:
1)將中間語言轉換為單一SQL語句,這樣可以極大地提高查詢速度,實現(xiàn)“NL—中間語言—SQL”這個完美的流程。
2)研究“通用化”的、能夠自動適應數(shù)據(jù)庫表結構和多表連接關系的謂詞,以便在更換應用場景時,可以減少謂詞定義的工作量、提高通用性。
參考文獻:
[1] XU X J,LIU C,SONG D. SQLNet: Generating Structured Queries From Natural Language Without Reinforcement Learning [J/OL].arXiv:1711.04436 [cs.CL].[2024-01-08].https://arxiv.org/abs/1711.04436.
[2] YU T,LI Z F,ZHANG Z L,et al. TypeSQL: Knowledge-Based Type-Aware Neural Text-to-SQL Generation [L/OL].arXiv:1804.09769 [cs.CL].[2024-01-09].https://arxiv.org/abs/1804.09769.
[3] HWANG W,YIM J,PARK S,et al. A Comprehensive Exploration on WikiSQL with Table-Aware Word Contextualization [J/OL].arXiv:1902.01069[cs.CL].[2024-01-09].https://arxiv.org/abs/1902.01069v2.
[4] HE P C,MAO Y,CHAKRABARTI K,et al. X-SQL: Reinforce Schema Representation with Context [J/OL].arXiv:1908.08113 [cs.CL].[2024-01-09].https://arxiv.org/abs/1908.08113.
[5] ZHANG X Y,YIN F J,MA G J,et al. M-SQL: Multi-task representation learning for single-table Text2SQL generation [J].IEEE Access,2020,8:43156-43167.
[6] 張嘯宇.基于有監(jiān)督深度學習的SQL解析關鍵技術研究 [D].長沙:國防科技大學,2020.
[7] 歐楊磊.基于BERT的中文NL2SQL任務的技術研究 [D].杭州:杭州電子科技大學,2021.
[8] WANG L J,ZHANG A,WU K,et al. DuSQL: A Large-Scale and Pragmatic Chinese Text-to-SQL Dataset [C]//Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing.EMNLP:Association for Computational Linguistics ,2020,6923-6935.
[9] 潘璇,徐思涵,蔡祥睿,等.基于深度學習的數(shù)據(jù)庫自然語言接口綜述 [J].計算機研究與發(fā)展,2021,58(9):1925-1950.
[10] Welcome to Getquery?。?A Learned Natural Language Interface to a US Geography Database [EB/OL].[2024-01-09].https://www.cs.utexas.edu/users/ml/geo.html.
[11] 趙志超,游進國,何培蕾,等.數(shù)據(jù)庫中文查詢對偶學習式生成SQL語句研究 [J].中文信息學報,2023,37(3):164-172.
作者簡介:富庭軒(2003—),男,滿族,遼寧遼陽人,本科在讀,研究方向:自然語言處理和時間序列預測。