admin 管理员组

文章数量: 887017

Text2SQL论文

摘要Abstract

Bert是对纯文本做的预处理语言模型,而现有的很多数据集是半结构化的,如表格等等。所以文章提出了TaBert模型,这个模型能够学习如何表达文本语句和半结构化的表格。并在WikiTableQuestion和Spider上取得良好的效果。

介绍Introduction

目前已经出现了一些基于大规模数据预训练的语言模型Bert了,但是对于一些结构化的数据,我们没办法用预训练语言模型,比如基于数据库的QA问题,这种场景下最重要的还是理解表格,将表格的内容和question中的实体相对应。解决这种带半结构化数据的semantic parse问题有三个难点,有一部分信息是存储在表格里面的,目前的一些语言模型BERT没办法对表格encoding。其次这些表格可能带有很多的行列,特别是SQL语句中的表格行列可能包含很多,如果全部编码可能会带来内存上的负担。而且这类任务的utterance和table会有很大的联系,还需要注意将表格和语句联系在一起。 文章提出的Tabert也是为了解决这些问题,同时提出了content snapshots技术,提出出最相关的行列做encoding。


作者认为可以将Tabert做为一种通用性的encoder,在SPIDER任务上预训练,然后再Tabert任务上使用。他们觉得这种原因是大多数的系统都是依赖这种输入输出的形式来促进查询,但其实这种说法不太准确,文章中提到semi-structured semantic parser是domain-specific的,一种特定领域的,但是就WikiTableQuestion来看,表格和question涉及到了方方面面,体育国家政治各个方面,我觉得这个才是能够泛化通用的原因,因为很多semi-structured semantic parser的数据集涉及到的知识范围太广。

Tabert

给定语句utterance u和表格table T,我们需要根据表格和语句预测出相应的logic form。Tabert首先是创建content snapshot。 snapshot是选择在表格中和输入语句最相关的行,然后把所有相关的行线性化,每一行都和question拼接在一起形成新的字符串,然后输入transformer,然后按行输出向量。然后这些输出的编码全部输入到vertical self- attention layers中去,最后从pooling layer中输出即可。

数据库内容的快照​​​​​​​Content Snapshot

这项技术有两个创新的点,第一个点是不但用上了列名,还用上了行名。文章说表格内容包含的信息比列名要多。另外文章还提到DB的表格行列很多,如果全部做encoding会造成资源的负担,所以只寻找几行做encoding。这也是motivation之一。


model使用了一些策略选择最相关的行,选择和utterance有n-gram重叠率最高的行。当k=1的时候,这样选择出snapshot。

如果K>1,对表中的每一行与输入描述计算n-gram覆盖率,选取前K行作为快照。

如果K=1,这说明只有一行是最相关的,但是很多情况下,输出的答案是和很多行相关的,如果只有一行相关那么可能不太准确。为了尽可能多的获得表中的信息,TaBert构建了一个合成行,就是这一行每列里的值不是原始值,而是每一列都是从对应列选取n-gram覆盖率最高的一个值,作为合成行这一列的值。这样做的动机是,与描述相关的值可能存在于多行中。

行的线性化​​​​​​​Row Linearization

TaBert对内容快照中的每一行进行线性化,作为Transformer的输入。每一个值表示成三部分:列名、类型和单元值,中间使用“|”分割。如上图的B,R2行的2005就可以表示为:

对于一行来说,其线性化即为将所有的值进行连接,中间使用”[SEP]“进行分割。之后在前面链接自然语言描述,作为Transformer的输入序列。

​​​​​​​

垂直自注意力机制Vertical Self-Attention Mechanism

 

TaBert中Transformer输出了每一行的编码结果,但是每一行是单独计算的,因此是相互独立的。但是很多情况下行与行之间是有联系的,所以使用vertical self-Attention引入各个行之间的联系,在不同行的相互对齐的向量中进行计算。

如图(C)所示,TaBert有V个垂直堆叠的自注意力层。为了生成垂直注意力的对齐输入,首先对每个单元值计算固定长度的初始向量(对Transformer的输出向量进行平均池化)。接下来将自然语言描述的向量序列与初始化后的单元值向量进行连接。

垂直注意力与Transformer拥有相同的参数,但是是对垂直对齐的元素(自然语言描述中的同一个单词,同一列中的单元值)进行操作。这种垂直注意力机制能够聚合不同行中的信息,允许模型捕获单元值的跨行依赖关系。

自然语言描述和列的表示Utterance and Column Representations

column的表达是通过对将经过vertical self-attention layer的vector做一个mean pooling的组合得到。utterance的表达是也是相似的计算。

预训练过程PreTraining

训练数据

这篇文章出来的时候海没有大规模的半结构化数据的语料,所以文章是使用网上存在的一些表格最为替代的数据。首先从Wikipedia和WDC收集表格和相关的语句,一共包含2660w个样例(表和自然语言句子)。

无监督学习目标

TaBert使用不同的目标来学习上下文和结构化表的表示。

对于自然语言上下文,使用遮蔽语言模型(MLM)目标,在句子中遮蔽15%的token。

对于列的表示,TaBert设计了两个学习目标

  1. 遮蔽列预测(Masked Column Prediction,MCP):目标使模型能够恢复被遮蔽的列名和数据类型。具体来说就是从输入表中随机选取20%的列,在每一行的线性化过程中遮蔽掉它们的名称和数据类型。给定一列的表示,训练模型使用多标签分类目标来预测其名称和类型。直观来说,MCP使模型能够从上下文中恢复列的信息。
  2. 单元值恢复(Cell Value Recovery,CVR):目标能够确保单元值信息能够在增加垂直注意力层之后能够得以保留。具体而言,在MCP目标中,列ci被遮蔽之后(单元值未被遮蔽),CVR通过这一列某一单元值的向量表示s<i, j>来恢复这一单元值的原始值。由于一个单元值可能包含多个token,TaBert使用了基于范围(span)的预测目标,即使用位置向量e_k和单元的表示s<i, j>作为一个两层网络的输入,来预测一个单元值的token。

Experiments

实验只关注了WikiTableQuestion,MAPO+TaBert比之前高了5.4%,做到52.3%。效果还是很好的,这个数据集比较难,提升5个百分点算很多了,并且在这么多的任务上都超越了sota。

Conclusion

这个Tabert的模型有点像是拼接在一起,很多motivation没有什么例子说明。比如answer和表格的多行有关系,在WikiTableQuestion中,有些只是hop就能查找出答案,不一定是和多行有关系,只有那些count这种函数才会和多行相关。另外,snapshot选择和utterance相关的行没有用到什么特别的选择方式,都是选择overlap最高的行,但实际上有些缩写和全写不能够overlap上的。另外如果没有出现在table中那么查找相关的行会起到相反的作用。
在训练的时候还是沿用的AE的思想,在无监督训练TaBert这段的motivation个人觉得很棒,确实是有助于理解表格,这样学出的vector不但包含了表格列名和类型,单元格的信息也包含了。
而事实上,Bert+MAPO我sample出的很多错误样例是没有结合上表格的,所以还是很大提升空间的。

参考博客

本文标签: Text2SQL论文