Text2SQL学习整理(四)将预训练语言模型引入WikiSQL任务

导语

上篇博客:Text2SQL学习整理(三):SQLNet与TypeSQL模型简要介绍了WikiSQL数据集提出后两个早期的baseline,那时候像BERT之类的预训练语言模型还未在各种NLP任务中广泛应用,因而作者基本都是使用Bi-LSTM作为基本组件搭建模型。

本篇博客将介绍两个借助预训练语言模型BERT来解决WIkiSQL数据集挑战的方法:SQLOVA和X-SQL模型。其中,SQLOVA这篇工作更是发表在了2019年的NIPS上,可以看出这个任务被越来越多人所关注。

A Comprehensive Exploration on WikiSQL with Table-AwareWord Contextualization

创新点

SQLOVA工作的创新点有两个:

  1. 借助预训练模型,达到人类表现;
  2. 给出了WikiSQL数据集上的人类表现。

模型架构

整个框架包含两个部分:

  • Table-aware Encoding Layer,用于获取表和上下文感知的question word表示;
  • NL2SQL Layer,用于从编码表示生成SQL查询。

输入模块

image.png

上图为一个WikiSQL数据集中的问题-SQL示例。表格的schema(即图中的表名、列名等)是一种结构性信息,而在利用BERT之类的预训练模型时,需要将所有输入全部转为一个序列。SQLOVA的转换方式如下:

image.png

可以看到,序列的开始部分是query(也即用户的自然语言问句Question),之后是数据库的各个列的名字。因为WIkiSQL是单表的数据库,所以不需要编码表名。在序列化过程中,SQLOVA利用了BERT中的[CLS]、[SEP]等特殊token作为分隔符。

image.png

如上图所示,输入Table-aware Encoding Layer将自然语言查询与整个表的所有header放在一起进行编码,用来表示问题与表两者信息之间存在交互。

NL2SQL模块

与之前的SQLNet类似,SQLOVA在生成SQL语句时采用slot filling的思想,还是分别用6个子模块来生成SQL语句的各个部分。

image.png

NL2SQL层的6个子模块不共享参数、代替使用pointer network推断Where_val,这里训练一个模块来推断start和end、where_val不仅依赖于where_col还依赖于where_op(比如text的类型不存在>或<)、当要结合question和header时,采用的是拼接操作而不是求和操作。

Execution-guided decoding

SQLOVA使用了Execution-guided decoding技术,以减少不可执行的query语句。

所谓Execution-guided decoding就是在输出返回结果时对检查生成的SQL序列是否是一条语法正确的SQL语句,使模型最终输出的SQL语句一定是可以无语法错误执行的。它是通过将候选列表中的SQL查询按顺序提供给执行器来执行的,并丢弃那些执行失败或返回空结果的查询。该技术可以参考论文Robust Text-to-SQL Generation with Execution-Guided Decoding.

实验结果

文章还给出了human的performance,从结果来看,SQLova已超过了人类表现。

image.png

Ablation Study

同时,文章还进行了充分的消融实验以检验各个模块的有效性。可以看出,预训练模型BERT的引入对结果有很大提升。即使用词语的上下文对logical form的acc有很大贡献。

image.png

X-SQL: reinforce schema representation with context

创新点

X-SQL也是利用预训练语言模型的方法。它使用BERT风格预训练模型的上下文输出来增强结构化schema表示,并在下游任务中与类型信息一起学习一个新的schema表示。同时,这里不再使用BERT,而是使用MT-DNN(Multi-Task Deep Neural Networks for Natural Language Understanding一种多任务学习出来的语言模型,详见https://fyubang.com/2019/05/23/mt-dnn/)预训练模型。

模型架构

image.png

模型的整体架构如上图所示。

image.png

模型包括三个部分:

  1. 序列编码器:
  2. 上下文增强的schema编码器
  3. 输出层

序列编码器

序列编码器部分类似BERT,但主要改动如下:

  1. 给每个表增加了一个特殊的空列[EMPTY];
  2. 将segment embedding替换为type embeding,包括问题、类别列、数字列、特殊空列,共4种类型;
  3. 采用MT-DNN而不是BERT-Large来初始化。

上下文增强的schema编码器:

该模块根据表格每列的tokens的编码来得到相应列的表示hCi,利用attention。将每个列名对应的多个token输出的向量聚合并且在混入[CTX] token中的信息。

输出层

采用与之前同样的做法,最终输出时将任务分解为6个子任务,每个均采用更简单的结构,采用LayerNorm,输入为schema的表示hCi和上下文表示hCTX。

结果

通过这些改进,X-SQL将性能表现提升至90%以上,超过了SQLOVA。

image.png

总结

本文介绍了两个借助预训练语言模型BERT(MT-DNN)来表示schem和Question之间上下文关系表示的方法,通过预训练语言模型强大的表示能力,模型第一次在数据集上的表现超越了人类。足以见证当今NLP技术发展之迅速。

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

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

相关文章

广东建筑模板价格一览表

在建筑行业&#xff0c;合适的建筑模板是确保工程顺利进行的关键材料之一。在选择建筑模板时&#xff0c;除了质量、材质等因素外&#xff0c;价格也是一个重要的考虑因素。本文将提供一个广东建筑模板的价格一览表&#xff0c;以供业内人士参考。需要注意的是&#xff0c;以下…

SpringSecurity入门

前言 Spring Security是一个用于在Java应用程序中提供身份验证和授权功能的强大框架。它构建在Spring框架之上&#xff0c;为开发人员提供了一套灵活且全面的安全性服务&#xff0c;本篇将为大家带来Spring Security的详细介绍及入门 一.安全框架 在学习了解Spring Security之…

【qt信号槽-5】信号槽相关注意事项记录

背景&#xff1a; 信号槽是qt很重要的概念&#xff0c;遇到问题帮助没少看。其中就有signals and slots这一章节&#xff0c;说得很到位。 概念琐碎&#xff0c;记录备忘。不对之处望指正。 【qt信号槽-1】槽函数重写问题&#xff0c;qt_metacall和qt_static_metacall-CSDN博…

【数据结构】并查集的简单实现,合并,查找(C++)

文章目录 前言举例&#xff1a; 一、1.构造函数2.查找元素属于哪个集合FindRoot3.将两个集合归并成一个集合Union4.查找集合数量SetCount 二、源码 前言 需要将n个不同的元素划分成一些不相交的集合。开始时&#xff0c;每个元素自成一个单元素集合&#xff0c;然后按一定的规…

交叉验证之KFold和StratifiedKFold的使用(附案例实战)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

文件操作学习总结

磁盘上的⽂件是⽂件。 但是在程序设计中&#xff0c;我们⼀般谈的⽂件有两种&#xff1a; 程序⽂件、数据⽂件 &#xff08;从⽂件功能的⻆度来分类 的&#xff09;。 程序⽂件 &#xff1a; 程序⽂件包括源 程序⽂件&#xff08;后缀为.c&#xff09; , ⽬标⽂件&#xff0…

Opencv入门四(宽高为原始图像的一半)

代码如下&#xff1a; #include <opencv2/opencv.hpp> int main(int argc, char** argv) { cv::Mat img1, img2; cv::namedWindow("Example1", cv::WINDOW_AUTOSIZE); cv::namedWindow("Example2", cv::WINDOW_AUTOSIZE); img1 cv…

Mac如何搭建本地服务器

苹果电脑Mac OS X系统自带了Apache服务器 打开终端 //开启apache&#xff1a;sudo apachectl start //重启apache&#xff1a;sudo apachectl restart //关闭apache&#xff1a;sudo apachectl stop在浏览器输入127.0.10.1 &#xff0c; 如果页面出现 it works&#xff0c;则…

【LeetCode刷题笔记(12-1)】【Python】【有效的字母异位词】【排序/字符统计】【简单】

文章目录 引言有效的字母异位词题目描述提示 解决方案1&#xff1a;【排序】解决方案2&#xff1a;【字符统计】结束语 有效的字母异位词 引言 编写通过所有测试案例的代码并不简单&#xff0c;通常需要深思熟虑和理性分析。虽然这些代码能够通过所有的测试案例&#xff0c;但…

vcomp140.dll丢失怎么办,vcomp140.dll丢失解决方法详解

在我多年的电脑使用经历中&#xff0c;我曾经遇到过一个非常棘手的问题&#xff0c;那就是vcomp140.dll丢失。这个问题让我苦恼了很久&#xff0c;但最终我还是找到了解决方法。今天&#xff0c;我想和大家分享一下我的经历&#xff0c;以及vcomp140.dll是什么&#xff0c;它丢…

【开源软件】最好的开源软件-2023-第四名 vaadin

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…

VR全景技术在政务服务中有哪些应用,为政务服务带来什么便利

引言&#xff1a; 随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;全景技术正逐渐成为政务服务领域的一项重要工具。其独特的沉浸式体验为政务服务带来了全新的便利&#xff0c;提升了公众参与的积极性。 一、VR全景技术在政务服务中的应用 1.虚拟实景政务…