【Text2SQL 論文】C3:使用 ChatGPT 實現 zero-shot Text2SQL

論文:C3: Zero-shot Text-to-SQL with ChatGPT

????

arXiv:2307.07306,浙大

Code:C3SQL | GitHub

一、論文速讀

使用 ChatGPT 來解決 Text2SQL 任務時,few-shots ICL 的 setting 需要輸入大量的 tokens,這有點昂貴且可能實際不可行。因此,本文嘗試在 zero-shot 的 setting 下來解決 Text2SQL 問題。

本文提出了 C3 來基于 ChatGPT zero-shot 去做 Text2SQL,實現了 1000 tokens per query 下優于 fine-tuning-based methods。

二、C3

C3 由三個關鍵組件構成:Clear Prompts(CP)、Calibration with Hints(CH)、Consistency Output(CO),分別對應著模型輸入、模型偏差和模型輸出。

2.1 Clear Prompts 組件

Clear PromptsCP)組件的目標是為 ChatGPT 解決 Text2SQL 任務構建一個有效的 prompt。它由兩部分組成:Clear Layout 和 Clear Context。

2.1.1 Clear Layout

在 Text2SQL 中,有兩種 prompt layout 的 styles:

  • 類型 1:Complicated Layout:這種類型的 prompt 直接將 instruction、question 和 context 拼接起來,看起來較為雜亂,如下圖的 (a) 所示
  • 類型 2:Clear Layout:這種類型的 prompt 使用一個明顯的分隔符將 instruction、question 和 context 分開,看起來更加清晰,如下圖的 (b) 所示

在這里插入圖片描述

論文指出,從直覺和實驗上,都證明了 clear layout 能產生更好的表現。因此本文主要使用改進后的 clear layout。

但是,論文發現直接使用上圖的 (b) 作為 prompt 會在生成的 SQL 中產生冗余的 columns,為了解決這個問題,論文在 instruction 部分后面加了一句:and do not select extra columns that are not explicitly requested in the query

2.1.2 Clear Context

論文指出,在 prompt context 中包含整個 db schema 會導致兩個問題:

  1. 在 prompt 引入過多的不相關 schema items 會讓 ChatGPT 生成 SQL 時增加不相關 items 的 likelihood。
  2. 使用完整的 db schema 會讓文本長度過大,導致不必要的 API tokens 開銷

為此,論文提出需要先進行 schema linking 以召回相關的 tables 和 columns,并只將相關的信息放入 prompt context 中。

本文提出了一個 ChatGPT-based zero-shot 的 schema linking 的方法,分成兩步:

  • Table Recall:使用一個 prompt 讓 ChatGPT 召回相關 tables
  • Column Recall:基于 table recall 的結果,使用 prompt 讓 ChatGPT 進一步召回相關 columns

Table Recall 的 prompt 示例如下:

在這里插入圖片描述

Column Recall 的 prompt 示例如下:

在這里插入圖片描述

2.2 Calibration with Hints 組件

論文通過分析生成的 SQL query,發現了幾個由于 ChatGPT 固有的 biases 造成的 errors:

  • Bias 1:ChatGPT 在 output 中傾向于保守,SELECT 語句中經常出現與問題相關但不是必需的列。而且在涉及到數量問題時尤為明顯。比如下圖的左邊第一個問題,COUNT(*) 僅用于排序,但 ChatGPT 在 SELECT 中也將其輸出了。
  • Bias 2:ChatGPT 編寫 SQL 時傾向于使用 LEFT JOIN、OR、IN,但經常無法正確使用它們。這種 bias 通常會導致執行結果中出現額外的值。

在這里插入圖片描述

為了校準這些 bias,論文使用一個單獨的組件來實施校準策略:Calibration with HintsCH)。

論文通過將用于修正 Bias 的先驗知識注入到與 ChatGPt 的歷史對話中。在對話 history 中,我們讓 ChatGPT 認為自己是一個優秀的 SQL 編寫器,并引導它去遵循我們提出的 debias hints:

  • Hint 1:針對第一個 bias,這里設計了一個 tip 去指導 ChatGPT 只選擇必要的 columns
  • Hint 2:針對第二個 bias,這里設計了一個 tip 來防止 ChatGPT 濫用一些 SQL 關鍵字。如下圖所示,prompt 中直接要求 ChatGPT 盡量避免使用 LEFT JOIN、IN、OR,而使用 JOIN 和 INSERSECT,而且在適當時使用 DISTINCT 或 LIMIT,來避免重復的執行結果。

如下是一個示例:

在這里插入圖片描述

2.3 Consistency Output 組件

由于 LLM 固有的隨機性,ChatGPT 的輸出是不穩定的。這里將 Text2SQL 也視為 reasoning 問題,于是使用 self-consistency 思想來提高效果。

論文提出了一個 execution-based self-consistency for Text2SQL 方法,封裝為這里的 Consistency OutputCO)組件,用于選擇 LLM 生成的 SQL。

這里的思想是,讓 LLM 通過多個推理路徑來生成多個 SQL answers,然后移除掉其中 execution error 的 SQL,并對剩余的 SQL 進行投票,從而選出最終的答案

2.4 總結

C3 的整體框架如下:

在這里插入圖片描述

三、實驗

論文在 Spider 數據集上使用 Execution Accuracy(EX)作為指標來測試。

整體上的實驗發現,C3 在 Spider 測試集上優于所有傳統的基于微調的方法,在 Spider 排行榜上排名第二。與 top-1 方法的 few-shots settings 的 DIN-SQL 相比,只使用了約 10% 的 token 數量,而且這里使用的 GPT-3.5 在成本上也低于 DIN-SQL 使用的 GPT-4。所以,C3 方法更加預算友好

此外,論文還做了不少的消融實驗,總結了 error cases 的分析,具體可參考原論文。

四、總結

本文提出的 C3 基于 ChatGPT 實現了 zero-shot Text2SQL,并取得了 zero-shot 的最好性能。

C3 從模型輸入、模型偏差和模型輸出三個角度為基于 GPT 的 Text2SQL 提供了系統的處理方法。這些方法值得后面的研究來參考。

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

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

相關文章

基于GLM生成SQL,基于MOSS生成SQL,其中什么是GLM 什么是MOSS

GLM 和 MOSS 是兩種不同的模型或系統,通常用在自然語言處理 (NLP) 和生成任務中,如生成 SQL 查詢。讓我們逐個解釋它們的含義和用途: GLM (Generalized Language Model) GLM 是一種通用語言模型,設計用于處理和生成自然語言。以…

MacOS M系列芯片一鍵配置多個不同版本的JDK

第一步:下載JDK。 官網下載地址:Java Archive | Oracle 選擇自己想要下載的版本,一般來說下載一個jdk8和一個jdk11就夠用了。 M系列芯片選擇這兩個,第一個是壓縮包,第二個是dmg可以安裝的。 第二步:編輯…

eclipse插件開發(二)RCP第三方庫的引入方式

RCP第三方庫的引入 最近在RCP開發過程中遇到JSON串與對象互轉的問題,如何像spring開發模式一樣引入第三方庫呢?eclipse插件開發中用到p2庫,但也支持maven庫的引入。關鍵在于.target這個關鍵文件。 .target 文件用于定義一個目標平臺&#x…

民主測評要做些什么?

民主測評,作為一種重要的民主管理工具,旨在通過廣泛征求群眾意見,對特定對象或事項進行客觀、公正的評價。它不僅是推動民主參與、民主監督的重要手段,也是提升治理效能、促進社會和諧的有效途徑。以下將詳細介紹民主測評的主要過…

常見的布局方法及優缺點

頁面布局常用的方法有浮動、定位、flex、grid網格布局、柵格系統布局 浮動: 優點:兼容性好。 缺點:浮動會脫離標準文檔流,因此要清除浮動。我們解決好這個問題即可。 絕對定位 優點:快捷。 缺點:導致子…

如何以非交互方式將參數傳遞給交互式腳本

文章目錄 問題回答1. 使用 Here Document2. 使用 echo 管道傳遞3. 使用文件描述符4. 使用 expect 工具 參考 問題 我有一個 Bash 腳本,它使用 read 命令以交互方式讀取命令參數,例如 yes/no 選項。是否有一種方法可以在非交互式腳本中調用這個腳本&…

vue用vite配置代理解決跨域問題(target、rewrite和changeOrigin的使用場景)

Vite的target、rewrite和changeOrigin的使用場景 1. target 使用場景:target 屬性在 Vite 的 vite.config.ts 或 vite.config.js 文件的 server.proxy 配置中指定,用于設置代理服務器應該將請求轉發到的目標地址。這通常是一個后端服務的API接口地址。…

Chrome 源碼閱讀:跟蹤一個鼠標事件的流程

我們通過在關鍵節點打斷點的方式,去分析一個鼠標事件的流程。 我們知道chromium是多進程模型,那么,我們可以推測:一個鼠標消息先從主進程產生,再通過跨進程通信發送給渲染進程,渲染進程再發送給WebFrame&a…

【FAS】《CN103106397B》

原文 CN103106397B-基于亮瞳效應的人臉活體檢測方法-授權-2013.01.19 華南理工大學 方法 / 點評 核心方法用的是傳統的形態學和模板匹配,亮點是雙紅外發射器做差分 差分:所述FPGA芯片控制兩組紅外光源(一近一遠)交替亮滅&…

[力扣題解] 700. 二叉搜索樹中的搜索

題目:700. 二叉搜索樹中的搜索 思路 觀察法 二叉搜索樹的搜索操作,比較根節點的數值, 如果等于:找到了;大于根節點:在右子樹,往右走;小于根節點:在左子樹,…

【Java基礎】線程方法

start():啟動線程,使線程進入就緒狀態。 run():線程執行的代碼邏輯,需要重寫該方法。 停止線程 void interrupt() 中斷線程,讓它重新去爭搶cpu 如果目標線程長時間等待,則應該使用interrupt方法來中斷等待…

RDMA (2)

iWARP(RDMA)怎么工作的 招式1:bypass內核 非iWARP時,當應用向網絡適配器發出讀或者寫命令時,命令穿過用戶空間以及內核空間,因此需要在用戶空間和內核空間間進行切換。 iWARP使用RDMA,讓應用直接將命令送達到網絡適配器。這規避了對內核的調用,減少了開銷和延遲。 招式2…

【Kubernetes】三證集齊 Kubernetes實現資源超賣(附鏡像包)

目錄 插敘前言一、思考和原理二、實現步驟0. 資料包1. TLS證書簽發2. 使用 certmanager 生成簽發證書3. 獲取secret的內容 并替換CA_BUNDLE4.部署svc deploy 三、測試驗證1. 觀察pod情況2. 給node 打上不需要超售的標簽【可以讓master節點資源不超賣】3. 資源實現超賣4. 刪除還…

[補題記錄]Leetcode 209.長度最小的子數組

傳送門:長度最小的子數組 Problem/題意 給定一個整數數組和一個整數 target,要求算出數組中最小長度的連續子數組,數組元素的和大于等于 target。 Thought/思路 題目要求維護最小的長度,因此我們希望:當條件不滿足…

IP域名關系的研究與系統設計(學習某知名測繪系統)

IP域名關系庫管理包括域名庫檢索和whois庫檢索,詳情如下。 域名庫檢索支持以下5項功能: 1.通過過濾器檢索 篩選條件包含IP地址、口令、工具名稱、可利用的漏洞編號、創建時間; 2.通過關鍵字檢索 在查詢框中輸入域名庫名稱的部分關鍵詞&a…

計算機組成結構—IO系統概述

目錄 一、I/O 系統的發展 1. 早期階段 2. 接口模塊和 DMA 階段 3. 通道結構階段 4. 處理機階段 二、I/O 系統的組成 1. I/O 軟件 2. I/O 硬件 三、I/O 設備 1. I/O 設備分類 2. I/O 設備的組成 在計算機中,除 CPU 和主存兩大模塊之外,第三個重…

Apple開發者應用商店(AppStore)描述文件及ADHOC描述文件生成

創建AD HOC描述文件 1.選中Profiles,然后點擊加號創建 2.創建已注冊設備可安裝描述文件 3.選擇要注冊的id 4.選擇證書 5.選擇設備 6.輸入文件名,點擊生成 7.生成成功,點擊下載

TCP為什么握手是三次,而揮手是四次

TCP(傳輸控制協議)使用三次握手(3WHS)來建立一個可靠的連接,并使用四次揮手(4WHS)來終止連接。以下是每個步驟的詳細解釋: 三次握手(3WHS)建立連接&#xff…

solidity的modifier修飾符

solidity的modifier修飾符 什么是modifier修飾符 修飾器(modifier)是solidity特有的語法,類似于面向對象編程中的decorator,聲明函數擁有的特性,并減少代碼冗余。 Solidity 中關鍵字 modifier 用于聲明一個函數修改…

electron調用dll時應用程序閃退

electron調用dll時,直接閃退,且用如下方式監聽無任何輸出: window-all-closed 或 will-quit 此時需要檢查傳給dll的參數及參數類型是否正確,特別是使用ffi-napi時調用dll,使用 ref-napi定義類型,經常容易…