一种基于自然语言生成结构化查询语句的方法与流程

文档序号:22627463发布日期:2020-10-23 19:36阅读:130来源:国知局
本发明涉及数据库查询
技术领域
:,特别涉及一种基于自然语言生成结构化查询语句的方法。
背景技术
::关系型数据库作为一种在商业、金融等各大领域通用的数据存储方式,在实际应用场景中应用得十分广泛,但查询数据库所需要的技术语言对于非专业人员来说具有较大的学习门槛,同时在日常使用中需要不断与技术人员沟通,降低了工作效率。因此,能够通过自然语言对关系型数据库的内容进行获取成为了各行各业数据处理人员当前最迫切的需求。相比于用结构化查询语言,使用自然语言查询数据库能够使非技术人员不必掌握相关技术知识,不需要与技术人员频繁沟通,也不用了解数据的具体关联情况,能够极大提高数据处理工作的效率。在当前领域中,也存在一些基于深度学习的自然语言查询数据库的方法,能够对不包含排序、分组、子查询等复杂操作的简单的结构化查询语言,利用序列-集合的模型结构来识别和转换。但在实际使用场景中,用户的提问通常涉及到更为复杂的结构化查询语言,这些简单的查询无法满足相应的需求,因此具有很大的局限性。也有基于此类思想构建更复杂的语法结构来应对该问题的方法,但是解析时无法很好地获取句子表示的逻辑结构,因此准确率也无法保证。还有一些针对更复杂数据情况的方案,大多集中在对结构化查询语言的框架以及涉及的表名和列名的预测,而对语句中的条件值和具体数据值并不关注,这与实际使用场景不符,实际查询时很多情况都是基于条件和数据值对查询进行约束的;并且现有的方法均不包含行计算、列计算及常数计算等常见的数据查询结构,也因此大大限制了这些方法在生产环境中的使用。技术实现要素:针对现有技术存在的不足,本发明的目的在于提供一种基于自然语言生成结构化查询语句的方法。本发明的上述技术目的是通过以下技术方案得以实现的:一种基于自然语言生成结构化查询语句的方法,包括以下步骤:a,输入自然语言问题:使用者输入询问的问题,并且选择希望查询的数据库,在该步骤需要判断自然语言问句是否符合输入要求,具体根据输入的句子长度、各个词的词性情况来判断输入的是否是正常的自然语言句子,如果输入的只是一些无意义的短语或符号则提示错误并要求重新输入,否则执行步骤b;b,将自然语言问句输入至预先训练的第一模型,得到问句对应的结构化查询语言语法块序列,语法块不涉及具体的条件值:首先将自然语言问句和数据库信息映射到向量空间,对于自然语言问句,需要对其中出现的、属于数据库信息的词进行标记,不同的标记类型映射到不同的类型向量,同时需要使用词向量模型获取每个词的词向量,将两个向量拼接作为每个词的最终词向量;对于数据库列名和表名信息,需要对其出现在自然语言问句中的情况进行标记,不同的标记类型映射到不同的类型向量,同时需要使用词向量模型获取每个词的词向量,将两个向量拼接作为每个词的最终词向量,处理后总共得到三组输入向量:代表自然语言问句的向量、代表数据库列名信息的向量以及代表数据库表名信息的向量,然后将三组向量输入到第一模型中,以序列-序列的模型结构输出结构化查询语言语法块序列;c,根据结构化查询语言语法块的展开情况生成对应的结构化查询语句:处理结构化查询语言语法块序列,按照设定的语法块生成式生成各个语法块代表的结构化查询语句,最终通过主外键关系组合合并成完整的结果;由于语法块序列中不包含具体的条件值,生成的结构化查询语句中涉及数值比较时会填入一个默认占位值;在该步骤需要判断生成的结构化查询语句中是否存在占位值,如果不存在则直接输出作为最终的生成结果,否则执行步骤d;d,枚举不同的条件值填入结构化查询语句,输入到第二模型,计算与自然语言问句的相似度,输出相似度最高的结构化查询语句:首先通过各个占位值的上下文判断各个占位值所代表的数值类型,类型包括数字型、文本型和时间型;然后根据不同的数值类型枚举不同的条件值替换占位值,数字型和时间型的条件值来源于问题文本,文本型的条件值来源于数据库和问题文本,重复多次后得到一系列结构化查询语句;最后将自然语言问句分别与结构化查询语句组合,组合后输入到第二模型中计算两个句子的相似度;按照相似度进行排序,输出与自然语言问句相似度最高的结构化查询语句作为最终结果。综上所述,本发明对比于现有技术的有益效果为:1、本发明提供了一种数据查询方法,能够完成自然语言向结构化查询语句的转换,使用户既不需要掌握结构化查询语言语法的相关专业知识,也不需要了解数据的具体存储情况,极大地提高了查询效率和便利性;2、本发明提出的数据查询方法扩充了适用的结构化查询语言语法,使该方法生成结构化查询语句时不仅能够有效处理选择、筛选等简单结构化查询语言功能,还能处理包括排序、分组、子查询、行计算、列计算、常数计算在内的复杂操作,生成更接近生产环境中实际使用的结构化查询语言语句;通过扩充适用的结构化查询语言语法,能够有效减小通过自然语言问句来查询数据库的局限性,使用户能够查询到更多数据,适用于更多情况,提高了查询的性能;3、本发明提出的方法针对数值比较的情况进行了优化,能够很好地匹配条件数据值;在匹配的过程中,通过计算自然语言问句和目标结构化查询语句之间的相似度来判断结构化查询语句的合理性,一方面能通过枚举条件值生成大量负样本扩充训练数据,使模型学习到更多的语义信息,降低获取数据的成本,提高对已有数据的使用效率;另一方面能够充分利用文本和结构化查询语言语句两者句子级别的语义关系,提高模型预测的准确率。附图说明图1为实施例的整体流程图;图2为实施例中第一模型的结构示意图;图3为实施例中第二模型的结构示意图。具体实施方式以下结合附图对发明作进一步详细说明。一种基于自然语言生成结构化查询语句的方法,包括以下步骤:步骤1,用户输入自然语言问题和选择希望查询的数据库,并判断自然语言问句是否符合输入要求,不符合输入要求则提示错误并要求重新输入;步骤2,将自然语言问句和数据库信息映射到向量空间,对自然语言问句、数据库列名信息、数据库表名信息处理得到代表自然语言问句的向量、代表数据库列名信息的向量、代表数据库表名信息的向量的三组输入向量,将得到的三组输入向量输入预先训练的第一模型中,以序列-序列的模型结构输出结构化查询语言语法块序列,语法块不涉及具体的条件值;步骤3,根据输出的结构化查询语言语法块序列,按照设定的语法块生成式生成各个语法块代表的结构化查询语句,生成的结构化查询语句中涉及数值会填入一个默认占位值,并通过主外键关系组合合并成完整的结果;步骤4,判断生成的结构化查询语句中是否存在占位值,如不存在占位值则直接输出通过主外键关系合并成的完整的结果作为最终的生成结果;如存在占位值则枚举不同的条件值填入结构化查询语句,并输入到第二模型计算与自然语言问句的相似度,输出相似度最高的结构化查询语句作为最终结果。将自然语言问题输入到第一模型之前,首先要将自然语言问句文本和数据库信息文本进行嵌入操作,将其映射到高维向量空间。对于自然语言问句文本,最终语义信息包括每个词的词向量和类型向量,通过以下步骤进行获取:a),首先利用分词工具对自然语言问句进行分词,获得词语序列b),然后标记词语序列中每个词的类型信息,类型信息有5种:如果该词语能完全匹配数据库中某一个列名,则类型为‘column’;如果该词语能完全匹配数据库中某一个表名,则类型为‘table’;如果该词语是一个具体的数字或时间,则类型为‘value’;如果该词语是数据库中某一个列名下所属的数值,则类型为这个列的列名;对于其他情况,词语类型都是‘none’;c),在进行b)的过程中,采取的匹配方式为最长匹配,即每次都是用最长的词语子序列去进行匹配,词语子序列的长度设定最大为5;如果能匹配到,则将词语子序列合并作为新的词语用于后续的嵌入处理,否则减小词语组合的长度重新进行匹配;例如,存在一个词语序列为【“没有”,“比赛”,“记录”,“的”,“运动员”,“有”,“哪些”】,待匹配的列名为‘比赛记录’。在匹配时,“没有比赛记录的运动员”首先与“比赛记录”进行完全匹配,无法匹配后将减小子序列的长度,使用“没有比赛记录的”进行匹配,重复多次操作直至使用“没有”和“比赛记录”进行匹配,由于此时依然无法匹配,“比赛”这个词语将成为后续匹配的起点;通过这种匹配方式能够匹配到文本中存在的所有列名和表名;d),对于a)步骤得到的每个词语,能够通过预训练的语言模型获得每个词的词向量,对于不在语言模型词汇表中的词语组合,可以取每个词词向量的平均值作为词语组合的词向量;e),对于b)步骤得到的每个类型信息,能够通过一个可训练参数矩阵获得代表每个类型的向量,该向量模型在训练过程中不断更新,很好地代表了各个类型信息;f),将d)和e)中得到的词向量和类型向量前后拼接作为每个词最终的向量表示。对于数据库信息文本,最终语义信息包括每个词的词向量和类型向量,通过以下步骤进行获取,由于对于数据库列名及表名采取的是同样的操作,以下步骤仅以处理列名为例:a),首先利用分词工具对数据库列名进行分词操作,获得词语序列;b),然后标注数据库每个列的类型信息,类型信息有3种:如果该列名和部分自然语言问题文本能完全匹配,则类型为完全匹配,类型序号为0;如果该列名分词后得到的某个词能和部分自然语言问题文本完全匹配,则类型为部分匹配,类型序号为1;如果数据库中该列名下的值出现在问题文本中,则类型序号为2;c),对于a)步骤得到的每个词语,能够通过预训练的语言模型获得每个词的词向量,对于不在语言模型词汇表中的词语组合,可以取每个词词向量的平均值作为词语组合的词向量;d),对于b)步骤得到的每个类型信息,能够通过一个可训练参数矩阵获得代表每个类型的向量,该向量模型在训练过程中不断更新,很好地代表了各个类型信息;e),将c)和d)中得到的词向量和类型向量前后拼接作为每个列名最终的向量表示。通过上述步骤,获得了代表自然语言问句的向量、代表数据库列名信息的向量、代表数据库表名信息的向量的三组输入向量,将这三组输入向量输入到第一模型中,以序列-序列的模型结构输出结构化查询语言语法块序列。上述序列-序列的模型结构中前一个序列结构为编码模块,用于充分获取输入数列的语义特征;在该步骤中,将三组向量分别输入到三个不同的长短期记忆模型中进行编码,获得融合了文本上下文信息的向量表示。上述序列-序列的模型结构中后一个序列结构为解码模块,用于生成结构化查询语言语法块序列;结构化查询语言语法块指的是代表结构化查询语言语法的上下文无关文法的产生式,通过预先编写的上下文无关文法,可以将一个结构化查询语句转换为多个结构化查询语言语法块。例如,一个结构化查询语句“select姓名,性别from学生where学号=‘001’”可以转换为结构化查询语言语法块序列“sqls(7)sql(3)select(0)numa(1)agg(0)normagg(0)nonecolumn(1)table(0)agg(0)normagg(0)column(2)table(0)filter(2)agg(0)normagg(0)column(2)table(0)value(0)”,其中“sqls”,“sql”等是开始变量,括号中的数字代表的是产生式的序号,如“filter(2)”代表的是“filter::=filter=aggvalue”这一产生式。在该步骤中,将解码模块步骤获得的三个向量编码输入到一个长短期记忆模型中进行解码,解码生成的是3种动作,分别是产生结构化查询语言语法块、选择结构化查询语言语法块涉及的列名、选择结构化查询语言语法块涉及的表名;通过依次执行这三种动作可以获得结构化查询语句对应的结构化查询语言语法块序列,由于这一部分没有处理涉及具体数值的情况,生成的结构化查询语言语法块中的value块只是一个占位符,不代表数值。上述中,如存在占位值则枚举不同的条件值填入结构化查询语句,具体处理步骤如下所述。获取生成的结构化查询语句,通过其中各个占位值的上下文判断各个占位值所代表的数值类型,数值类型有三种:数字型、文本型和时间型;首先判断上下文中是否存在加减乘除的运算操作,如果存在则数值类型为数字;然后判断上下文中是否涉及count、sum、avg等聚合函数,如果存在则数值类型为数字;如果上下文中不存在数值计算或聚合函数,则占位值的数值类型和对应的列在数据库中的数值类型保持一致。根据上述步骤获取到的占位值数值类型枚举不同的条件值替换占位值,数值型和时间型的条件值来源于自然语言问题文本,文本型的条件值来源于数据库和问题文本,重复多次后得到一系列结构化查询语句。例如,存在一个自然语言问句“2018年12月的收入高于8000且订单最多的5个员工”,通过步骤c可以获得含占位值的结构化查询语句“select姓名from员工where收入>valueand时间=valueorderby订单数limitvalue”,通过步骤d1可以获得三个占位值的类型分别为数字、时间、数字。根据预先设定的正则规则可以获得文本中的数字型条件值:8000和5以及时间型条件值:2018-12,然后可以枚举生成2*1*2=4种替换方案,最终得到4条结构化查询语句。当处理文本型的条件值时,如果数据库中的数据较少,则直接枚举对应列的所有值作为条件值,否则需要进行预查询操作,利用solr等搜索服务器查询自然语言问句中存在的对应列中的文本型条件值。上述中,将结构化查询语句输入到第二模型计算与自然语言问句的相似度,输出相似度最高的结构化查询语句作为最终结果,具体处理步骤如下所述。步骤a,输入到第二模型之前,首先要将自然语言问句文本和结构化查询语句文本进行嵌入操作,将其映射到向量空间;在该步骤中,使用的词向量模型为基于transformer结构的预训练语言模型bert,将自然语言问句文本和结构化查询语句文本前后拼接后输入到bert中,输出得到代表整体语义的向量表示;步骤b,将步骤a,得到的整体语义向量输入到一个二分类模型(第二模型的组成),输出得到两个句子匹配的置信度和不匹配的置信度,取匹配的置信度作为最终的相似度;步骤c,重复多次步骤b,得到自然语言问句与所有结构化查询语句间的相似度,按相似度大小进行排序,输出与自然语言问句相似度最高的结构化查询语句作为最终的生成结果。现针对上述出现的第一模型和第二模型进行展开描述,一、第一模型用途:用于将输入的自然语言问句转换为对应的结构化查询语言的语法块序列,通过规则能将语法块序列展开生成目标结构化查询语句;如果该模型生成的语法块序列中涉及到具体数据库数值,则先用默认值占位,后续进行完整填充。组成:采用序列-序列的模型结构,参照图2所示,由编码和解码模块组成;前一个序列结构为编码模块,用于充分获取输入数列的语义特征;在该步骤中,将三组向量分别输入到三个不同的长短期记忆模型中进行编码,获得融合了文本上下文信息的向量表示;后一个序列结构为解码模块,用于生成结构化查询语言语法块序列;结构化查询语言语法块指的是代表结构化查询语言语法的上下文无关文法的产生式,通过预先编写的上下文无关文法,可以将一个结构化查询语句转换为多个结构化查询语言语法块;在该步骤中,使用一个长短期记忆模型来输出可能的语法块序列。实现技术:这一部分主要使用了基于语法块的中间形式来进行解析的语义解析方法,将解析目标由直接生成结构化查询语句转换为生成一系列语法块,通过自顶向下解析语法块来获取目标语句;这种解析方式更关注结构化查询语句的逻辑结构,使解析生成的结果更为准确。二、第二模型用途:由于第一模型生成的结构化查询语句是缺少具体数据库数值的语句,获得完整的结构化查询语句需要枚举不同的数值进行填充;第二模型的作用是计算自然语言问句和枚举填充生成的结构化查询语句之间的相似度,找出相似度最高的语句作为目标结构化查询语句。组成:第二模型是一个二分类分类器,参照图3所示,接受代表自然语言问句文本和结构化查询语句文本整体语义的向量表示,再通过logistic回归处理该向量,获得语句对的相似度。实现技术:这一部分主要使用了基于句子相似度的匹配方法。由于枚举会生成大量的备选语句,模型需要从中选出与输入的自然语言问句最为匹配的语句作为目标语句,将语句对的语义向量输入到二分类分类器中能够快速准确地提取句子级别的信息,并以数值的形式量化两个句子的相似度,更易进行比较。以上所述仅是本发明的示范性实施方式,而非用于限制本发明的保护范围,本发明的保护范围由所附的权利要求确定。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1