iT邦幫忙

2024 iThome 鐵人賽

DAY 24
0
生成式 AI

懶人救星:生成式AI 系列 第 24

Day24-Text to SQL 的改進方法: DAIL-SQL 心得

  • 分享至 

  • xImage
  •  

前言✨

在當前數位時代中,資料庫查詢已成為許多行業的核心任務,然而對於不具備 SQL 語法知識的人來說,查詢資料庫仍是一大挑戰。隨著生成式 AI 模型的進步,語言模型不僅在自然語言處理領域取得顯著成就,更展現了其在自然語言到 SQL 查詢轉換(Text-to-SQL)任務中的潛力。將複雜的資料庫查詢簡化為自然語言輸入,進一步拉近了專業技術和非技術用戶之間的鴻溝。

昨天我們介紹了 DIN-SQL 如何改進 LLM Text-to-SQL 的方法,解決了欄位名稱語意理解困難、 SQL 困難語法錯誤、幻覺等問題,雖然已經能解決掉大部分的問題,但再 LLM 生成方面還是會受限於機率模型的原因,導致生成錯誤。今天將透過此論文一起來發現 LLM 偏好的 Prompt Template 吧。

【Prompt Engineering】

前面我們先介紹了基本的 Text-to-SQL 方法,簡實應用上我們不可能只針對單一表格查詢,經常會使用到多表 JOIN、GROUP BY、Subquery等進階方法,因此我們需要更深入探討解決方法。本篇將會透過兩篇 Text-to-SQL 競賽前幾名的論文來探討 Prompt Engineering 的方法。

介紹一下常見的幾種 Text-to-SQL Prompt:

  1. Basic Prompt(BS𝑝)
    基本的 Prompt 格式。
    https://ithelp.ithome.com.tw/upload/images/20240923/20168117yZzBsDu9J8.png

  2. Text Representation Prompt(TR𝑝)
    相較於BS Prompt 在起始位置增加 instruction 。
    https://ithelp.ithome.com.tw/upload/images/20240923/20168117XpgfPEeluN.png

  3. OpenAI Demostration Prompt(OD𝑝)
    這是OpenAI官方範例,特色是會在前面加上#字號,並在上方增加指令"Complete sqlite SQL query only and with no expla nation"。
    https://ithelp.ithome.com.tw/upload/images/20240923/20168117z3RSb1RQjS.png

  4. Code Representation Prompt(CR𝑝)
    以DDL格式包裝成Prompt,並且能在CODE-DAVINCI-002模型上達到75.6%的準確度。
    https://ithelp.ithome.com.tw/upload/images/20240923/20168117aR9z3jUB2s.png

  5. Alpaca SFT Prompt(AS𝑝)
    以Llama格式設計成Alpaca SFT Prompt,用於後續supervised fine-tuning。
    https://ithelp.ithome.com.tw/upload/images/20240923/20168117a91AbzHs2A.png

實驗結果:

  • 實驗模型: GPT-4、GPT-3.5-TURBO、TEXT-DAVINCI-003和Vicuna-33B
  • 資料集:Spider-dev
  • Prompt: BS𝑝、OD𝑝、TR𝑝、CR𝑝、AS𝑝 (Zero-shot)
    https://ithelp.ithome.com.tw/upload/images/20240924/20168117ZYzkVlwpYF.png

https://ithelp.ithome.com.tw/upload/images/20240924/20168117R7naluOT6A.png

https://ithelp.ithome.com.tw/upload/images/20240924/20168117UGVZ7dXcQb.png

透過上圖可以發現 OD𝑝 的綜合水平最好,而 GPT-3.5-TURBO 使用 OD𝑝 可以達到 75.5% 的執行準確率,能用極低的成本實現跟 GPT-4 差不多的水平。出乎意料的是 GPT-4 在具有 FK 的任務上偏好簡單的 BS𝑝 方法,但整體來說還是使用 OD𝑝 的 Prompt 較符合整體效益。也能看出目前開源模型還是跟雲端模型有一定差距。


In-Context Learning for Text-to-SQL
論文中也使用了一種 Similarity Selection Context 概念用於提示 LLM 如何生成正確的 SQL 語法,方法大致可分為以下四種:

  • Random:
    顧名思義為隨機抽取k個範例加入Prompt。

  • Question Similarity Selection
    透過 pre-trained language model 針對「Question」去尋找最相似的範例,常見有 Embedding, KNN 方法。

  • Masked Question Similarity Selection
    透過替換 Table name、Column name 和 Value 為 Masked 來消除 Embedding 落入特定領域的影響。

  • Query Similarity Selection
    先用基礎方法生成出 SQL Query 後再透過 Embedding 等方法找出相似的範例。

Example Organization

  1. Full-Information Organization (FI𝑂)
    包含Schema一同提供給LLM,缺點浪費大量tokens。
    https://ithelp.ithome.com.tw/upload/images/20240923/20168117cJx7GMZoq7.png

  2. SQL-Only Organization(SO𝑂)
    僅提供Query Syntax,缺點是少了Question和Query的相關性,會導致LLM效果變差。
    https://ithelp.ithome.com.tw/upload/images/20240923/2016811716MCnfz8Gv.png

  3. DAIL

    • Question Representation:DAIL模型使用CR,因為『Create TABLE…』方式(DDL)的 Schema 包括主鍵和外鍵。這對於預測如 "JOIN" 子句等複雜 SQL 結構特別有用。並且 DDL 格式已在 LLM 預訓練中得到充分的知識。
    • In-Context Learning:移除sechma並保留問題-SQL對應關係,同時提高token效率。
      https://ithelp.ithome.com.tw/upload/images/20240923/20168117TZiYtNJAKA.png

實驗結果:

  • 實驗模型: GPT-4, GPT-3.5-TURBO, TEXT-DAVINCI-003和Vicuna-33B
  • 資料集: Spider-dev、Spider-Realistic
  • Prompt: CR𝑝(作者認為透過上圖 CR𝑝 在One-Shot中表現最好,因此後續實驗都使用CR𝑝)
  • 檢索方法: FI𝑂, SO𝑂, DAIL

https://ithelp.ithome.com.tw/upload/images/20240924/20168117Y3f8GfDDFp.png

  • GPT-4 + In-Context Learning 在 Spider-dev 和 Spider-Realistic 上效果最好。
  • 在DAIL方法下:
    • Spider-dev: 72.3% → 83.5%
    • Spider-Realistic: 66.5 % →76.0%。
  • GPT-3.5-Turbo 和 TEXT-DAVINCI-003 的 In-Context Learning 能力有限,也能看出這兩個模型當提示變長時反而效果變差,和筆者使用 GPT-3.5-Turbo 的心得差不多,指令過長會導致效果不穩定。
  • Vicuna-33B 的表現:隨著範例數量的增加,其性能在DAIL方法下持續提高。

結論🎯

筆者僅挑幾個論文中的重點實驗介紹。筆者幫大家整理了以下 Text-to-SQL 的重點,有些內容可能沒在本文章出現過,有興趣的朋友可以去看原文。

  • 告訴 LLM 外鍵(Foreign Key)資訊和"with no explanation"規則對 Text-to-SQL 能提升準確度。
  • Zero-Shot方法下:OD𝑝 + FK + "with no explanation" + GPT-3.5-TURBO 的CP值最高~
    (with no explanation 是指作者發現在 Prompt 中加入此指令模型能有效提升,類似CoT的相反操作。)
  • Few-Shot方法下:GPT-4 + DAIL效果最好,但相對消耗的運算資源高,運算時間長不符合實際應用。
  • 文中還提到使用開源模型 FineTune 效果僅能接近 GPT-3.5-TURBO ,因此還是建議使用雲端模型效果更好。

上一篇
Day23-Text to SQL 的改進方法: DIN-SQL 心得
下一篇
Day25-測試你的 RAG Chatbot 到底行不行?幾個評估指標給你答案!
系列文
懶人救星:生成式AI 26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言