百分點認知智慧實驗室:基於NL2SQL的問答技術和實踐

百分点科技發表於2022-01-11
編者按:NL2SQL是語義解析和智慧問答領域的前沿問題,可以將人類的自然語言問句轉化為結構化查詢語句,是實現人類和資料庫無縫互動和提高資料庫分析效率的核心技術。
百分點認知智慧實驗室自成立以來,結合公司實際業務和專案需求,自主研發NL2SQL演算法,並在各個公開資料集上取得了良好的效果,同時還在業務專案中積累了寶貴的實際落地經驗,本文主要就NL2SQL技術路線的發展歷史和實驗室在工程實踐中的落地經驗進行分享。
本文作者:易顯維、寧星星、鎮詩奇、蘇海波
一、NL2SQL問題描述
以往通過SQL查詢業務資料或做資料分析時,一般要經歷以下幾個步驟:
  • 總結要查詢資料的需求;
  • 後端工程師編寫SQL並部署成服務和資料庫連線;
  • 前端工程師編寫該SQL查詢對應的介面;
  • 運維工程師上線服務;
  • 業務資料分析人員和使用者登入頁面執行查詢語句顯示資料。
例如,下圖中對一個表格進行查詢,針對該需求需要寫成一條SQL語句才能在資料庫中執行並得到答案。
百分點認知智慧實驗室:基於NL2SQL的問答技術和實踐
Spider資料集中自然語言問題和對應的SQL那麼,如何能夠減少資料分析和查詢時的工作量,最好是讓使用者只通過一個搜尋框,輸入查詢語句,通過自然語言處理技術將輸入轉化為SQL,直接執行並顯示答案,這就是NL2SQL要解決的問題,詳見下圖。
百分點認知智慧實驗室:基於NL2SQL的問答技術和實踐
從上圖可以看出,我們將以前研發SQL查詢新需求的工作效率極大地提高了,並且很多非IT人士也能通過自然語言互動介面便捷快速地和資料庫互動,業務流程速度大為提高。
二、 NL2SQL資料集
研究任何一個機器學習演算法問題都需要該領域的資料集,在此我們列舉了NL2SQL中經常使用到的幾個資料集。根據資料集中SQL涉及到的資料庫表的個數不同,分為單表和多表;根據所生成的SQL結構中是否含有巢狀查詢,將資料集分類為有巢狀和無巢狀。
1. 單表無巢狀資料集
ATIS&GeoQuery資料集:ATIS來源於機票訂閱系統,由使用者提問生成SQL語句,是一個單一領域且上下文相關的資料集。GeoQuery來源於美國的地理,包括880條的提問與SQL語句,是一個單一領域且上下文無關的資料集。
WikiSQL資料集:ATIS和GeoQuery這兩個資料集存在著資料規模小(SQL不足千句),標註簡單等問題。於是,2017年VictorZhong等研究人員基於維基百科,標註了80654的訓練資料,涵蓋了26521個資料庫,取名為WikiSQL。
這個大型資料集一經推出,便引起學術界的廣泛關注,因為它對模型的設計提出了新的挑戰,需要模型更好地建構Text和SQL之間的對映關係,更好地利用表格中的屬性,更加關注解碼的過程。在後續工作中產生了一系列優秀的模型,如Seq2SQL、SQLNet、TypeSQL等,我們將在主流工作一章進行詳細的介紹。專案連結:。
2. 多表巢狀資料集
Spider資料集:由於WikiSQL資料集也存在著問題,它的每個問題只涉及一個表格,而且僅支援比較簡單的SQL操作,這不是很符合日常生活中的場景。現實生活中存在著醫療、票務、學校、交通等各個領域的資料庫,而且每個資料庫又有數十甚至上百個表格,表格之間又有著複雜的主外來鍵聯絡。
於是,2018年耶魯大學的研究人員推出了Spider資料集,這也是目前最複雜的Text-to-SQL資料集。它有以下幾個特點:
(1)領域比較豐富,擁有來自138個領域的200多個資料庫,每個資料庫平均對應5.1個表格,並且訓練集、測試集中出現的資料庫不重合。
(2)SQL語句更為複雜,包含orderBy、union、except、groupBy、intersect、limit、having 關鍵字,以及巢狀查詢等。
研究人員根據SQL語句的複雜程度(關鍵字個數、巢狀程度)分為了4種難度,值得注意的是,WikiSQL在這個劃分下只有EASY難度。Spider相比WikiSQL,對模型的跨領域、生成複雜SQL的能力提出了新的要求,目前的最佳模型也只有60%左右的準確度。挑戰賽連結:。
中文CSpider資料集:西湖大學在EMNLP2019上提出了一箇中文Text-to-SQL的資料集CSpider,主要是選擇Spider作為源資料集進行了問題的翻譯,並利用SyntaxSQLNet作為基線系統進行了測試,同時探索了在中文上產生的一些額外的挑戰,包括中文問題對英文資料庫的對應問題(Question-to-DBmapping)、中文的分詞問題以及一些其他的語言現象。挑戰賽連結:。
3. 競賽資料集在國內,關於NL2SQL的比賽已舉辦過多次,其中規模較大的兩次分別為追一科技的“首屆中文NL2SQL挑戰賽”和百度的“2020語言與智慧技術競賽:語義解析任務”。
其中,追一比賽資料集為單表無巢狀NL2SQL資料集,資料形式較為簡單,每一條SQL只有求最大值、最小值、平均值、求和、計數和條件過濾語法現象,無聚合函式,所以排行榜得分較高,演算法實現較為容易。
百分點認知智慧實驗室:基於NL2SQL的問答技術和實踐
追一比賽官網截圖
百度資料集為多表含有巢狀SQL資料集,資料形式較為複雜,更貼近真實使用者和工業落地場景。
百分點認知智慧實驗室:基於NL2SQL的問答技術和實踐
百度比賽截圖
三、 主要技術路線
目前關於NL2SQL技術路線的發展主要包含以下幾種:
Seq2Seq方法,在深度學習的研究背景下,很多研究人員將Text-to-SQL看作一個類似神經機器翻譯的任務,主要採取Seq2Seq的模型框架。基線模型Seq2Seq在加入Attention、Copying等機制後,能夠在ATIS、GeoQuery資料集上達到84%的精確匹配,但是在WikiSQL資料集上只能達到23.3%的精確匹配,37.0%的執行正確率;在Spider資料集上則只能達到5~6%的精確匹配。
模板槽位填充方法,將SQL的生成過程分為多個子任務,每一個子任務負責預測一種語法現象中的列,該方法對於單表無巢狀效果好,並且生成的SQL可以保證語法正確,缺點是隻能建模固定的SQL語法模板,對於有巢狀的SQL情況,無法對所有巢狀現象進行靈活處理。
中間表達方法,該方法為當前主流方法,以IRNet為代表,將SQL生成分為兩步,第一步預測SQL語法骨幹結構,第二步對前面的預測結果做列和值的補充。在後續的文章中將圍繞此方法展開講述我們的實踐經驗。
結合圖網路的方法,此方法主要為解決多個表中有同名的列的時候,預測不準確的問題,以Global-GNN、RatSQL為代表,但是由於資料庫之間並沒有邊相連線,所以此方法提升不大且模型消耗算力較大。
強化學習方法,此方法以Seq2SQL為代表,每一步計算當前決策生成的SQL是否正確,本質上強化學習是基於互動產生的訓練資料集的有監督學習,此法效果和翻譯模型相似。
結合預訓練模型、語義匹配的方法,該方法以表格內容作為預訓練語料,結合語義匹配任務目標輸入資料庫Schema,從而選中需要的列,例如:BREIDGE、GRAPPA等。
1. X-SQL方法
本節主要介紹X-SQL的方法,此方法為當前模板填充法的代表,將單表的NL2SQL任務轉化為多個子任務,每一個子任務負責預測一個語法現象中存在的列和對列的操作,將NL2SQL任務轉化為一個在列上的分類任務。模型結構如圖所示:

百分點認知智慧實驗室:基於NL2SQL的問答技術和實踐
X-SQL網路結構
上圖中的模型分為編碼器、上下文強化層、輸出層。
編碼器來自改良的BERT--MT-DNN,其資料輸入形式為自然語言問題和各列的名稱,自然語言問題和列名之間用BERT中的特殊token [SEP]隔開,並且在每一列的開始位置使用不同的token表示不同的資料型別。編碼器還把[CLS] token換成了[CTX] token。
上下文增強層是將每個列的輸出向量合併到[CTX]位置的輸出向量中得到一個列向量。
輸出層有六個子任務分別是:W-NUM(條件個數),W-COL(條件對應列,column_index),W-OP(條件運算子,operator_index),W-VAL(條件目標值,condition),S-COL(查詢目標列,sel),S-AGG(查詢聚合操作,agg)。
由於在工程實踐中目標資料庫的列較多,SQL選中的列相對資料庫存在的列的比例較少,例如一個一百列的資料庫可能SQL選中其中一列,因此造成標記資料稀疏的問題,需要先進行列名的相關性排序或者人工在程式中進行重取樣來解決。
2. IRNet方法
IRNet設計了一種在自然語言和SQL之間的中間表達SemQL,採用兩步完成Text-to-SQL的過程:
第一步SchemaEncoding和Schema Linking:SchemaEncoding顧名思義就是對錶結構(表名、列名、列型別、主鍵、外來鍵等等)進行編碼,以便後續模型訓練使用。SchemaLinking則是要把Question中表述的內容與具體的表名和列名對齊。
第二步預測SemQL,然後用第一步預測的列來填充SemQL所表示的SQL語法結構。文中設計的中間表達SemQL結構如下:

百分點認知智慧實驗室:基於NL2SQL的問答技術和實踐
SemQL結構圖
SQL根據文中設定的規則可以拆解為如下圖的語法樹:
百分點認知智慧實驗室:基於NL2SQL的問答技術和實踐
IRNet中SemQL的語法樹Z是根節點,R表示一個SQL單句,上圖的”Select Filter“表示當前的SQL中包含有SELECT和WHERE兩個SQL關鍵詞。樹中的每一箇中間節點表示該SQL含有某一個SQL中的語法現象。其中的C、T分別代表該SQL查詢到的列和表。最終通過第一步Schema Encoding和Schema Linking中的結果將該樹補全則成為一條完整的SQL語句。
3. BRIDGE方法
考慮到問題和Schema之間的表達是有關聯和差距的,BRIDGE方法設計了一種橋接手段,通過問題和Schema中的值模糊匹配,豐富模型的輸入。具體地,將命中的值拼接到所屬列名的後面,用來表示該列名與問題之間較可能存在關聯,相當於從值的層面告訴模型該問題應該重點關注哪幾個列。最後,輸入經過BERT+Bi-LSTM得到列的語義表示。
BRIDGE模型架構如下圖所示:
百分點認知智慧實驗室:基於NL2SQL的問答技術和實踐
四、 演算法大賽實踐分享
以國家電網調控人工智慧創新大賽為例
1. 比賽賽題及背景
電網調控系統經多年執行彙集了海量的電網執行資料,儲存於資料庫或檔案系統中,呈現出規模大、種類多、範圍廣等特點,對於這類資料的獲取和分析通常需要通過機器程式語言與資料庫(或檔案系統)進行互動操作,給資料分析帶來了較高的門檻。資料探勘深度不夠、資料增值變現能力弱等問題也逐漸顯現。亟需通過人工智慧技術手段,實現人機互動方式變革,提高資料分析挖掘效率,啟用資料價值,促進資料價值變現。
針對電網調控系統資料以結構化、半結構化形式儲存特點以及海量資料分析繁瑣低效的問題,要求參賽者利用語義解析技術訓練AI智慧體,理解調控系統常見問題,解析資料庫的表、屬性、外來鍵等複雜關係,最終生成SQL語句並在資料庫中執行獲得問題答案,為使用者提供自動、高效、精準的資訊檢索服務。
2. 賽題理解和分析
本賽題屬於語義解析領域,即將自然語言轉換為邏輯形式的任務,它被認為是從自然語言到語義表徵的對映,它可以在各種環境中執行,以便通過將自然語言解析成資料庫查詢,或在會話代理(如Siri和Alexa)中進行查詢解析來實現,諸如機器人導航、資料探索分析等任務。語義解析技術發展至今,已經有諸多相關的解決方案和學術研究,例如,基於模板填充的解析技術、基於Seq2Seq的語義解析技術、基於強化學習的語義解析技術等等。
本次《電網執行資訊智慧檢索》賽題要求是“給定自然語言表述的電網調控問題及其對應的資料庫,要求參評的語義解析系統自動生成SQL查詢語句。”分析資料集得知,比賽資料集來自電網調控領域真實語料,包含46張表以及對應的1720條調控場景問題-SQL語句對,涉及公共資料、電力一次裝置、自動化裝置等多個資料物件;收集調控領域常用查詢問題並轉寫為SQL語句,包含了同一類問題的不同問法等多種情況。
3. 技術路線
由於本賽題涉及資料資源屬於單一資料庫型別,資料並不存在跨領域問題,SQL表達具有較好的一致性,因此適用於基於Seq2Seq的翻譯模型來完成任務。
根據資料集“單一資料庫”、“較多連表查詢”、“表列數目較大”等特點,我們設計了基於Transformer的融合表列值資訊的Seq2Seq語義解析模型,我們以Transformer作為基礎特徵提取單元,構建一個融合表、列、值多元資訊的Encoder-Decoder架構來完成端到端的NL2SQL任務。
演算法流程圖如下:
百分點認知智慧實驗室:基於NL2SQL的問答技術和實踐
演算法流程描述:
如圖所示,首先由於資料量的限制,我們需要對資料進行合理的增廣,通過對原始自然問句進行分詞,通過列名替換、停用詞替換和句式替換等方法得到新的問句-SQL查詢對。同時,採用AEDA的噪音增強技術,參雜一定比例的噪音樣本增強模型魯棒性。由於SQL語句對大小寫不敏感,所以我們統一將SQL語句轉化為小寫字元。
比較關鍵的一步是,如何將Schema資訊與自然語言問句進行互動,我們採用基於模糊匹配的方法,根據不同的自然語言問句動態生成相應的Schema資訊與原自然語言問句進行拼接。
對於擴充後的資料集,我們採用基於Transformer架構的生成式預訓練Text2Text模型,進行端到端的Finetune。在測試時,同樣地,我們對測試樣本動態生成Schema拼接資訊,完成端到端推理預測,得到SQL語句。
演算法的關鍵環節如下:
  • 自然語言問句AEDA資料增強;
  • 輸入文字與輸出文字保持大小寫統一;
  • 對每一個自然語言問句使用動態Schema資訊生成技術,進行額外的資訊拼接;
  • 對於絕大部分SQL語句進行Greedy Decoding,部分較長SQL查詢採用Top-p  Sampling或BeamSearch Decoding。
接下來,我們對本次比賽中有較多貢獻的AEDA資料增強技術和動態Schema資訊生成技術進行詳細闡述。
本次資料集的規模相較於真實使用者場景的資料規模而言是非常小的。資料增強技術的使用不可避免。怎樣去使用資料增強技術,使用哪一種資料增強技術,對於模型的影響都是舉足輕重的。
2019年的EDA(Easy Data Augmentation Techniques forBoosting Performance on Text Classification Tasks)論文發表於ICLR2019,提出了四種簡單的資料增強操作,包括:同義詞替換(通過同義詞表將句子中的詞語進行同義詞替換)、隨機交換(隨機交換句子的兩個詞語,改變語序)、隨機插入(在原始句子中隨機插入,句子中某一個詞的同義詞)和隨機刪除(隨機刪除句子中的詞語)。
本次比賽中應用的AEDA(An Easier Data Augmentation),是一種簡單的用於生成噪音文字的資料增強技術。最開始被用於提升文字分類的魯棒性,主要是在原始文字中隨機插入一些標點符號,屬於增加噪聲的一種,主要與EDA論文對標,突出“簡單”二字。
傳統EDA方法,無論是同義詞替換,還是隨機替換、隨機插入、隨機刪除,都改變了原始文字的序列資訊,而AEDA方法,只是插入標點符號,對於原始資料的序列資訊修改不明顯。而在NL2SQL的EDA過程中,我們顯然是不希望原始問句語義被篡改,因此,在資料量較小的場景下,AEDA的增強技術能夠較好地完成增強NL2SQL語義解析模型的魯棒性提升任務。
接下來將介紹本次比賽的另一個關鍵點——動態Schema資訊生成技術。對於NL2SQL任務,如何將輸入的自然語言問句與資料庫中的儲存資訊進行連線,十分關鍵,我們稱之為Schema Linking環節。
對於百分點科技此次比賽使用的End2End翻譯模型而言,傳統的Schema Linking技術並不適用。因而我們採用了一種基於字串匹配的動態Schemainformation生成技術,對模型的輸入進行動態增強,從而達到翻譯過程中的Schema Linking目的。
首先,為了將自然語言問句與資料庫的Schema進行關聯,需要將資料庫中的表名和列名進行規範化(例如對不合理命名、歧義命名、英文命名等,根據業務進行重新梳理規整)。然後,對於所有的規範化後的表名和列名,我們通過模糊匹配的方式對其與自然語言問句進行相似度評分,並依據評分從大到小進行表列名的字串拼接,形式如下:
“{Table name1:Column1| Column2 | ...} | {...}...”
這裡我們將不同表的資訊用“{}”進行聚合,然後通過“|”分隔,同一張表內的不同列之間通過“|”分隔,無論是表間資訊的排序還是表內資訊的排序,都是依據字串模糊匹配得分來進行。
在對每一個自然語言問句模型輸入前,均進行這樣的動態Schema 資訊生成,然後拼接到原始自然語言問句中,作為模型新的輸入。這裡由於拼接資訊可能會超過512字元(傳統BERT模型的限制),於是我們採用基於更長距離建模特徵的Transformer-XL來替代原始Transformer模組,來完成長序列的建模。
同樣的,我們的動態Schema生成技術,亦可用於DB Content的資訊拼接,思路大同小異。總結一下,演算法的創新點如下:
  • End-to-End方式解決NL2SQL任務,執行效率高,無子模型pipeline誤差傳遞;
  • AEDA資料增強技術,簡單直接的文字增強技術,可以生成帶噪音的自然語言問句樣本;
  • 動態融合Schema資訊和DBContent資訊,構建簡單合理的Schema Linking機制,使得自然語言問句與資料庫中的目標表和列聯絡更加緊密。
5. 比賽成績
在該比賽中,百分點科技參賽團隊名稱是“語義解析”隊,我們的方案在初賽中的精準匹配率是0.8228,獲得了第三名成績;在決賽中的精準匹配率是0.6554,獲得了第五名的成績。
五、 工程實踐經驗
本節以某地方空天院的NL2SQL專案簡單介紹我們工程實施中的方案,經過上文中介紹的技術路線,我們對比了兩種主流技術路線中的優劣勢:
  • 基於模板填充的方法:優勢在於計算資源依賴少、SQL生成效率高、可控性強、SQL元件順序不敏感;劣勢在於複雜SQL生成乏力,子模型累積誤差;
  • 基於Seq2Seq的方法:優勢在於可生成任意形態SQL;劣勢在於資源依賴高、SQL生成效率低、可控性一般、SQL元件順序敏感。
其中可控性指的是模型產生的SQL語句是否符合SQL語法規範能夠正確執行,SQL順序敏感指的是在SQL的過濾條件中列的前後順序並不影響SQL的正確性。
和前面介紹的百度和國家電網NL2SQL競賽不同,工業應用對於可控性的要求比較高,同時涉及到的資料形式會更復雜,採用Seq2Seq模型生成的SQL語句無法保證其語法規範性,同時也無法針對具體的領域資料進行定向優化。而簡單的“模版填充法”雖然可以實現定向優化,但是無法解決複雜的巢狀表達形式。
為了能夠更好地揚長避短,結合兩種主流方案的優勢,我們提出了以下的演算法工程方案:
  • SQL結構預測:將自然語言問句和表結構到最終生成的SQL中出現的語法現象編碼(子查詢、分組等),通過bert-sequence建模;
  • 列識別模型:預測SQL中Select部分存在的列和列上執行的操作(聚合函式等);
  • 值識別模型:預測SQL中where部分中對應的判斷符號(大於、小於、等於)。
整體模型流程如下:
百分點認知智慧實驗室:基於NL2SQL的問答技術和實踐
在該專案中由於問題和需要生成SQL的資料庫表格長度較短,所以可以直接進行Schema Linking,並且不會由於選中列的標記資料稀疏導致訓練失效的問題,所以我們採用了上面的方案取得了不錯的效果。
六、 總結與展望
當前,自然語言處理技術的發展和預訓練模型的大規模應用,使語義解析中的NL2SQL技術在真實場景落地成為可能。但是在工業實踐中應用仍舊有不少問題尚待解決,主要表現在自然語言建模更多的是使用聯結主義的方法,如深度學習,而要生成的SQL語句為形式化語言,人工智慧技術尚且無法完全彌合符號主義和聯結主義兩種方法之間的鴻溝,這也是NL2SQL技術所面臨的最大挑戰。不過隨著認知智慧技術的發展,出現了越來越多的方法,相信終有一日NL2SQL等語義解析問題會被完美解決,實現人機互動的無縫銜接。
本文介紹了當前NL2SQL的主流技術路線,以及百分點認知智慧實驗室在競賽和專案中積累的實踐經驗。後續實驗室將繼續努力深耕NL2SQL問題,為客戶帶來更好的技術解決方案,創造更大的業務價值。
參考資料
[1] Lin X V ,  R  Socher, Xiong C . Bridging Textual and Tabular Data for Cross-Domain Text-to-SQLSemantic Parsing[C]// Findings of the Association for ComputationalLinguistics: EMNLP 2020. 2020.
[2] Yu T ,  Wu C S ,  Lin X V , et al. GraPPa: Grammar-AugmentedPre-Training for Table Semantic Parsing[J]. 2020.
[3] Seq2sql: Generating structured queries fromnatural languageusing reinforcement learning (Victor Zhong, Caiming Xiong,Richard Socher.CoRR2017)
[4] SQLNet: Generating Structured Queries FromNatural LanguageWithout Reinforcement Learning (Xiaojun Xu, Chang Liu, DawnSong. ICLR2018).
[5] Global Reasoning over Database Structures forText-to-SQLParsing (Ben Bogin, Matt Gardner, Jonathan Berant. EMNLP2019).
[6] RAT-SQL: Relation-Aware Schema Encoding andLinking forText-to-SQL Parsers (Bailin Wang, Richard Shin, Xiaodong Liu,Oleksandr Polozov,Matthew Richardson. Submitted to ACL2020).
[7] Towards Complex Text-to-SQL in Cross-DomainDatabase withIntermediate Representation (Jiaqi Guo, Zecheng Zhan, Yan Gao,Yan Xiao,Jian-Guang Lou, Ting Liu, and Dongmei Zhang. ACL2019).


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30407209/viewspace-2849324/,如需轉載,請註明出處,否則將追究法律責任。

相關文章