【Text2SQL 論文】How to prompt LLMs for Text2SQL

論文:How to Prompt LLMs for Text-to-SQL: A Study in Zero-shot, Single-domain, and Cross-domain Settings

????

arXiv:2305.11853, NeurlPS 2023

Code: GitHub

一、論文速讀

本文主要是在三種常見的 Text2SQL ICL settings 評估不同的 prompt construction strategies。

二、Text2SQL ICL settings

論文在下面三種 Text2SQL settings 下來做的評估:

  • Zero-shot Text2SQL:輸入一個 task instruction、一個 test question 以及相應的 DB,在沒有任何 demonstrations 情況下讓 LLM 直接推理出 SQL
  • Single-domain Few-shot Text2SQL:ICL 的 demonstrations 是構造自與 test question 相同的 database。這個 setting 的目標是評估 LLM 在最小的域內訓練數據下執行 Text2SQL 的能力。
  • Cross-domain Few-shot Text2SQL:ICL 的 demonstrations 是構造自與 test question 的不同的 database 中。這個 setting 的目標是評估 LLM 通過 out-of-domain demonstrations 中來學習的泛化能力。

三、Prompt Construction

論文在每個 Text2SQL setting 中測試了不同的 prompt construction 的效果。

一個 prompt 中包含 Database Prompt 和 Demonstration Prompt。

3.1 Database Prompt

一個關系型 DB 包含 database schema 和 database content:

  • database schema 由 table headers 和 tables 之間的 relationships 組成。
  • database content 指的是存儲在 tables 中的 data
3.1.1 Database Schema 的 prompt 結構

下圖展示了之前的研究中使用的 database schema 的各種 prompt 結構:

在這里插入圖片描述

同時為了保證文本的一致性,論文對 db schema 和 SQL 做了規范化:將 SQL 中除了數據庫內容之外的所有單詞轉換為小寫,并統一文本中的空格和換行符。如下圖就是規范化前后的示例:

在這里插入圖片描述

3.1.2 Database Content 的 prompt 結構

之前的研究內容也表示,了解數據庫的內容示例可以提高模型的性能。

下圖展示了 Database Content 部分的 prompt style:

在這里插入圖片描述

  • InsertRow:通過 INSERT INTO 語句顯示每個 table 的幾行數據
  • SelectRow:顯示 SELECT * FROM T LIMIT X 的查詢結果
  • SelectCol:按照列式的格式顯示多行數據

本文提出使用 SELECT DISTINCT [Column] FROM [Table] LIMIT R 去列出 R 行數據,從而避免重復。

3.2 Demonstration Prompt

在 few-shots settings 中,demonstrations 被放入 prompt text 來輸入給 LLM。

在 single-domain few-shot setting 中,這里融入了一些 question-SQL 的 pairs 作為 demonstrations。

在 cross-domain few-shot setting 中,以往的研究都是:

  • 要么 N 個 examples 都來自于一個相同的 db
  • 要么 N 個 examples 的每一個來自于不同的 db

本文考慮了更泛用的場景:N 個 examples 是由 M 個 db 組成,每個 db 由 K 個 question-SQL pairs,由此 M × K = N M \times K = N M×K=N

四、實驗

本文在 Spider 數據集的 dev split 上實驗,采用執行精度(EX)來評估 predicted SQL 和 gold SQL。

這里論文指出,在選擇 few-shots 的 demonstrations 時,由于少數 db 包含長模式,這有可能導致 prompt token 數量超過 LLM 限制,所以在構造 CreateTable prompt 時,這里只使用 token 少于 1000 的 db。

具體的實驗細節可以參考原論文。

五、實驗結果

這一章介紹了在 zero-shot、single-domain 和 cross-domain 的三種 settings 下 Text2SQL 的經驗發現。

5.1 zero-shot 的 Text2SQL

zero-shot setting 中重點關注于比較不同的 database prompt construction。下圖展示了多種 database prompt 的 Codex 和 ChatGPT 的表現:

在這里插入圖片描述

實驗發現:

  • 規范化后的 db schema 和 SQL 可以有更好的表現
  • db table 的 relationship 和 content 是很重要的,有效地提高了 LLM 的表現
  • Codex 在 zero-shot Text2SQL 任務上始終優于 ChatGPT

基于以上發現,論文建議將 Codex 與規范化后的 CreateTable-SelectCol prompt construction 結合起來使用,來實現 zero-shot 的 Text2SQL。

5.2 single-domain 的 Text2SQL

下圖展示了在 Codex 和 ChatGPT 上做 single-domain Text2SQL 任務時,不同的 in-domain examples 的執行精確度的實驗結果:

在這里插入圖片描述

得出以下結論:

  • in-domain 的 demonstrations 能有效提升 LLM 的表現,并隨著示例數量的提高,LLM 的效果也在逐漸變好
  • LLM 能夠從 in-domain demonstrations 中快速學習到 table relationship,但難以從中學習到 table content 的知識,因此 table content 的 prompt 是重要的

5.3 cross-domain 的 Text2SQL

ICL 的 demonstrations 中使用了 M 的 demonstration databases,每一個包含 K 個 NLQ-SQL pairs。

下面這個熱力圖展示了 M 和 K 的個數對精確度的影響(橫軸是 M,縱軸是 K,顏色越深,精確度越高):

在這里插入圖片描述

這里對實驗的分析可以參考原論文。

總之,out-of-domain 的 demonstrations 增強了 LLM 在 Text2SQL 中的能力,但這些示例并沒有提供特定于 DB 的知識,因此,仔細構建 Database Prompt 仍然至關重要,這也與在 zero-shot setting 中所做的觀察是一致的。

六、總結

整的來說,論文在三種 Text2SQL ICL settings 中比較了各種 prompt constructions 的效果,為未來的研究提供了指導。

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

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

相關文章

數據分析必備:一步步教你如何用Pandas做數據分析(18)

1、Pandas 串聯 Pandas 連接的操作實例 Pandas提供了各種功能,可以輕松地將Series,DataFrame和Panel對象組合在一起。 pd.concat(objs,axis0,joinouter,join_axesNone,ignore_indexFalse)objs ? 這是Series的序列或映射,DataFrame或Panel對…

【云嵐到家】-day01-項目熟悉-查詢區域服務開發

文章目錄 1 云嵐家政項目概述1.1 簡介1.2 項目業務流程1.3 項目業務模塊1.4 項目架構及技術棧1.5 學習后掌握能力 2 熟悉項目2.1 熟悉需求2.2 熟悉設計2.2.1 表結構2.2.2 熟悉工程結構2.2.3 jzo2o-foundations2.2.3.1 工程結構2.2.3.2 接口測試 3 開發區域服務模塊3.1 流程分析…

Python接口自動化之使用requests庫發送http請求

requests庫 ? 什么是Requests ?Requests 是?Python語?編寫,基于urllib,采?Apache2 Licensed開源協議的 HTTP 庫。它? urllib 更加?便,可以節約我們?量的?作,完全滿?HTTP測試需求。 ? 安裝:cmd命…

docker 拉取不到鏡像的問題:拉取超時

error pulling image configuration: download failed after attempts6: dial tcp 31.13.94.10:443: i/o timeout 首先設置國內的鏡像源&#xff1a;復制下面直接執行 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF{"registry-mirrors"…

【POSIX】消息類的格式與使用

本文給出一個MacOS操作系統中的消息類的使用過程示例&#xff08;結合gencat命令&#xff0c;<nl_types.h>頭文件以及catopen,catgets,catclose3個函數&#xff09; 首先根據對應的操作系統&#xff0c;查看 gencat 命令 man gencat 可以詳細看到其中對于輸入文件&…

Spark MLlib 機器學習詳解

目錄 &#x1f349;引言 &#x1f349;Spark MLlib 簡介 &#x1f348; 主要特點 &#x1f348;常見應用場景 &#x1f349;安裝與配置 &#x1f349;數據處理與準備 &#x1f348;加載數據 &#x1f348;數據預處理 &#x1f349;分類模型 &#x1f348;邏輯回歸 &a…

? 傳知代碼 ? 輔助任務改進社交帖子多模態分類

&#x1f49b;前情提要&#x1f49b; 本文是傳知代碼平臺中的相關前沿知識與技術的分享~ 接下來我們即將進入一個全新的空間&#xff0c;對技術有一個全新的視角~ 本文所涉及所有資源均在傳知代碼平臺可獲取 以下的內容一定會讓你對AI 賦能時代有一個顛覆性的認識哦&#x…

【自然語言處理】【Scaling Law】語言模型物理學 第3.3部分:知識容量Scaling Laws

語言模型物理學3.3&#xff1a;知識容量Scaling Laws 論文名稱&#xff1a;Physics of Language Models: Part 3.3, Knowledge Capacity Scaling Laws 論文地址&#xff1a;https://arxiv.org/pdf/2404.05405 相關博客 【自然語言處理】【Scaling Law】Observational Scaling …

R語言探索與分析17-股票題目

Value at Risk&#xff08;VaR&#xff09;是一種統計技術&#xff0c;用于量化投資組合在正常市場條件下可能遭受的最大潛在損失。它是風險管理和金融領域中一個非常重要的概念。VaR通常以貨幣單位表示&#xff0c;用于估計在給定的置信水平和特定時間范圍內&#xff0c;投資組…

OpenCV的小部件最基本范例

OpenCV也有與PYQT類似的小部件&#xff0c;例如滑塊slider。OpenCV可以用與PYQT類似的“信號與槽”方法&#xff0c;也可以在函數中直接查詢小部件的值。 import cv2 import numpy as npcv2.namedWindow(Show1) image np.zeros((100, 400, 3), np.uint8) # 創建一個空白內容…

JavaScript基礎知識4(數組、函數、參數、作用域、具名和匿名函數、邏輯運算符短路、轉化布爾類型)

JavaScript基礎知識4&#xff08;數組、函數、參數、作用域、具名和匿名函數、邏輯運算符短路、轉化布爾類型&#xff09; 數組數組是什么&#xff1f;數組的基本使用定義數組和數組單元訪問數組和數組索引數據單元值類型數組長度屬性 操作數組 函數聲明和調用聲明&#xff08;…

(面試官問我微服務與naocs的使用我回答了如下,面試官讓我回去等通知)微服務拆分與nacos的配置使用

微服務架構 正常的小項目就是所有的功能集成在一個模塊中&#xff0c;這樣代碼之間不僅非常耦合&#xff0c;而且修改處理的時候也非常的麻煩&#xff0c;應對高并發時也不好處理&#xff0c;所以 我們可以使用微服務架構&#xff0c;對項目進行模塊之間的拆分&#xff0c;每一…

前端傳參數后端變量類型能夠接受到List卻無法接收到值

問題描述 今天寫了個接口&#xff0c;下圖所示 ReqVO里是這樣的&#xff1a; 然后前端去請求&#xff0c;從請求結果中看發現這里值是在的&#xff08;有經驗的可能就看出來了otherInfo.id: 這樣以參數后端是接收不到的&#xff0c;但是當時沒發現&#xff09; 傳進來后端…

維納運動的概念

維納運動&#xff08;Wiener Process&#xff09;&#xff0c;也稱為標準布朗運動&#xff0c;是一種重要的隨機過程&#xff0c;廣泛應用于數學、物理學和金融學等領域。它是一個連續時間的隨機過程&#xff0c;具有一些特殊的性質&#xff0c;使其成為描述隨機動態系統的經典…

GAT1399協議分析(8)--批量圖像查詢

一、請求消息定義 視頻圖像包含視頻片段、 圖像、 文件、 人員、 人臉、 機動車、 非機動車、 物品、 場景和視頻案事件、 視頻圖像標簽等對象 在消息體中,可以包含其中一種類,加上Data字段即可。 ImageInfo對象 二、請求消息實例 wireshark 抓包實例 請求: 文本化: /V…

制造執行MES系統在光伏行業的應用

全球對可再生能源的需求不斷增長&#xff0c;光伏能源作為一種清潔、可持續的能源形式&#xff0c;已經在廣泛應用中受到了廣泛關注。為滿足工業領域的光伏能源需求&#xff0c;光伏制造執行系統(MES)作為一種集成化的技術解決方案&#xff0c;提供了更高效、更可靠的解決方案。…

WPS的JSA算國產編程語言,IDE,腳本工具嗎?javascript代替VBA

現在wps用javascript代替VBA&#xff0c;應該算很成功了吧。 如果可以獨立出來變成一個腳本語言&#xff0c;簡單的IDE(本身也有類似VBA&#xff0c;不要寄宿在WPS里面運行&#xff0c;這樣就可以變成VBS一樣執行腳本了&#xff0c;用來開發按鍵精靈,LUA一樣的腳本很不錯 以下…

Activity->Activity中動態添加Fragment->Fragment回退棧BackStack

Fragment回退棧 Fragment回退棧用于管理Fragment的導航歷史(添加、刪除、替換)。每個Activity都有一個包含其所有Fragment的FragmentManager&#xff0c;調用其addToBackStack方法時&#xff0c;這個事務就會被添加到FragmentManager的回退棧中當用戶按下返回鍵時&#xff0c;…

MySQL報ERROR 2002 (HY000)解決

今天在連接客戶服務器時MySQL的時候報: ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql/mysql.sock’ (2) [rootXXX ~]# mysql -uroot -p Enter password: ERROR 2002 (HY000): Can’t connect to local MySQL server through socket…

rman恢復后,少部分數據文件狀態為MISSING000**

客戶有套一體機&#xff0c;每天晚上21點開始做rman完全備份&#xff0c;大約第2天上午9點多完成備份&#xff0c;rman備份保留策略保留一份完全備份 6月1日晚21點自動發起備份&#xff0c;6月2日上午10點15分完成備份&#xff0c;并生成了一個控制文件備份 c-4063271871-2024…