一种基于深度学习的自然语言查询方法与流程

文档序号:21819921发布日期:2020-08-11 21:35阅读:234来源:国知局
一种基于深度学习的自然语言查询方法与流程

本发明属于自然语言处理领域,更具体地,涉及一种基于深度学习的自然语言查询方法。



背景技术:

随着信息系统的普及和发展,数据的数量越来越多,也越来越重要,人们对数据的需求也随之增多。然而有时候数据过于庞大复杂,对于我们来说反而是一种困扰,要从其中找到需要的数据是一件不容易的事,因为数据大多存储在数据库中,就数据库的使用来说,需要使用特定的查询语言来从数据库中查询数据,而特定的查询语言的学习和使用是存在一定门槛的,对于普通使用者来说学习代价比较高,研究一种自然语言查询方法存在重要意义。

许多学者相继提出了许多自然语言查询方法,从早期的基于语法句法分析的方法到最新的基于深度学习的方法,都在自然语言查询方向做出了很多尝试。其中,在早期的时候,学者们通常采用文法分析进行定制化数据库自然语言接口查询系统的研究,这种方法通常需要领域专家知识和定制化,并且泛化能力表现的也一般;随着深度学习的兴起和计算能力的快速提升,基于深度学习的方法进行自然语言查询的研究逐渐多了起来,学者们相继提出seq2sql、sqlnet、sqlova、typesql、x-sql、coarse2fine、pointer-sql、annotatedseq2seq、多任务问题应答网络(multitaskquestionanswering_network,mqan)、executionguideddecoding等等方法来处理nl2sql任务,这种方法的泛化能力效果相对好一些,但是需要大量人工标注过的训练数据,采用人工标注来产生训练数据,本身的造价就比较昂贵;与此同时,有学者提出采用弱监督学习,如内存增强策略优化(memoryaugmentedpolicyoptimization,mapo)、元奖励学习(metarewardlearning,merl)的方法来产生训练数据,进而用产生的训练数据再进行深度学习训练。但是上述方法在进行研究的时候,大多数是给定了当前自然语言问题的目标关系型数据库表,只在给定表上研究如何生成sql查询语句,未考虑根据自然语言问题定位自然语言问题的目标关系型数据库表的过程。而在现实中,由自然语言问题定位关系数据库表的过程是不可避免的,也直接关系到能否生成正确的sql查询语句,故现有方法在现实场景中查询结果的准确率较低;且目前的研究大多是集中在英文wikisq1数据集领域,针对中文领域自然语言查询接口的研究比较少。



技术实现要素:

针对现有技术的以上缺陷或改进需求,本发明提供一种基于深度学习的自然语言查询方法,用以解决现有技术由于未考虑根据自然语言问题定位自然语言问题的目标关系型数据库表的过程,而导致在现实场景中查询结果的准确率较低的技术问题。

为了实现上述目的,第一方面,本发明提出了一种基于深度学习的自然语言查询方法,包括以下步骤:

s1、将自然语言问题q输入到预训练好的句向量模型中,得到对应的句向量;

s2、从句向量模型所对应的句向量空间中检索出自然语言问题q所对应的句向量的最近邻句向量及其自然语言问题,将所得最近邻句向量的自然语言问题的关系数据库表作为自然语言问题q的目标关系数据库表;

s3、将自然语言问题q与其目标关系数据库表表头拼接到一起,输入到预训练好到的转换模型中,得到其对应的sql查询语句;

s4、采用所得sql语句在自然语言问题q的目标关系数据库表中进行查询,得到查询结果;

其中,上述转换模型包括:bert预训练模型、第一全连接层、第二全连接层、第三全连接层、第四全连接层、第五全连接层、第六全连接层和第七全连接层。

进一步优选地,上述步骤s3中,将自然语言问题q与其目标关系数据库表表头拼接到一起,得到转换模型的输入列表,具体为:[[cls],q,[sep],目标关系数据库的第一列表头,特征1,特征2,特征3,特征4,[sep],目标关系数据库的第二列表头,特征1特征2,特征3,特征4,[sep],......,[sep],目标关系数据库的第c列表头,特征1,特征2,特征3,特征4,[sep]];其中,自然语言问题q中的每个字符都是输入列表的一个元素,目标关系数据库的各列表头的各个特征所在的位置为保留位置,c为数据库表的列数。

进一步优选地,bert预训练模型(bidirectionalencoderrepresentationfromtransformers)用于基于输入列表,得到[cls]所对应的向量vcls、自然语言问题q中的各字符所对应的向量vl、数据库各列表头所对应的向量vc、以及各列表头的特征1、特征2、特征3、特征4所对应的向量,分别记为vc1、vc2、vc3和vc4;并将vcls分别输入到第一全连接层、第二全连接层和第三全连接层中,将vc1输入到第四全连接层中,将vc2、vc3和vc4分别并行输入到第五全连接层和第六全连接层中,将vc2、vc3和vc4与vl整合后输入到第七全连接层中;其中,l=1,2,......l,l为自然语言问题q中的字数,c=1,2,......c,c为数据库表的列数;

第一全连接层用于基于[cls]所对应的向量vcls,预测sql查询语句中where子句的各条件之间的连接符;

第二全连接层用于基于[cls]所对应的向量vcls,预测sql查询语句中的select子句中涉及到的列数目;

第三全连接层用于基于[cls]所对应的向量vcls,预测sql查询语句中的where子句中涉及到的列数目;

第四全连接层用于根据各列表头的特征1所对应的向量vc1,预测sql查询语句中各列是否是select列和对应的聚合符号;

第五全连接层用于根据各列表头的特征2、特征3、特征4所对应的向量vc2、vc3、vc4,预测sql查询语句中各列是否是where子句中的条件列;

第六全连接层用于根据各列表头的特征2、特征3、特征4所对应的向量vc2、vc3、vc4,预测sql查询语句中where子句中涉及到的列的比较符号;

第七全连接层用于根据自然语言问题q中的各字符所对应的向量vl以及各列表头的特征2、特征3、特征4所对应的向量vc2、vc3、vc4,预测sql查询语句中where子句中各条件的值在自然语言问题q中的开始位置和结束位置。

进一步优选地,上述第一全连接层、第二全连接层、第三全连接层、第四全连接层、第五全连接层、第六全连接层和第七全连接层的大小分别为:hidden_size*3、hidden_size*4、hidden_size*4、hidden_size*7、hidden_size*1、hidden_size*4和hidden_size*2;其中,hidden_size为bert预训练模型输出向量的维数。

进一步优选地,上述句向量模型的训练方法,包括以下步骤:

s011、采集查询数据训练集{(qi,sqli)},其中,qi和sqli分别为第i条自然语言问题及其对应的sql查询语句;其中,各自然语言问题中均携带有对应的关系数据库表;1≤i≤n,n为查询数据训练集中数据的个数;

s012、分别计算查询数据训练集中两两自然语言问题所对应的sql查询语句之间的相似度,得到三元组数据集{(qi,qj,simij)},其中,simij为自然语言问题qi和qj所对应的sql查询语句之间的相似度,i≠j;在计算sql查询语句的相似度时,只考虑select列和where的条件列;

s013、将三元组数据集输入到句向量模型中对其进行训练,得到预训练好的句向量模型,并将查询数据训练集中所有自然语言问题输入到预训练好的句向量模型中,得到该句向量模型所对应的句向量空间。

进一步优选地,上述转换模型的训练方法,包括:

对于查询数据训练集{(qi,sqli)},分别将其中的各自然语言问题与其对应的数据库表表头拼接到一起,得到(qi,headeri);以(qi,headeri)为输入,sqli为输出训练转换模型,得到预训练好的转换模型,其中,1≤i≤n,n为查询数据训练集中数据的个数。

进一步优选地,上述转换模型的损失函数为:

其中,loss1为基于查询数据训练集中的sql查询语句中的where子句的各条件之间的连接符和转换模型的第一全连接层所得的where子句的各条件之间的连接符的损失函数;loss2为基于查询数据训练集中的sql查询语句中的sql查询语句中的select子句中涉及到的列数目和转换模型的第二全连接层所得的select子句中涉及到的列数目的损失函数;loss3为基于查询数据训练集中的sql查询语句中的where子句中涉及到的列数目和转换模型的第三全连接层所得的where子句中涉及到的列数目的损失函数;loss4为基于查询数据训练集中的sql查询语句中各列是否是select列及对应的聚合符号和转换模型的第四全连接层所得的sql查询语句中各列是否是select列及对应的聚合符号的损失函数;loss5为基于查询数据训练集中的sql查询语句中各列是否是where子句中的条件列和转换模型的第五全连接层所得的sql查询语句中各列是否是where子句中的条件列的损失函数;loss6为基于查询数据训练集中的sql查询语句中where子句中涉及到的列的比较符号和转换模型的第六全连接层所得的where子句中涉及到的列的比较符号的损失函数;loss7为基于查询数据训练集中的sql查询语句中where子句中各条件的值在自然语言问题中的开始结束位置和转换模型的第七全连接层所得的where子句中各条件的值在自然语言问题中的开始结束位置的损失函数。

第二方面,本发明还提供了一种存储介质,当计算机读取所述指令时,使所述计算机执行本发明第一方面所提供的基于深度学习的自然语言查询方法。

总体而言,通过本发明所构思的以上技术方案,能够取得以下有益效果:

1、本发明提出了一种基于深度学习的自然语言查询方法,任意输入一个自然语言问题,先通过句向量模型得到其句向量,然后在所得句向量空间中寻找其最近邻句向量,将最近邻句向量的目标关系数据库表作为当前自然语言问题的目标关系数据库表,通过以上步骤,将自然语言问题映射到一个固定维度的向量空间,使得在向量空间中,相似的问题对应的句向量之间的距离更加接近,从而在给定自然语言问题后能够快速找到最近的邻居所在的数据库表,即为该自然语言问题的目标关系数据库表,然后,本发明根据自然语言问题生成sql语句后在所得目标关系数据库表上进行查询,得到查询结果,在现实场景中查询结果的准确率较高。

2、本发明所提供的一种基于深度学习的自然语言查询方法,其转换模型在将自然语言转换为sql查询语句的过程中,将整个sql预测的任务划分为不同的子任务,分别预测selectcol的数目、selectcol的列和聚合符、where子句中条件列的数目、条件列的列、条件列的比较符号、条件列的值、不同条件之间的连接符。将所有子任务组合起来,共同训练,最后再将各子任务预测的结果组合到一起,模型的精确度较高。

3、本发明所提出的基于深度学习的自然语言查询方法,在实际场景应用中,对于任意一条自然语言问题,可以快速完成目标数据库表定位和目标sql查询语句的转换两个过程,处理速度快,可以满足实际应用的需求。

4、本发明所提出的基于深度学习的自然语言查询方法,具有较好的迁移性,在更换到不同领域时,只需将新的领域的训练数据输入到模型中,重新训练一遍即可。

5、本发明所提出的基于深度学习的自然语言查询方法中的转换模型在思路上采用了划分子任务的做法,将具体转换过程变得更加细化,使得在评测转换模型的效果时,可以直观的看到转换模型的短板是哪一个子任务,方便在短板子任务上进一步做修改和提升,进而使得模型的准确率较高。

附图说明

图1为本发明实施例1提供的一种基于深度学习的自然语言查询方法流程图;

图2为本发明实施例1提供的转换模型结构示意图;

图3为本发明实施例1提供的采用第一全连接层预测where子句各条件之间连接符的流程图;

图4为本发明实施例1提供的采用第二全连接层预测select子句中列数目的流程图;

图5为本发明实施例1提供的采用第三全连接层预测where子句中的条件列数目的流程图;

图6为本发明实施例1提供的采用第四全连接层预测select子句中的列及聚合符号的流程图;

图7为本发明实施例1提供的采用第五全连接层预测where子句中各条件列的流程图;

图8为本发明实施例1提供的采用第六全连接层预测where子句中各条件比较符号的流程图;

图9为本发明实施例1提供的采用第七全连接层预测where子句中各条件值开始结束位置的流程图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

实施例1、

一种基于深度学习的自然语言查询方法,如图1所示,包括以下步骤:

s1、将自然语言问题q输入到预训练好的句向量模型中,得到对应的句向量;

具体的,句向量模型的训练方法,包括以下步骤:

s011、采集查询数据训练集{(qi,sqli)},其中,qi和sqli分别为第i条自然语言问题及其对应的sql查询语句;其中,各自然语言问题中均携带有对应的关系数据库表;1≤i≤n,n为查询数据训练集中数据的个数;

s012、分别计算查询数据训练集中两两自然语言问题所对应的sql查询语句之间的相似度,得到三元组数据集{(qi,qj,simij)},其中,simij为自然语言问题qi和qj所对应的sql查询语句之间的相似度,i≠j;在计算sql查询语句的相似度时,只考虑select列和where的条件列;

具体的,平均地将[0,1]划分为4个相同大小的相似度区间,分别为[0,0.25)、[0.25,0.5)、[0.5,0.75)、[0.75,1.0],将所得的相似度分别分到各相似度区间中,并分别在其相似度区间内向下取边界值,映射到{0,0.25,0.5,0.75,1.0}集合中。

s013、将三元组数据集输入到句向量模型中对其进行训练,得到预训练好的句向量模型,并将查询数据训练集中所有自然语言问题输入到预训练好的句向量模型中,得到该句向量模型所对应的句向量空间。

具体的,采用句向量模型计算句向量时,句向量模型仅包括依次连接的bert预训练模型和池化层,池化层输出的即为自然语言问题对应的句向量。而在训练过程中,句向量模型的包括依次连接的bert预训练模型、池化层、拼接模块和soffmax层;句向量模型的损失函数为交叉熵损失函数。具体的,将两个问题输入到bert预训练模型中,对输出的字向量进行平均池化操作,然后将得到的两个句向量u和v按照[u,v,|u-v|]的方式拼接在一起得到一个维数为3*n的向量,其中,n为句向量的维度,将得到的维数为3*n的向量输入到softmax层中得到两个自然语言问题的相似度类别,进而采用交叉熵损失函数计算损失值,并基于所得损失值更新句向量模型中的参数。

s2、从句向量模型所对应的句向量空间中检索出自然语言问题q所对应的句向量的最近邻句向量及其自然语言问题,将所得最近邻句向量的自然语言问题的关系数据库表作为自然语言问题q的目标关系数据库表;

s3、将自然语言问题q与其目标关系数据库表表头拼接到一起,得到转换模型的输入列表,具体为:[[cls],q,[sep],目标关系数据库的第一列表头,特征1,特征2,特征3,特征4,[sep],目标关系数据库的第二列表头,特征1特征2,特征3,特征4,[sep],......,[sep],目标关系数据库的第c列表头,特征1,特征2,特征3,特征4,[sep]],并输人到预训练好到的转换模型中,得到其对应的sql查询语句;其中,自然语言问题q中的每个字符都是输入列表的一个元素,目标关系数据库的各列表头的各个特征所在的位置为保留位置,c为数据库表的列数。

具体的,如图2所示,上述转换模型包括:bert预训练模型、第一全连接层、第二全连接层、第三全连接层、第四全连接层、第五全连接层、第六全连接层和第七全连接层;

其中,本实施例中,第一全连接层、第二全连接层、第三全连接层、第四全连接层、第五全连接层、第六全连接层和第七全连接层的大小分别为:hidden_size*3、hidden_size*4、hidden_size*4、hidden_size*7、hidden_size*1、hidden_size*4和hidden_size*2;其中,hidden_size为bert预训练模型输出向量的维数;在输入转换模型之前,将自然语言问题q与其目标关系数据库表表头拼接到一起,得到转换模型的输入列表,具体为:[[cls],q,[sep],目标关系数据库的第一列表头,特征1,特征2,特征3,特征4,[sep],目标关系数据库的第二列表头,特征1特征2,特征3,特征4,[sep],......,[sep],目标关系数据库的第c列表头,特征1,特征2,特征3,特征4,[sep]],其中,自然语言问题q中的每个字符都是输入列表的一个元素,目标关系数据库的各列表头的各个特征所在的位置为保留位置,目的是获得bert预训练模型输出的该位置的字向量,c为数据库表的列数。

bert预训练模型用于基于输入列表,得到[cls]所对应的向量vcls、自然语言问题q中的各字符所对应的向量vl、数据库各列表头所对应的向量vc、以及各列表头的特征1、特征2、特征3、特征4所对应的向量,分别记为vc1、vc2、vc3和vc4;并将vcls分别输入到第一全连接层、第二全连接层和第三全连接层中,将vc1输入到第四全连接层中,将vc2、vc3和vc4分别并行输入到第五全连接层和第六全连接层中,将vc2、vc3和vc4与vl整合后输入到第七全连接层中;其中,l=1,2,......l,l为自然语言问题q中的字数,c=1,2,......c,c为数据库表的列数;第一全连接层用于基于[cls]所对应的向量vcls,预测sql查询语句中where子句的各条件之间的连接符,如图3所示,本实施例中where子句的各条件之间的连接符包括“and”、“or”和没有连接符。第二全连接层用于基于[cls]所对应的向量vcls,预测sql查询语句中的select子句中涉及到的列数目,如图4所示。第三全连接层用于基于[cls]所对应的向量vcls,预测sql查询语句中的where子句中涉及到的列数目,如图5所示。第四全连接层用于根据各列表头的特征1所对应的向量vc1,预测sql查询语句中各列是否是select列和对应的聚合符号,如图6所示。第五全连接层用于根据各列表头的特征2、特征3、特征4所对应的向量vc2、vc3、vc4,预测sql查询语句中各列是否是where子句中的条件列,如图7所示。第六全连接层用于根据各列表头的特征2、特征3、特征4所对应的向量vc2、vc3、vc4,预测sql查询语句中where子句中涉及到的列的比较符号,如图8所示。第七全连接层用于根据自然语言问题q中的各字符所对应的向量vl以及各列表头的特征2、特征3、特征4所对应的向量vc2、vc3、vc4,预测sql查询语句中where子句中各条件的值在自然语言问题q中的开始位置和结束位置,如图9所示。

进一步地,转换模型的训练方法,包括以下步骤:

对于查询数据训练集{(qi,sqli)},分别将其中的各自然语言问题与其对应的数据库表表头拼接到一起,得到(qi,headeri);以(qi,headeri)为输入,sqli为输出训练转换模型,得到预训练好的转换模型,其中,1≤i≤n,n为查询数据训练集中数据的个数。具体的,包括以下步骤:

s031、令i=1;

s032、将自然语言问题qi与对应数据库表表头各列拼接到一起,得到转换模型的输入列表;

具体的,输入列表为:[[cls],qi,[sep],目标关系数据库的第一列表头,特征1,特征2,特征3,特征4,[sep],目标关系数据库的第二列表头,特征1特征2,特征3,特征4,[sep],......,[sep],目标关系数据库的第c列表头,特征1,特征2,特征3,特征4,[sep]],其中,自然语言问题qi中的每个字符都是输入列表的一个元素,目标关系数据库的各列表头的各个特征所在的位置为保留位置,c为数据库表的列数。

s033、将输入列表输入到转换模型的bert预训练模型中,得到[cls]所对应的向量vcls、自然语言问题q中的各字符所对应的向量vl、数据库各列表头所对应的向量vc、以及各列表头的特征1、特征2、特征3、特征4所对应的向量,分别记为vc1、vc2、vc3和vc4;其中,l=1,2,......l,l为自然语言问题q中的字数,c=1,2,......c,c为数据库表的列数;

s034、将[cls]所对应的向量vcls输入到转换模型的第一全连接层中,预测得到sql查询语句中where子句的各条件之间的连接符;

s035、将[cls]所对应的向量vcls分别输入到转换模型的第二和第三全连接层中,预测得到sql查询语句中select子句和where子句中涉及到的列数目;

s036、将各列表头的特征1所对应的的向量vc1输入到第四全连接层,预测sql查询语句中各列是否是select列和对应的聚合符号;

s037、将各列表头的特征2、特征3、特征4所对应的向量vc2vc3vc4分别输入到第五和第六全连接层,分别预测sql查询语句中的where子句涉及到的条件列和各条件列的比较符号;

s038、将自然语言问题qi中的各字所对应的向量和各列表头的特征2、特征3、特征4所对应的向量va2、vc3和vc4进行整合后输入到第七全连接层,预测得到sql查询语句中where子句中各条件值在自然语言问题q中的开始位置和结束位置;

s039、将训练数据的sql查询语句的各部分元素预处理为符合规格大小的向量作为label,与步骤s034~s038所得的结果分别求损失函数,将各部分损失函数相加作为总的损失函数,并通过最小话损失函数的结果更新转换模型中的参数值;

具体的,将训练数据的sql查询语句的各部分元素处理为符合规格大小的向量作为label并求分别求损失函数需要经过如下过程:

(1)对于子任务1,需要预测where子句中各条件之间的连接符号,经第一个全连接层网络的输出预测为大小3的向量v13,分别代表三种连接符号;将sql查询语句中where子句之间的具体连接符号转为大小为1的向量v11,此子任务使用交叉熵损失函数:

loss1=cross_entropy(v13,v11)

(2)对于子任务2,需要预测select子句中涉及到的列数目,经第二个全连接层网络的输出预测为大小为4的向量v24,分别代表不同数目1、2、3、4个列;将sql查询语句中select子句的列数目具体值转换为大小为1的向量v21,此子任务使用交叉熵损失函数:

loss2=cross_entropy(v24,v21)

(3)对于子任务3,需要预测sql查询语句中where子句涉及到的列数目,经第三个全连接层网络的输出预测为大小为4的向量v34,分别代表不同数目1、2、3、4个列;将sql查询语句中where子句的列数目具体值转换为大小为1的向量v31,此子任务使用交叉熵损失函数:

loss3=cross_entropy(v34,v31)

(4)对于子任务4,需要预测sql查询语句中select子句中的列及聚合符信息,即预测表头各列是否是select子句中的列以及具体的聚合符号,经第四个全连接层网络输出预测大小为7的向量v47,分别代表当前列不是select子句中的列、是select子句中得列且聚合符号为“”、avg、max、min、sum、count七种情况;将sql查询语句中select子句的信息转换为大小为1的向量v41,此子任务使用交叉熵损失函数:

loss4=cross_entropy(v47,v41)

(5)对于子任务5,需要预测where子句中的列信息,即预测表头各列是否是where子句中的列,经第五个全连接层网络输出预测大小为1的向量v51,代表当前列是where子句中列的可能性;将where子句中的具体的列转换为大小为1的向量v51′,此子任务使用kl散度衡量两者之间的误差:

loss5=kl_loss(softmax(v51),v51′)

(6)对于子任务6,需要预测where子句中的各条件列的比较符号,经第六个全连接网络输出预测大小为4的向量v64,分别代表4种不同的比较符号;将where子句中各条件列的具体比较符号转换为大小为1的向量v61,此子任务使用交叉熵损失函数:

loss6=cross_entropy(v64,v61)

(7)对于子任务7,需要预测where子句中各条件的条件值,这里预测各条件值在自然语言问题中的开始结束位置,经第七个全连接网络层输出大小为3*2*l的向量v732l,代表当前条件值的可能的开始和结束位置及概率,其中l是自然语言问题的长度;将where子句中各条件值的具体在自然语言问题中的开始结束位置转换为大小为3*2的矩阵v732,此任务使用交叉熵损失函数:

loss7=cross_entropy(v732l,v732)

综合以上各子任务,得到转换模型的损失函数为:

s040、令i=i+1;

s041、重复步骤s032-s040,直至i大于查询数据训练集中数据的个数n。

s4、采用所得sql语句在自然语言问题q的目标关系数据库表中进行查询,得到查询结果。

实施例2、

一种存储介质,当计算机读取所述指令时,使所述计算机执行本发明实施例1所提供的基于深度学习的自然语言查询方法。

本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1