赞
踩
首先简单说一下什么叫做Text-to-SQL任务,对于这个任务我们输入的是一个自然语句问题,输出的是一个SQL语句,其中不同的自然语句可能对应着同一个SQL语句,如下图所示:question1和question2都对应着下面的SQL语句。我们看一下像下面比较简单的SQL query由哪几个基本部分组成的,首先是一个聚合Agg(MAX、MIN、AVG等),然后是一个Clumn(Bronze),最后跟一个WHERE条件从句,其中WHERT从句包括Column(Silver),OP(>),Cell(2)。这种简单的SQL语句类似于一个表格查询。
在本文中,我们提出了一种基于transition的神经语义解析方法来将自然语言问题映射到SQL查询。我们将SQL查询表示为一个语义图,其中知识库中的语义单元作为节点,SQL语言的关键字和运算符作为边。然后利用transition方法和Seq2Seq模型,将文本到SQL的生成过程转化为序列到图的过程,这样可以同时利用语义图表示的优点和Seq2Seq模型强大的预测能力。另外,为了提高问题与知识库匹配图节点的生成,提出了一种利用知识库的多层次粒度和语义结构的匹配网络。在wikiSQL数据集上的实验结果表明,尽管使用了相对简单的解码器,但我们的方法始终能够提高性能,取得具有竞争力的结果。
在这项工作中,我们建议将SQL查询表示为语义图(如下图所示)并且用一个简单的解码器将序列到序列的过程转换成序列到图形的过程。在我们的框架中,使用基于Seq2Seq模型的Transition方法将图的生成转化为动作序列的生成,它可以同时利用语义图表示的优点和Seq2Seq模型强大的预测能力。为了实现这一目标,我们选择了一个称为cache-transition-system转换系统并且设计了一个能够编码语义图生成过程的动作集(包括NodeGen等节点生成动作,ArcGen等边生成动作)。然后,我们使用Bi - LSTM对输入信息进行编码,并设计RNN模型来生成动作序列。另外,为了提高节点的生成能力,我们提出了一种利用多层次粒度和知识库结构的匹配网络。综上所述,我们主要做出以下贡献:
Text到SQL任务以一个问题 q q q 和一个由 k k k 个表组成的知识库 b b b 作为输入,每个知识库由 n n n 列和 n × m n×m n×m 个单元组成,输出一个SQL查询 y y y。我们将SQL查询转换为以语义图为中间表示的动作序列,如图2所示。任务和挑战如下:
SQL查询由来自知识库的语义单元、聚合器、SQL关键字和问题的值组成(见图1)。我们将知识库的单元、聚合器和极限值定义为节点,所有这些节点通过问题与KBs1的匹配得到;SQL关键字被定义为边,在动作序列生成过程中获得。
SQL关键字用一些模式构造SQL查询,每一个关键字都会引出一个具有自己模式的子SQL。SQL查询和图之间的转换被转换成子SQL和子图之间的映射。sub-SQL的覆盖率我们根据SQL语法收集sub-SQL的所有模式,并确保它们能够以确定性的方式转换成子图,见表2的示例。使用深度优先搜索算法,所有SQL查询都可以以确定的方式转换为图形。此外,我们设计了确保节点对(父节点、子节点)在图中只有一个关系的措施,以保证图可以通过transition生成。
所有的SQL查询都可以被转换成100%准确的图形。同时,所有的图都可以转换成SQL查询,这些查询完全覆盖了基本真理的子SQL并与之完全匹配,只有子SQL的顺序导致与基本真理不匹配的负数(百分比为3.4%)。
我们将SQL查询的生成转换为图形生成,并将其转换为动作序列生成。
cache transition parser包括stack, cache, input buffer。stack是一系列(整数,节点)对,最后一个元素在最上面的位置;input buffer 是输入的序列,第一个元素作为新引入的图节点被读取;cache是一个节点序列,第一个元素在最左边,最后一个元素在最右边。解析器的配置形式如下,其中 δ δ δ, η η η 和 β β β分别是stack, cache 和 input buffer; G p G_p Gp是迄今为止构建的部分图:
在第一步中,我们将输入语 w 1 : n = w 1 , … , w n w_{1:n}=w_1,…,w_n w1:n=w1,…,wn映射到候选节点序列 n 1 : m = n 1 , … , n m n_{1:m}=n_1,…,n_m n1:m=n1,…,nm(详见第6.1节)。输入语句和候选节点序列作为输入。解析器的转换如下所示:
我们利用Seq2Seq模型生成action sequence。我们的模型以问题
w
1
:
n
w_{1:n}
w1:n及其对应的候选节点序列
n
1
:
m
n_{1:m}
n1:m作为输入。动作序列
a
1
:
q
a_{1:q}
a1:q是输出。
BiLSTM Encoder:
给定输入字序列
w
1
:
n
w_{1:n}
w1:n,我们使用双向LSTM对其进行编码。
LSTM Decoder:
我们使用一个基于注意力的LSTM解码器,要计算当前状态下所有动作的输出概率分布。对于每个时间步骤
t
t
t,解码器将嵌入的先前动作
e
t
−
1
e_{t−1}
et−1和单词
µ
t
−
1
µ_{t−1}
µt−1的先前上下文向量的串联馈送到LSTM模型中,以更新其隐藏状态,
s
t
=
L
S
T
M
(
s
t
−
1
,
[
e
t
−
1
:
µ
t
−
1
]
)
s_t=LSTM(s_{t−1},[e_{t−1}:µ_{t−1}])
st=LSTM(st−1,[et−1:µt−1])
时间步长
t
t
t的注意概率
α
α
α计算如下:
当前状态下所有动作的输出概率分布计算如下:
Transition State Features for Decoder
我们可以从当前的Transition state C t C_t Ct中提取特征。
这些特征嵌入被连接为 e f ( C t ) e_f(C_t) ef(Ct),并作为附加输入馈送到解码器:
我们在实验中使用了以下特性:
•节点类型:表示被处理节点的类型,包括缓存的当前节点和缓冲区最左边的节点,类型集包括
(
a
g
g
,
c
o
l
,
c
e
l
l
,
t
a
b
,
l
i
m
v
,
r
o
o
t
,
n
o
n
e
)
(agg,col,cell,tab,limv,root,none)
(agg,col,cell,tab,limv,root,none),
n
o
n
e
none
none表示节点没有类型。
•列单元关系:如果当前节点对的类型是
(
c
o
l
,
c
e
l
l
)
(col,cell)
(col,cell)或
(
c
e
l
l
,
c
o
l
)
(cell,col)
(cell,col),如果该单元属于表中的列,则标记为1,否则为0。
在给定输入语句及其候选节点序列的基础上,利用匹配网络进行节点选择(the action of N o d e G e n NodeGen NodeGen)。基于问题与知识库的匹配,构造了一个节点选择的分类模型。我们使用Column-cell relation提出了一个多级粒度匹配网络,如图2右下角所示。
在本文中,我们将一个节点表示为一个KB语句。对于列,KB语句表示为 x i o = [ w i 1 o ; … ; w i m o ] x^o_i=[w^o_{i_1};…;w^o_{i_m}] xio=[wi1o;…;wimo], m m m是第 i i i列中的字数。对于单元格,表示为 x i j c = [ x j o ; w i j 1 c ; … ; w i j k c ] x^c_{ij}=[x^o_j;w^c_ {ij_1};…;w^c_{ij_k}] xijc=[xjo;wij1c;…;wijkc], k k k是第 ( i , j ) (i,j) (i,j)个单元格中的字数,表示结合了列和单元格的语义,可以用来提高列的预测。类似地,对于表名,句子是表名及其所有列的连接;对于聚合器和limit值,该语句是它们的全名和同义词的连接。
给定一个问题 q q q和一个KB句子 r r r,该模型查找嵌入表,将 q q q和 r r r分别表示为 q = [ e q , 1 , … , e q , n q ] q=[e_{q,1},…,e_{q,n_q}] q=[eq,1,…,eq,nq]和 r = [ e r , 1 , … , e r . n r ] r=[e_{r,1},…,e_{r.n_r}] r=[er,1,…,er.nr],其中 e q , i , e r , i ∈ R d e_{q,i},e_{r,i}∈R_d eq,i,er,i∈Rd分别是 q q q和 r r r的第 i i i个词的嵌入。然后用 Q ∈ R d * n q Q∈R^{d*n_q} Q∈Rd*nq和 R ∈ R d * n r R∈R^{d*n_r} R∈Rd*nr构成一个词相似矩阵 M 1 ∈ R n q * n r M_1∈R^{n_q*n_r} M1∈Rnq*nr和序列序列相似矩阵 M 2 ∈ R n q * n r M2∈R^{n_q*n_r} M2∈Rnq*nr,这是卷积神经网络(CNN)的两个输入通道。CNN从矩阵中提取重要的匹配信息,并将其编码成匹配向量 v v v。
∀ i , j ∀i,j ∀i,j, M 1 M_1 M1的 ( i , j ) − t h (i,j)-th (i,j)−th元素定义如下, M 1 M_1 M1在词的层次上对 q q q和 r r r之间的匹配进行建模:
为了构造 M 2 M_2 M2,我们首先使用BiLSTM将 Q Q Q和 R R R转换为隐藏向量, ∀ i , j ∀i,j ∀i,j, M 2 M_2 M2的 ( i , j ) − t h (i,j)-th (i,j)−th元素定义如下:
然后由CNN处理 M 1 M_1 M1和 M 2 M_2 M2,交替进行卷积和最大池运算。最后的特征图输出经过线性变换后,映射到低维空间。通过学习训练数据中的单词嵌入和LSTM的参数,问题中有助于选择节点的单词或片段总是与KB句子中的一些单词或片段具有很高的相似度,从而导致相似度矩阵中的高值区域。这些区域将通过卷积和池运算进行变换和选择,并将话语中的重要信息传递给匹配向量。这就是我们的模型如何识别有问题的重要信息,并利用它从知识库语句中选择节点。
我们使用两个交叉熵损失来训练我们的模型,一个在oracle操作序列 a 1 , … , a q a_1,…,a_q a1,…,aq上结束,另一个在节点选择上结束:
我们在WikiSQL数据集上进行了实验。在其他模型的基础上,我们使用了三个评价指标:
在生成动作序列之前,首先要得到候选节点序列。
我们使用每个单词及其stem在知识库中进行搜索,得到每个单词的候选节点。同时,我们使用了一些规则来提高系统的召回率,比如单词嵌入的相似性(详见附录B)。然后对同一节点对应的词的跨度进行合并,得到候选节点序列。在动作序列的生成中,对于每一个候选节点,我们使用匹配网络来确定它是否应该留在节点动作中。如果节点是冗余的,那么它与所有其他节点都有关系ArcNone,并且在从动作序列到SQL查询的转换中会被丢弃。
在给定动作序列的情况下,用确定性的方法得到图。从图形到SQL查询的转换也是以确定性的方式进行的。在这里,我们删除标签为ArcNone的边和孤立的节点。
我们的模型将SQL查询表示为一个可应用于任何文本到SQL数据集的图形,并利用基于转换的Seq2Seq模型来生成一个端到端的过程。从上表可以看出,Seq2Graph与其他具有多个子模型或定制译码器的机型相比具有竞争优势,并且在 A C C e x ACC_{ex} ACCex上的性能优于现有系统2%。
在其他模型之后,我们还报告了SQL查询组成部分的更细粒度的评估指标,如上表所示。WHERE子句的改进与我们基于多级粒度和列单元关系的匹配来改进列和单元(WHERE子句的值)预测的初步直觉是一致的。
通过实例说明了Seq2Graph生成结果,并与SQLNet进行了比较。结果如图所示。在第一个示例中,Seq2Graph利用动作历史和列单元关系来改进边的预测,单元de vaux continental ismake的父元素是make,因为Model已经是SELECT的子元素;在第二个例子中,Seq2Graph可以通过单元(leicester)预测列(location),以改进列的预测。
节点序列是通过搜索和匹配自动获得的,表5给出了节点召回率和节点序列的准确性,从中可以看出Seq2Graph需要改进问题与知识库之间的匹配,以改善节点的选择。同时,我们发现使用算子的边缘检测精度较低,可以利用与节点无关的节点间的上下文信息来提高边缘的精度。
我们使用一些规则来提高系统的召回率:
这个模型简单来说就是将SQL查询表示为一个语义图,可以同时利用语义图强大表达的优点和Seq2Seq模型强大的预测能力。
首先,语义图与知识库具有紧密的耦合关系并且和句法结构有很多共同点。因此,在句法分析过程中,知识库中的结构约束和语义约束都可以利用。
其次,对于具有相同粗草图的实例,该模型可以显式地共享局部结构的知识(例如一些子图,具有相同的边和节点对类型,图1中的(root,min)和(root,max)对,即使它们的实际意义表示不同)。
这个任务主要就是两个问题。一个是节点的生成,另外一个是边的生成。
其中对于节点的生成,我们是是倒排+匹配网络来进行筛选。对于我们这个节点任务,最重要的是需要保持很高的召回率,因为如果没有正确的节点被召回,那么无论如何这个语义图都是残缺的是错误的,对于多余的节点,我们可以通过孤立这个节点从而在最后的语义图删除。所以我们的倒排检索一定要保持很高的召回率,有很多的trick加入其中:
倒排检索的细节如下:
对于生成SQL的任务来说,最大的难点是WHERE从句,也就是说COL OP VALUE这几个的关系。具体来说:
我们通过Transition State Features for Decoder有效缓解了问题1和问题2。
列单元关系:如果当前节点对的类型是
(
c
o
l
,
c
e
l
l
)
(col,cell)
(col,cell)或
(
c
e
l
l
,
c
o
l
)
(cell,col)
(cell,col),如果该单元属于表中的列,则标记为1,否则为0。这样可以解决了问题1;另外引入以前的动作历史信息,可以有效解决问题2,当已经有column属于select,对于其在whertr从句有一定隐式的限制;
对于op预测问题,我们会加入更多的上下文信息,而不能只通过cloumn和对应的cell去判断op,需要引入更多边缘信息。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。