专栏名称: 大数据与机器学习文摘
分享大数据技术相关文章和资源
目录
相关文章推荐
人工智能与大数据技术  ·  难蚌,打工人要被AI整破防了——AI技术竟用 ... ·  19 小时前  
数据派THU  ·  从头构建GPT文本分类器(Python) ·  昨天  
软件定义世界(SDX)  ·  与孙正义对话,Sam ... ·  4 天前  
数据派THU  ·  AAAI2025|只根据题目和摘要就能预测论 ... ·  3 天前  
51好读  ›  专栏  ›  大数据与机器学习文摘

万万没想到,BERT学会写SQL了

大数据与机器学习文摘  · 公众号  · 大数据  · 2021-02-04 11:45

正文


文本-SQL转化任务,是将用户的自然语言转化为SQL继而完成数据库查询的工作。

例如根据下表,用户输入一个问题,模型将其转换为 SQL,查询数据库得到结果:"-4.52, -9.55"

Query:新浪和人人网的周涨跌幅分别是多少?

SQL: SELECT 周涨跌幅 FROM WHERE 名称=‘新浪’ OR 名称=‘人人网’

原本要辛辛苦苦写SQL,现在我用 大白话 告诉机器想看的内容,就能从数据库中拿到答案,这就是Text2SQL。

本文将解读Text2SQL领域最新论文,BERT从中学会了如何编写SQL语言。原文发表在 EMNLP 2020 会议上。

论文题目

Bridging Textual and Tabular Data for Cross-Domain Text-to-SQL Semantic Parsing

论文链接 :

https://arxiv.org/pdf/2012.12627v2.pdf

开源代码:

https://github.com/salesforce/TabularSemanticParsing

想快速获取论文的小伙伴也可以在订阅号【 NLP情报局 】后台回复关键词【 0119 】下载。

01 Text2SQL定义

Text2SQL解决的是将自然语言映射到数据库查询语句SQL的问题。论文中将跨领域的text-to-SQL任务定义如下:

给定 自然语言问句 和关系型数据库模式 ,模型需要生成对应的SQL查询

我们知道,一个数据库中可能包含很多张 ,一张表又包含多个 字段 ,所以 。每张表的表名 和字段名 都是文本字符。表中的字段可能有主键、外键,同时字段有不同的 数据类型

表中的 单元值 包含了真实数据信息,例如前文的“人人网”和“新浪”。

明白了什么是Q和S,我们来思考如何搭建模型。

02 模型架构

论文提出的模型BRIDGE采用了主流的 Seq2Seq 架构,把Text2SQL视作翻译问题(原序列:text,目标序列:SQL),包含编码器和解码器。

编码器

编码器的目的是 对Q和S分别做向量编码,同时对两者之间的关系充分交互

论文中,作者将Q和S拼接为一个 合的问题-模式序列 ,作为编码器的输入:

每一个表名、字段名分别用字符 [T] [C] 分隔。问题Q和S之间用字符[SEP]分隔。最后,在开始位置插入[CLS]字符。

这样的序列既符合BERT的输入格式,从而优雅地编码跨模态信息,又能快速获取任意字段的编码向量 (提取[T]/[C]对应特征即可)。

首先输入BERT,随后经过一层双向LSTM获得序列的初始编码表示

中的问题片段继续通过一层bi-LSTM获得Q的最终编码

Meta-data Features

相比于表名,字段名多了主键、外键等属性。为了利用这些特征(meta-data),论文中用了一层前馈网络对表名、字段名进一步编码。

这里的 分别表示各个字段的 主键、外键、类型特征 表示字段特征。将4个向量 横向 顺序拼接,经过函数 转化,可以得到每一个字段的最终向量表示。

表名没有额外特征,后三个维度均用零向量替代。各个表名、字段名都进行g函数转化,纵向拼接得到模式的最终编码

Bridging

截至目前,仅仅完成了Q和S的各自编码。读者可能会疑惑, 交互 在哪呢?

为了解决这个问题,作者使用锚文本( anchor text )将问题Q中包含的单元值与数据库字段链接起来。

具体实现上,作者将问题Q中的每一个token,与数据库表中每一列的所有value值进行字符串模糊匹配,匹配上的value值将被插入到序列X中。

如上图所示,问题Q和表格“ Properties ”、“ Reference Property Types ”相关联。其中Q包含的两个单词“ houses ”和“ apartments ”与两张表中的同名字段“ Property type code ”有 重合单元值

字段名“ Property type code ”本身没有在问题Q中出现,让模型直接推理出“ houses ”、“ apartments ”和“ Property type code ”相关,难度很大。

所以作者在 中把和问题 有关的单元值人为拼接在相应字段 之后 ,相当于直接告诉 BERT 哪些问题片段包含引用。

作者把这种方式称为“ bridging ”,即模型BRIDGE的由来。

解码器

解码器的目的是从编码特征中还原出相应SQL。

相比于前人的工作(RAT-SQL [2] 、IRNet [3] 等),BRIDGE解码器设计非常简洁, 仅使用了一层带多头注意力机制 [4] 的LSTM指针生成网络。

在每一个step中,解码器从如下动作中选择1种:

1、 从词汇表V中选择一个token(SQL关键字)

2、 从问题Q中复制一个token

3、 从模式S中复制一个组件(字段名、表名、单元值)

从数学定义上分析,在每一个时刻 ,给定解码状态 和编码表示 ,按照 [4] 中的方式计算多头注意力

是语义子空间总数量, 表示从Q或S中复制相应token加入当前解码结果的 权重

紧接着,作者给出了由V和输出分布产生的概率定义:

是LSTM输出的概率分布, 是长度为 序列,只包含 中的问题单词和特殊标记[T]、[C](动作2、3)。 表示从V生成的概率(动作1),







请到「今天看啥」查看全文