实现语义解析技术主要有几种方法,分别是机器翻译方法、模板填充方法、中间表达方法、图网络方法、强化学习方法,后续每一种方法都将有专门的一章进行介绍。因为KBQA任务和NL2SQL任务的差别主要是生成的形式化语言不同,所以下面只以其中的一种形式化语言进行说明。这里以NL2SQL为例对比技术路线的实现方式。
机器翻译方法 :在深度学习的研究背景下,很多研究人员将Text-to-SQL看作一个类似神经机器翻译的任务,主要采取Seq2Seq的模型框架。基线模型Seq2Seq在加入Attention、Copying等机制后,在ATIS、GeoQuery数据集上能够达到84%的精确匹配,但是在WikiSQL上只能达到23.3%的精确匹配以及37.0%的执行正确率,在Spider上则只能达到5%~6%的精确匹配。例如,基于Seq2Seq模型的机器翻译是当前机器翻译的主流模型,通过编码器对原始文本进行编码并得到原始文本的表征,再通过解码器得到目标语言的预测结果。图1-14展示了机器翻译的Seq2Seq模型由德语翻译成英语的简要流程图。图1-14从左到右是系统的输入到输出。输入是德语,输出是英语。德语先经过Encoder(编码器层)转化为深度学习模型学习到的表征,然后右侧的Decoder(解码器层)接收该表征并将其转化为目标语言英语。
图1-14 Seq2Seq翻译简要流程
模板填充方法 :将SQL的生成过程分为多个子任务,每一个子任务负责预测一种语法现象中的列。该方法对单表无嵌套的任务执行效果好,并且生成的SQL可以保证语法正确。其缺点是只能建模固定的SQL语法模板,无法对所有嵌套现象进行灵活处理。当SQL语句较为简单且无复杂的语法现象时,该方法能够有较好的表现,当SQL语句语法结构复杂时,模板填充方法表现不佳。
中间表达方法 :以IRNet为代表,将SQL生成分为两步:第一步预测SQL语法骨干结构;第二步对前面的预测结果进行列和值的补充。这种逐步预测的方法是本书要介绍的主要方法,后续内容都围绕此方法展开讲述。
图网络方法 :主要用于建模数据库表结构中表和列、列和列间的关系,以Global GNN、RATSQL、LGESQL为代表,在生成涉及多表和嵌套查询的SQL语句上效果显著。
强化学习方法 :此方法以Seq2SQL为代表,计算每一步当前决策生成的SQL语句是否正确,强化学习本质上是使用交互所产生的训练数据集进行训练的有监督学习或者弱监督学习,此方法的效果和翻译模型相似。