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

2024-05-28 00:04

本文主要是介绍【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 时被视为正确的操作。

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

在这里插入图片描述

这篇关于【Text2SQL 论文】IncSQL:通过增量式生成 action 序列来得到 SQL的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1008969

相关文章

MySQL更新某个字段拼接固定字符串的实现

《MySQL更新某个字段拼接固定字符串的实现》在MySQL中,我们经常需要对数据库中的某个字段进行更新操作,本文就来介绍一下MySQL更新某个字段拼接固定字符串的实现,感兴趣的可以了解一下... 目录1. 查看字段当前值2. 更新字段拼接固定字符串3. 验证更新结果mysql更新某个字段拼接固定字符串 -

python连接本地SQL server详细图文教程

《python连接本地SQLserver详细图文教程》在数据分析领域,经常需要从数据库中获取数据进行分析和处理,下面:本文主要介绍python连接本地SQLserver的相关资料,文中通过代码... 目录一.设置本地账号1.新建用户2.开启双重验证3,开启TCP/IP本地服务二js.python连接实例1.

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

Java利用docx4j+Freemarker生成word文档

《Java利用docx4j+Freemarker生成word文档》这篇文章主要为大家详细介绍了Java如何利用docx4j+Freemarker生成word文档,文中的示例代码讲解详细,感兴趣的小伙伴... 目录技术方案maven依赖创建模板文件实现代码技术方案Java 1.8 + docx4j + Fr

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

基于SpringBoot+Mybatis实现Mysql分表

《基于SpringBoot+Mybatis实现Mysql分表》这篇文章主要为大家详细介绍了基于SpringBoot+Mybatis实现Mysql分表的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录基本思路定义注解创建ThreadLocal创建拦截器业务处理基本思路1.根据创建时间字段按年进

Python3.6连接MySQL的详细步骤

《Python3.6连接MySQL的详细步骤》在现代Web开发和数据处理中,Python与数据库的交互是必不可少的一部分,MySQL作为最流行的开源关系型数据库管理系统之一,与Python的结合可以实... 目录环境准备安装python 3.6安装mysql安装pymysql库连接到MySQL建立连接执行S

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同