【Text2SQL 經典模型】X-SQL

論文:X-SQL: reinforce schema representation with context

????

Microsoft, arXiv:1908.08113

X-SQL 與 SQLova 類似,使用 BERT style 的 PLM 來獲得 representation,只是融合 NL question 和 table schema 的信息的方式不太一樣,也就是在利用 BERT-style 得到的 representation 后進一步的加工方式不一樣。

X-SQL 先由 BERT-style PLM 生成 question 和 schema 的 representation,然后對 schema representation 做上下文信息的進一步加強,再交由 6 個 sub-task 分別構建出 SQL 的一部分,最終得到完整的 SQL

一、X-SQL

整個架構包含三層:sequence encoder、context enhancing schema encoder 和 output layer。

1.1 Sequence Encoder:得到 PLM 的 representation

將 question 和 table headers 拼裝成下面的形式(與 SQLova 的類似):

  • 有一個特殊的空 column 被附加到每個 table schema 最后,也就是實際最后一個 column 后面會在加一個 [EMPTY]
  • [CLS] 重命名為 [CTX],用來強調這里是捕獲上下文信息,而非用于下游任務的 representation
  • SQLova 中的 segment embeddings 被替換為 type embeddings,這是我們為四種 types 學習的 embeddings:question、categorial column、numerical column 和 special empty column

另外,這里的 PLM 不是使用 BERT-Large 初始化的,而是使用 MT-DNN 初始化的,它與 BERT 架構相同,只是在多個 GLUE 任務上做過訓練,從而能夠得到更好的用于下游任務的 representation。

經過這一層,我們為 question 和 table schema 的每個 token 都利用 BERT-style PLM 生成一個 hidden state。

1.2 Context Enhanced Schema Encoder:加強 schema representation

在上一層 seq encoder 中,我們為 question 和 table headers 的每個 token 都得到一個 hidden state vector,在這一層,我們的 context enchanced schema encoder 通過用 h [ C T X ] h_{[CTX]} h[CTX]? 來加強前面 encoder 的輸出,從而得到每個 column 的一個新的 representation h C i h_{C_i} hCi??,它代表 column i 的新 representation。

論文認為,盡管 BERT style 的 sequence encoder 在它的 output 中也捕捉到了一定的 context,但是這種 context influence 受限于 self-attention 的機制(它傾向于關注某個特定 region 從而缺少全局信息),所以這里使用帶有全局信息的 [CTX] 的 hidden state 來加強 representation。

這里的具體做法就是,將 column i 的所有 token 的 hidden state 和 h [ C T X ] h_{[CTX]} h[CTX]? 一起輸入到一個 Attention 層中,得到加強后的新的 column i i i 的 representation:

經過這一層 encoder,我們得到了上下文增強的 schema representation,也就是每個 column 的新 representation

這一步的做法也體現出 X-SQL 與 SQLova 的區別,這一層的 “context enchanced schema encoder” 和 SQLova 中引入的 column-attention 機制都是為了相同的目標:更好地對齊 question 和 table schema,但兩者的實現思路卻不同:

  • column-attention 通過將 column 作為條件來改變 question 的編碼
  • context enchanced schema encoder 認為 BERT-style 的 encoder 已經足夠好了,只是基于此并試圖使用 [CTX] 中捕獲的全局上下文信息來得到一個更好的 representation。

1.3 Output Layer:完成各 sub-task 生成 SQL

這一層借助 sequence encoder 輸出的 hidden states 和 context enchanced schema encoder 輸出的 h C 1 h_{C_1} hC1?? h C 2 h_{C_2} hC2??、…、 h [ E M P T Y ] h_{[EMPTY]} h[EMPTY]? 來生成 SQL。這里的思路也是基于 SQL sketch 并填充 slots。

這一步的任務被分解成了 6 個子任務,每個子任務預測最終 SQL 程序的一部分。

1.3.1 用來修正 schema representation 的 sub-network

首先,這里引入了一個 sub-network 用來調整 schema representation with context,具體來說,就是分別對 H [ C T X ] H_{[CTX]} H[CTX]? H C i H_{C_i} HCi?? 做一個仿射變換,再加起來經過一個 LayerNorm 得到 r C i r_{C_i} rCi??(column i 一個修正后的 representation),圖示如下:

公式如下:

注意,這個 sub-network 在每個 sub-task 中都是獨立訓練的,也就是每個 sub-task 得到的 r C i r_{C_i} rCi?? 是不同的,這也體現了這個 sub-network 就是針對一個具體 task 來修正 schema representation

之后,各個 sub-task 就可以基于我們之前得到的 vectors 和 r C i r_{C_i} rCi?? 來做了。

1.3.2 sub-task 1:S-COL

S-COL 任務是預測 SELECT 語句中的 columns,這其實就是計算各個 columns 的一個概率,計算方式如下:

20240524214322

可以看到,這里只使用了 r C i r_{C_i} rCi??,另外的 W W W 是一個可訓練參數。

1.3.3 sub-task 2:S-AGG

直覺來說,aggregator 的選擇會依賴所選中的 column 的類型,比如 aggregator MIN 只能被用于數字類型的 column。為了實現這個直覺,這個 task 在做 aggregator 分類時,會利用到 column type 的 embedding:

20240524214556

具體公式可以參考原論文

1.3.4 其他 sub-task

其他 sub-task 共同確定出 WHERE 部分,這里可以具體參考原論文,整體思路是差不多的。

二、總結

通過以上改進,X-SQL 在表現 WikiSQL 上的表現提升到 90% 以上,超過了 SQLova:

本文對 BERT-style 生成的 representation 的進一步的加工利用值得研究學習。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/14540.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/14540.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/14540.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一種獲取java代碼結構的實現思路

一種獲取java代碼結構的實現思路 有時,我們需要獲取java文件里的代碼結構,即,只需要里面的class定義、方法聲明、屬性定義。不需要額外的方法實現 這里提供一下實現思路: 采用語法解析器Tree-sitter對java代碼進行解析,獲取里面的方法實現遍歷第一步獲取到的方法列表,在源…

Linux c開發線程鎖和條件變量使用

#include <pthread.h> #include <stdio.h> #include <unistd.h>pthread_mutex_t mutex PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond PTHREAD_COND_INITIALIZER;void* thread_function(void* arg) {printf("線程等待喚醒,鎖定互斥量...\n");…

代碼隨想錄算法訓練營第十七天 | 110. 平衡二叉樹、257. 二叉樹的所有路徑、404. 左葉子之和

[LeetCode] 110. 平衡二叉樹 [LeetCode] 110. 平衡二叉樹 文章解釋 [LeetCode] 110. 平衡二叉樹 視頻解釋 給定一個二叉樹&#xff0c;判斷它是否是 平衡二叉樹 示例 1&#xff1a; 輸入&#xff1a;root [3,9,20,null,null,15,7] 輸出&#xff1a;true示例 2&#xff1a; 輸…

HTTP 響應分割漏洞

HTTP 響應分割漏洞 1.漏洞概述2.漏洞案例 1.漏洞概述 HTTP 響應拆分發生在以下情況&#xff1a; 數據通過不受信任的來源&#xff08;最常見的是 HTTP 請求&#xff09;進入 Web 應用程序。該數據包含在發送給 Web 用戶的 HTTP 響應標頭中&#xff0c;且未經過惡意字符驗證。…

CSS常用的兩種定位方式

在CSS中&#xff0c;absolute 和 relative 是兩種常用的定位方式&#xff0c;分別通過 position 屬性進行設置。它們用于控制元素在頁面中的位置。理解這兩種定位方式對于布局和設計響應式頁面非常重要。 position: relative 定義 relative 定位是相對自身原始位置進行偏移。…

Python 魂斗羅的音效和動漫效果

一、實現游戲音效 音效是游戲中不可或缺的一部分&#xff0c;它可以為游戲增添氛圍和趣味性。在 Pygame 中&#xff0c;我們可以使用 pygame.mixer 模塊來播放音效。下面是一個簡單的示例代碼&#xff0c;演示如何在游戲中播放音效&#xff1a; import pygamepygame.mixer.init…

windows平臺vcpkg安裝

1. 克隆vcpkg倉庫 git clone https://github.com/microsoft/vcpkg 2.運行bootstrap-vcpkg.bat下載vcpkg.exe 3.運行驗證 4.使用VCPKG安裝OPENSSL 5.安裝成功

VC++學習(1)——環境準備,參考文檔等,初步入門VC++

目錄 引出環境準備&#xff0c;參考文檔第一講 初步入門鍵盤按下的消息鼠標左鍵按下報錯源碼新建一個工程 總結 引出 VC學習&#xff08;1&#xff09;——環境準備&#xff0c;參考文檔等&#xff0c;初步入門VC C是一門編程語言,他的語法標準和語言特性是全球統一的 VC是微…

計算機系統概述習題

選擇題 電子計算機問世至今&#xff0c;新型計算機不斷推陳出新&#xff0c;不管怎么更新&#xff0c;依然具有“存儲程序”的特點&#xff0c;最早提出這種概念的是(B) A. 巴貝奇 B. 馮*諾伊曼 C. 帕斯卡 D. 貝爾 B下列描述中___是正確的。 A. 控制器能理解&#xff0c;解釋…

中國主要城市房價指數數據集(2011-2024)

數據來源&#xff1a;東方財富網 時間跨度&#xff1a;2011年1月 - 2024年4月 數據范圍&#xff1a;中國主要城市 包含指標&#xff1a; 日期、城市 新建商品住宅價格指數-同比 新建商品住宅價格指數-環比 新建商品住宅價格指數-定基 二手住宅價格指數-環比 二手住宅價格指…

Visual Studio 調試及快捷鍵

文章目錄 原文連接環境一、調試器的基本使用1、更改執行流2、快速執行某一條代碼斷點設置條件斷點查看內存信息查看調用堆棧查看寄存器信息設置監視斷點調試二、快捷鍵一、窗口快捷鍵二、查找相關快捷鍵三、代碼快捷鍵原文連接 【教程】visual studio debug 技巧總結 環境 一…

OpenCASCADE Draw模塊TKDraw項目問題修改

1.問題 在調試Draw模塊代碼時&#xff0c;出現一個小問題&#xff0c;導致無法正常運行 如下&#xff1a; 2.代碼跟蹤 通過代碼跟蹤發現時一個數組越界問題&#xff0c;在此處添加了判斷處理&#xff0c;程序可以正常調試

Golang使用HTTP框架zdpgo_resty實現文件下載

核心代碼 代碼解析&#xff1a; client.SetOutputDirectory("Downloads") 設置下載目錄client.R().SetOutput("test.go").Get("http://127.0.0.1:3333/download 指定下載文件名并進行下載 // 設置輸出目錄路徑&#xff0c;如果目錄不存在&#xff…

數據結構順序表實現通訊錄

目錄 1. 前言&#xff1a; 2.通訊錄項目的創建 3. 通訊錄的實現 3.1 通訊錄的初始化 3.2 通訊錄的銷毀 3.3 通訊錄添加數據 3.4 通訊錄查找數據 3.5 通訊錄展示數據 3.6 通訊錄刪除數據 3.7 通訊錄修改數據 4. 通訊錄完整代碼 4.1 test.c 4.2 SeqList.h 4.3 SeqLis…

PostgreSQL學習筆記

PostgreSQL 基本概念和架構 PostgreSQL 是一個功能強大的開源對象關系數據庫管理系統&#xff08;ORDBMS&#xff09;&#xff0c;其設計目標是遵循 SQL 標準&#xff0c;并提供豐富的功能&#xff0c;如復雜查詢、外鍵、觸發器、視圖和事務處理。以下是 PostgreSQL 的基本概念…

數據結構(Java實現):ArrayList

目錄 1.ArrayList簡介2.ArrayList構造方法分析3.ArrayList的add方法以及擴容機制4.ArrayList常用方法5.ArrayList遍歷6.ArrayList的缺陷 1.ArrayList簡介 在集合框架中&#xff0c;ArrayList是一個普通的類&#xff0c;實現了List接口&#xff0c;具體框架圖如下&#xff1a; …

編寫一個llvm編譯器插件,完成在store匯編指令前對內存合法性的check。

dds(iceoryx、fastdds等)中間件采用了共享內存&#xff0c;如果app內存越界將共享內存踩踏壞了&#xff0c;將會形成災難。本插件可以檢測到app是否在寫共享內存&#xff0c;如果是&#xff0c;我們可以讓app assert。從而提高dds的穩定性 插件效果&#xff1a; 插件源碼&…

話題:如何讓大模型變得更聰明?

隨著人工智能&#xff08;AI&#xff09;技術的迅速發展&#xff0c;大模型&#xff08;如GPT-4、BERT、Transformer等&#xff09;在自然語言處理、圖像識別和語音識別等領域取得了顯著成果。然而&#xff0c;如何讓大模型變得更聰明&#xff0c;進一步提升其性能和應用效果&a…

Netty: Netty中的組件

文章目錄 一、EventLoop1、EventLoop2、EventLoopGroup&#xff08;1&#xff09;處理普通時間和定時任務&#xff08;2&#xff09;處理IO任務 二、Channel三、Future&Promise四、Handler&Pipeline五、ByteBuf 一、EventLoop 1、EventLoop EventLoop本質是一個單線程…

Jetbrain | IDEA的啟動logo替換成可愛的vtuber-logo

看了這個&#xff0c;好可愛 【上Github熱榜了&#xff01;當編程語言的Logo變得可愛起來~】 又看了這個 光速整活&#xff0c;強啊 看到很多人整IDEA的logo包括我自己&#xff0c;都不是特別方便的搞&#xff0c;我就直接把文件放在綁定資源里直接下吧 然后直接找到本體的安…