舒晴,劉喜平,譚釗,李希,萬常選,劉德喜,廖國瓊
(1.江西財經(jīng)大學(xué) 信息管理學(xué)院,江西 南昌 330013;2.江西農(nóng)業(yè)大學(xué) 軟件學(xué)院,江西 南昌 330013)
關(guān)系數(shù)據(jù)庫是當前存儲大量結(jié)構(gòu)化數(shù)據(jù)的主流方式,而查詢數(shù)據(jù)庫需要使用結(jié)構(gòu)化查詢語言(structured query language,SQL),這對不掌握計算機知識的普通用戶而言有一定的困難.Text-to-SQL 任務(wù)將自然語言問題(natural language query,NLQ)轉(zhuǎn)換為機器可以執(zhí)行的SQL 語句,向普通用戶提供了自然語言形式的查詢接口,極大地降低了數(shù)據(jù)查詢和分析的門檻,因而受到了學(xué)術(shù)界的廣泛關(guān)注.
Text-to-SQL 任務(wù)需要模型理解NLQ 中所涉及的表和列,理解數(shù)據(jù)庫模式中各個元素之間的關(guān)系.如何正確地將NLQ 與數(shù)據(jù)庫模式進行對齊是當前Text-to-SQL 問題的瓶頸[1].將NLQ 中描述的實體和關(guān)系映射到數(shù)據(jù)庫模式,這在Text-to-SQL 任務(wù)中被稱為模式鏈接(schema linking)[2].由于自然語言的表述具有多樣性,問題中對數(shù)據(jù)庫模式的表述不一定與實際的模式名稱一致,且數(shù)據(jù)庫中可能存在許多相似的模式名稱,這都給模式鏈接增加了難度.傳統(tǒng)的模式鏈接方法包括規(guī)則或字符串匹配,后續(xù)的一些模型在編碼階段使用注意力模塊,這些方法大多沒有考慮句子的語法結(jié)構(gòu),無法捕捉詞語間長距離的依賴關(guān)系,導(dǎo)致模型無法正確理解句子的含義,從而無法準確地識別句子中提及的數(shù)據(jù)庫模式.針對上述問題,本文提出兩階段框架.首先使用模式鏈接器,利用數(shù)據(jù)庫模式結(jié)構(gòu)和問題句子的依存句法關(guān)系,在生成SQL 之前對齊問題詞和數(shù)據(jù)庫模式,幫助后續(xù)模型過濾掉大部分不相關(guān)的模式項,降低訓(xùn)練和生成SQL 的難度.在第2 階段,將對齊信息注入到SQL 生成器中,將它們視為附加上下文,增強SQL 生成的結(jié)果.
本文的主要貢獻如下.
(1)提出兩階段的SQL 生成框架,其思想是解耦模式鏈接和SQL 生成,以降低SQL 生成的難度.該方法通過模式鏈接器識別問題中提及的數(shù)據(jù)庫表、列和值,利用對齊信息指導(dǎo)SQL 生成.
(2)提出基于依存關(guān)系圖注意力網(wǎng)絡(luò)的對齊方法,在問題依存句法分析的基礎(chǔ)上重塑和修剪依存關(guān)系,構(gòu)建關(guān)系圖注意力網(wǎng)絡(luò)(relational graph attention network,RGAT)[3].利用問題的語法結(jié)構(gòu)和模式項之間的內(nèi)部關(guān)系,指導(dǎo)模型學(xué)習(xí)問題與數(shù)據(jù)庫的對齊關(guān)系.
(3)研究對齊信息注入的SQL 生成方法,將對齊信息注入T5 模型,對T5 進行微調(diào),以改進SQL 生成結(jié)果.
(4)在公開數(shù)據(jù)集上進行大規(guī)模實驗.實驗結(jié)果顯示,本文提出的方法具有良好的性能.
Text-to-SQL 問題需要模型理解NLQ 在哪些數(shù)據(jù)庫模式上進行查詢操作,因此要考慮NLQ 和數(shù)據(jù)庫的模式鏈接,常用的技術(shù)包括注意力機制、圖神經(jīng)網(wǎng)絡(luò)、預(yù)訓(xùn)練模型等.SQLNet 使用列注意力,將列的信息融入NLQ 的單詞表示[4].TypeSQL 通過數(shù)據(jù)庫和知識庫識別NLQ 中的實體,將實體類型作為輸入特征進行編碼[5].Guo 等[2]提出模式鏈接的概念,利用字符串匹配和知識圖譜識別問題中的實體,在編碼時對問題跨度(span)標注匹配類型(column/table/value),對相應(yīng)數(shù)據(jù)庫列標注匹配類型(exact match/partial match).SLSQL 對Spider 數(shù)據(jù)集的模式鏈接進行標注,證明精確的模式鏈接可以提高SQL 生成的性能[6].Ryansql 在編碼時加入問題-列對齊層(questioncolumn alignment)和問題-表對齊層(question-table alignment),通過注意力機制,增強問題和模式項之間的特征交互[7].Bogin 等[8]通過GNN 建模數(shù)據(jù)庫模式的圖結(jié)構(gòu),提出GLOBAL-GNN[9],使用門控GCN 選擇與問題相關(guān)的列和表.問題和數(shù)據(jù)庫模式的聯(lián)合編碼有助于二者的對齊.Seq2SQL 將列名、NLQ 和SQL 關(guān)鍵字序列通過Bi-LSTM 編碼[10].Rat-SQL[11]在Transformer[12]的基礎(chǔ)上增加關(guān)系感知自注意力機制,利用完整的關(guān)系圖網(wǎng)絡(luò)來處理N L Q 和模式項間各種預(yù)設(shè)的關(guān)系.BRIDGE[13]為了識別問題中提及的數(shù)據(jù)庫值,對問題和數(shù)據(jù)庫值進行模糊匹配,匹配字段作為錨文本(anchor text)附加到相應(yīng)模式后輸入模型.LGESQL 通過線圖(line graph)考慮節(jié)點間的局部和非局部特征,通過圖修剪的輔助任務(wù)識別與問題相關(guān)的模式項,提高編碼器的判別能力[14].
Text-to-SQL 相關(guān)工作中對句法特征的使用較少,然而句法依存信息反映了問題的語法結(jié)構(gòu),有助于模型理解問題.SADGA 基于上下文結(jié)構(gòu)和句法依存樹構(gòu)建問題圖,基于數(shù)據(jù)庫特定關(guān)系構(gòu)建模式圖,利用圖神經(jīng)網(wǎng)絡(luò)分別對問題圖和模式圖進行編碼,設(shè)計結(jié)構(gòu)感知的聚合方法來學(xué)習(xí)問題圖和模式圖之間的映射關(guān)系[15].該方法直接使用原始句法依存信息,依存關(guān)系數(shù)目龐大,容易導(dǎo)致過擬合.S2SQL[16]在關(guān)系圖注意網(wǎng)絡(luò)中增加依存句法信息,RASAT[17]在繼承T5 模型的預(yù)訓(xùn)練參數(shù)的基礎(chǔ)上增加關(guān)系感知的自注意力,用于捕獲模式結(jié)構(gòu)、模式鏈接、問題依存結(jié)構(gòu)、問題共指和數(shù)據(jù)庫內(nèi)容提及這5 種關(guān)系.S2SQL 和RASAT 均未對不同的句法依賴關(guān)系進行區(qū)分,僅保留依賴關(guān)系的方向.本文根據(jù)Text-to-SQL 任務(wù)的特點,對原始句法依存樹進行修改,合并了部分依存關(guān)系標簽,對并列結(jié)構(gòu)的部分關(guān)系進行傳播,幫助模型更好地理解問題,改進模式鏈接的結(jié)果.
最近一些工作使用Text-to-Text 的預(yù)訓(xùn)練模型T5[18],取得了不錯的效果,與基于圖的方法不同,基于T5 的方法對編碼器和解碼器都采用基于Transformer 的架構(gòu),不需要預(yù)定義的圖、模式鏈接關(guān)系和基于語法的解碼器.Shaw 等[19]的研究表明,對T5 進行微調(diào)不僅可以學(xué)習(xí)Text-to-SQL任務(wù),還可以推廣到未見過的數(shù)據(jù)庫,且T5-3B 的結(jié)果可以與當時最先進的模型Ryansql[7]的結(jié)果相當.Scholak 等[20]提出的PICARD 模型通過增量解析約束語言模型的自回歸解碼器,在每個解碼步驟中拒絕錯誤的詞例(token),幫助模型找到有效的輸出序列,可以顯著提高大型預(yù)訓(xùn)練語言模型的性能.PICARD 的T5-Base 模型可以超越?jīng)]有PICARD 的T5-Large模型.Gao 等[21]提出由任務(wù)分解、知識獲取和知識組合構(gòu)成的3 階段框架,提升了模型獲取通用SQL 知識的能力,使其更具有泛化能力和魯棒性.RASAT[17]通過在多頭自注意力中加入邊的嵌入,為T5 提供結(jié)構(gòu)信息.Xie 等[22]將其他結(jié)構(gòu)化知識數(shù)據(jù)任務(wù)(structured knowledge grounding,SKG)的知識注入到T5 的多任務(wù)訓(xùn)練中,提高Text-to-SQL 的性能.GRAPHIX-T5[23]在T5 的基礎(chǔ)上增加圖形感知層,以增強多跳推理能力,在保持T5 強大的上下文編碼能力的基礎(chǔ)上,提高T5 的結(jié)構(gòu)編碼能力.這些工作都表明,T5 中蘊含著豐富的語言知識,使用合適的微調(diào)方式,可以使T5 在Text-to-SQL 任務(wù)上獲得優(yōu)異的表現(xiàn).
Text-to-SQL 的任務(wù)定義如下:給定自然語言問題Q 和數(shù)據(jù)庫模式S,生成相應(yīng)的SQL 查詢語句.問題Q 可以表示為 Q={q1,···,q|Q|},其中 qi表示問題中的第i 個單詞,|Q|為問題的長度.模式S 由一系列表 T={t1,···,t|T|}和列組成,其中 ti為數(shù)據(jù)庫中的第i 個表,為該表中的第j 個列,|T| 為數(shù)據(jù)庫中表的數(shù)目,為第i 個表中列的數(shù)目.
如圖1 所示,提出的框架由2 個階段組成:模式鏈接階段和SQL 生成階段.在模式鏈接階段,模式鏈接器識別問題中提及的列、表和值.在第2 階段,將這些對齊信息注入到生成器中,優(yōu)化生成的SQL 結(jié)果.
圖1 基于依存關(guān)系圖注意力網(wǎng)絡(luò)的兩階段SQL 生成框架Fig.1 Two-stage SQL generation framework based on dependency graph attention network
模式鏈接器的結(jié)構(gòu)如圖2 所示,對問題和模式串聯(lián),經(jīng)預(yù)訓(xùn)練模型混合編碼,得到問題和模式的初始表示通過預(yù)訓(xùn)練模型中的多層注意力機制,已經(jīng)隱式捕獲了部分模式鏈接的信息.根據(jù)模式的結(jié)構(gòu)及句子的語法信息,通過圖神經(jīng)網(wǎng)絡(luò)為模式鏈接提供更明確的監(jiān)督信號.分別對問題和模式項構(gòu)造圖.問題圖基于句法依存樹,對依存關(guān)系進行合并和傳播;模式圖是基于數(shù)據(jù)庫模式項之間的從屬關(guān)系和主外鍵關(guān)系.問題圖和模式圖經(jīng)RGAT 編碼,得到問題和模式的表示計算它們的鏈接概率.
圖2 模式鏈接器的結(jié)構(gòu)Fig.2 Structure of schema linker
2.1.1 問題和模式項的聯(lián)合編碼 將問題Q 和序列化的數(shù)據(jù)庫模式S 進行串聯(lián),得到輸入序列X:
其中[None]作為特殊模式項,當問題中的單詞不與任何模式項關(guān)聯(lián)時,將與[None]關(guān)聯(lián).S 中的特殊字符[T]和[C]用于分割表名和列名.此外,在列名前添加了其所屬的表名,在列名后添加了其類型信息(如text、number、boolean 等),并用特殊字符[#]分割.為了明確問題中提及的數(shù)據(jù)庫值,將問題詞與數(shù)據(jù)庫中的值進行模糊匹配,將匹配結(jié)果添加到X 中.假設(shè)問題詞 qi與數(shù)據(jù)庫列 ckj中的值匹配,將 qi添加到相應(yīng)列名后,用特殊字符[V]進行分割,即若問題詞 qi與多個列的值都匹配,則將 qi添加到所有匹配列之后,一起輸入模型.
混合序列X 經(jīng)基于Transformer 的雙向編碼器(bidirectional encoder representation from transformers,BERT)[24]編碼,得到問題詞和每個模式項單詞的嵌入表示.由于列名和表名都可能由多個單詞組成,需要再經(jīng)過一個門控循環(huán)單元(gate recurrent unit,GRU),得到每個列和表的初始表示.
2.1.2 依存關(guān)系的合并與傳播 原始的句法分析產(chǎn)生的依存關(guān)系類型多達74 種,直接使用原始句法關(guān)系構(gòu)造圖,可能會引入大量的噪聲.對原始的句法依存樹進行簡化和修改.對于數(shù)據(jù)庫模式識別沒有幫助的關(guān)系,如root(根節(jié)點)、punct(標點)、expl(填補詞)、det(限定語)等關(guān)系,將它們簡化為支配關(guān)系,依存弧賦予標簽“forward”,保留了如nmod(名詞修飾)、dobj(直接賓語)、amod(形容詞修飾)等關(guān)系標簽,具體見表1.
表1 保留的依存關(guān)系集合Tab.1 Collection of reserved dependencies
在原始的句法依存樹中,由“and”、“or”或逗號等連接的單詞之間的并列結(jié)構(gòu),通過依存弧conj(連詞)連接.該結(jié)構(gòu)中,第一個詞作為整個并列結(jié)構(gòu)的核心詞,不僅支配其余并列詞,還連接了與句子中其他詞的支配和被支配關(guān)系.從語義上看,并列詞共享與句中其他成分的依存關(guān)系,但距離第一個詞越遠的并列詞,依賴路徑越長,依賴關(guān)系越難以捕捉.如圖3 所示,“year”作為并列結(jié)構(gòu)中的第一個詞,“name”和“budget”通過conj 關(guān)系依附于“year”,同時“year”作為“List”的從屬詞和“department”的支配詞.語義上“name”和“budget”是“List”的賓語,“department”修飾了“name”和“budget”,這些支配和被支配關(guān)系在原始依存樹上表現(xiàn)為多跳關(guān)系,增加了模型理解的困難.添加并列結(jié)構(gòu)中的從屬詞與句中其他成分間的依存關(guān)系,如圖3 所示為修改示例.
圖3 依存關(guān)系修改示例Fig.3 Example of dependency modification
2.1.3 問題RGAT 模塊 除上述修改,還添加了單詞與自身的自連接關(guān)系.將句子結(jié)點構(gòu)成的圖使用RGAT[14]模型計算其表示,其中L 為網(wǎng)絡(luò)層數(shù),公式如下:
2.1.4 模式RGAT 模塊 對于數(shù)據(jù)庫模式而言,其表和列作為結(jié)點,列表間的從屬關(guān)系、主外鍵關(guān)系作為邊,構(gòu)成模式關(guān)系圖,同樣結(jié)點的表示可以通過RGAT 計算.各模式項之間的關(guān)系定義如表2 所示.
表2 模式項之間的關(guān)系Tab.2 Relation types of schema items
2.1.5 模式鏈接的概率計算 計算問題詞 qi和模式項 sj的鏈接概率 Pi,j.將 qi的表示和sj的表示進行拼接,經(jīng)多層感知機和softmax 操作計算鏈接概率,公式為
模式鏈接器的損失函數(shù)為交叉熵損失,即
由于T5 在Text-to-SQL 任務(wù)上展現(xiàn)了強大的性能表現(xiàn),通過注入模式鏈接信息,對T5 進行微調(diào),實現(xiàn)第2 階段的SQL 生成任務(wù).將問題Q、模式鏈接結(jié)果和序列化的數(shù)據(jù)庫模式S 輸入模型,輸入序列表示為
其中spani表示問題Q 中連續(xù)的若干個單詞.“spani=tk”表示spani提及的是表tk,表示spanj提及的是列或該列的值.參照Shaw 等[19]的工作,數(shù)據(jù)庫模式S 序列化為如下形式:
T5 模型基于編碼器-解碼器框架,雙向編碼器學(xué)習(xí)輸入向量x 的隱藏狀態(tài)h,解碼器根據(jù)h 生成SQL,公式如下:
式中:θ 和 τ 分別為編碼器和解碼器的參數(shù).模型采用預(yù)訓(xùn)練的T5 參數(shù)進行初始化,按如下目標進行優(yōu)化:
Text-to-SQL 目前的主流數(shù)據(jù)集是Spider 數(shù)據(jù)集[25],該數(shù)據(jù)集包含10 181 條自然語言問題和5 693 條SQL 查詢以及138 個不同領(lǐng)域的200 個數(shù)據(jù)庫;其SQL 語句覆蓋了多表連接、分組、排序、嵌套查詢等復(fù)雜操作,目前SOTA 模型的準確度約為70%.Spider 分為訓(xùn)練集、驗證集和測試集,樣本個數(shù)分別為7 000、1 034 和2 134.由于測試集未公開,使用驗證集進行消融實驗.基于Spider 數(shù)據(jù)集,SLSQL 構(gòu)建了模式鏈接語料庫,對Spider 訓(xùn)練集和驗證集的每個實例注釋了模式鏈接信息[6].使用SLSQL 提供的標注數(shù)據(jù)訓(xùn)練模式鏈接器.
為了驗證模型的魯棒性,在Spider-DK[26]和Spider-Syn[27]數(shù)據(jù)集上進行實驗.Spider-DK 在Spider 樣本的基礎(chǔ)上加入領(lǐng)域知識,用于評估模型融合知識的能力.Spider-Syn 對Spider 數(shù)據(jù)集中的問題進行同義詞替換,特別是與數(shù)據(jù)庫模式和值相關(guān)的問題詞,評估模型對詞匯變化的魯棒性.
采用準確率P(precision)、召回率R(recall)和F1 評估模式鏈接器的性能.Text-to-SQL 任務(wù)的評價指標主要包括精確匹配率(exact set match accuracy,EM)和執(zhí)行準確率(execution accuracy,EX),本文采用這2 個評價指標.EM 將SQL 語句拆分成SELECT、WHERE、GROUP BY 等多個組件,依次比較各組件集合,避免SQL 子句中順序問題的影響.EX 對預(yù)測SQL 和標準SQL 的執(zhí)行結(jié)果進行比較.
實驗的顯卡型號為NVIDIA GeForce RTX 3090,顯存為24 GB,CUDA 版本11.7.模型基于PyTorch 實現(xiàn),Python 版本為3.8.13,PyTorch 版本為1.10.1+cu113.
模式鏈接器的參數(shù)如下:BERT 版本為BERTBase,層數(shù)為12,hidden_size 為768,注意力頭為12,dropout 為0.1.RGAT 的層數(shù)為8,hidden_size為768,注意力頭為8,dropout 為0.2.batch_size 為12,learn_rate 為5×10-5,迭代輪次為30.依存句法分析采用斯坦福大學(xué)開發(fā)的StandfordCoreNLP.
生成器的參數(shù)如下:實驗使用的T5 版本為T5-Base 和T5-Large,采用Adafactor[28]進行參數(shù)優(yōu)化.T5-Base 的batch_size 為8,learn_rate 為10-4;T5-Large 的batch_size 為4,learn_rate 為5×10-5.
3.4.1 模式鏈接
1)實驗結(jié)果分析.
在Spider 驗證集上,利用模式鏈接器進行模式鏈接的結(jié)果如表3 所示.由于只有SLSQL 顯式地研究了模式鏈接,將本文方法與SLSQL 進行比較.本文方法較SLSQL 有明顯的提升,識別問題中提及的列、表、值的F1 分別提高了4.2%、2.4%和13.1%.部分樣本的預(yù)測結(jié)果對比如表4 所示.本文方法在模型輸入時,將與數(shù)據(jù)庫值模糊匹配的問題詞附加在相應(yīng)列名之后,因此在值的識別上,較SLSQL 更準確,如表4 的問題2 所示,利用本文模型可以正確識別問題詞“Aruba”對應(yīng)“coun-try”表中“Name”列的值.此外,由于本文使用改進的句法依存關(guān)系,模型能夠在一定程度上理解問題的語法結(jié)構(gòu),具有一定的全局推理能力.如表4的問題1 所示,本文模型根據(jù)“rank for winners”將“rank”識別為“matches”表中的“winner_rank”列,SLSQL 將其錯誤識別為詞語最相似的“rankings.ranking”列.在問題3 中,“flights”表中的列“Source-Airport”和“DestAirport”中都包含值“APG”,本文模型能夠根據(jù)問題中的“arriving”,將“APG”正確識別為列“DestAirport”的值.
表3 模式鏈接的結(jié)果Tab.3 Results of schema linking
表4 部分樣本模型預(yù)測結(jié)果的對比Tab.4 Comparison of model prediction results for some samples
2)消融實驗.
為了研究模型中各個組件對性能的影響,開展消融實驗,結(jié)果如表5 所示.為了便于討論,3.1 節(jié)的模型在本節(jié)中被稱為默認模型.其中“-依存增強”表示使用原始句法依存樹,不對依存關(guān)系進行合并和傳播,“-問題RGAT”表示刪去問題的RGAT 模塊,“-模式RGAT”表示刪去模式的RGAT 模塊.實驗結(jié)果顯示,各模塊均對模型性能有一定的貢獻.刪去依存增強模塊后,對列的識別能力有一定的下降,刪除問題RGAT 后下降得更明顯.句法依存關(guān)系有助于模型理解問題的語法結(jié)構(gòu),對易混淆的相似列名識別有一定的幫助,表6 給出結(jié)果示例.例1 中“names”和“winners”的nmod(名詞修飾)關(guān)系由“names”指向“winners”,經(jīng)并列結(jié)構(gòu)的依存關(guān)系傳播,問題詞“rank”通過nmod 關(guān)系支配“winners”,使得模型正確識別“rank”對應(yīng)表“match”中的“winner rank”列,而刪去問題的RGAT 模塊后,模型將“rank”錯誤識別為“rankings”表中的“ranking”列.例2 中,表city 和表country 都包含名為Population 的列,由于問題詞“population”通過nmod 關(guān)系支配“district”,且問題詞“district”對應(yīng)city 表中的District 列,“population”也對應(yīng)表city 中的列.類似地,例3 中的“whose name”,其“name”指的是“state name”而不是“email name”.默認模型在識別時更精準,更傾向于將單詞識別為列的引用,但由于標注精度的問題,導(dǎo)致表的識別結(jié)果略有下降.例如問題“How many car models are produced by each maker?”,模型將“carmodels”識別為表“model_list”的引用,語料庫僅標注了單詞“models”,又如問題“What is name of the country that speaks the largest number of languages? ”模型將language 識別為列“countrylanguage.language”,語料庫標注為表“countrylanguage”.此類與標注不一致的識別情況不影響后續(xù)的SQL 生成.隨機采樣100 個錯誤實例發(fā)現(xiàn),與標注不一致但不影響SQL 生成的錯誤占總數(shù)的13%.
表5 模式鏈接的消融實驗結(jié)果Tab.5 Ablation study of schema linking
表6 列預(yù)測結(jié)果的對比Tab.6 Comparison of column prediction
3)輸入序列對比實驗.
為了研究模式鏈接中問題詞與數(shù)據(jù)庫值的匹配,研究多種在輸入序列中添加匹配信息的方式.假設(shè)問題詞 qi與數(shù)據(jù)庫列中的值 dm匹配,對以下3 種方式進行實驗.1)列+值:將匹配到的數(shù)據(jù)庫值添加到相應(yīng)列名后,即[V]dm.2)問題詞+值:將匹配到的數(shù)據(jù)庫值添加到相應(yīng)問題詞之后,即 qi[V]dm.3)問題詞+列:將匹配的列序號添加到相應(yīng)問題詞后,即 qi[V]n,其中n 為在所有列C 中的序號.對于方式1)和2),匹配到的數(shù)據(jù)庫值可能有很多,在保證輸入序列不超過512 的情況下,按匹配度由大到小添加匹配詞.因為BERT 限制輸入長度不能超過512,而列名較長,僅在問題詞后添加列的編號.實驗結(jié)果見表7.考慮到在問題詞后添加值或列的序號破壞了原始問題的上下文,性能有所下降.相比于在列后添加匹配的數(shù)據(jù)庫值,添加問題詞的效果更好.問題中對于值的描述不一定與數(shù)據(jù)庫中存儲的值完全相同,例如問題“What is the average,minimum,and maximum age for all French singers?”,“French”對應(yīng)“country”列的值“France”,添加問題詞更加直觀.
表7 輸入序列的對比Tab.7 Comparison of input sequence
3.4.2 SQL 生成 本文方法與其他模型在Spider驗證集上的SQL 生成結(jié)果對比如表8 所示.表中,“GT”表示不使用模式鏈接器預(yù)測的模式鏈接結(jié)果,而是使用標注的模式鏈接結(jié)果,即Ground Truth.根據(jù)實驗結(jié)果可見,本文方法在不同規(guī)模的T5 模型上展現(xiàn)了較好的性能.在加入第一階段預(yù)測的模式鏈接結(jié)果后,本文方法較文獻[19]在原始T5 上的結(jié)果有了較大提升,EM 值在T5-Base 上提升了11.4%,在T5-Large 上的結(jié)果與T5-3B 上的結(jié)果相當.EM 反映預(yù)測查詢是否和標準查詢在所有組件上完全一致,然而同一查詢可以有多種實現(xiàn)方法,例如“SELECT a FROM t ORDER BY b DESC LIMIT 1”與“SELECT a FROM t WHERE b=(SELECT MAX(b)FROM t)”是完全等價的,因此EM 存在將正例判負的情況,造成了EM 和EX 之間差距較大.本文在T5-Large 上的EX 值超過了同規(guī)模的所有基線模型,甚至比Unifiedskg[22]在T5-3B 上的結(jié)果高1%.實驗證明,使用準確的模式鏈接信息可以顯著提升模型的性能,在使用標注的模式鏈接結(jié)果后,本文方法在T5-Large 上的結(jié)果甚至超過了RASAT[17]在T5-3B 上的結(jié)果.
表8 SQL 生成實驗結(jié)果的對比Tab.8 Comparison of SQL generation results
為了顯示模型在不同難度的查詢上的生成能力,按照Spider 數(shù)據(jù)集的樣本劃分規(guī)則,將查詢分為4 個級別:容易 (easy)、中等 (medium)、難(hard)、很難 (extra hard),實驗結(jié)果如表9 所示.由實驗結(jié)果可見,準確的模式鏈接可以提升難度較大的SQL 生成問題的結(jié)果.由于預(yù)測的模式鏈接結(jié)果不夠準確,模型尚有較大的提升空間,需要進一步的研究.
表9 不同難度上的EX 結(jié)果對比Tab.9 Comparison of EX accuracy on different difficulty levels
為了驗證模型的魯棒性,在 Spider-DK 和Spider-Syn 數(shù)據(jù)集上進行實驗,模式鏈接器未重新訓(xùn)練,即仍然使用基于SLSQL[6]標注的Spider 數(shù)據(jù)集訓(xùn)練的結(jié)果,實驗結(jié)果見表10.這2 個數(shù)據(jù)集更貼合實際的應(yīng)用場景,Spider-DK 結(jié)合了一些領(lǐng)域知識,Spider-Syn 模擬了用戶不熟悉數(shù)據(jù)庫的模式,在問題中沒有準確提及模式詞的情況.實驗結(jié)果顯示,本文方法具有魯棒性,在2 個數(shù)據(jù)集上的表現(xiàn)均超過基線模型.
表10 Spider-DK 和Spider-Syn 上的SQL 生成結(jié)果Tab.10 SQL generation results on Spider-DK and Spider-Syn
本文提出兩階段的模型以解決Text-to-SQL問題,通過模式鏈接器識別問題中提及的數(shù)據(jù)庫表、列和值,將對齊信息融合到基于T5 的生成器中,指導(dǎo)SQL 生成.模式鏈接器基于關(guān)系圖注意力網(wǎng)絡(luò),根據(jù)問題句法依存樹和模式項之間的內(nèi)部關(guān)系構(gòu)造圖.在構(gòu)造問題圖時,對依存關(guān)系進行合并和傳播,有助于模型捕獲長距離的依賴關(guān)系.模型將模式鏈接和SQL 生成解耦,以降低Text-to-SQL 問題的復(fù)雜性,在Spider 及其變體上的實驗證明了該模型的性能.下一步將對模式鏈接模塊繼續(xù)進行優(yōu)化,提高SQL 生成的準確率.