Text-to-SQL学习整理(十一)在Text-to-SQL中引入图模型

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第15天,点击查看活动详情

论文

  • 标题:Representing Schema Structure with Graph Neural Networks for Text-to-SQL Parsing
  • 会议:ACL 2019
  • 链接:arxiv.org/abs/1905.06…

导语

由于之前的Text-to-SQL数据集多是在同一个schema上进行训练测试(如ATIS数据集),亦或者数据库的schema结构简单(如WikiSQL数据集为单表结构),因而,过去绝大多数模型忽略了对schema结构的建模。本篇博客将介绍一种利用GNN对schema结构进行建模的早期论文。

简介

Spider数据集有着复杂的schema结构。如图1所示,在不同的数据库schema条件下,相似的问题会得到形式完全不同的SQL语句。

image.png

之前的数据集如ATIS和WikiSQL要么不涉及跨领域数据,要么只有单表数据,造成人们很长时间以来忽略了对数据库schema结构的建模。本文提出了一种利用图神经网络GNN对数据库schema结构进行建模的方法。通过利⽤GNN中对schema结构信息的编码,提升了Text-to-SQL任务在复杂schema下的表现。

方法

本文采用的还是一个Encoder-Decoder的模型,其中使用图神经网络GNN对schema的结构进行建模表示。⾸先把表通过“表名和列名”,“foreign key --> primary key”这样的链接把db schema encode成⼀个graph,把通过graph得到的schema的embedding和question⼀起放进blstm encoder⾥⾯。decode阶段,还是lstm,但是⽤了⼀个grammar-based的⽅法,利⽤graph的规则⽣成最终query。

利用GNN对schema建模

首先将schema转换为图,以下图左侧输入为例,涉及到的表有student, semester, student_semester, program这4个,我们将表名和列名各自作为图中的一个节点。

接下来进行连边,整个图中共有三类边:

  1. 表的节点与其所有的列进行连接,例如program-> program_id;
  2. 将主外键对和相应的表连接起来,以主键为起始点的边作为第二类边,如student.student_id-> student_semester.student_id;
  3. 以外键作为起始点的边作为第三类边,例如和student_semester.student_id->student.student_id.

image.png

连接完成后的图如上图中间的图所示,其中黑色边缘的节点表示table,其他节点表示column。它们之间的连边有上述3种类型。

在实际应用时,并非图中所有的节点都需要用到,这里模型会计算每个schema图中的节点与question token的相关度,记为 s l i n k ( v , x i ) s_{link}(v,x_i) 。之后,对其做一次softmax得到其概率分布 p l i n k ( v , x i ) p_{link}(v,x_i)

image.png

编码器

首先定义一个相关性分数表示图中节点与问题相关的程度。

v : ρ v = m a x i { p l i n k ( v , x i ) } v: ρ_v =max_i\{p_{link}(v, x_i)\}

模型使用这个分数用于分辨拿些图中的节点是在最终SQL语句中用得上的schema item。图3中间图中深色的节点就是模型认为相关的schema item。

使用这个相关度分数和初始embedding得到基于问题的embedding

image.png

经过L层GNN得到每个节点最终的embedding

image.png

编码器为双向LSTM。输入中加入了与数据库schema相关的embedding

image.png

解码器

image.png

解码器的结构如上图所示。

详细解码规则可以参考:论文导读|Representing Schema Structure with Graph Neural Networks for Text-to-SQL Parsing

实验

实验结果如下图所示,可以看到加入GNN后在多表查询中准确率大幅度提升。

image.png

作者还做了一组GNN ORACLE REL.的实验。它的实验设定为模型可以无误的识别出哪些schema item是最终SQL语句中用到的,哪些是没有使用到的情况。在这种设定下,模型性能还可以继续提升。这也提示我们可以继续优化相关性分数,以帮助模型更好的识别出哪些schema item是真正有用的。

结论

本篇博客介绍了一种将GNN引入Text-to-SQL任务的方法,本文中作者仅使用GNN对schema进行建模,来更好的表征schema之间的结构信息。下一篇博客将介绍在本篇论文基础上扩展的GlobalGNN模型。

猜你喜欢

转载自juejin.im/post/7086657257424814088