Relation-Aware Graph Transformer for SQL-to-Text Generation
Abstract
SQL2Text 是一項將 SQL 查詢映射到相應的自然語言問題的任務。之前的工作將 SQL 表示為稀疏圖,并利用 graph-to-sequence 模型來生成問題,其中每個節(jié)點只能與 k 跳節(jié)點通信。由于無法捕獲長期且缺乏特定于 SQL 的關系,這樣的模型在適應更復雜的 SQL 查詢時將會退化。為了解決這個問題,我們提出了一種 Relation-Aware Graph Transformer(RGT)來同時考慮 SQL 結(jié)構(gòu)和各種關系。具體來說,為每個SQL構(gòu)建一個抽象的SQL語法樹來提供底層關系。我們還定制了自注意力和交叉注意力策略來編碼 SQL 樹中的關系?;鶞?WikiSQL 和 Spider 上的實驗表明,我們的方法比強基準有所改進。
1. Introduction
SQL-to-Text:
- SQL(結(jié)構(gòu)化查詢語言)是訪問數(shù)據(jù)庫的重要工具。然而,SQL對于普通人來說并不容易理解。
- SQL2Text 旨在將結(jié)構(gòu)化SQL程序轉(zhuǎn)換為自然語言描述。
- SQL2Text 可以幫助自動生成 SQL 注釋,并構(gòu)建一個交互式問答系統(tǒng),用于關系數(shù)據(jù)庫的自然語言接口。
- SQL2Text 對于搜索 Internet 上可用的 SQL 程序很有用。
- SQL2Text 可以通過使用 SQL-to-Text 作為數(shù)據(jù)增強來協(xié)助 Text-to-SQL 任務。
- 在現(xiàn)實世界中,SQL2Text 可以幫助人們通過閱讀相應的文本來快速理解復雜的SQL。
SQL 是結(jié)構(gòu)化的,可以轉(zhuǎn)換為抽象語法樹,如圖 1 所示。一般來說,樹是一種特殊的圖,因此 SQL-to-text 可以建模為 Graph-to-Sequence 任務。
- xu 等人考慮了 SQL 查詢的內(nèi)在圖結(jié)構(gòu)。他們通過將 SQL 中的每個標記表示為圖中的節(jié)點,并通過 SQL 關鍵字節(jié)點(例如 SELECT、AND)連接不同的單元(例如列名、運算符、值)來構(gòu)建 SQL 圖。
- 通過圖神經(jīng)網(wǎng)絡(GNN)聚合來自 K 跳鄰居的信息,每個節(jié)點獲得其上下文嵌入,該嵌入將在自然語言解碼階段訪問。
- 雖然簡單有效,但它有兩個主要缺點:
- 由于構(gòu)造的 SQL 圖的稀疏性,泛化能力較差;
- 忽略不同節(jié)點對之間的關系,特別是列節(jié)點之間的相關性。
特別是,Xu 等人僅處理簡單的 SQL 模式 SELECT AGG COLUMN WHERE COLUMN OP VALUE (AND COLUMN OP VALUE)?。這些模式中只提到了一個列單元和一個表,所有約束都是通過 WHERE 子句中的條件交集來組織的。該模型通過 K 步迭代更新每個節(jié)點的上下文嵌入。每個節(jié)點在一次迭代中只會與其 1 跳鄰居進行通信,因此每個節(jié)點在迭代結(jié)束時只能 “看到” K 距離內(nèi)的節(jié)點。當我們轉(zhuǎn)移到由多個表、GroupBy/HAVING/OrderBy/LIMIT 子句和嵌套 SQL 組成的更復雜的 SQL 模式時,性能很容易惡化。如圖 1 所示的示例,K = 6 的 Graph2Seq 模型可能在簡單 SQL(如左圖所示)上運行良好,但在依賴距離較長的復雜 SQL(如右圖所示)上泛化效果較差。
我們發(fā)現(xiàn),即使兩個節(jié)點在序列化 SQL 查詢和解析的抽象語法樹中相距較遠,它們也可能具有較高的相關性。例如,同一子句(子句內(nèi))中提到的列緊密相關。參見下圖中的示例。用戶總是不僅需要特定候選人的姓氏,還需要名字。同樣,在 WHERE 子句中充當條件之一的列也很有可能在 SELECT 子句(子句間)中被精確請求。以往的工作更多地關注SQL的語法結(jié)構(gòu),而忽略了語義層面上的這些潛在關系。
為此,我們提出了一種 Relation-aware Graph Transformer(RGT)來考慮 sql 查詢的抽象語法樹和不同節(jié)點對之間的相關性。整個節(jié)點集分為兩部分:中間節(jié)點和葉子節(jié)點。
- 葉節(jié)點通常是原始表名或列字,加上一些一元修飾符,例如 DISTINCT 和 MAX。通常,這些葉節(jié)點傳達查詢中的重要語義信息。
- SELECT 和 AND 等中間節(jié)點本質(zhì)上捕獲底層 SQL 查詢的樹結(jié)構(gòu),并將分散的葉節(jié)點連接起來。構(gòu)建的 SQL 樹的示例如圖 2 所示。
我們在 SQL 樹中引入了四種類型的關系,并提出了兩種交叉注意力的變體來捕獲結(jié)構(gòu)信息。所有關系均由我們提出的 RGT 模型進行編碼。
- 由于SQL查詢可能涉及多個表,因此我們首先考慮抽象概念TABLE和COLUMN之間的關系,稱為數(shù)據(jù)庫模式(DBS)。給定兩個表示 TABLE 或 COLUMN 的節(jié)點,它們可能是同一個表中的兩列,也可能是通過外鍵連接的兩個表。我們定義了 11 種不同類型的 DBS 來描述這種關系。
- 此外,節(jié)點的深度反映了信息量:更深的節(jié)點包含更多語義信息,而較淺的節(jié)點包含更多語法信息。我們引入定向相對深度(DRD)來捕獲中間節(jié)點之間的相對深度。
- 對于葉節(jié)點來說,最重要的關系是從屬關系。例如,在圖2中,葉子節(jié)點month和salary連接到COLUMN節(jié)點,而COLUMN和另一個葉子節(jié)點val0屬于中間節(jié)點>。這三個葉節(jié)點是高度相關的。
- 我們使用最低共同祖先(LCA)來衡量兩個葉節(jié)點的緊密程度。我們可以看到,節(jié)點month和val0的LCA就是圖2中的節(jié)點>。
此外,為了利用 SQL 的樹結(jié)構(gòu),我們使用兩種交叉注意力策略,即 attention over ancestors(AOA)和 attention over descendants(AOD)。AOA僅允許葉節(jié)點關注其祖先,AOD僅允許中間節(jié)點僅關注其后代。
我們使用各種基線模型對基準 WikiSQL 和 Spider 進行了廣泛的實驗。據(jù)我們所知,我們是第一個在涉及多個表和復雜條件的 SQL 模式上執(zhí)行 SQL-to-Text 任務的人。結(jié)果表明,與其他替代方案相比,我們的模型具有良好的泛化能力。
主要貢獻:
- 我們提出了一種 relation-aware graph transformer來考慮 SQL 圖中節(jié)點對之間的各種關系。
- 我們是第一個在數(shù)據(jù)集Spider 上使用更復雜的SQL 模式執(zhí)行SQL 到文本任務的人。
- 大量實驗表明,我們的模型優(yōu)于各種Seq2Seq 和Graph2Seq 模型。
2. Model
2.1 SQL Tree Construction
構(gòu)建的SQL樹 V V V 的整個節(jié)點集被分為兩類:中間節(jié)點 V I = { v i I } i = 1 ∣ V I ∣ V^I = \{v^I_i\}^{|V_I|}_{i=1} VI={viI?}i=1∣VI?∣? 和葉節(jié)點 V L = { v i L } i = 1 ∣ V L ∣ V^L = \{v^L_i\}^{|V_L|}_{i=1} VL={viL?}i=1∣VL?∣?。
- 中間節(jié)點包含三個抽象概念(SQL、TABLE 和 COLUMN)、七個 SQL 子句關鍵字(SELECT、WHERE 等)和二元運算符(>、<、= 等)
- 葉節(jié)點包含一元運算符、原始表名稱、列詞以及實體值的占位符(諸如“new york”之類的實體,在預處理過程中被替換為一種特殊標記 v a l 0 val_0 val0?,稱為去詞法化)。
通過這種分類方法,可以使用不同的關系信息來更新這兩種類型的節(jié)點嵌入。
從根節(jié)點 SQL 開始:
- 我們首先添加子句關鍵字作為其子節(jié)點。
- SQL被分為一些子句,例如SELECT子句、WHERE子句、嵌套SQL子句等(見圖3a)。
- 然后概念抽象節(jié)點TABLE和COLUMN以及相關的操作符節(jié)點相應地附加到它們的父節(jié)點。
- 每個子句由多個表、列和一些其他二元運算符組成??紤]到一些表名和列名有多個標記,我們設計了兩個抽象節(jié)點(TABLE和COLUMN)來解決這個問題(見圖3c)。通過這兩個抽象節(jié)點,子句節(jié)點可以表示為如圖 3b 所示。注意到二元運算符可以被視為多個節(jié)點之間的關系,我們將它們設置為中間節(jié)點(一些子節(jié)點的父節(jié)點)。
- 接下來,對于節(jié)點 COLUMN 和 TABLE,我們將所有原始單詞、aggregators 和不同 標記 附加為葉節(jié)點。
我們的 SQL 樹由三個級別組成(參見圖 3):子句級別、模式級別和標記級別。表 1 顯示了所有類型的節(jié)點。
2.2 Encoder Overview
輸入特征包括所有節(jié)點和關系的可訓練嵌入。我們使用 X L ∈ R ∣ V L ∣ × d x X^L ∈ R^{|V_L|×d_x} XL∈R∣VL?∣×dx? 和 R L = [ r i j L ] ∣ V L ∣ × ∣ V L ∣ R^L = [r^L_{ij}]_{|V^L|×|V^L|} RL=[rijL?]∣VL∣×∣VL∣?表示葉節(jié)點嵌入和葉節(jié)點之間的關系矩陣的集合。相應地, X I ∈ R ∣ V I ∣ × d x X^I ∈ R^{|V_I|×d_x} XI∈R∣VI?∣×dx? 和 R I = [ r i j I ] ∣ V I ∣ × ∣ V I ∣ R^I = [r^I_{ij}]_{|V^I|×|V^I|} RI=[rijI?]∣VI∣×∣VI∣? 對應于中間節(jié)點。
編碼器由 K 個堆疊塊組成,如圖 4 所示。主要組件是關系感知圖 Transformer (RGT),它將節(jié)點嵌入矩陣 X X X、關系矩陣 R R R 和 從 R R R 中提取關系嵌入的關系函數(shù) E E E 作為輸入,并輸出更新的節(jié)點矩陣。每個塊包含四個模塊:一個用于中間節(jié)點的 RGT,一個用于葉節(jié)點的 RGT,以及兩個交叉注意力模塊。在每個塊中,節(jié)點嵌入 X I X^I XI 和 X L X^L XL 通過自注意力和交叉注意力順序更新。根據(jù)圖 4 中的數(shù)據(jù)流,中間節(jié)點首先更新為:
然后,葉節(jié)點參與中間節(jié)點并使用 RGT 進行更新:
最后,中間節(jié)點也參與葉節(jié)點:
下標 in、mid、out 用于區(qū)分輸入和輸出。關系嵌入函數(shù) E r e l I E^I_{rel} ErelI? 和 E r e l L E^L_{rel} ErelL?、關系矩陣 R I R^I RI和 R L R^L RL以及模塊 C r o s s A t t e n t i o n I ← L ( ? , ? ) CrossAttention^{I←L}(·,·) CrossAttentionI←L(?,?) 和 C r o s s A t t e n t i o n L ← I ( ? , ? ) CrossAttention^{L←I}(·,·) CrossAttentionL←I(?,?) 的定義將在后面詳細闡述。
2.3 Relation-Aware Graph Transformer
我們利用 Transformer 作為我們模型的骨干,它可以被視為圖注意力網(wǎng)絡的一個實例(GAT),其中每個節(jié)點的感受野是整個節(jié)點集。我們將 SQL 樹視為一種特殊的圖。假設輸入圖為 G = ( V , R ) , V = { v i } i = 1 ∣ V ∣ , R = [ r i j ] ∣ V ∣ × ∣ V ∣ G = (V, R), V = \{v_i\}^{|V|}_{ i=1},R = [r_{ij}]_{|V|×|V|} G=(V,R),V={vi?}i=1∣V∣?,R=[rij?]∣V∣×∣V∣?,其中 V V V是頂點集, R R R是關系矩陣。每個節(jié)點 v i ∈ V v_i ∈ V vi?∈V 都有一個隨機初始化的嵌入 x i ∈ R d x x_i ∈ R^{d_x} xi?∈Rdx? 。之前的工作將節(jié)點 v i v_i vi? 和 v j v_j vj? 之間的相對位置納入相關性得分計算和上下文聚合步驟中。類似地,我們通過引入額外的關系向量來使這項技術適應我們的框架。從數(shù)學上講,給定關系矩陣 R R R,我們構(gòu)造一個關系嵌入函數(shù) E r e l E_{rel} Erel? 來檢索關系 r i j r_{ij} rij? 的特征向量 e i j = E r e l ( r i j ) ∈ R d x / H e_{ij} = E_{rel}(r_{ij}) ∈ R^{d_x/H} eij?=Erel?(rij?)∈Rdx?/H。然后,經(jīng)過一層迭代后節(jié)點 v i v_i vi? 的輸出嵌入 y i y_i yi? 計算如下:
除非另有說明,關系嵌入函數(shù) E r e l E_{rel} Erel? 在不同頭和多層之間共享。為了方便討論,我們將 RGT 編碼模塊的表示法簡化為:
其中 X i n = [ x 1 ; ? ? ? ; x ∣ V ∣ ] X_{in} = [x_1; · · · ; x_{|V|}] Xin?=[x1?;???;x∣V∣?] 表示所有節(jié)點的輸入嵌入矩陣。
2.4 Relations among Intermediate Nodes
對于中間節(jié)點,我們考慮兩種類型的關系:數(shù)據(jù)庫模式(DBS)和定向相對深度(DRD)。 DBS考慮抽象概念TABLE和COLUMN之間的關系。我們總共定義了 11 種關系。例如,如果節(jié)點 v i I v^I_i viI? 和 v j I v^I_j vjI? 是 COLUMN 類型的節(jié)點,并且根據(jù)數(shù)據(jù)庫模式它們屬于同一個表,則關系 r i j D B S r^{DBS}_{ij} rijDBS? 是 SAME-TABLE。表 2 顯示了 DBS 關系的完整版本。從數(shù)學上來說,
其中關系嵌入函數(shù) E r e l D B S E^{DBS}_{rel} ErelDBS? 將關系類別 r i j D B S r^{DBS}_{ij} rijDBS? 映射到可訓練向量 e i j D B S e^{DBS}_{ij} eijDBS? 。
借助底層有向 SQL 樹,我們可以構(gòu)建另一個關系矩陣來表示兩個中間節(jié)點 v i I v^I_i viI? 和 v j I v^I_j vjI? 之間的可達性和相對深度差異。設 d ( v i I ) d(v^I_i ) d(viI?) 表示節(jié)點 v i I v^I_i viI? 的深度,例如根 SQL 節(jié)點的深度為 1(見圖 4)。給定最大深度差 D,
其中 E D R D E^{DRD} EDRD 是具有 2 D + 2 2D + 2 2D+2 個條目的關系嵌入模塊。一項特殊條目代表不可訪問性 inf。
3. Experiments
3.1 Dataset
WikiSQL 我們使用最新版本的 WikiSQL 進行實驗。 WikiSQL 中的 SQL 僅包含長度較短的 SELECT 和 WHERE 子句。我們利用官方的訓練/開發(fā)/測試拆分,確保每個表僅出現(xiàn)在單個拆分中。此設置要求模型在推理過程中泛化到看不見的表。
Spider 我們還使用 Spider,一個更復雜的數(shù)據(jù)集。與 WikiSQL 相比,Spider 中的 SQL 更長,數(shù)據(jù)量小得多。此外,Spider中還涉及到一些其他復雜的語法,例如JOIN、HAVING和嵌套SQL。
因此,Spider上的任務要困難得多??紤]到測試分割不公開,我們只使用訓練分割和開發(fā)分割。
3.2 Experiment Setup
Metric 我們使用 BLEU-4 和 NIST 作為自動指標。每個 SQL 在 WikiSQL 中都有一個參考。在Spider中,大多數(shù)SQL都有雙重引用,因為很多 SQLs 分別對應兩種不同的自然語言表達。然而,該指標存在兩個威脅:(1)結(jié)果可能會嚴重波動。 (2)BLUE-4無法全面評估生成文本的質(zhì)量。為了減輕結(jié)果的波動,我們使用不同的隨機種子運行所有實驗 5 次。此外,我們對 Spider 進行了人類評估,以將我們的模型與最強的基線進行比較。
Data preprocessing 對于 WikiSQL,我們省略了 FROM 子句,因為所有 SQL 只與單個表相關。對于Spider,我們將表別名替換為其原始名稱,并刪除AS語法。此外,如前所述,問題被去詞匯化了。文章來源:http://www.zghlxwxcb.cn/news/detail-828495.html
3.3 Main Results
文章來源地址http://www.zghlxwxcb.cn/news/detail-828495.html
到了這里,關于【論文閱讀】Relation-Aware Graph Transformer for SQL-to-Text Generation的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!