CN112069199B - 一种基于中间语法树的多轮自然语言转sql方法 - Google Patents
一种基于中间语法树的多轮自然语言转sql方法 Download PDFInfo
- Publication number
- CN112069199B CN112069199B CN202010842798.XA CN202010842798A CN112069199B CN 112069199 B CN112069199 B CN 112069199B CN 202010842798 A CN202010842798 A CN 202010842798A CN 112069199 B CN112069199 B CN 112069199B
- Authority
- CN
- China
- Prior art keywords
- sql
- tree
- round
- question
- encoder
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/243—Natural language query formulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/044—Recurrent networks, e.g. Hopfield networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/049—Temporal neural networks, e.g. delay elements, oscillating neurons or pulsed inputs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Abstract
本发明公开了一种基于中间语法树的多轮自然语言转SQL方法。为解决传统端到端方法存在自然语言和SQL间的语义代沟,忽略了SQL内在的语法逻辑等问题,本发明设计了一种类SQL的中间语法树文法,以非端到端的方式,采用编码‑解码架构的语法神经网络,在轮次维度上迭代,按照语法树逻辑由粗到细的两阶段生成每一轮的中间语法树,并在后处理阶段推理生成SQL。应对多轮会话间语义依赖导致生成SQL局部重叠现象,本发明提出了对历史生成SQL的复用策略,进一步地提高了转化准确率。本发明在智能数据库系统等场景中具有广泛的应用前景。
Description
技术领域
本发明属于自然语言处理技术领域,涉及一种多轮会话场景下的自然语言转SQL方法,尤其涉及一种基于中间语法树的多轮自然语言转SQL方法。
背景技术
自然语言转SQL(Natural Language to SQL)是语义解析、语义理解中的重要任务。单轮会话场景下,给定自然问句文本和数据库表列名集合作为输入,NL2SQL的目的是解析问句语义,建立问句、数据库模式和SQL三者间的映射,生成问句对应的SQL。例如给定问句:“今天上海的天气如何?”和数据库模式:{天气表:{天气、区域(外键)、时间、温度、…},区域表:{区域(主键)、经纬度、人口、方言、…},…}作为输入,需要生成对应的SQL:SELECT天气FROM天气表WHERE区域=‘上海’AND时间=‘今天’。而多轮会话更符合人类交谈、对话的语言习惯,该任务可扩展为,模拟用户与一个智能数据库系统的问答场景,将上述问句作为第一轮,发起第二轮的问答:“那昨天杭州的呢?”,生成对应的SQL:SELECT天气FROM天气表WHERE区域=‘杭州’AND时间=‘昨天’。实际场景中,问句的语义更加模糊、表达更加口语化,问句间的语义依赖关系更加多样,生成的SQL涉及多表连接、嵌套等,是SQL自动生成领域最高的要求和最难的挑战。
多轮NL2SQL属于新兴的研究热点,已有的方法大多采用端到端的方式,模块化合成SQL各个子句。然而SQL本质上是一种符合语法规则、有逻辑树结构的序列,为高效地执行数据库操作而专门设计的,而自然问句是人类发展长期积淀的语言形式,这两者间存在语义代沟,即问句语义并不一定涉及到SQL关键字,比如GROUPBY子句,问句中并未提及其作用的表列名,但SQL会依据表的主键或SELECT子句下列名的聚合情况来决策是否拥有GROUPBY子句。因此,这类端到端方法,从自然问句直接预测SQL,存在语义不匹配问题;并且模块化的方式摒弃了其内在的语法树逻辑结构。
发明内容
为克服现有端到端方式的多轮NL2SQL方法存在着语义不匹配问题且丢失语法逻辑信息,本发明提供了一种基于中间语法树的多轮自然语言转SQL方法。本发明设计了一种类SQL语法的中间语法树文法作为中间表达,称作Tree-SQL,并由本发明设计的语法神经网络模型生成该中间语法树。该语法树搭建起了自然问句和SQL间的语义桥梁,弥补了两者间的语义代沟,同时蕴含着SQL内在的语法逻辑,每一项文法可看做一个树节点,根据自顶向下预测难度,划分非叶子节点(框架部分)和叶子节点(表列名)。所述方法以非端到端方式,在轮次维度上进行迭代预测语法树,每一轮的语法树由自然问句通过语法神经网络模型由粗到细两阶段预测:第一阶段自顶向下生成其框架(非叶子节点),第二阶段根据框架预测其表列名部分(叶子节点),最后在后处理阶段由该中间表达推理生成最终的SQL。同时,多轮问句语义的复杂依赖会导致生成答案间出现局部重叠现象,因此本发明设计了一种在预测当前轮节点时,对历史生成Tree-SQL上进行复用的策略。
本发明所采用的技术方案如下:一种基于中间语法树的多轮自然语言转SQL方法,所述中间语法树由语法神经网络模型根据定义好的语法规则预测生成;所述语法神经网络由一个编码器和一个解码器组成;所述编码器包括:上下文编码器、交互编码器和Tree-SQL编码器;所述上下文编码器接收问句和数据库模式拼接作为输入,采用BERT预训练模型得到每个单词的向量,之后分别对问句和数据库表列名编码进行汇总,最终得到每一项的向量表示;所述交互编码器是一个LSTM结构,与上下文编码器在轮次维度上进行迭代更新状态,协同维持全局交互语义信息,捕获当前问句与历史问句的语义依赖;所述Tree-SQL编码器用于将生成的历史Tree-SQLs编码成向量,应用复用策略,参与解码器生成当前轮次的Tree-SQL。所述解码器包括框架解码器和细化解码器;所述框架解码器是LSTM序列解码结构,用于生成Tree-SQL框架部分,不涉及其细节部分(表列名),因此只接受编码器输出的问句向量;所述细化解码器同样是序列解码结构,同时接受问句向量和数据库模式向量,根据生成的框架填充细节部分,再对填充的细节进行预测,得到最终的Tree-SQL;最后在后处理阶段由生成的Tree-SQL推理得到SQL;所述多轮自然语言转SQL方法包括以下步骤:
(1)将第t轮自然问句和数据库模式输入到语法神经网络编码器中的上下文编码器,第t-1轮的交互编码器的交互语义状态参与第t轮的问句编码,得到自然问句每个单词和数据库模式每个表列名的编码词向量,问句最终的语义用于更新交互编码器状态;
(2)将上下文编码器得到的问句向量和Tree-SQL编码器输出的历史Tree-SQLs向量输入到框架解码器,根据定义好的中间语法树文法,按时间步展开依照概率最大原则进入相应的文法规则节点。在每一步预测过程中,会考虑问句语义和当前隐状态的关联性,以及前t-1轮生成的历史Tree-SQLs与当前步预测节点的复用概率。由此,序列生成当前第t轮中间语法树(Tree-SQL)的框架。
(3)根据生成的Tree-SQL框架,填充其相应的细节部分(表列名),将上下文编码器得到的问句向量、数据库模式向量和历史Tree-SQLs向量输入到细化解码器中,依照(2)中同样步骤预测细节部分,得到最终第t轮的Tree-SQL。
(4)在后处理阶段由(3)得到的中间语法树Tree-SQL,根据文法规则解析每个节点指示的SQL指令,合成最终的SQL。
(5)在轮次维度上t=1,2,3,…,N,重复步骤(1)-(4),N表示用户对系统发起一次交互的轮数。
(6)将步骤(3)中每轮预测的Tree-SQL与由真实SQL转化得到的Tree-SQL进行比较,计算交叉熵损失值,并通过随机梯度下降法最小化该损失,最终获得训练好的语法神经网络模型。
(7)获取用户发起一次交互的N轮自然问句,将每一轮的问句和给定的数据库模式,在轮次维度上依次输入到训练好的语法神经网络,模型输出每一轮的中间语法树Tree-SQL,再推理生成每一轮的SQL,实现多轮自然语言到SQL的映射。
进一步地,步骤(1)包括以下子步骤:
(1.1)第t轮自然问句包含单词Qt=(xt,1,xt,2,…,xt,i,…,xt,T),其中T是所述问句单词的长度;数据库模式由一系列表列名集合组成,定义为S={s1,s2,…,sj,…,sm},其中sj表示模式中某一项表.列名,m是表.列名的个数。将问句和数据库模式进行BERT方法的拼接:
[CLS]xt,1,…,xt,i,…,xt,T[SEP]s1[SEP]s2[SEP]…[SEP]j[SEP]…[SEP]sm[SEP]
(1.3)将交互编码器LSTMI的全局语义状态和问句单词向量进行拼接,捕获全局交互语义,再通过一层双向LSTM捕获问句的上下文语义,得到最终包含有丰富语义的新的问句向量同时用得到的整个问句语义向量ht,T去更新交互编码器的状态。
其中,[;]表示两个向量的连接,o表示取LSTM的输出向量,h表示取LSTM的隐藏层状态,ht,T表示双向LSTM最后一步的隐藏层状态。
进一步地,步骤(2)包括以下子步骤:
其中,是框架解码器D1第k步的隐藏层状态;ck是上下文向量,对于生成当前第t轮框架Tree-SQL,不涉及其细节部分(表列名),因此不需要数据库模式编码的参与,但需要问句和前t-1轮的历史框架Tree-SQLs语义信息。
(2.2)上下文向量ck包括问句语义信息,将问句每个单词和隐藏层状态进行自注意力计算,对每个单词的语义加权得到问句的上下文信息:
(2.3)上下文向量ck还包括前t-1轮预测得到的历史框架Tree-SQLs语义信息。首先将前t-1轮中间语法树的框架y′1,y′2,…,y′i,…,y′t-1,分别输入到Tree-SQL编码器中,得到每一轮框架Tree-SQL的编码表示将每一轮的语法树编码的每一个节点和隐藏层状态进行自注意力计算,对每个节点的语义加权得到该轮的语义表征,再对每轮语义进行汇总得到所有历史轮次的语法树语义信息:
进一步地,步骤(3)包括以下子步骤:
(3.2)所述步骤与(2.2)和(2.3)类似,细化解码器需要的是历史Tree-SQLs语义信息,将前t-1轮完整的中间语法树y1,y2,…,yi,…,yt-1,分别输入到Tree-SQL编码器中,得到每一轮完整的Tree-SQL的编码表示类似地,的计算和(2.3)一样,但输入的是完整Tree-SQL的编码表示。另外,细化解码器涉及表列名的预测,上下文向量ck还需要数据库模式信息的输入:
进一步地,步骤(6)包括以下步骤:
(6.1)完整的Tree-SQL生成可以看做是序列预测节点,预测过程的概率表示为:
其中Yt表示第t轮的Tree-SQL,yt,k表示预测第t轮Tree-SQL的第k步节点,It={(Q1,Y1),(Q2,Y2),…,(Qt-1,Yt-1)}表示前t-1轮生成的问句和答案对。
(6.2)将(2)中每轮预测得到的框架Tree-SQL和由真实SQL转化得到的框架Tree-SQL计算交叉熵损失:
(6.3)将(3)中每轮预测得到的Tree-SQL和由真实SQL转化得到的Tree-SQL计算交叉熵损失:
(6.4)将两阶段的交叉熵损失合并,通过Adam最小化该损失,得到训练好的最优语法神经网络:
其中,α表示两阶段的权衡因子;表示真实的框架Tree-SQL,表示预测的框架Tree-SQL;表示真实Tree-SQL,表示预测的Tree-SQL;Tt表示第t轮Tree-SQL节点序列长度,N表示定义的语法树节点个数,表示语法树中第j项为正确的节点。
与现有技术相比,本发明的有益效果如下:本发明提出了一种全新的用于多轮自然语言转SQL的非端到端方法,设计了一种类SQL的中间语法树文法比较完全地覆盖了SQL的结构,并设计了预测该中间语法树的语法神经网络,所述语法神经网络能够解析多轮语义,并在生成过程中复用历史Tree-SQL某些序列片段。实验表明,该语法神经网络模型能够有效地建模多轮间的语义依赖关系,复用策略能够进一步地提高转化准确率。
附图说明
图1是本发明设计的类SQL中间语法树文法;
图2是本发明采用所述语法神经网络模型的总体架构图;
图3是本发明实施例展示的Tree-SQL树形表达,其中,(a)为实施例中框架Tree-SQL,(b)为实施例中Tree-SQL;
图4是本发明提出的复用策略。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面通过具体实施例和附图,对本发明做进一步详细说明。
本发明提供了一种基于中间语法树的多轮自然语言转SQL方法,如图1所示,是本发明设计的类SQL中间语法树,T是Tree-SQL的根节点,R是SQL中不同子句的组合,包括Select、Filter、Order、Limit、GroupBy等子句;S表示其原生的列,即表名.列名;A表示作用于原生列的6种聚合函数,包括:none、sum、max、min、count、avg;MA表示在原生列上聚合的四则运算,比如:count(s1)-count(s2)。该中间语法树由语法神经网络序列预测生成。
所述语法神经网络由一个编码器和一个解码器组成;所述编码器包括:上下文编码器、交互编码器和Tree-SQL编码器;所述上下文编码器接收问句和数据库模式拼接作为输入,采用BERT预训练模型得到每个单词的向量,之后分别对问句和数据库表列名编码进行汇总,最终得到每一项的向量表示;所述交互编码器是一个LSTM结构,与上下文编码器在轮次维度上进行迭代更新状态,协同维持全局交互语义信息,捕获当前问句与历史问句的语义依赖;所述Tree-SQL编码器用于将生成的历史Tree-SQLs编码成向量,参与解码器生成当前轮次的Tree-SQL。所述解码器包括框架解码器和细化解码器;所述框架解码器是LSTM序列解码结构,用于生成Tree-SQL框架部分,不涉及其细节部分(表列名),因此只接受编码器输出的问句向量;所述细化解码器同样是序列解码结构,同时接受问句向量和数据库模式向量,根据生成的框架填充细节部分,再对填充的细节进行预测,得到最终的Tree-SQL;最后在后处理阶段由生成的Tree-SQL推理得到SQL;所述多轮自然语言转SQL方法包括以下步骤:
(1)将第t轮自然问句和数据库模式输入到语法神经网络编码器中的上下文编码器,第t-1轮的交互编码器的交互语义状态参与第t轮的问句编码,得到自然问句每个单词和数据库模式每个表列名的编码词向量,问句最终的语义用于更新交互编码器状态;
(1.1)第t轮自然问句包含单词Qt=(xt,1,xt,2,…,xt,i,…,xt,T),其中T是所述问句单词的长度;数据库模式由一系列表列名集合组成,定义为S={s1,s2,…,sj,…,sm},其中sj表示模式中某一项表.列名,m是表.列名的个数。将问句和数据库模式进行BERT方法的拼接:
[CLS]xt,1,…,xt,i,…,xt,T[SEP]s1[SEP]s2[SEP]…[SEP]sj[SEP]…[SEP]sm[SEP]
(1.3)将交互编码器LSTMI的全局语义状态和问句单词向量进行拼接,捕获全局交互语义,再通过一层双向LSTM捕获问句的上下文语义,得到最终包含有丰富语义的新的问句向量同时用得到的整个问句语义向量ht,T去更新交互编码器的状态。
其中,[;]表示两个向量的连接,o表示取LSTM的输出向量,h表示取LSTM的隐藏层状态,ht,T表示双向LSTM最后一步的隐藏层状态。
(2)将上下文编码器得到的问句向量和Tree-SQL编码器输出的历史Tree-SQLs向量输入到框架解码器,根据定义好的中间语法树文法,按时间步展开依照概率最大原则进入相应的文法规则节点。在每一步预测过程中,会考虑问句语义和当前隐状态的关联性,以及前t-1轮生成的历史Tree-SQLs与当前步预测节点的复用概率。由此,序列生成当前第t轮中间语法树(Tree-SQL)的框架。
其中,是框架解码器D1第k步的隐藏层状态;ck是上下文向量,对于生成当前第t轮框架Tree-SQL,不涉及其细节部分(表列名),因此不需要数据库模式编码的参与,但需要问句和前t-1轮的历史框架Tree-SQLs语义信息。
(2.2)上下文向量ck包括问句语义信息,将问句每个单词和隐藏层状态进行自注意力计算,对每个单词的语义加权得到问句的上下文信息:
(2.3)上下文向量ck还包括前t-1轮预测得到的历史框架Tree-SQLs语义信息。首先将前t-1轮中间语法树的框架y′1,y′2,…,y′i,…,y′t-1,分别输入到Tree-SQL编码器中,得到每一轮框架Tree-SQL的编码表示将每一轮的语法树编码的每一个节点和隐藏层状态进行自注意力计算,对每个节点的语义加权得到该轮的语义表征,再对每轮语义进行汇总得到所有历史轮次的语法树语义信息:
(3)根据生成的Tree-SQL框架,填充其相应的细节部分(表列名),将上下文编码器得到的问句向量、数据库模式向量和历史Tree-SQLs向量输入到细化解码器中,依照(2)中同样步骤预测细节部分,得到最终第t轮的Tree-SQL。
(3.2)所述步骤与(2.2)和(2.3)类似,细化解码器需要的是历史Tree-SQLs语义信息,将前t-1轮完整的中间语法树y1,y2,…,yi,…,yt-1,分别输入到Tree-SQL编码器中,得到每一轮完整的Tree-SQL的编码表示类似地,的计算和(2.3)一样,但输入的是完整Tree-SQL的编码表示。另外,细化解码器涉及表列名的预测,上下文向量ck还需要数据库模式信息的输入:
(4)在后处理阶段由(3)得到的中间语法树Tree-SQL,根据文法规则解析每个节点指示的SQL指令,合成最终的SQL。
(5)在轮次维度上t=1,2,3,…,重复步骤(1)-(4),直到一次交互结束。
(6)将(3)中每轮预测得到的Tree-SQL与由真实SQL转化得到的Tree-SQL进行比较,计算损失值,并通过优化方法最小化该损失值,最终获得训练好的语法神经网络模型。
(6.1)完整的Tree-SQL生成可以看做是序列预测节点,预测过程的概率表示为:
其中Yt表示第t轮的Tree-SQL,yt,k表示预测第t轮Tree-SQL的第k步节点,It={(Q1,Y1),(Q2,Y2),…,(Qt-1,Yt-1)}表示前t-1轮生成的问句和答案对。
(6.2)将(2)中每轮预测得到的框架Tree-SQL和由真实SQL转化得到的框架Tree-SQL计算交叉熵损失:
(6.3)将(3)中每轮预测得到的Tree-SQL和由真实SQL转化得到的Tree-SQL计算交叉熵损失:
(6.4)将两阶段的交叉熵损失合并,通过Adam最小化该损失,得到训练好的最优语法神经网络:
其中,α表示两阶段的权衡因子;表示真实的框架Tree-SQL,表示预测的框架Tree-SQL;表示真实Tree-SQL,表示预测的Tree-SQL;Tt表示第t轮Tree-SQL节点序列长度,N表示定义的语法树节点个数,表示语法树中第j项为正确的节点。
(7)获取用户发起一次交互的N轮自然问句,将每一轮的问句和给定的数据库模式,在轮次维度上依次输入到训练好的语法神经网络,模型输出每一轮的中间语法树Tree-SQL,再推理生成每一轮的SQL,实现多轮自然语言到SQL的映射。
实施例
下面以模拟智能数据库中一个多轮问答场景为例,作为具体实施方式的补充介绍多轮自然语言转SQL的过程。
假设数据库中存在地区信息数据库模式,其中包含诸多个表,其中有天气表、区域表等等。天气表包含诸多列名,比如:天气,区域(外键)、时间、最高温度、最低温度等等。区域表也包括诸多列名,比如:区域(主键)、经纬度、人口、方言等等。其中天气表的区域字段和区域字段属于主外键关系。
假设用户对该智能数据库系统发起一次交互问答,进行了3轮会话,下表给出了三轮问句和其对应的真实正确的SQL。
假设当前进行到第2轮的SQL预测,完成了第1轮的框架Tree-SQL和Tree-SQL的预测,并在后处理阶段推理得到最终的SQL,以及更新了交互编码器的语义状态,一定程度上交互编码器语义记忆着第1轮陈述的‘天气’这个事。
(1)将第2轮的自然问句和数据库模式进行BERT方法的拼接:
[CLS]那昨天杭州的呢?[SEP]天气表.天气[SEP]天气表.区域[SEP]…[SEP]区域表.区域[SEP]区域表.经纬度[SEP]…[SEP]
(2)将上述拼接输入到上下文编码器预编码BERT层,取出自然问句和数据库模式对应位置的每个单词向量。将低层的单词语义汇总为更高级的词语或短语语义,具体方法为:对问句进行分词,得到‘那/昨天/杭州/的/呢/?’,将单词向量的平均合并为词语语义,比如,‘杭’和‘州’合并为‘杭州’语义向量,表示为
(3)将由第1轮更新得到的交互编码器LSTMI的全局语义状态和问句单词向量进行拼接,捕获全局交互语义,再通过一层双向LSTM捕获问句的上下文语义,得到最终包含有丰富语义的新的问句向量同时用得到的整个问句语义向量ht,T去更新交互编码器的状态,至此,可以认为新的问句语义中包含了第1轮陈述‘天气’这个事实。
其中,[;]表示两个向量的连接,o表示取LSTM的输出向量,h表示取LSTM的隐藏层状态,ht,T表示双向LSTM最后一步的隐藏层状态。中的i表示问句中的词语位置,具体指示i∈{那,昨天,杭州,的,呢,?}
同时,将该向量进行线性变换,用于模型输出预测语法树节点,输出维度为该父节点所含的孩子节点个数。下面阐述框架解码器的过程:
框架解码器在k=0步时,将零向量设置为初始输入,即ak=0;pk=0;ck=0。根据语法树文法规则,首先预测的是根节点T,其包含了4个孩子节点,分别为3个并行的SQL结构:union/intersect/except和1个单句SQL结构。在该实施例中,只有单句结构,因此在第0步时,模型输出的是4分类,同时在复用策略的影响下,会考虑第1轮生成的框架Tree-SQL的T节点下的概率,加权输出概率最大的节点是T(∷=R),因此下一时间步在R节点下进行预测。
继续进行第k=1步预测时,可得上一时间步的节点类型ak(T)、当前时间步的父节点类型(T),以及由上一时间更新的隐藏层状态根据隐藏层状态、问句语义和历史框架Tree-SQLs语义计算当时间步的上下文向量,预测当前时间步的节点类型。在该实施例中,第2轮真实SQL语句只包含有Select和Where子句,因此在R节点下,模型输出的是6分类,复用第1轮框架Tree-SQL下R节点的概率,得到概率最大的节点是R(∷=Select FilterGroupBy)。重复进行以上步骤迭代,序列预测出第2轮的框架Tree-SQL,得到如下文法序列表达,树形显示该实例的框架Tree-SQL如图3a所示:
T(∷=R)→R(∷=Select Filter GroupBy)→Select(∷=A)→Filter(∷=andFilter Filter)→Filter(∷=AV)→Filter(∷=AV)→GroupBy(∷=none)
(5)根据(4)预测生成的框架Tree-SQL,填充相应的细节节点(表列名),依照同样的步骤,采用细化解码器来预测这些细节节点。不同的是,细化解码器涉及数据库模式,需要(2)中编码器输出的数据库模式编码参与组成上下文向量。如下是Tree-SQL文法序列表达,树形显示如图3b所示。黑体加粗的节点是细化解码器预测的,输出的总概率同样来自当前轮的概率和在第1轮上复用的概率加权和。图4展示了预测当前轮Filter分支下的细化节点A时,在历史Tree-SQL应用复用策略的情况。
T(∷=R)→R(∷=Select Filter GroupBy)→Select(∷=A)→A(∷=none S)
→S(天气表.天气)→Filter(∷=and Filter Filter)→Filter(∷=AV)
→A(∷=none S)→S(天气表.区域)→V(杭州)→Filter(∷=AV)
→A(∷=none S)→S(天气表.时间)→V(昨天)→GroupBy(∷=none)
(6)在后处理阶段,将由(5)中得到的中间语法树Tree-SQL,根据文法规则解析每个节点指示的SQL指令,合成最终的SQL。具体而言,先序遍历该语法树,根节点为T(∷=R)可知SQL为单句结构,R(∷=Select Filter GroupBy)节点表示存在Select、Filter、GroupBy子句结构,分别解析各子树结构。Select(∷=A)→A(∷=none S)→S(天气表.天气)表明Select子句只有一个列名为‘天气表.天气’,聚合函数为none,因此可得该子句为‘SELECT天气表.天气’;同样地,Filter子句比较复杂,Filter(∷=and Filter Filter)表明有两个条件,以‘and’连接,Filter(∷=AV)表明条件是‘=’的形式,因此可以解析出条件子句为‘WHERE天气表.区域=杭州AND天气表.时间=昨天’;GroupBy子句为none。因此合并上述子句并规范化,得到第2轮的最终SQL表达:SELECT天气FROM天气表WHERE区域=‘杭州’AND时间=‘昨天’。
(7)进行第3轮的预测,重复上述步骤(1)-(6),直到这次交互结束。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的原理和范围,本发明的保护范围应以权利要求书所述为准。
Claims (5)
1.一种基于中间语法树的多轮自然语言转SQL方法,其特征在于,所述中间语法树由语法神经网络模型预测生成,称作Tree-SQL;所述语法神经网络由一个编码器和一个解码器组成;所述编码器包括:上下文编码器、交互编码器和Tree-SQL编码器;所述上下文编码器编码问句和数据库模式;所述交互编码器是一个LSTM结构,捕获当前问句与历史问句的语义依赖;所述Tree-SQL编码器将生成的历史Tree-SQL编码成向量,应用复用策略,参与解码器生成当前轮次的Tree-SQL;所述解码器包括框架解码器和细化解码器;所述框架解码器是LSTM序列解码结构,用于生成Tree-SQL框架部分;所述细化解码器同样是序列解码结构,根据生成的框架预测表列名部分,得到最终的Tree-SQL;最后在后处理阶段由生成的Tree-SQL推理得到SQL;所述多轮自然语言转SQL方法包括以下步骤:
(1)将第t轮自然问句和数据库模式输入到上下文编码器中,第t-1轮的交互编码器的交互语义状态,t=1,2,3,…,N,初始第0轮的状态设置为随机值,参与第t轮的问句编码,得到自然问句每个单词和数据库模式每个表列名的编码词向量,问句最终的语义用于更新交互编码器状态;
(2)将上下文编码器得到的问句向量和Tree-SQL编码器输出的历史Tree-SQL向量输入到框架解码器,根据Tree-SQL文法,按时间步展开依照概率最大原则进入相应的文法规则节点;在每一步预测过程中,会考虑问句语义和当前隐状态的关联性,以及前t-1轮生成的历史Tree-SQL与当前步预测节点的复用概率;由此,序列生成当前第t轮中间语法树的框架;
(3)根据生成的Tree-SQL框架,按照Tree-SQL语法填充其表列名,将上下文编码器得到的问句向量、数据库模式向量和历史Tree-SQL向量输入到细化解码器中,在每一步预测过程中,会考虑问句语义、数据库模式和当前隐状态的关联性,以及前t-1轮生成的历史Tree-SQL的表列名节点与当前步预测的表列名节点的复用概率,得到最终第t轮的Tree-SQL;
(4)由步骤(3)得到的中间语法树Tree-SQL,根据文法规则解析每个节点指示的SQL指令,合成最终的SQL;
(5)在轮次维度上t=1,2,3,…,N,重复步骤(1)-(4),N表示用户对系统发起一次交互的轮数;
(6)将步骤(3)中每轮预测的Tree-SQL与由真实SQL转化得到的Tree-SQL进行比较,计算损失值,并通过随机梯度下降法最小化该损失值,最终获得训练好的语法神经网络模型;
(7)获取用户发起一次交互的N轮自然问句,将每一轮的问句和给定的数据库模式,在轮次维度上依次输入到训练好的语法神经网络,模型输出每一轮的中间语法树Tree-SQL,再推理生成每一轮的SQL,实现多轮自然语言到SQL的生成。
2.如权利要求1所述多轮自然语言转SQL方法,其特征在于:步骤(1)包括以下子步骤:
(1.1)第t轮自然问句包含单词Qt=(xt,1,xt,2,...,xt,i,...,xt,T),其中T是所述问句单词的长度;数据库模式由一系列表列名集合组成,定义为S={s1,s2,...,sj,...,sm},其中sj表示模式中某一项表列名,m是表列名的个数;将问句和数据库模式进行BERT方法的拼接:
[CLS]xt,1,...,xt,i,...,xt,T[SEP]s1[SEP]s2[SEP]...[SEP]sj[SEP]...[SEP]sm[SEP];
(1.3)将交互编码器LSTMI的全局语义状态和问句单词向量进行拼接,捕获全局交互语义,再通过一层双向LSTM捕获问句的上下文语义,得到最终包含有丰富语义的新的问句向量同时用得到的整个问句语义向量ht,T去更新交互编码器的状态;
其中,[;]表示两个向量的连接,o表示取LSTM的输出向量,h表示取LSTM的隐藏层状态,ht,T表示双向LSTM最后一步的隐藏层状态。
3.如权利要求1所述多轮自然语言转SQL方法,其特征在于:步骤(2)包括以下子步骤:
其中,是框架解码器D1第k步的隐藏层状态;ck是上下文向量,对于生成当前第t轮框架Tree-SQL,不涉及其表列名,因此不需要数据库模式编码的参与,但需要问句和前t-1轮的历史框架Tree-SQL语义信息;
(2.2)上下文向量ck包括问句语义信息,将问句每个单词和隐藏层状态进行自注意力计算,对每个单词的语义加权得到问句的上下文信息:
(2.3)上下文向量ck还包括前t-1轮预测得到的历史框架Tree-SQL语义信息;首先将前t-1轮中间语法树的框架y′1,y′2,...,y′i,...,y′t-1,分别输入到Tree-SQL编码器中,得到每一轮框架Tree-SQL的编码表示将每一轮的语法树编码的每一个节点和隐藏层状态进行自注意力计算,对每个节点的语义加权得到该轮的语义表征,再对每轮语义进行汇总得到所有历史轮次的语法树语义信息:
4.如权利要求1所述多轮自然语言转SQL方法,其特征在于:步骤(3)包括以下子步骤:
(3.2)所述步骤与(2.2)和(2.3)类似,细化解码器需要的是历史Tree-SQL语义信息,将前t-1轮完整的中间语法树y1,y2,...,yi,...,yt-1,分别输入到Tree-SQL编码器中,得到每一轮完整的Tree-SQL的编码表示类似地,的计算和(2.3)一样,但输入的是完整Tree-SQL的编码表示;另外,细化解码器涉及表列名的预测,上下文向量ck还需要数据库模式信息的输入:
5.如权利要求1所述多轮自然语言转SQL方法,其特征在于:步骤(6)包括以下子步骤:
(6.1)完整的Tree-SQL生成可以看做是序列预测节点,预测过程的概率表示为:
其中Yt表示第t轮的Tree-SQL,yt,k表示预测第t轮Tree-SQL的第k步节点,It={(Q1,Y1),(Q2,Y2),...,(Qt-1,Yt-1)}表示前t-1轮生成的问句和答案对;
(6.2)将(2)中每轮预测得到的框架Tree-SQL和由真实SQL转化得到的框架Tree-SQL计算交叉熵损失:
(6.3)将(3)中每轮预测得到的Tree-SQL和由真实SQL转化得到的Tree-SQL计算交叉熵损失:
(6.4)将两阶段的交叉熵损失合并,通过Adam最小化该损失,得到训练好的最优语法神经网络:
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010842798.XA CN112069199B (zh) | 2020-08-20 | 2020-08-20 | 一种基于中间语法树的多轮自然语言转sql方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010842798.XA CN112069199B (zh) | 2020-08-20 | 2020-08-20 | 一种基于中间语法树的多轮自然语言转sql方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112069199A CN112069199A (zh) | 2020-12-11 |
CN112069199B true CN112069199B (zh) | 2022-08-05 |
Family
ID=73662731
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010842798.XA Active CN112069199B (zh) | 2020-08-20 | 2020-08-20 | 一种基于中间语法树的多轮自然语言转sql方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112069199B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112783921A (zh) * | 2021-01-26 | 2021-05-11 | 中国银联股份有限公司 | 一种数据库操作方法及装置 |
CN112925794B (zh) * | 2021-04-02 | 2022-09-16 | 中国人民解放军国防科技大学 | 基于桥接填充的复杂多表sql生成方法和装置 |
CN113392123A (zh) * | 2021-06-10 | 2021-09-14 | 中国光大银行股份有限公司 | 一种sql语句处理方法及装置 |
US11726750B1 (en) * | 2021-11-17 | 2023-08-15 | Outsystems—Software Em Rede, S.A. | Constrained decoding and ranking of language models for code generation |
CN116108058A (zh) * | 2023-04-13 | 2023-05-12 | 炫彩互动网络科技有限公司 | 针对代码仓库基于transition转换系统的commit查询语言自动生成方法 |
CN117235108A (zh) * | 2023-11-14 | 2023-12-15 | 云筑信息科技(成都)有限公司 | 一种基于图神经网络的nl2sql生成方法 |
CN117591543B (zh) * | 2024-01-19 | 2024-04-02 | 成都工业学院 | 一种中文自然语言的sql语句生成方法和装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10262062B2 (en) * | 2015-12-21 | 2019-04-16 | Adobe Inc. | Natural language system question classifier, semantic representations, and logical form templates |
US10380259B2 (en) * | 2017-05-22 | 2019-08-13 | International Business Machines Corporation | Deep embedding for natural language content based on semantic dependencies |
CN108519890B (zh) * | 2018-04-08 | 2021-07-20 | 武汉大学 | 一种基于自注意力机制的鲁棒性代码摘要生成方法 |
US11074829B2 (en) * | 2018-04-12 | 2021-07-27 | Baidu Usa Llc | Systems and methods for interactive language acquisition with one-shot visual concept learning through a conversational game |
-
2020
- 2020-08-20 CN CN202010842798.XA patent/CN112069199B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN112069199A (zh) | 2020-12-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112069199B (zh) | 一种基于中间语法树的多轮自然语言转sql方法 | |
CN110377686B (zh) | 一种基于深度神经网络模型的地址信息特征抽取方法 | |
Hui et al. | Dynamic hybrid relation exploration network for cross-domain context-dependent semantic parsing | |
CN110688394B (zh) | 面向新型供电城轨列车大数据运维的nl生成sql方法 | |
CN111858932A (zh) | 基于Transformer的多重特征中英文情感分类方法及系统 | |
CN111651557A (zh) | 一种自动化文本生成方法、装置及计算机可读存储介质 | |
CN114020862A (zh) | 一种面向煤矿安全规程的检索式智能问答系统及方法 | |
CN109189862A (zh) | 一种面向科技情报分析的知识库构建方法 | |
CN110457661B (zh) | 自然语言生成方法、装置、设备及存储介质 | |
CN113032418B (zh) | 一种基于树状模型的复杂自然语言查询转sql方法 | |
CN114489669A (zh) | 一种基于图学习的Python语言代码片段生成方法 | |
CN113779220A (zh) | 一种基于三通道认知图谱和图注意力网络的蒙语多跳问答方法 | |
CN111639254A (zh) | 一种医疗领域的sparql查询语句的生成系统和方法 | |
CN115935957B (zh) | 一种基于句法分析的句子语法纠错方法及系统 | |
CN115496072A (zh) | 一种基于对比学习的关系抽取方法 | |
Aghaei et al. | Question answering over knowledge graphs: A case study in tourism | |
CN114707523B (zh) | 基于交互式Transformer的图像-多语言字幕转换方法 | |
CN112464673B (zh) | 融合义原信息的语言含义理解方法 | |
CN112287641B (zh) | 一种同义句生成方法、系统、终端及存储介质 | |
CN114880341A (zh) | 文本转化编码器、文本转化为sql查询分析方法及系统 | |
CN113536741B (zh) | 中文自然语言转数据库语言的方法及装置 | |
CN113065324A (zh) | 一种基于结构化三元组和锚定模板的文本生成方法及装置 | |
CN110929265B (zh) | 一种面向阅读理解问答的多角度答案验证方法 | |
Jiang et al. | Automatic Question Answering Method Based on IMGRU-Seq2seq | |
Wang et al. | Adaptive Prompt Learning with Distilled Connective Knowledge for Implicit Discourse Relation Recognition |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |