一种支持自然语言的数据查询方法和系统与流程

文档序号:17696169发布日期:2019-05-17 21:32阅读:269来源:国知局
一种支持自然语言的数据查询方法和系统与流程

本发明涉及数据查询技术领域,具体来说,涉及一种支持自然语言的数据查询方法和系统。



背景技术:

随着数据库应用及信息检索系统的广泛发展和普及,各种智能便携式信息终端的大量涌现和使用,越来越多的非专业用户需要一种易于掌握的人机接口去访问所需的信息。目前常见的形式大多是以窗口、菜单为主的数据报表,用户只需用鼠标点击以及少量的键盘操作就能从数据库中获取所需的信息。但这种方式不够灵活和全面,很多问题是无法或难以用这种方式表达的。另一种常见方式是通过标准的sql语言进行数据库查询,尽管sql语言具有简洁、明快和高效的特点,但它的语言形式有很高的格式要求,其形式也和中文表达方式相差甚远,一般只有数据库专业开发人员才能掌握,普通用户很难掌握。所以大多公司的数据查询方式是业务人员通过提交查询申请,由专业数据查询人员完成数据查询任务,再反馈相应结果。

自然语言是人类使用最多、最为方便的交流工具,因此通过自然语言直接和计算机进行交互,获取数据库查询结果,可以使没有数据库知识的用户也可以直接查询数据库,从而大大提高工作效率。



技术实现要素:

针对相关技术中翻译准确率低、模型迭代优化速度慢、对翻译得到的语句的表达逻辑和内容的检查修正操作具有不可控性的问题,本发明提出一种支持自然语言的数据查询方法和系统,能够解决上述技术问题。

本发明的技术方案是这样实现的:

根据本发明的一个方面,提供了一种支持自然语言的数据查询方法,包括:

接收用户自然语言查询语句;

基于翻译模型建立所述自然语言查询语句翻译转换为目标标准sql语句;

判断能否获得所述目标标准sql语句;

若能,则基于所述目标标准sql语句输出数据查询结果;

若不能,则提示用户重新输入其它的自然语言查询语句,并且对所述翻译模型进行模型训练优化。

在一些实施例中,在基于翻译模型将所述自然语言查询语句翻译转换为目标标准sql语句的步骤中,包括:将所述自然语言查询语句中的时间和条件属性通过精确匹配方式进行提取后翻译转换为第一字段,将所述自然语言查询语句的剩余部分在所述翻译模型中进行翻译转换为第二字段,拼接所述第一字段和所述第二字段以获得所述目标标准sql语句。

在一些实施例中,在拼接所述第一字段和所述第二字段以获得所述目标标准sql语句的步骤前,包括字段检验、纠错和去重。

在一些实施例中,对所述翻译模型进行模型训练优化包括数据集准备、模型输入数据准备、模型训练、获得实验结果。

在一些实施例中,所述模型训练包括:

创建所述翻译模型,初始化相关超参数;

将所述自然语言查询语句输入训练集和测试集,并将所述自然语言查询语句按照长度放入bucket;

对所述自然语言查询语句的样本进行训练,观察所述翻译模型混淆度,其中,所述混淆度越接近于1,表示模型损失函数值接近于0;

调整网络的各个所述超参数,如果混淆度值在最近3次迭代中没有降低,则减小学习率;

记录每一次的训练结果,将产生最优结果的所述翻译模型保存。

根据本发明的另一方面,提供了一种支持自然语言的数据查询系统,包括:

接收模块,用于接收用户自然语言查询语句;

翻译转换模块,用于基于翻译模型建立所述自然语言查询语句翻译转换为目标标准sql语句;

判断模块,用于判断能否获得所述目标标准sql语句;

输出模块,基于所述目标标准sql语句输出数据查询结果;

提示模块,用于提示用户重新输入其它的自然语言查询语句;

模型训练优化模块,用于对所述翻译模型进行模型训练优化。

在一些实施例中,所述翻译转换模块包括:

第一转换模块,用于将所述自然语言查询语句中的时间和条件属性通过精确匹配方式进行提取后翻译转换为第一字段;

第二转换模块,用于将所述自然语言查询语句的剩余部分在所述翻译模型中进行翻译转换为第二字段;

拼接模块,用于拼接所述第一字段和所述第二字段以获得所述目标标准sql语句。

在一些实施例中,所述翻译转换模块包括:

检查纠正模块,用于对字段进行检验、纠错和去重。

在一些实施例中,所述模型训练优化模块包括:数据集、模型输入数据、模型训练模块以及实验结果获取模块。

在一些实施例中,所述模型训练模块包括:

创建模块,用于创建所述翻译模型,初始化相关超参数;

输入模块,用于将所述自然语言查询语句输入训练集和测试集,并将所述自然语言查询语句按照长度放入bucket;

训练模块,用于对所述自然语言查询语句的样本进行训练,当所述翻译模型混淆度越接近于1时,表示模型损失函数值接近于0;

调整模块,用于调整网络的各个所述超参数,如果混淆度值在最近3次迭代中没有降低,则减小学习率;

保存模块,用于记录每一次的训练结果,将产生最优结果的所述翻译模型保存。

基于以上实施例,本发明首先将自然语言查询语句解码翻译成sql语句,将翻译模型无法翻译预测或者翻译错误的自然查询语句进行正确的标记,扩增模型训练样本集,持续训练以优化现有机器翻译模型,供自然语言查询系统调用。从而实现了自动化数据查询,使得不具备sql知识的可以直接在数据中进行查询。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是根据本发明实施例的一种支持自然语言的数据查询方法的流程图;

图2示出了seq2seq模型结构图;

图3示出了注意力机制的结构图;

图4示出了自然语言查询seq2seq模型结构;

图5是本发明实施例的一种支持自然语言的数据查询系统。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明保护的范围。

参见图1,根据本发明的实施例,提供了一种支持自然语言的数据查询方法,包括:

s101:接收用户自然语言查询语句;

s102:基于翻译模型建立所述自然语言查询语句翻译转换为目标标准结构化查询语言(structuredquerylanguage,以后简称sql)语句;

s103:判断能否获得所述目标标准sql语句;

s104:若能,则基于所述目标标准sql语句输出数据查询结果;

s105:若不能,则提示用户重新输入其它的自然语言查询语句,并且对所述翻译模型进行模型训练优化。

基于以上实施例,首先将自然语言查询语句解码翻译成sql语句,将翻译模型无法翻译预测或者翻译错误的自然查询语句进行正确的标记,扩增模型训练样本集,持续训练以优化现有机器翻译模型,供自然语言查询系统调用。

因此,针对传统数据查询方式中使用数据报表或者专业人员帮助完成sql查询,本发明创新性地将常用于机器翻译的深度学习模型seq2seq应用于数据查询场景中,建立了自然语言查询语句和sql字段的有序映射,同时对查询条件进行规则匹配,最终拼接得到sql语句,以实现从自然语言到sql语句的自动翻译,实现自动化数据查询,使得不具备sql知识的人可以直接在数据中进行查询。

传统的自然语言语句解码流程主要是基于整个语句进行翻译,即将整个语句不做拆解,直接全句进入模型,解码翻译成另一种语言的完整表达。由于语言表达的多样性,模型的训练样本覆盖度有限,往往基于此种方式的翻译准确率较低,且模型迭代优化速度较慢。对翻译得到的语句的表达逻辑和内容的检查修正操作,都具有不可控性。因此,在一些实施例中,在基于翻译模型将所述自然语言查询语句翻译转换为目标标准sql语句的步骤中,包括:将所述自然语言查询语句中的时间和条件属性通过精确匹配方式进行提取后翻译转换为第一字段,将所述自然语言查询语句的剩余部分在所述翻译模型中进行翻译转换为第二字段,拼接所述第一字段和所述第二字段以获得所述目标标准sql语句。通过这种方式可以将自然语言查询语句解码拆分成两部分,从而输出的不是完整语句,而是字段,通过将两部分拼接得到完整的sql查询语句,从而增加了翻译准确率。

在一些实施例中,在拼接所述第一字段和所述第二字段以获得所述目标标准sql语句的步骤前,包括字段检验、纠错和去重。从而可以对翻译出的语句进行有效的检查和修正操作。并且可以对条件属性字典内容不断扩充和迭代,可以有效提高翻译的准确性和多样性。

在一个具体的实施例中,本发明实施例中的自然语言查询语句解码步骤包括where条件的信息提取和进入模型预测解码。

1)where条件的信息提取

本算法的where条件信息提取有两种类型,时间信息和其他属性信息。其他属性信息采用精确匹配的方式。将查询表所有属性名及其对应的属性值建立字典映射,当在查询语句中通过精确匹配的方式找到属性值时,抽取出属性名和属性值构成相应字段放入where子句。将语句中的各种时间或条件属性通过精确匹配方式提前提取出来,此种方式的准确性较高。并且通过对映射字典的不断扩充和更新,可以对条件属性的匹配程度和范围不断提升。

时间信息对不同的时间表达方式,建立不同的正则匹配模式,获取时间匹配字段。时间信息的匹配流程如下:

a.提取标注的8位或者6位,形如20170329,20170。

b.提取中文表达,行为昨天、第一季度、前年。

c.将形如一月的中文标示方法替换为1月的数字表达方式。

d.按数字分隔,不同的数字结构对应不同的时间表达方式。

e.分隔后有3个数字,如果第一位是四位数,则原表达应形如2016/02/03,2016年2月3日,2016年二月三日,转化为20160203;如果第三位是四位数,则原表达应形如02/03/2016,2/3/2016,转化为20160203。

f.分隔后有2个数字,如果第一位是四位数,则原表达应形如2016/02,转化为between20160201and20160231;如果第一位是四位数,则原表达应形如02/2016,转化为between20160201and20160231;如果没有四位数,则认为是日和月的组合方式。如果第一位是一位数或两位数,形如2/3,默认为本年度,转化为20170203;如果两个数字分别是三位或四位数字,形如0203-0205,转化为between20170203and20170205。

g.分隔后超过3个数字,则是两个日期的组合,通过日期的连接符进行分隔,得到两个日期,再对两个日期表达方式重复步骤e,f。

h.分隔后只有1个数字,形如2016年,0320,10月,分别转化到合适的方式。

where条件的信息提取传入参数是原始的查询语句,返回时间表达方式,进入seq2seq模型的查询语句,原始查询语句匹配到的属性名列表及其对应的属性取值。后续seq2seq模型的实际查询语句是匹配后的查询语句,而非最初的查询语句。

2)进入模型预测解码

将经过属性值和时间表达方式匹配后的查询语句调用seq2seq模型进行翻译预测,获得计算字段和目标字段,对计算字段和目标字段进行检验、纠正和去重,然后结合上一步匹配到的属性值条件语句,日期条件语句,按照sql句法规则拼接成sql语句,继而自动从相应数据库中查询到数据结果。通过此种方式可以保证拼接后的sql语句逻辑正确。但传统的整句翻译模式则无法对输出语句的表达逻辑正确性进行检查。

在一个具体的实施例中,本发明实施例中的对所述翻译模型进行模型训练优化包括数据集准备、模型输入数据准备、模型训练、获得实验结果。

在一个实施例中,数据集准备的具体操作包括:首先挑选常用的计算字段(交易的max,sum,count和avg)和目标字段(查询日期(acct_date),查询地区(bagent_area_name),查询对象id(bagent_id)),构造单目标字段,两目标字段的查询,查询的计算字段覆盖单计算字段,两计算字段,三计算字段和四计算字段的所有可能,通过人工翻译得到真实数据集,共671条有效样本,以下称为样本一。基于真实的数据,又提炼出330种查询句式,每个计算字段和目标字段有多种表达方式。对每一个句式遍历计算字段和目标字段的所有组合方式,每一种组合方式下计算字段和目标字段的表达方式随机选取,通过该方式获得11320条根据规则生成的样本,以下称为样本二。样本的中文都是不带条件(where)子句的。将样本二按照训练集占比70%划分数据集,训练模型后,分别验证样本二测试集上的准确率和在样本一上的准确率。

在一个实施例中,模型输入数据准备的具体操作包括:首先对所有的中文语料进行分词,sql语句进行字段分割,分别生成对应的词典。建立单词和表示位置顺序的一一映射,从而将原输入转化为索引表示的语料。统计语料中中文分词和sql分割后的语料长度组,以确定后续的bucket_size参数。

在一个实施例中,模型训练的具体操作包括:

创建模型,初始化相关超参数等各种参数。

读入训练集和测试集进行处理,将句子对按照长度放入不同的bucket。

对样本进行训练,观察结果(观察模型混淆度,混淆度越接近于1,表示模型损失函数值接近于0。

调整网络的各个超参数,如果混淆度值在最近3次迭代中没有降低,则减小学习率。

记录每一次的训练结果,将产生最优结果的模型(模型结构和节点权重)保存。

其中,常用可调参数包括:lstm层参数(类型,层数,神经元个数,返回结构)、学习率、bucket_size、梯度裁剪值、优化算法、损失函数。

其中,梯度裁剪值(clippinggradient)是为了解决爆炸梯度效应,可以在给定的阈值上修剪梯度。当给定序列的梯度向量的范数超过一个阈值,使用全局范数进行截断操作。优化算法(optimizer)是用来最优化损失函数的算法,通常使用随机批量梯度下降算法,通过反复的调整各个节点之间的权重值,使得误差最小。损失函数(lossfunction/objectivefunction)是衡量误差用的函数,常见的有mse(均方误差),categorical_crossentropy(多标签交叉熵)等,是用来计算当前计算值对应实际值的误差。神经网络学习的目标就是将损失函数的值尽可能减小,从而使分类效果最优。

在一些实施例中,获得试验结果的步骤包括:

参见图2,示出了seq2seq模型结构图。seq2seq(全称sequencetosequence,一种编码-解码形式的深度神经网络结构)解决问题的主要思路是通过深度神经网络模型(常用的是长短记忆神经网络(lstm),一种循环神经网络)将一个作为输入的序列映射为一个作为输出的序列,这一过程由编码输入(encoder)与解码输出(decoder)两个环节组成。

由图2可知,在这个模型中每一时间的输入和输出是不一样的,比如对于序列数据就是将序列项依次传入,每个序列项再对应不同的输出。比如说现在有序列“abceos”(其中eos=endofsentence,句末标识符)作为输入,那么目的就是将“a”,“b”,“c”,“eos”依次传入模型后,把其映射为序列“wxyzeos”作为输出。

编码(encoder)的公式为:

公式中:ht为t时刻的隐藏层状态,xt为t时刻的输入序列,c为隐藏层输出的语境向量,f和ф为激活函数)

在seq2seq中,各类长度不同的输入序列x将会经由循环神经网络(recurrentneuralnetwork,rnn)构建的编码器编译为语境向量c。向量c通常为rnn中的最后一个隐节点(h,hiddenstate),或是多个隐节点的加权总和。

解码(decoder)的公式为:

st=f(yt-1,st-1,c)

p(yt|y<t,x)=g(yt-1,st,c)

公式中:yt-1为t-1时刻的输出序列,st-1为t-1时刻的输出层编码向量,x为输入序列,f和g为激活函数,c为语境向量,p(yt|yt-1,x)为t时刻输出序列的概率。

编码完成之后,语境向量c将会进入一个rnn解码器中进行解译。简单来说,解译的过程可以被理解为运用贪心算法(一种局部最优解算法,即选取一种度量标准,默认在当前状态下进行最好的选择)来返回对应概率最大的词汇,或是通过集束搜索(beamsearch,一种启发式搜索算法,可以基于设备性能给予时间允许内的最优解)在序列输出前检索大量的词汇,从而得到最优的选择。

作为seq2seq中的重要组成部分,注意机制(attentionmechanism)最早由bahdanau等人于2014年提出,该机制存在的目的是为了解决rnn中只支持固定长度输入的瓶颈。在图3中示出了注意力机制的结构图,在图3中,xi为i时刻的输入序列,hi为i时刻的隐藏层状态,at,i为i时刻的权重,si为i时刻的输出层编码向量,yi为i时刻的输出序列。

在该机制环境下,seq2seq中的编码器被替换为一个双向循环网络(bidirectionalrnn)。如上图所示,在注意机制中,源序列x=(x1,x2,…,xt)分别被正向与反向地输入了模型中,进而得到了正反两层隐节点,语境向量c则由rnn中的隐节点h通过不同的权重a加权而成,其公式如下:

公式中:ct为t时刻的语境向量,at为t时刻的权重,st为t时刻的输出层编码向量,ht为t时刻的隐藏层状态,η为调整“注意回应强度”的函数。其中,η为一个调整“注意回应强度”的函数。每一个隐节点hi都包含了对应的输入字符xi以及其对上下文的联系,这么做意义就在于现在模型可以突破固定长度输入的限制,根据不同的输入长度构建不同个数的隐节点,故不论输入的序列长度如何,都可以得到模型输出结果。

以sequence2sequence神经网络协同注意力机制为基础提出了图4所示的自然语言查询seq2seq模型结构的神经网络结构。其中,图中的每个x代表输入语句中的单词,每个y代表通过模型输出的单词。

在确定了神经网络的结构之后,需要对算法的超参数进行调优,观察不同超参数条件下测试集的分类准确率和稳定性。利用真实样本和构造样本数据集建立模型,对各个超参数进行调优,经过大量实验调整的超参数包括:学习率(learning_rate)、bucket_size、损失函数、优化器。

学习率(learning_rate)是一个非常重要的超参数,它控制着基于损失梯度调整神经网络权值的速度,大多数优化算法(如sgd、rmsprop、adam)对它都有涉及。学习率越小,沿着损失梯度下降的速度越慢。学习率越大,梯度下降震动幅度增大,且不容易到达最小值点。一般常用的学习率有0.00001,0.0001,0.001,0.003,0.01,0.03,0.1,0.3,1,3,10等。

bucketing策略可以用于处理不同长度的训练样例,如果把训练样例的输入和输出长度固定,那么在训练整个网络的时候,必然会引入很多的pad辅助单词,而这些单词却包含了无用信息。所以,可以选择设置若干个buckets,每个bucket指定一个输入和输出长度,这样的话,经过bucketing策略处理后,会把所有的训练样例分成几份,其中每一份的输入序列和输出序列的长度分别相同。

损失函数(lossfunction/objectivefunction):衡量误差用的函数,常见的有mse(均方误差),categorical_crossentropy(多标签交叉熵)等,是用来计算当前计算值对应实际值的误差。神经网络学习的目标就是将损失函数的值尽可能减小。尝试的损失函数包括:

sigmoid_cross_entropy_with_logits

softmax_cross_entropy_with_logits

sparse_softmax_cross_entropy_with_logits

weighted_cross_entropy_with_logits

调节优化器是编译tensorflow模型必要的两个参数之一,通过调用优化器优化,就是通过增加数据量来进行交叉熵(cross_entropy)最小化。尝试的优化器包括:

gradientdescentoptimizer

adagradoptimizer

momentumoptimizer

adamoptimizer

rmspropoptimizer

由于可调的超参数过多,如果把所有可能的超参数排列组合情况逐一实验将会耗费大量的时间。因此,先将损失函数和优化算法这两个超参数固定,确定另两个超参数的最优组合,再回过来对前两个超参数进行调优。

对比不同learning_rate下的训练结果,每次随机选取样本进行训练,剩余样本用来验证,重复试验3次,分类准确率在较小范围内波动,模型分类稳定性较好。

对不同超参数组合下的训练结果进行交叉验证,确定超参数值,然后随机抽取样本进行稳定性测试,最终得到模型翻译预测准确率为96.94.%。

另一方面,参见图5,本发明实施例提供了一种支持自然语言的数据查询系统,包括:

接收模块510,用于接收用户自然语言查询语句;

翻译转换模块520,用于基于翻译模型建立所述自然语言查询语句翻译转换为目标标准sql语句;

判断模块530,用于判断能否获得所述目标标准sql语句;

输出模块540,基于所述目标标准sql语句输出数据查询结果;

提示模块550,用于提示用户重新输入其它的自然语言查询语句;

模型训练优化模块560,用于对所述翻译模型进行模型训练优化。

在优选实施例中,所述翻译转换模块包括:

第一转换模块,用于将所述自然语言查询语句中的时间和条件属性通过精确匹配方式进行提取后翻译转换为第一字段;

第二转换模块,用于将所述自然语言查询语句的剩余部分在所述翻译模型中进行翻译转换为第二字段;

拼接模块,用于拼接所述第一字段和所述第二字段以获得所述目标标准sql语句。

在优选实施例中,所述翻译转换模块包括:检查纠正模块,用于对字段进行检验、纠错和去重。

在优选实施例中,所述模型训练优化模块包括:数据集、模型输入数据、模型训练模块以及实验结果获取模块。

在优选实施例中,所述模型训练模块包括:

创建模块,用于创建所述翻译模型,初始化相关超参数;

输入模块,用于将所述自然语言查询语句输入训练集和测试集,并将所述自然语言查询语句按照长度放入bucket;

训练模块,用于对所述自然语言查询语句的样本进行训练,当所述翻译模型混淆度越接近于1时,表示模型损失函数值接近于0;

调整模块,用于调整网络的各个所述超参数,如果混淆度值在最近3次迭代中没有降低,则减小学习率;

保存模块,用于记录每一次的训练结果,将产生最优结果的所述翻译模型保存。

因此,针对传统数据查询方式中使用数据报表或者专业人员帮助完成sql查询,本发明实施例提供的支持自然语言的数据查询系统创新性地将常用于机器翻译的深度学习模型seq2seq应用于数据查询场景中,建立了自然语言查询语句和sql字段的有序映射,同时对查询条件进行规则匹配,最终拼接得到sql语句,以实现从自然语言到sql语句的自动翻译,实现自动化数据查询,使得不具备sql知识的人可以直接在数据中进行查询。

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

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