【Text2SQL 论文】IncSQL:通过增量式生成 action 序列来得到 SQL

论文:IncSQL: Training Incremental Text-to-SQL Parsers with Non-Deterministic Oracles

⭐⭐⭐

ICLR 2019,arXiv:1809.05054, Microsoft Research

一、论文速读

本文提出了 IncSQL,一个使用 Non-Deterministic Oracles 思路的增量式 Text2SQL Parser,在 WikiSQL 上做的测试。

该模型的输入 x x x 包括 NL question 和 table schema(不包含 content),输出 y y y 是一个 SQL query。如下图所示:

由于 WikiSQL 的 SQL 结构是固定的,所以每个 SQL query 唯一对应一个 structured representation,比如上面 example 的 SQL 对应下面这个结构:

  • 这个 structure 包含 AGG、SELCOL 和 COND 三个部分。

1.1 将对 SQL 的生成任务,视为对 action sequence 的生成

本文模型将 y y y 的生成转变为这个 structure 的生成,这个 structure 的生成又转为对 action sequence 的生成:有一个初始 parser state p 0 p_0 p0 和一个空的 struct,每一个 action 会在 struct 中填充一部分内容,并将 parser state 由 p p p 进化为 p ′ p' p。所有可能的 action 如下表:

  • AGG(agg) action 表示为 struct 的 AGG 部分填充上 agg 值
  • SELCOL(ci) action 表示为 SELCOL 部分填充上 c i c_i ci
  • CONDCOL(ci) action 表示为 COND 部分增加一列,并且将这一列中的 COL 部分填充为 c i c_i ci
  • CONDOP(op) action 表示为 COND 中的 OP 部分填充 op
  • CONDVAL(w i:j) action 表示为 COND 中的 VAL 填充上 question[i:j] 的值
  • END 表示 action sequence 的结束

由此,前面 Example 中的 SQL 的生成就可以被视为下面这个 action sequence:

在这里插入图片描述

这样,我们通过生成 action sequence,就可以生成一个 SQL query。

1.2 Decoder

假如我们已经通过 encoder 获得了 question 和 column headers 的上下文表示,使用 a a a 表示一个 action。

Decoder 模型就可以视为一个概率分布: P θ ( a ∣ x , a < i ) P_\theta (a | x, a_{\lt i}) Pθ(ax,a<i) —— 表示根据 input x 和过去的 actions 来生成当前 step 的 action。

在一个 step 中,具体选择哪一个 action 作为下一个生成结果,是一个分类问题,模型为所有候选 actions 打分,并通过 softmax 概率化,按照贪心策略选择当前 step 最有可能的 action。

模型的具体选择上,使用了 LSTM 来一个 step 一个 step 的生成,每一个 step 基于 LSTM 当前的 hidden state 和 question 与 schema 的 representation 来做预测。具体做法可以参考原论文。

1.3 Encoder

Encoder 主要是为 question 和 column headers 生成 context-sensitive representation,本论文主要使用了 bi-LSTM,具体细节不再介绍。

1.4 整体模型架构

有了 Encoder 和 Decoder,本论文的模型架构如下图所示:

二、Non-Deterministic Oracles

由于同一个 question,可以对应多个等价的 SQL,因为 WHERE 子句中不同的 cond 是可以互换的。

以往的研究中,由于 order-matters 问题,都假设了每个 question 仅有一个正确的 SQL query,但这在实践中并不符合实际。

在本文模型的训练过程中,在让 model 生成下一个 step 的 action 时,允许他探索多种目标策略,而不仅仅单一的目标策略,这种方法被称为 Non-Deterministic Oracles

比如在最开始的例子中,是先生成的 CONDCOL(c3)CONDCOL(c2),但训练时也允许先 CONDCOL(c2)

同时 Non-Deterministic Oracle 还增加了一个特殊列名 ANYCOL,因为所要预测的 column name 有可能不出现在 question 中,比如 “What is the area of Canada?” 中并没有 country 这个单词,为了预测这个单词,模型可以输出 CONDCOL(ANYCOL),在后面,我们会将其做扩展,比如模型如果想表达 ANYCOL='Willis',那我们会扩展为 rank='Willis' OR name='Willis' OR ...,这样当 value 可以明确地解析为一个 column name 时,这样的 ANYCOL 时被视为正确的操作。

模型的损失函数被定义如下:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[[nodiscard]]--c++17

作用 用于标记某个函数或者类的成员函数的返回值需要处理。 被标记的函数和类的函数被调用&#xff0c;但是返回值没有接收的时候&#xff0c;编译器会warning. 标记函数 #include <iostream>[[nodiscard]] int square(int x) {return x * x; }int main() {// 注意&am…

C++青少年简明教程:switch语句

C青少年简明教程&#xff1a;switch语句 在C中&#xff0c;switch语句用于基于一个表达式的值来执行不同的代码块。这个表达式通常是一个整数类型&#xff08;如int&#xff0c;char&#xff0c;或枚举类型&#xff09;&#xff0c;并且case标签必须是整数常量表达式。 语法格…

香橙派Kunpeng Pro测评:他给的实在太多了

文章目录 一、开箱环节1、包装配置2、开发板包装3、开发板3.1、开发版正面3.2、开发板背面 二、硬件配置1、硬件配置清单 2、配置图解 三、开机~启动&#xff01;1、运行系统1.1、外设配置1.2、系统启动1.3、官方教程 2、openEuler系统概览 四、系统测试1、性能测试1.1、安装sy…

漫步者x1穷鬼耳机双耳断连

困扰了我两天&#xff0c;终于有时间解决这个问题了&#xff0c;查看了一堆都是别的型号。怎么没人用这个啥按键都没有的耳机QAQ&#xff0c;幸好给我找到了说明书&#xff0c;啊哈哈&#xff01; 说明书地址

堆结构知识点复习——玩转堆结构

前言:堆算是一种相对简单的数据结构&#xff0c; 本篇文章将详细的讲解堆中的知识点&#xff0c; 包括那些我们第一次学习堆的时候容易忽略的内容&#xff0c; 本篇文章会作为重点详细提到。 本篇内容适合已经学完C语言数组和函数部分的友友们观看。 目录 什么是堆 建堆算法…

电脑找不到opencl.dll原因分析及5种详细的解决方法

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到opencl.dll”。这通常意味着计算机中缺少或损坏了与OpenCL&#xff08;开放计算语言&#xff09;相关的动态链接库文件。OpenCL允许应用程序利用图形处理器&#xff08;GPU&#xff…

【问题记录】QT“类型强制转换“:无法从“ATL::CString“转换为“LPCWSTR“

一&#xff0c;问题现象 环境&#xff1a;VS2019QT 报错提示&#xff1a;“类型强制转换”&#xff1a;无法从"ATL::CString"转换为"LPCWSTR" 二&#xff0c;解决方法 打开项目属性&#xff0c;设置字符集&#xff0c;如下所示&#xff1a;

BFS解决最短路问题(详解)

目录 BFS简介 && 框架&#xff1a; 一.二叉树的最小深度 二&#xff1a;迷宫中里入口最近的出口&#xff1a; 三.最小基因变化: 四&#xff1a;单词接龙&#xff1a; ​五&#xff1a;为高尔夫比赛砍树&#xff1a; BFS简介 && 框架&#xff1a; 说到BFS…

动态规划-卡特兰数

不同的二叉搜索树&#xff08;96&#xff09; 题目描述: 状态表示: 建立一维数组dp&#xff0c;使用dp[i]来表示i个节点时有的二叉搜索树种类。 状态转移方程: 因为dp[i]表示有i个节点&#xff0c;我们设置一个循环&#xff0c;循环下标为j&#xff0c;此时j代表第几个节点为…

STM32Cube系列教程10:STM32CubeIDE工程创建+串口DMA+IDLE+printf重定向+软中断处理串口数据+非阻塞延时任务

文章目录 工程配置配置时钟配置Debug接口配置串口外设配置时钟树生成代码 配置串口重定向printf配置串口&#xff0c;开启IDLE&#xff0c;开启软中断 配置非阻塞延时任务调度函数编写任务调度函数延时任务创建 编译&#xff0c;下载与测试编译下载测试 前两天收到了ST社区的NU…

5.27周报

这两周邻近毕业故没有很多时间来学习课余内容&#xff0c;另外最近身体有些不舒服【偏头痛】&#xff0c;所以学的内容不多&#xff0c;包括SVM向量机和ResNet【不包括代码复现】 1.SVM支持向量机的大概内容 1、目的&#xff1a; 主要内容是如何找到分类的那条线【超平面】—…

我的世界开服保姆级教程

前言 Minecraft开服教程 如果你要和朋友联机时&#xff0c;可以选择的方法有这样几种&#xff1a; 局域网联机&#xff1a;优点&#xff1a;简单方便&#xff0c;在MC客户端里自带。缺点&#xff1a;必须在同一局域网内。 有些工具会带有联机功能&#xff1a;优点&#xff1a;一…

【GateWay】自定义RoutePredicateFactory

需求&#xff1a;对于本次请求的cookie中&#xff0c;如果userType不是vip的身份&#xff0c;不予访问 思路&#xff1a;因为要按照cookie参数进行判断&#xff0c;所以根据官方自带的CookieRoutePredicateFactory进行改造 创建自己的断言类&#xff0c;命名必须符合 xxxRout…

整理前端新出的操作工具好用又好玩(Custom Formatter,Oxlint,Nuxt DevTools,component-party)

1.使用Custom Formatter 使vue3中的reactive object 在Chrome在console中更易理解的方式展现 启用步骤&#xff1a; 1.打开控制台&#xff0c;然后打开console设置 2.前往proferences中的Console&#xff0c;勾选Enable custom formatters选项 3.刷新页面 2.使用css Overv…

FreeRtos进阶——关于任务的深入探究

创建任务函数 在我们创建任务中&#xff0c;会有几个比较神奇的参数&#xff0c;例如函数名称&#xff0c;以及栈大小。在我们创建任务时&#xff0c;也相应的要为每一个任务创建栈。这里面的栈除了用于任务数组开辟的空间外&#xff0c;还可以用于保存现场&#xff0c;例如有S…

手把手从0到1教你做STM32+FreeRTOS智能家居--第11篇之步进电机

一、硬件设计 步进电机介绍 本项目用到的是常见的也是控制起来最简单的步进电机&#xff1a;五线四项的步进电机28BYJ-48。 单片机IO口输出电流太小无法直接驱动电机运行&#xff0c;在这里我们需要另外加一个电机驱动板。可以选择ULN2003电机驱动板。 步进电机的控制原理 …

jmeter发送webserver请求和上传请求

有时候在项目中会遇到webserver接口和上传接口的请求&#xff0c;大致参考如下 一、发送webserver请求 先获取登录接口的token&#xff0c;再使用cookie管理器进行关联获取商品(webserver接口)&#xff0c;注意参数一般是写在消息体数据中&#xff0c;消息体有点像HTML格式 执…

windows 搭建 go开发环境

go语言&#xff08;或 Golang&#xff09;是Google开发的开源编程语言&#xff0c;诞生于2006年1月2日下午15点4分5秒&#xff0c;于2009年11月开源&#xff0c;2012年发布go稳定版。Go语言在多核并发上拥有原生的设计优势&#xff0c;Go语言从底层原生支持并发&#xff0c;无须…

字典的创建和删除

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在Python中&#xff0c;字典与列表类似&#xff0c;也是可变序列&#xff0c;不过与列表不同&#xff0c;它是无序的可变序列&#xff0c;保存的内容…

pip换源ubuntu

到THU网站上有给定的教程 https://mirrors.tuna.tsinghua.edu.cn/help/pypi/ 方法1 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package然后在https://pypi.org/project/nvidia-cublas-cu12/#files 里面搜索你的包名 方法2 python -m pip install --upg…