LLM少样本示例的上下文学习在Text-to-SQL任务中的探索

导语

本文探索了如何通过各种提示设计策略,来增强大型语言模型(LLMs)在Few-shot In-context Learning中的文本到SQL转换能力。通过使用示例SQL查询的句法结构来检索演示示例,并选择同时追求多样性和相似性的示例可以提高性能,同时,LLMs也从与数据库相关的知识增强中受益。

  • 会议:EMNLP 2023 Findings
  • 标题:Enhancing Few-shot Text-to-SQL Capabilities of Large Language Models: A Study on Prompt Design Strategies
  • 链接:https://arxiv.org/abs/2305.12586

1 引言

文本到SQL解析作为信息检索系统的关键组成部分,将自然语言查询转化为可从数据库中检索相关信息的SQL语句。近年来,神经符号设计方法结合了神经网络的功能和符号逻辑的严密性,成为提高系统可靠性和鲁棒性的首选技术。本文的重点在于探索和验证各种提示设计策略,旨在提升大型语言模型在文本到SQL解析任务中的表现,并特别关注于利用SQL查询的句法结构来改进示例选择,实验结果证明了这种方法在提升性能方面的有效性。同时也发现LLMs在某些情况下能从数据库知识增强中受益。本研究在Spider数据集上获得的执行准确度高达84.4,超越了目前最先进的系统和最佳微调系统,突显了所提策略的有效性和实用性

image.png

2 方法

2.1 示例选择

该模块的目标是从上下文的示例池中选择一部分标注示例。可以使用的方法如

  • 随机选取:从示例池中随机选择。
  • 基于kNN的增强示例选择(KATE) :利用句子编码器将所有示例转换为连续向量,并根据输入与示例池的相似度选择k个最相似的示例。

本文提出使用输出SQL查询来选择示例,而不是使用输入问题。这是因为作者认为Text-to-SQL中SQL语句包含比输入问题中更明确的关于问题结构的信息。此外,与只能转换成连续语义向量的自然语言问题不同,SQL查询可以根据其语法转换成离散特征向量。为此,首先将所有池实例的SQL查询转换成离散语法向量。然后,这些元素被映射到二进制特征,表示它们在查询中的存在。推理时,首先使用初步预测器生成SQL查询草稿。然后,应用相同的过程将这个草稿查询转换成离散向量,用于检索演示示例。

作者提出了一种与之前不同的演示选择策略,即寻求平衡演示的相似性和多样性,这是通过将给定示例的表示从表示问题语义的连续值向量更改为捕获SQL语法的离散值向量来实现的。为此,首先将标注示例池划分为表示不同类别的不相交分区(基于难度等级)。给定一个测试实例,使用初步预测器生成一个草稿SQL查询,并根据其类别,检索属于相关分区的候选示例。接下来对示例的离散向量实施k-means聚类,选择靠近每个聚类中心的k个多样化示例用于构建提示。演示选择策略过程概述在算法1中。

2.2 指令中的架构表示

指令对于设计提示至关重要,因为它们通过阐明提供的资源如何帮助推理过程来定义任务。本文主要关注于确定指令中表示结构化知识源的最佳方式,并确定可以增强推理过程的补充资源。

作者首先改变结构化知识的线性化方式。在以前的研究中,诸如数据库或表之类的结构化知识源已被线性化为“文本”序列。相反,本文提议使用“代码”序列来表示数据库,特别是用于最初构建表的CREATE查询,如附录中的清单1和2所示。这种线性化方法为每列提供了数据类型信息,并包含了数据库中所有外键约束的细节。此外,本文修改了指令中的其他资源,比如数据库中的问题和示例条目,使它们符合代码序列样式,通过将它们作为注释附加。

image.png

首先通过在整个数据库上下文中阐述每个类和属性的含义来增强每个类和属性的语义。具体来说,使用OpenAI的gpt-3.5-turbo来为每个表中的每列生成自然语言定义,考虑到所有其值和其他列。然后,将这些定义以块注释的形式附加到输入中,或者将它们作为内联注释插入到CREATE查询中。

此外,作者建议通过提供一个概述表之间连接的实体关系摘要来增强数据库结构的表示,以指定它们如何连接。如附录中的图9所示,一个数据库的实体关系图被用来列举不同表之间的所有可能路径。这些路径随后根据它们各自的长度以降序排列。这个总结在实验中被证明对于需要组合多个表的测试实例是有用的。清单5进一步展示了如何安排它们来构建提示。

image.png

image.png

2.3 文本到SQL的综合策略

实验发现,通过上下文学习(ICL)训练的模型对示例数量非常敏感,不同数量的示例导致模型性能表现出显著差异。为了在比较不同提示方法时得出有意义的结论,作者展示了具有相同配置但示例数量不同的模型的平均值和标准差。此外,采用多数投票法对表现多样的模型进行决策。具体来说,获取不同模型的贪婪解码预测结果,通过确定性数据库管理系统(DBMS)排除执行错误的预测,然后选择获得多数票的预测。其他整合方法,如自我一致性采样,也是可行的,但本文将其探索留待未来研究。详细结果可在附录的图10、11、12中查看。

作者提出了以下构建文本到SQL任务提示的程序。首先,给定一组注释示例A,建立一个将池子划分为不相交分区 A α , A β A_α , A_β Aα,Aβ 等的分类,每个分区包含SQL查询语法结构相对相似的示例。接下来,应用第2.1节中详述的k-means策略,为每个分区 A j A_j Aj 获取多样化的示例 D j D_j Dj。对于每个示例,通过将数据库转换成多个CREATE查询并增加与模式相关的知识来构建示例。在推理过程中,使用初步模型生成SQL查询草案,用于确定问题类别,进而确定构建提示的相应 D j D_j Dj。使用 D j D_j Dj中不同数量的样本获得多个预测,并通过多数投票得出最终预测。该方法的详细信息展示在算法2中。

image.png

3 实验

3.1 实验设置

数据集

  • Spider:复杂文本到SQL问题的跨领域数据集。
  • Spider-Syn:使用同义词替换Spider问题中的模式相关词汇,评估系统的鲁棒性。
  • Spider-DK:在Spider示例中添加领域知识,评估跨领域泛化能力。
  • Spider-Realistic:去除列名的明确提及,模拟更现实的文本-表格对齐设置。

模型

  • 使用Codex(基于GPT-3的变体)和ChatGPT (gpt-3.5-turbo)来评估不同ICL策略。
  • Codex在1到10-shot范围内提供结果,而ChatGPT因最大上下文长度限制仅提供1到5-shot的结果。

评估指标

  • 使用执行准确度作为所有实验的评估指标。

Baseline

主要分为Few-shot和Zero-shot上的实验,包括:

  • Few-shot
    • Random sampling ®: 从样本池中随机选择示例。
    • Similarity sampling (S)
    • Diversity sampling (D): 从样本池的k-Means聚类中选择多样化示例。
    • Similarity-Diversity sampling (SD): 根据算法1选择示例。
    • SD + schema augmentation (SA): 通过架构知识增强指令(语义增强或结构增强)。
    • SD + SA + Voting: 根据算法2描述的综合策略。
  • Zero-shot
    • Baseline - DB as text-seq: 文本到SQL任务的标准提示,其中结构化知识被线性化为文本序列。
    • Baseline - DB as code-seq: 通过将结构化知识源线性化为多个SQL CREATE查询来改进指令。
    • Baseline - DB as code-seq + SA: 通过架构知识增强指令。

image.png

3.2 主要结果

作者在code-davinci-002和gpt-3.5-turbo模型上测试了不同示例选择策略的效果。主要发现如下:

  • 相似性和多样性目标的采样过程:结合相似性和多样性目标在采样过程中可以获得更好的性能。
  • 架构表示的增强:在指令中加入架构表示(就是Listing 5中的最下面的那几行注释)可以提高性能。
  • 投票集成策略:结合不同示例数量模型的结果进行投票,可显著提高整体性能。
  • 架构增强在零次学习中的效果:将数据库转换为文本序列和CREATE查询的两种提示线性化方法进行了比较。后者显示出明显的性能提升。
  • 两种架构增强技术的对比:一种在表中的每列中添加语义信息,另一种加入实体关系知识。结果表明,结构增强(添加本体概要)在Few-shot设置中为Codex带来更大的改进,而语义增强(作为块注释添加列概要)在Zero-shot设置中对Codex以及Few-shot设置中对ChatGPT更有益。

image.png

研究显示,通过探索和实施不同的提示设计策略,可以显著提高LLMs在文本到SQL任务中的性能。这些策略不仅包括示例选择的优化,还包括架构表示的增强和投票集成方法的应用。通过这些策略,为利用LLMs在文本到SQL领域中的应用提供了有力的实证支持。

4 分析

4.1 基于预测语法的检索

现有的示例选择方法依赖于问题和数据库的语义表示。本文提出了一种专门针对代码生成任务的替代方法,该方法侧重于解决方案代码的语法。检查了不同策略生成的提示中的语法覆盖率和语法相似度。语法覆盖率是通过计算语法元素(关键字、运算符和标识符)的出现次数并将其除以所有语法元素的总数来计算的。另一方面,语法相似度是通过计算预测的SQL的离散向量表示与所选示例的gold SQL向量之间的欧几里得距离的平均值来测量的。如表1所示,这两个度量都有助于选择示例的质量。此外,两个度量的简单求和表明与系统性能的相关性,如图3所示。

作者通过以下理由论证本文策略的有效性:

  1. 在注释示例池中问题结构的多样性有限的情况下,某些测试问题可能缺乏可用于检索的相似示例;
  2. 问题/数据库的语义表示和距离度量本身不支持不同问题结构的封装和比较,而SQL语法提供了直接测量问题结构的方法。

鉴于这些限制,最佳策略是选择相似的示例,同时确保尽可能覆盖许多语法示例,以减轻基于相似性检索的潜在失败。

4.2 检索方法的比较分析

图4展示了各种基于相似度的检索方法性能的比较分析。此次调查的主要变量是为每个示例提取的表示,重点提取和比较以下嵌入类型:

  1. 由Sentence-BERT,RoBERTa-base、text-embedding-ada-002生成的问题嵌入;
  2. 结合问题和数据库,通过下面的方法获取embedding:
    • 使用单个模型(即在Spider上微调过的T5-base和text-embedding-ada-002)编码线性化文本序列的数据库schema或CREATE查询,
    • 使用不同模型,特别是RoBERTa-base用于编码问题和CodeT5-base或CodeBERTbase用于编码数据库;
  3. 预测SQL的语法嵌入,通过二进制编码来表示SQL语法元素的存在或量化它们的出现次数;
  4. 使用text-embedding-ada-002编码问题、数据库和预测SQL的嵌入。

关于Text-to-SQL任务的基于相似度的检索方法,可以得出以下结论:

  1. 问题本身就能有效地代表不同的示例用于检索;
  2. 与text-embedding-ada-002相比,RoBERTa-base提供了更好的比较嵌入;
  3. 可以使用未对Text-to-SQL示例进行微调的模型进行基于相似度的检索,同时仍然可以实现与微调模型相当的性能;
  4. 将数据库线性化为SQL查询有助于提取更好的嵌入。

image.png

此外,作者还对用于基于多样性的示例选择的多个嵌入进行了比较,包括编码问题、数据库和预测SQL的语义的嵌入,以及捕获预测SQL的语法特征的嵌入。如图5所示,预测SQL的语法嵌入作为基于多样性检索目的对不同示例进行对比的最有效基础。

4.3 架构增强

图6展示了对指令应用的各种架构增强的结果。可以观察到,在少数示例设置中改进不明显;然而,在零示例设置中,将所有表格列的描述纳入的语义增强被证明是有益的。

image.png

image.png

4.4 效果分析

为了确定最受益或最不受益于本文提出的方法的问题类型,本文还评估了不同模型在Spider数据集内各种问题类别的性能。如图7所示,本文的相似性-多样性策略对大多数问题类型都是有益的,除了中等难度的部分,其中包括最多样化的问题。这是相似性基于检索失败和语法覆盖变得更加关键的情况。此外,本文观察到,对于简单和中等难度的部分,增加架构语义更有效(尽管变异性很高),而对于更复杂的问题,增加架构结构更有效。这一观察使本文假设,具有挑战性的问题需要解决更多的表格,因此需要更全面地理解整个数据库结构。最后,综合方法在所有示例中都是有效的,特别是对于那些困难的问题提供了增加的好处。

4.5 初步模型

为评估用于生成草稿SQL的初步模型选择对本文方法的影响,本文对初步模型性能不同的方法进行了测试。图8显示,初步模型对相似性-多样性或综合方法的性能影响相对较小,随着使用更高性能的初步模型而逐渐改善。

image.png

5 相关工作

5.1 上下文学习(In-context Learning)

5.1.1 Prompt组织规范

提示组织探究选择和组织上下文示例的任务,这是提高模型性能的关键方面。多项研究提出了衡量示例适用性的指标,以及确定它们的最优排序。Liu等建议通过在嵌入空间采用k-NN方法,选择与测试示例语义相似的示例。Rubin等基于对比学习训练了一个提示检索器,其中示例被分类为正面或负面,如果它们在语言模型生成目标输出时,根据检索的示例和输入,排在概率的前k或后k位。Zhang等建议使用Q Learning来主动选择演示。Su引入了Vote-k方法,用于选择多样化且具代表性的示例进行池构建,然后基于相似性进行检索。

5.1.2 提示格式化

提示工程学关注于探究提示结构对下游任务性能的影响。对于涉及多步推理和较高复杂性的任务,已经开发了思维链提示方法。这种方法涉及将生成过程分布在多个步骤上,并使用模型自身的中间过程作为输入。Wang提出了采样多种不同的思维链,然后通过边际化所有可能的推理路径来选择最一致的答案。Press建议让LLMs提出后续问题是构建思维链过程的有效方式。Zhou提出了一种自动识别最佳提示的方法,通过在模型生成的指令池中搜索,给它们打分,并选择得分最高的提示。

5.2 与表格相关任务的编码

对结构化数据的编码对于各种与表格相关的任务至关重要,包括表格问答和文本到SQL。在表格问答的情况下,通常使用的方法是首先使用弱监督表格解析器来提取相关的表格单元,如有必要,再对检索到的数据应用相应的聚合操作符。例如,TAPAS在BERT模型中引入了额外的嵌入层,以捕获表格结构和数值信息。为了得到给定问题的答案,TAPAS使用两个分类层来预测聚合函数和相应的表格单元。更近期的工作将表格问答视为序列生成任务。他们将表格平铺成文本序列,并使用特殊标记来指示表格结构,同时对表格数据进行编码。文本到SQL是一项将自然语言问题转换为可以在数据库上执行的SQL查询的任务。在这项任务中,表格架构以输入形式提供。编码器应该能够将自然语言问题中的实体提及与架构对齐,同时理解架构结构信息(例如,外键/主键和列类型)。

6 总结

本研究探索了用于文本到SQL领域语义解析任务的各种提示设计方法。本文提出了一种利用示例的SQL语法结构来选择示例演示的方法,强调多样性和相似性作为采样目标。此外,本文发现大型语言模型(LLMs)从与数据库相关的知识增强中受益。未来的研究可以基于本文的发现来检验本文方法在其他领域的可转移性。通过持续改进LLMs在语义解析方面的能力,本文旨在为开发更准确、更稳健和更易理解的问答系统做出贡献。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/381994.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

腾讯云4核8G12M轻量应用服务器性能够用吗?支持多少人?

腾讯云轻量4核8G12M轻量应用服务器支持多少人同时在线?通用型-4核8G-180G-2000G,2000GB月流量,系统盘为180GB SSD盘,12M公网带宽,下载速度峰值为1536KB/s,即1.5M/秒,假设网站内页平均大小为60KB…

【计算机网络】协议层次及其服务模型

协议栈(protocol stack) 物理层链路层网络层运输层应用层我们自顶向下,所以从应用层开始探究应用层 协议 HTTP 提供了WEB文档的请求和传送SMTP 提供电子邮件报文的传输FTP 提供两个端系统之间的文件传输报文(message)是…

《杨绛传:生活不易,保持优雅》读书摘录

目录 书简介 作者成就 书中内容摘录 良好的家世背景,书香门第为求学打基础 求学相关 念大学 清华研究生 自费英国留学 法国留学自学文学 战乱时期回国 当校长 当小学老师 创造话剧 支持钱锺书写《围城》 出任震旦女子文理学院的教授 接受清华大学的…

深入探索Java IO:从基础到高级操作全览

深入探索Java IO:从基础到高级操作全览 Java IO一、概览二、磁盘操作三、字节操作实现文件复制装饰者模式 四、字符操作编码与解码String 的编码方式Reader 与 Writer实现逐行输出文本文件的内容 五、对象操作序列化Serializabletransient 六、网络操作InetAddressU…

python3 获取某个文件夹所有的pdf文件表格提取表格并一起合并到excel文件

下面是一个完整的示例,其中包括了merge_tables_to_excel函数的定义,并且假设该函数的功能是从每个PDF文件中提取第一个表格并将其合并到一个Excel文件中: import os from pathlib import Path import pandas as pd import pdfplumber …

【数据分享】1929-2023年全球站点的逐日降水量数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标,说到常用的降水数据,最详细的降水数据是具体到气象监测站点的降水数据! 有关气象指标的监测站点数据,之前我们分享过1929-2023年全…

MYSQL存储过程(含入参、出参)

1、创建库存表语句 -- eladmin.t_stock definitionCREATE TABLE t_stock (id bigint(20) NOT NULL AUTO_INCREMENT,quantity bigint(20) NOT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT4101 DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_bin; id为主键,便于…

【Java EE初阶十二】网络初识

1. 网络发展史 网络发展的几个主要时期: 单机时代->局域网时代->广域网时代->移动互联网时代 随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同工作来完成 业务,就有了网络互…

基于 multiprocessing.dummy 的多线程池与单线程访问多网页的比较示例

一、示例代码: from multiprocessing.dummy import Pool as ThreadPool import time import requestsurls [ # URL队列,通过多线程访问http://www.python.org,http://www.python.org/about/,http://www.…

每日五道java面试题之java基础篇(二)

第一题. 为什么说 Java 语⾔“编译与解释并存”? ⾼级编程语⾔按照程序的执⾏⽅式分为编译型和解释型两种。 简单来说,编译型语⾔是指编译器针对特定的操作系统将源代码⼀次性翻译成可被该平台执⾏的机器码;解释型语⾔是指解释器对源程序逐…

【正在更新】从零开始认识语音识别:DNN-HMM混合系统语音识别(ASR)原理

摘要 | Abstract TO-BE-FILLED 1.前言 | Introduction 近期想深入了解语音识别(ASR)中隐马尔可夫模型(HMM)和深度神经网络-隐马尔可夫(DNN-HMM)混合模型,但是尽管网络上有许多关于DNN-HMM的介绍,如李宏毅教授的《深度学习人类语言处理》[1],…

问题:超声波纵波斜入射时,当入射角大于第一临界角小于第二临界角时,在第二介质内只有折射横波。 #微信#经验分享#其他

问题:超声波纵波斜入射时,当入射角大于第一临界角小于第二临界角时,在第二介质内只有折射横波。 参考答案如图所示

SpringBoot 接入讯飞星火大模型实现对话

申请地址 https://xinghuo.xfyun.cn/sparkapi?scrprice 免费申请200万Token 开发文档 https://www.xfyun.cn/doc/spark/Web.html#_1-接口说明 页面最下面有相关demo可以参考 介绍 接口是以套接字的形式分段返回,而且非http请求,比较繁琐,官…

Sam Altman计划筹集5至7万亿美元;OPPO发布AI时代新功能

🦉 AI新闻 🚀 Sam Altman计划筹集5至7万亿美元,建立全球芯片帝国 摘要:Sam Altman宣布计划筹集5至7万亿美元来建立全球芯片帝国,以满足日益增长的AI基础设施需求。他已在全球寻求资金,包括中东土豪。此外…

开发JSP自定义标记

开发JSP自定义标记 您已经学习了如何用JavaBean处理JSP页面的业务逻辑。除此以外,您还可以用自定义标记处理JSP应用程序中反复出现的业务逻辑要求。 tag是程序中使用的执行重复性任务的可重用单元。例如, 是使主体文本在网页中间出现的HTML标记。JSP可用于创建于XML标记类似…

​(三)hadoop之hive的搭建1

下载 访问官方网站https://hive.apache.org/ 点击downloads 点击Download a release now! 点击https://dlcdn.apache.org/hive/ 选择最新的稳定版 复制最新的url 在linux执行下载命令 wget https://dlcdn.apache.org/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz 2.解压…

SpringBoot全局异常捕获处理实现方案

在Spring Boot中实现全局异常处理可以通过以下方式: 使用ControllerAdvice注释创建一个全局异常处理类,并使用ExceptionHandler注释来定义具体异常的处理方法。 import your.package.IllegalNumberException; import org.springframework.http.HttpSta…

继续教育试题答案?学生党都在用的九款搜题工具来了 #其他#笔记#知识分享

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.题老大 这是一个公众号 适合大学生找答案。包含了大学网课答案,期末复习资料,新视野英语,考研答案…

[office] excel如何计算毛重和皮重的时间间隔 excel计算毛重和皮重时间间隔方法 #笔记#学习方法

excel如何计算毛重和皮重的时间间隔 excel计算毛重和皮重时间间隔方法 在日常工作中经常会到用excel,有时需要计算毛重和皮重的时间间隔,具体的计算方式是什么,一起来了解一下吧 在日常工作中经常会到用excel,在整理编辑过磅数据…

「daily updating」k3s + openfaas serverless bench 踩坑指南持续更新中

OpenFaas从入门到实战 – 踩坑指南 | k3dOpenFaas | deploy your first python function https://blog.alexellis.io/first-faas-python-function/ https://docs.openfaas.com/deployment/kubernetes/ 搭建环境:第一种方法失败,第二种方法…
最新文章