一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第14天,点击查看活动详情。
导语
IRNet是Spider提出早期的研究方法之一,发表于2019年的ACL上,相比于之前的模型,IRNet在结合了BERT模型后,一举将EM表现从27.2%提升至54.7%。
简介
IRNet用于解决两个挑战:
- 仅根据NL提供的上下文信息是不足以完成查询任务的mismatch problem。如图1所示,SQL语句中用于GROUP BY聚合的column为student_id,它并未在用户问句中显示提及;这个问题最根本的原因是SQL语句是为了更加高效查询而设计的,并未用于表示用户意图(intent)。
- 大量领域外的(out-of-domain, OOD)单词造成的lexical problem。据统计,在Cross-domain设置下,Spider的验证集中有约35%的单词没有在训练集中出现过。
为此,IRNet定义了一系列的CFG文法并引入了一种中间表示IR(文中称为SemQL),将SQL转化为语法树结构IR。整个任务不再是端到端的任务,而是分解为三个子任务:
- 对question和database schema进行schema linking
- 利用grammar-based neural model来生成SemQL
- 借助domain knowledge来把SemQL推断为SQL query
本文的贡献如下:
- 在Spider数据集上比原来的baseline提升了19.5个百分点, 达到了46.7%的精确性。位居Spider排行榜榜首;
- 通过增加BERT模型, IRNet的模型评估结果可以提升到54.7%的精确性;
此外, 本文实验证明, 通过学习合成SemQL查询而非直接合成SQL查询可以大大提升其他Text-to-SQL的方法, 如SQLNet, TypeSQL, SyntaxSQLNet。这意味着建立IR是有效的, 并且是一个用于处理复杂跨领域Text-to-SQL任务的具有研究前景的方向;
方法
中间表示
受lambda DCS的启发,作者设计了一种名叫SemQL的树结构的Text-to-SQL中间表示形式。mismatch问题的本质是SQL查询中的实现逻辑细节(如HAVING与GROUP BY从句)未能在NL问题中具体描述出来, 所以自然地会想到在SemQL中隐藏掉实现逻辑细节。
如图2所示,SemQL由一系列上下文无关语法定义。这是一种树结构的形式,下图展示了图1中SQL语句对应的SemQL的树表示形式。
schema linking
IRNet中schema linking的目标是识别问题中提到的column和table,并根据问题中提到column的方式为column分配不同的类型。文章首先定义三种可能在NL问题中被提及的实体(entities)标签: table, column, value; 并枚举出一个NL问题中所有长度不大于的6的n-gram短语进行字符串匹配。识别结果为column的短语, 根据是否为完全匹配可以分为exact match与partial match两种类别标签。
模型
作者提出了用于合成SemQL查询的神经模型,输入为question,数据库的schema和schema linking的结果。其模型架构图如图4所示,
NL Encoder
NL Encoder用于编码Question,question问句会使用和column用n-gram完全或部分匹配的方式添加的一些辅助Type信息。
Schema Encoder
Schema Encoder用于编码数据库schema信息。令表示一个数据库结构(schema), 其中表示所有的column和其type信息,t表示所有的table。
Schema Encoder接受整个s 作为输入, 输出所有字段的表示和表格的表示。
Decoder
Decoder端用于解码输出SemQL。根据一个基于语法的(grammar-based)解码器, 预测得到输出。在每一个时间步,解码器将产生如下三种动作之一的输出:
- ApplyRule(r): 讲一个生产规则(production rule)r应用到一个SemQL查询的当前生成树(current derivation tree);
- SelectColumn(c): 从数据库结构(schema)中选择一个字段c;
- SelectTable(t): 从数据库结构(schema)中选择一个数据表t;
IRNet还设计了一个内存增强指向网络(memory augmented pointer network)来在合成过程中进行column的选择(selecting columns); 当一个字段被选到时, 该网络首先决定是否要在内存(memory)中选出, 这一点与vanilla pointer network时不一样,这里创新的动机源于作者通过观察发现, vanilla pointer network更倾向于选择相同的字段, 所以如果先决定是否要在内存(memory)中选择, 就可以改善这种情况;
实验
IRNet在Spider实验结果如下:
作者还实验了将一些其他的神经网络模型修改为预测SemQL的方法,可以看到,通过引入SemQL,之前的SQLNet、TypeSQL、SyntaxSQLNet方法都有很好的性能提升。
总结
本文介绍了一种通过在Text-to-SQL任务中引入中间表示SemQL的方法:IRNet。该方法相较于以前的baseline在Spider数据集上的表现有了巨大提升。同时,作者将SemQL引入之前的一些baseline方法,使得之前的方法也有了性能提升,这或许证明这种中间表示形式引入的必要性。下一篇博客将为大家介绍几种通过图神经网络GNN的方式解决Text-to-SQL问题的方法。