一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

中文自然语言转数据库语言的方法及装置与流程

2021-10-22 22:15:00 来源:中国专利 TAG:自然语言 结构化 中文 装置 转数


1.本发明属于自然语言转结构化文本领域,具体涉及一种中文自然语言转数据库单表的结构化查询语言的方法及装置。


背景技术:

2.自然语言转sql是自然语言结构化的重要课题,要求机器可以理解人类问句的查询意图与限制条件等信息,并根据数据库结构化查询语言的语法生成自然语言问句对应的可执行sql语句。自然语言转sql应用场景广泛,是智能客服,智能助手的关键技术,但由于人类语言的复杂性,该项技术依然有待进步。
3.现有的技术中,自然语言转sql方法可以分为三类:
4.1)基于规则的方法。该方法使用人工定义的规则抽取问句中的意图和条件,如通过预先定义的ner字典抽取问句中的表字段与表内容,并根据sql语法组装为完整的sql语句。
5.2)基于序列生成的方法。该方法将自然语言转sql任务视作一个序列到序列的生成任务,采用类似seq2seq的方法。有研究人员在生成sql序列时基于sql语法结合强化学习,增强模型生成符合sql语法的能力。
6.3)基于槽填充的方法,sql语句是一种高度结构化的语言,生成的语句符合统一的模板。因此自然语言转sql可视为一个槽填充任务,通过一系列分类或抽取任务填充槽模板,完成sql语句的转换,例如填充select中需查询的字段时,是对表字段的分类。
7.在上述自然语言转sql技术中,由于人工定义规则的有限,基于规则的方法只能针对特定简单句式的自然语言问句生成sql语句,无法处理较复杂的问句;基于序列生成的方法忽略sql语句的结构化特点,无法利用sql语法的模板信息,往往导致生成不符合语法的sql语句,降低生成语句的准确率;现有基于槽填充的方法受限于深度模型编码自然语言问句的能力,无法将句式复杂语义丰富的自然语言中的信息编码至低维度向量,较弱的自然语言表征影响下游分类和抽取任务的表现,降低槽值填充的准确性。并且,现有技术中也未曾考虑自然语言中存在的同义、歧义的问题,导致降低了对数据表与问句之间关联的捕捉与sql语句中条件值的准确性。


技术实现要素:

8.为解决上述问题,提供一种利用迁移学习与规则增强了对中文自然语言的表示能力,从而能够将中文自然语言准确地转换为sql语句的方法及装置,本发明采用了如下技术方案:
9.本发明提供了一种中文自然语言转数据库语言的方法,用于根据数据库将用户输入的自然语言文本转换为可以对数据库进行查询的查询语句,其特征在于,包括如下步骤:预处理步骤,对自然语言文本进行规范化修正得到规范文本;列填充步骤,将规范文本以及数据库中各个数据表的表头输入预设的第一bert模型以及第一dgcnn模型从而获取自然语
言文本的语义表征以及各个表头的表头表征,并基于语义表征以及表头表征进行列填充处理从而生成连接符、select列与对应的聚合函数以及where列与对应的where操作符;条件填充步骤,将规范文本以及where列输入预设的第二bert模型以及第二dgcnn模型从而获取语义信息,并基于语义信息对规范文本进行抽取并填充与where列相对应的where内容;组装输出步骤,将连接符、select列与对应的聚合函数、where列与对应的where操作符和where内容组装为查询语句并输出。
10.本发明提供的中文自然语言转数据库语言的方法,还可以具有这样的技术特征,其中,条件填充步骤在基于语义信息对规范文本进行抽取时,从规范文本中抽取出与where列相对应的文本内容,并将该文本内容与数据表中的各个数据内容依次进行相似度计算,进一步选取相似度最高的数据内容作为where内容。
11.本发明提供的中文自然语言转数据库语言的方法,还可以具有这样的技术特征,其中,第一bert模型的输入为一个在规范文本前加入token[cls]并在各个表头之间使用[sep]进行分隔从而拼接形成的输入文本,列填充处理包括:连接符填充,将[cls]在经过第一bert模型以及第一dgcnn模型后对应输出的编码向量输入第一全连接层进行预测从而填充连接符;select列及聚合函数填充,将所有的[sep]在经过第一bert模型以及第一dgcnn模型后对应输出的编码向量输入第二全连接层进行预测从而填充select列以及聚合函数;where列填充,依次将每个表头相对应的[sep]在经过第一bert模型以及第一dgcnn模型后对应输出的编码向量输入第三全连接层并预测相应的表头是否在where条件中,若是则将该表头填充为where列;以及where操作符填充,将第一dgcnn模型的输出作为第四全连接层的输入,预测规范问句中各个字所对应的where操作符,组装输出步骤在组装where列与对应的where操作符和where内容时,根据where内容在规范问句中对应的字找到对应的where操作符并完成组装。
[0012]
本发明提供的中文自然语言转数据库语言的方法,还可以具有这样的技术特征,其中,规范化修正包括:数字统一处理,使用正则匹配的方式将中文数字转为阿拉伯数字;年份与日期规范处理,将自然语言文本中的日期与时间修正为与数据库中一致的表达方式;数值单位统一处理,将自然语言文本中不同的数值单位统一为与数据库中一致的数值单位;以及同义表述修正处理,采用实体消歧技术将自然语言文本中的指代修正为与数据库中相对应的实体。
[0013]
本发明还提供了一种中文自然语言转数据库语言的装置,用于根据数据库将用户输入的自然语言文本转换为可以对数据库进行查询的查询语句,其特征在于,包括:预处理模块,用于对自然语言文本进行规范化修正得到规范文本;列填充模块,将规范文本以及数据库中各个数据表的表头输入预设的第一bert模型以及第一dgcnn模型从而获取自然语言文本的语义表征以及各个表头的表头表征,并基于语义表征以及表头表征进行列填充处理从而生成连接符、select列与对应的聚合函数以及where列与对应的where操作符;条件填充模块,将规范文本以及where列输入预设的第二bert模型以及第二dgcnn模型从而获取语义信息,并基于语义信息对规范文本进行抽取并填充与where列相对应的where内容;以及组装输出模块,将连接符、select列与对应的聚合函数、where列与对应的where操作符和where内容组装为查询语句并输出。
[0014]
发明作用与效果
[0015]
根据本发明的中文自然语言转数据库语言的方法及装置,由于通过规范化修正将自然语言文本处理为规范文本,因此可以统一问句的范式,便于后序对文本特征的挖掘与建模。进一步,在将规范文本转换为sql查询语句时,分阶段地通过处理分类任务的列填充步骤以及处理阅读理解任务的条件填充步骤进行处理,并分别采用不共享参数的两套bert与dgcnn进行特征提取,因此,在列填充步骤中,可以同时对数据表的表头以及规范文本进行语义分析,结合两者的表征更准确地预测sql查询语句中的连接符、select列与对应的聚合函数以及where列与对应的where操作符,同时,在条件填充步骤中,可以基于预测出的where列准确地对规范文本进行相应的where内容的抽取,增强了对中文自然语言的表示能力。通过本发明的转换方法及装置,可以更好地适应中文的语言文本,对同义的实体进行良好的表达并抽取更准确的内容,从而保证生成的sql查询语句的准确性。
附图说明
[0016]
图1是本发明实施例中影片数据表的示意图;
[0017]
图2是本发明实施例中中文自然语言转数据库语言的方法的流程图;
[0018]
图3是本发明实施例中中文自然语言转数据库语言的方法的框架图;
[0019]
图4是本发明实施例中列填充步骤的框架示意图;以及
[0020]
图5是本发明实施例中sql语句的构成示意图。
具体实施方式
[0021]
为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,以下结合实施例及附图对本发明的中文自然语言转数据库语言的方法及装置作具体阐述。
[0022]
<实施例>
[0023]
在对自然语言文本进行处理时,本发明的中文自然语言转数据库语言的方法也能够对相对于简单句式更复杂且语义丰富的自然语言问句(以下简称问句)进行处理,接下来,本实施例中,以对问句“19年第四周大黄蜂和密室逃生这两部影片的票房总占比是多少呀”为例来说明对自然语言文本进行处理的流程,另外,本实施例所采用的数据库为sql数据库,其中至少存在一个影片数据表的表头中列名依次为“影片名称,周票房,票房占比,场均人次”,该影片数据表的示意图如图1所示。
[0024]
另外,本实施例中,中文自然语言转数据库语言的方法能够通过一台计算机实现,该方法的各个步骤被编程为相应可执行模块并存储在计算机中,通过依次运行各个可执行模块从而将问句转换为可以对数据库进行查询的sql语句(查询语句)。
[0025]
图2是本发明实施例中中文自然语言转数据库语言的方法的流程图。
[0026]
图3是本发明实施例中中文自然语言转数据库语言的方法的框架图。
[0027]
如图2及图3所示,中文自然语言转数据库语言的方法包括如下步骤:
[0028]
预处理步骤s1,对自然语言问句(即自然语言文本)进行规范化修正得到规范问句(即规范文本)。
[0029]
本实施例中,中文自然语言问句的主要特点是口语化程度非常高,缺少统一的描述规范,例如数字的表示既有阿拉伯数字又有中文,加大sql生成方法的处理难度,因此问句预处理步骤s1针对表述不规范的自然语言问句在数字、年份与日期、数值单位、同义等四
个方面的表述进行规范化修正,便于后续步骤对自然语言问句的特征的挖掘与建模。规范化修正具体为:
[0030]
1)数字统一处理:为了减轻下游方法对问句抽取内容的难度,数字使用正则匹配的方式将中文数字转为阿拉伯数字;
[0031]
2)年份与日期规范处理,为了规范问句表述日期与年份,将问句中的日期与时间修正为与数据库中一致的表达方式,例如,将诸如“10年”修正为“2010年”等与数据表中一致的表达方式;
[0032]
3)数值单位统一处理,统一问句与表中的数值单位,即,将问句中不同的数值单位统一为与数据库中一致的数值单位,例如,将问句中“5000米”统一为数据库中的“5千米”;
[0033]
4)同义表述修正处理,为了进行问句指代消解,采用实体消歧技术将问句中的指代修正为对应的实体,如将“小黄车”修正为“ofo共享单车”。
[0034]
通过上述规范化修正处理,自然语言问句即可被修正为规范问句,例如,通过预处理步骤s1对“19年第四周大黄蜂和密室逃生这两部影片的票房总占比是多少呀”进行处理后,得到的规范问句为“2019年第4周大黄蜂和密室逃生这两部影片的票房总占比是多少呀”。
[0035]
列填充步骤s2,将规范问句以及数据库中各个数据表的表头输入预设的第一bert模型以及第一dgcnn模型从而获取自然语言问句的语义表征以及各个表头的表头表征,并基于语义表征以及表头表征填充连接符、select列与对应的聚合函数以及where列与对应的where操作符。
[0036]
图4是本发明实施例中列填充步骤的流程示意图。
[0037]
如图4所示,列填充步骤s2的输入是预处理步骤s1修正后的规范问句以及与问句对应的数据表的表头,用于对预生成的sql语句中的select查询列及对应聚合函数、连接符、以及where条件列的预测。该列填充步骤s2可以分为两个子步骤:
[0038]
步骤s2-1,表征问句以及表头,将规范问句以及数据库中各个数据表的表头输入预设的第一bert模型以及第一dgcnn模型从而获取自然语言问句的语义表征以及表头的表征。
[0039]
本实施例的步骤s2-1中,首先,使用预训练语言模型(即第一bert模型)获取输入的自然语言(即规范问句)的语义表征,之后利用基于卷积神经网络(cnn)与注意力机制(attention)的膨胀门卷积神经网络模型(即第一dgcnn模型)进行序列特征提取,获得问句和各表头的表示。
[0040]
由于仅依靠问句本身是无法确认用户真正想查询的是数据表中的哪部分,因此需要将问句与数据表的表头共同编码以帮助计算机了解问句与表头之间存在的对应关系。因此,为了获取问句与表头的表征,使用中文bert作为输入的编码器,这是因为bert模型使用大规模语料库进行预训练,具有强大的语义表达能力。接着,使用基于cnn与attention机制的dgcnn模型进一步提取问句表头之间的语义关系,这是利用了cnn相较rnn的计算高效性与为了让cnn模型能够捕捉更远距离的信息但不增加模型参数,进而在提升计算机运行效率同时保证预测的准确性。
[0041]
具体地,在步骤s2-1中,如图4所示,通过在自然语言问句(即图4中question)前加入token[cls]用于对连接符的分类,表头与表头(即图4中h1、h2、h3、h4)间使用[sep]进行
分隔,从而将问句与表头拼接起来。接着,将拼接完成的输入文本作为bert编码器的输入,输入经过bert多头自注意力机制及多个transformer层计算后,得到问句的bert输出。
[0042]
同时,为了增强问句的表达,将经过词性标注后的问句(即question pos tag)通过embedding层获取每个字级别的词性信息,将问句的bert输出与问句词性标注后的embedding加和作为dgcnn模型的输入。在经过dgcnn的多个一维卷积块后,再使用attention机制来代替传统cnn中的pooling层,以将输入序列的信息有效地整合起来。最后,dgcnn的输出即列填充步骤s2对问句及表头的表征。
[0043]
步骤s2-2,列填充,基于步骤s2-1输出的语义表征以及表头表征填充连接符、select列与对应的聚合函数以及where列与对应的where操作符。
[0044]
本实施例中,在进行列填充前,槽模板中select和where是预先设定的模板关键字,步骤s2-2中,根据编码问句和表头,通过多个全连接层(dense)分别生成连接符、select列与对应的聚合函数,where列与cop。如图5所示,以一段sql语句为例,连接符10即where中出现多个条件时的运算符,分别是“and”、“or”、“null”;select列20即select条件中的列名,相应的聚合函数30为“avg”,“count”,“sum”等用于对数据表中对应select列的值进行统计、求和等聚合处理的函数;where列40是where条件中的列名,供条件填充步骤s3抽取该列名对应的where内容50,cop表示输入中每个表头对应的操作符60。对上述连接符、select列与对应的聚合函数,where列与cop的具体过程如下:
[0045]
连接符填充:连接符具有三个可能的输出,分别是“and”、“or”、“null”,因此填充连接符可视为一个三分类问题。此处的输入是[cls]对应的状态,[cls]可视为整个问句与表头的表达,使用[cls]经过一层全连接层(第一全连接层d1)预测连接符,即、连接符填充为将所述[cls]在经过所述第一bert模型以及所述第一dgcnn模型后对应输出的编码向量输入第一全连接层进行预测从而填充所述连接符。
[0046]
select列及聚合函数填充:将预测select列及对应的聚合函数作为同一个任务,即对每一个表头进行分类,输出是“选择但无聚合函数”,“avg”,“max”,“min”,“count”,“sum”,“不被选择”。其中前6个表示被选择,第7个表示不被选择。因此预测每一个表头是否被选择及对应聚合函数,本质上是一个七分类问题。将每个[sep]的状态视为对应表头的表征,经过一层全连接层(第二全连接层d2)预测select列及聚合函数,即、select列及聚合函数填充为将所有的所述[sep]在经过所述第一bert模型以及所述第一dgcnn模型后对应输出的编码向量输入第二全连接层进行预测从而填充所述select列以及所述聚合函数。
[0047]
where列填充:where列填充即预测表头是否在where条件中,因此对于各个表头而言是一个二分类问题。将每个表头对应的[sep]经过一层全连接层(第三全连接层d3)预测该表头是否在where条件中。即、where列填充为依次将每个所述表头相对应的所述[sep]在经过所述第一bert模型以及所述第一dgcnn模型后对应输出的编码向量输入第三全连接层并预测相应的所述表头是否在where条件中,若是则将该表头填充为所述where列。
[0048]
where操作符填充:where操作符填充即预测where列对应的操作符,因为存在一个表头对应多个操作符的情况,因此区别于select列填充将select列与聚合函数看做一个任务,区分预测where列与操作符被分为两个任务。具体做法是,预测原始问句各个字对应的操作符,即将问句中的表内容映射到对应的操作符。因此将第一dgcnn模型的输出作为一层全连接层(第四全连接层d4)的输入,预测问句各个字对应的操作符,组装输出步骤s4中会
根据条件填充步骤s3条件填充抽取的where内容找到对应的操作符。
[0049]
条件填充步骤s3,将规范文本以及where列输入预设的第二bert模型以及第二dgcnn模型从而获取语义信息,并基于语义信息对规范文本进行抽取并填充与where列相对应的where内容。本实施例中,条件填充步骤s3可以分为两个子步骤:
[0050]
步骤s3-1,基于where列从规范文本中抽取文本内容。
[0051]
本实施例的步骤s3-1中,输入是规范问句和列填充步骤s2预测的where列,进一步基于该where列从规范问句中抽取得到对应的where内容,因此,本步骤的任务本质上是一个阅读理解式的子串抽取问题,即预测where列对应的内容在规范问句中的起始位置与终止位置,因此可以将条件抽取建模为问句的序列标注问题。
[0052]
具体地,将输入的规范问句与where列(列名)进行拼接,采用与列填充步骤s2中一样架构的第二bert模型以及第二dgcnn模型提取输入的语义信息(由于任务的不同,条件填充步骤s3中的bert dgcnn模型与列填充步骤s2的bert dgcnn模型不共享参数),接着将第二dgcnn模型的输出作为全连接层的输入,进而预测各token作为内容起始位置与终止位置的概率。设定一定值作为内容抽取的阈值,保证可以抽取到规范问句中对应where列的尽可能多的文本内容,保证覆盖率。
[0053]
本实施例中,文本内容一方面用于在步骤s3-2中与数据表的数据内容做相似度计算,最终选取相似度最高的内容作为填充条件;另一方面用于根据列填充步骤s2生成的cop获取where列对应的操作符。
[0054]
步骤s3-2,将文本内容与数据表中的各个数据内容依次进行模糊匹配,进一步匹配相似度最高的数据内容作为where内容。
[0055]
尽管在预处理步骤s1中已经对问句进行规范化修正,但仍会有一定比例的“漏网之鱼”,即问句中的内容不一定与数据库中内容的表述完全一致。因此,仍然需要对从规范问句中抽取的文本内容进行一定的后处理,以找寻数据库中相似的内容作为最终的抽取内容。根据用户在问句中所查询的内容,抽取到的子串(即sql的条件列)大致可以分为数值与字符串两种类型:
[0056]
1)对于数值型的子串,需要通过将该数值的单位与数据表中对应列所应用的数值单位保持一致的方式来改造该数值,例如,问句中提及的是“5万平方公里”,而数据表中对应列的数值单位是“平方公里”,那就需要将抽取到的数值子串“5”修改为“50000”;
[0057]
2)对于字符串型的子串,由于中文自然语言的多样性,又有两种情况需要处理:一是子串是数据表对应元素的不完全缩写,如“上海交通大学”与“上海交大”或“上交”,二是子串是对应元素的同义词。通过综合使用基于编辑距离与最大公共子串长度等特征进行字符串级别的模糊匹配与使用基于实体指代消解技术进行语义级别的实体消歧,可以对字符串型的子串较好地匹配到数据库中。
[0058]
通过上述处理,从数据表中获取与文本内容相似度最高的数据内容作为where内容,即可保证where内容与数据表中的数据内容相对应。
[0059]
组装输出步骤s4,将连接符、select列与对应的聚合函数、where列与对应的where操作符和where内容组装为查询语句并输出。
[0060]
本实施例的组装输出步骤s4中,通过列填充步骤s2获取的where列和where列对应的内容,可以从条件填充步骤s3中各token对应的操作符中提取where列对应的操作符,因
此生成的where条件列,操作符,内容可以完成where条件的填充,进而完成sql语句(即查询语句)的组装并进行输出。
[0061]
本实施例中,对问句“19年第四周大黄蜂和密室逃生这两部影片的票房总占比是多少呀”最终处理得到的查询语句如图3以及图5所示。
[0062]
本实施例中,组装输出步骤s4可以将查询语句输出给计算机的显示屏,从而让用户对转换后的sql查询语句进行确认或是运行等其他操作;也可以直接输出给sql数据库并运行从而直接获取相应的查询结果。
[0063]
本实施例中,为实际应用更加方便,上述中文自然语言转数据库语言的方法的步骤s1至步骤s4也可以事先打包成相应的程序模块,即预处理模块、列填充模块、条件填充模块以及组装输出模块,形成一个中文自然语言转数据库语言的装置,从而方便对用户输入的自然语言文本进行对应步骤s1至步骤s4的处理并输出转换得到的查询语句。
[0064]
实施例作用与效果
[0065]
根据本实施例提供的中文自然语言转数据库语言的方法及装置,由于通过规范化修正将自然语言文本处理为规范文本,因此可以统一问句的范式,便于后序对文本特征的挖掘与建模。进一步,在将规范文本转换为sql查询语句时,分阶段地通过处理分类任务的列填充步骤以及处理阅读理解任务的条件填充步骤进行处理,并分别采用不共享参数的两套bert与dgcnn进行特征提取,因此,在列填充步骤中,可以同时对数据表的表头以及规范文本进行语义分析,结合两者的表征更准确地预测sql查询语句中的连接符、select列与对应的聚合函数以及where列与对应的where操作符,同时,在条件填充步骤中,可以基于预测出的where列准确地对规范文本进行相应的where内容的抽取,增强了对中文自然语言的表示能力。通过本发明的转换方法及装置,可以更好地适应中文的语言文本,对同义的实体进行良好的表达并抽取更准确的内容,从而保证生成的sql查询语句的准确性。
[0066]
另外,实施例中,由于在对规范文本进行对应where列的文本内容的抽取时,还将文本内容与数据表中的数据内容进行相似度计算,从而选取相似度最高的数据内容作为where内容,因此,起到了引入外部知识的效果,能够将获得的问句子串映射到对应数据表上的具体元素上,以使得最终获得的sql语句能够真正在数据库中被执行。也就是说,进一步地提高了转换出的sql语句中where条件值的准确性,减轻了同义实体在字符串级别的区别所导致的错误。而以往绝大部分的sql生成的方法未曾考虑问句与数据表中实体的同义词问题,进而忽略了两者之间的语义关系。
[0067]
实施例中,由于在进行规范化修正时,针对表述不规范的自然语言文本进行数字、年份与日期、数值单位、同义四个方面的修正,因此可以将口语化程度较高自然语言文本进行统一的描述规范,同时,由于在进行同义表述修正处理时,利用实体消歧技术将进行实体消歧与指代消解,缩小同义词的语义差异,因此更进一步地提高了sql语句转换的准确性。
[0068]
上述实施例仅用于举例说明本发明的具体实施方式,而本发明不限于上述实施例的描述范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜