一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第10天,点击查看活动详情。
导语
上篇博客:# Text2SQL学习整理(五)将Text-to-SQL任务与基本语言模型结合简要介绍了一种最大化对齐到预训练模型的输入形式上的模型HybridSQL,利用预训练模型的强大表示能力,该模型已经取得了92%以上的正确率。
本篇博客介绍一种新的方法:IE-SQL。IE-SQL从一个新的角度(Sequence labeling)解决这个问题,相较于之前的论文,本文稍加复杂。
简介
在Text-to-SQL系统中,人们通常slot filling的方法来分模块填充SQL语句的各个部分。这种模块化的系统不仅复杂,而且在捕获SQL子句之间的相互依赖方面能力有限。
对于一个拥有列的数据库,如下图所示,Text-to-SQL的问题语句中存在很多的SQL语句中元素的mention(提及),例如total sum对应于SQL中的聚合符,50m splits对应于列,Josefin Lillhage是NAME列的一个value,lanes对应于列,above 8对应于SQL语句中这个条件。
作者认为如何发现这些mention和它们之间的关系是解决Text-to-SQL任务的关键。为了解决这些问题,本文提出了一种新的extraction-linker方法,先由统一的提取器(extractor)识别问题句中出现的所有类型的槽位提及(slot mentions);再由链接器(linker)将识别到的列(columns)映射到 table schema 中,生成可执行的 SQL 查询。
方法
Extracter(提取器)
Extractor模块使用sequence labeling的方法分别提取Role label和Span label。Role label是对于每个问句token赋予的所对应的SQL语句中元素的属性,比如当前问题中total sum这两个token就对应于SQL语句中的SUM聚合符,所以它们的Role label被设置为AGG。而Span label则是区分问句中那些token是SQL语句中SELECT子句的mention,哪些是CONDITION子句(即后面的条件限制)的mention。
BIO标签:B-begin,I-inside,O-outside
具体标签的类型如下表所示:
一个示例标注如下:
在进行这两个序列标注时,IE-SQL采用多任务学习。模型整体结构如下:
Linker(链接器)
在获取问句token的Role label和Span label后,Linker模块将Question中的column mention(即表1中S、C、V这几个标签的token)与table schema中的规范column name进行link,该任务被建模为text matching任务,即估计一个函数:
这种link分为两类:
- 显示链接:即直接将column的mention与其对应的标准名称进行连接,比如问句中的lanes与LANE列的连接
- 隐式链接:即将该column的value token与其对应的标准名称进行连接,比如问句中的Josefin Lillhage与NAME列的连接
自动标注Role label和Span label
由于Extractor的训练中需要Role label和Span label,而这些标签信息是原数据集中不存在的,因而通过将SQL query中的 SQL slots 与 question 中的 tokens 对齐来自动注释mention(这里通过一个现成的工具--Berkeley aligner来实现)。根据已对齐元素来生成 roles label,而 span label 则通过考虑最小文本跨度(minimal text span)来分配,该 span 覆盖了 SELECT/WHERE 子句中的所有元素。
一个例子如下:
- a-->b:去除SQL语句中只有语法信息,没有语义信息的部分。得到b,将其与c进行对齐。
- d:即输出的对齐下标,0-3表示b中的第0个token(即AGG4)对应于Question中的第4个token(即SUM)。其他以此类推。
在实际应用时,作者先在训练数据集上使用Berkeley aligner进行标注,之后利用标注的标签训练网络的Extracter部分。而linker部分的标签是数据集提供的,可以在完成Role label和Span label预测后直接进行训练。
实验
通过这些改进,IE-SQL取得了当时的SOTA结果。
总结
本文介绍了IE-SQL,一个从Sequence labeling角度看待Text-to-SQL问题的模型。由于采用了一些自动标注和多阶段的方法,刚看论文时还是有些难读懂,多读几遍便豁然开朗。IE-SQL提出的新模型也给研究者们在解决Text-to-SQL问题时提供了一种新的思路。下一篇博客将是WikiSQL数据集上最后一篇博客了,将为大家介绍目前WikiSQL上的SOTA模型SeaD,敬请期待。