【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…

【附代码案例】深入理解 PyTorch 张量:叶子张量与非叶子张量

在 PyTorch 中&#xff0c;张量是构建神经网络模型的基本元素。了解张量的属性和行为对于深入理解模型的运行机制至关重要。本文将介绍 PyTorch 中的两种重要张量类型&#xff1a;叶子张量和非叶子张量&#xff0c;并探讨它们在反向传播过程中的行为差异。 叶子张量与非叶子张…

【CV】视频图像背景分割MOG2,KNN,GMG

当涉及背景分割器&#xff08;Background Subtractor&#xff09;时&#xff0c;Mixture of Gaussians&#xff08;MOG2&#xff09;、K-Nearest Neighbors&#xff08;KNN&#xff09;和Geometric Multigid&#xff08;GMG&#xff09;是常用的算法。它们都用于从视频流中提取…

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

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

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

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

与神对话-1

背景 那段时间&#xff0c;我的个人生活、职业和感情方面都很不愉快&#xff0c;我觉得我的生活方方面面全都失败了。多年来&#xff0c;我已经习惯于用信写下自己的思想&#xff08;我从未想过寄给谁&#xff09;&#xff0c;我拿起我那忠实的黄颜色的本子&#xff0c;并开始…

电脑找不到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…

关于智能汽车的一些思考

当前智能汽车上一般配置有12路超声波雷达&#xff0c;这些专用超声波雷达内置了MCU&#xff0c;直接输出数字化的测距结果&#xff0c;一般硬件接口采用串口RS485&#xff0c;通信协议采用modbus。 一、RS485与RS232&#xff08;UART&#xff09;有什么不同&#xff1f; 1.接…

5.27周报

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

我的世界开服保姆级教程

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

Transformer详解(5)-编码器和解码器

1、Transformer编码器 import torch from torch import nn import copy from norm import Norm from multi_head_attention import MultiHeadAttention from feed_forward import FeedForward from pos_encoder import PositionalEncoderdef get_clones(module, N):"&quo…

【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…