掌桥专利:专业的专利平台
掌桥专利
首页

一种数据库操作方法及装置

文献发布时间:2023-06-19 10:57:17


一种数据库操作方法及装置

技术领域

本发明涉及数据库技术领域,尤其涉及一种数据库操作方法及装置。

背景技术

在日常生活中用户经常和数据库进行交互,比如网络购物、订票、订餐等。但目前的数据库交互方式还有着诸多问题,一般通过结构化查询语言(Structured QueryLanguage,SQL)来操作数据库。但是对于不具备数据库专业知识的用户,却是很大的挑战。目前的方式中,基于条件筛选的专门界面,用户可以通过点选不同的条件来对数据库进行操作,但在这个界面上操作会受限于预先设好的SQL模板,仅能得到个别SQL语句,不具备灵活性。

现有技术中,一种更友好的方式是自然语言向结构化查询语言转化(NaturalLanguage to SQL,NL2SQL),即使用自然语言处理技术,将用户的自然语言表达转化成SQL语句,直接对数据库查询并返回结果。然而,目前的NL2SQL仅支持较为简单的应用场景,如数据集的数据形式和设计过于简单,对于SQL语句,不能选择多个列,也不能处理多个查询条件。这就意味着目前的NL2SQL仅能转化得到一部分较简单的SQL语句,仅支持一些较简单的应用场景,只能对数据库执行较简单的操作。

发明内容

本发明提供一种数据库操作方法及装置,解决了现有技术中NL2SQL仅支持一些较简单的应用场景的问题。

第一方面,本发明提供一种数据库操作方法,包括:

获取目标自然语言文本;

将所述目标自然语言文本输入至基于自然语言向结构化查询语言转化NL2SQL的预测模型,获得所述目标自然语言文本的目标结构化查询语言SQL语句;

所述目标SQL语句的数据结构为预设数据结构;所述预设数据结构包括各部分;所述各部分与SQL语句的预设格式的各语句片段对应;

所述预测模型是基于目标数据集按照机器学习训练得到的;其中,所述目标数据集任一训练数据包括:自然语言文本以及所述自然语言文本对应的SQL语句,所述SQL语句的数据结构为所述预设数据结构;

通过执行所述目标SQL语句,操作目标数据库。

上述方法中,由于数据库操作语句的数据结构为预设数据结构,所述预设数据结构细化了SQL语句可能出现的各部分,所述各部分与SQL语句的预设格式的各语句片段对应,所以囊括了SQL语句可能出现的各种情况,而在训练预测模型时,目标数据集每条训练数据中的SQL语句的数据结构也是预设数据结构,那么在目标数据集进行训练时,也学习到了各SQL语句各种情况的知识,使得预测模型可以识别更多复杂的场景,因此,获取目标自然语言文本后,即便目标自然语言文本对应较为复杂的场景,那么也可以转换为相应的SQL语句,从而对数据库实现较复杂的操作。

可选的,所述预测模型按照以下方式训练得到:

基于所述目标数据集中各训练数据的自然语言文本的第一类数据以及所述自然语言文本对应的SQL语句,对初始模型进行机器学习训练,得到中间模型;任一训练数据的第一类数据为所述训练数据中按照预设规则选择的数据;

基于所述各训练数据的自然语言文本的第二类数据以及所述自然语言文本对应的SQL语句,对所述中间模型进行机器学习训练,得到所述预测模型;所述第二类数据是所述训练数据中除所述第一类数据之外的数据。

上述方法中,通过分段训练,先得到中间模型,再得到预测模型,根据所述第一类数据和所述第二类数据的不同数据特性,在不同过程中,学习不同的数据知识,从而在每段训练过程中,不会受到不同类数据的影响。

可选的,所述各部分具体包括第一部分、第二部分、第三部分和第四部分;

其中,所述第一部分为待查询的各第一列名;所述第二部分为聚合函数;所述第三部分为各查询条件之间的关系运算符;所述第四部分为所述各查询条件;任一查询条件包括所限定的各第二列名、所述各第二列名的操作符及条件值;

所述第一类数据包括:所述第一部分、所述第二部分、所述第三部分和所述第四部分的所述各查询条件中所述各第二列名、所述各第二列名的操作符;所述第二类数据具体为所述第四部分中所述各第二列名的条件值。

上述方法中,所述预设数据结构的四部分与目前主流的SQL语句相吻合,且将具体的查询条件作为一部分,有利于查询条件的集中处理,从而增加了本方法的通用性。

可选的,所述基于所述目标数据集中各训练数据的自然语言文本的第一类数据以及所述自然语言文本对应的SQL语句,对初始模型进行机器学习训练,得到中间模型,包括:

针对任一轮机器学习训练,将所述目标数据集中任一训练数据的自然语言文本的第一类数据以及所述自然语言文本对应的SQL语句输入至所述初始模型,获得预测SQL语句中所述第一类数据的预测数据;

根据所述自然语言文本对应的SQL语句和所述第一类数据的预测数据,获得第一损失函数的函数值、第二损失函数的函数值和第三损失函数的函数值;

所述第一损失函数用于表征所述第一类数据的预测数据中对于所述第一部分以及所述第二部分的差异程度;所述第二损失函数用于表征所述第一类数据的预测数据中对于所述第三部分的差异程度;所述第三损失函数用于表征所述第一类数据的预测数据中对于所述第四部分的所述各查询条件中待操作的列名、操作符的差异程度;

若所述初始模型不满足第一预设收敛条件,则根据所述第一损失函数的函数值、所述第二损失函数的函数值和所述第三损失函数的函数值,调整所述初始模型的参数,并继续迭代训练所述初始模型;

若所述初始模型满足所述第一预设收敛条件,则将此时的所述初始模型作为所述中间模型。

上述方式下,由于第一部分、第二部分、第三部分以及所述第四部分的所述各查询条件中所述各第二列名、所述各第二列名的操作符的取值都是可以枚举的,所以通过在一起联合训练可以使得中间模型同时学到相似数据的知识,每次更新模型时参考的都参考了三个损失函数的函数值,从而更加准确地学习到所述中间模型。

可选的,所述基于所述各训练数据的自然语言文本的第二类数据以及所述自然语言文本对应的SQL语句,对所述中间模型进行机器学习训练,得到所述预测模型,包括:

针对任一轮机器学习训练,将所述目标数据集中任一训练数据的自然语言文本的第二类数据以及所述自然语言文本对应的SQL语句输入至所述中间模型,获得预测SQL语句中所述第二类数据的预测数据;

根据所述自然语言文本对应的SQL语句和所述第二类数据的预测数据,获得第四损失函数的函数值;

所述第四损失函数用于表征所述第二类数据的预测数据中对于所述第四部分的所述各查询条件中的条件值的差异程度;

若所述中间模型不满足第二预设收敛条件,则根据所述第四损失函数的函数值,调整所述中间模型的参数,并继续迭代训练所述中间模型;

若所述中间模型满足所述第二预设收敛条件,则将此时的所述中间模型作为所述预测模型。

上述方式下,由于所述第四部分中所述各第二列名的条件值并不可以枚举的,所以在训练了中间模型后再针对所述第四部分中所述各第二列名的条件值进行训练,使得预测模型可以学习到相关的知识,从而更加准确地学习到所述预测模型。

可选的,针对所述目标数据集任一训练数据,所述训练数据是按照以下方式进行标准化处理得到:

将所述训练数据的原始数据中的自然语言文本与预设数据类型的正则数据表达式匹配,若所述自然语言文本中存在子文本与所述正则数据表达式匹配成功,则用匹配成功的正则匹配结果替换所述子文本;所述正则匹配结果为预设的标准化表达文本。

上述方式下,通过正则匹配,将相似的文本都转化为标准化的表达文本,使得数据收集更加准确,训练出的预测模型也更加准确。

可选的,针对所述目标数据集中的至少一条训练数据,所述至少一条训练数据是按照以下方式进行脱敏处理得到:

根据所述至少一条训练数据的至少一条原始数据的数据类型,按照预设数据转换规则,将所述至少一条原始数据中的相应待转换数据转换为混淆数据;所述待转换数据的数据特性与所述混淆数据的数据特性之间的差异满足预设数据差异标准;

根据所述至少一条原始数据和所述混淆信息,获得所述至少一条训练数据。

上述方式下,按照预设数据转换规则,将所述至少一条原始数据中的相应待转换数据转换为混淆数据,而所述待转换数据的数据特性与所述混淆数据的数据特性之间的差异满足预设数据差异标准,所以经过混淆处理后,使得所述至少一条训练数据隐私性更强,且符合预设数据差异标准。

第二方面,本发明提供一种数据库操作装置,包括:

获取模块,用于获取目标自然语言文本;将所述目标自然语言文本输入至基于自然语言向结构化查询语言转化NL2SQL的预测模型,获得所述目标自然语言文本的目标结构化查询语言SQL语句;

所述目标SQL语句的数据结构为预设数据结构;所述预设数据结构包括各部分;所述各部分与SQL语句的预设格式的各语句片段对应;

所述预测模型是基于目标数据集按照机器学习训练得到的;其中,所述目标数据集任一训练数据包括:自然语言文本以及所述自然语言文本对应的SQL语句,所述SQL语句的数据结构为所述预设数据结构;

执行模块,用于通过执行所述目标SQL语句,操作目标数据库。

可选的,所述获取模块具体用于:按照以下方式训练得到所述预测模型:

基于所述目标数据集中各训练数据的自然语言文本的第一类数据以及所述自然语言文本对应的SQL语句,对初始模型进行机器学习训练,得到中间模型;任一训练数据的第一类数据为所述训练数据中按照预设规则选择的数据;

基于所述各训练数据的自然语言文本的第二类数据以及所述自然语言文本对应的SQL语句,对所述中间模型进行机器学习训练,得到所述预测模型;所述第二类数据是所述训练数据中除所述第一类数据之外的数据。

可选的,所述各部分具体包括第一部分、第二部分、第三部分和第四部分;

其中,所述第一部分为待查询的各第一列名;所述第二部分为聚合函数;所述第三部分为各查询条件之间的关系运算符;所述第四部分为所述各查询条件;任一查询条件包括所限定的各第二列名、所述各第二列名的操作符及条件值;

所述第一类数据包括:所述第一部分、所述第二部分、所述第三部分和所述第四部分的所述各查询条件中所述各第二列名、所述各第二列名的操作符;所述第二类数据具体为所述第四部分中所述各第二列名的条件值。

可选的,所述获取模块具体用于:

针对任一轮机器学习训练,将所述目标数据集中任一训练数据的自然语言文本的第一类数据以及所述自然语言文本对应的SQL语句输入至所述初始模型,获得预测SQL语句中所述第一类数据的预测数据;

根据所述自然语言文本对应的SQL语句和所述第一类数据的预测数据,获得第一损失函数的函数值、第二损失函数的函数值和第三损失函数的函数值;

所述第一损失函数用于表征所述第一类数据的预测数据中对于所述第一部分以及所述第二部分的差异程度;所述第二损失函数用于表征所述第一类数据的预测数据中对于所述第三部分的差异程度;所述第三损失函数用于表征所述第一类数据的预测数据中对于所述第四部分的所述各查询条件中待操作的列名、操作符的差异程度;

若所述初始模型不满足第一预设收敛条件,则根据所述第一损失函数的函数值、所述第二损失函数的函数值和所述第三损失函数的函数值,调整所述初始模型的参数,并继续迭代训练所述初始模型;

若所述初始模型满足所述第一预设收敛条件,则将此时的所述初始模型作为所述中间模型。

可选的,所述获取模块具体用于:

针对任一轮机器学习训练,将所述目标数据集中任一训练数据的自然语言文本的第二类数据以及所述自然语言文本对应的SQL语句输入至所述中间模型,获得预测SQL语句中所述第二类数据的预测数据;

根据所述自然语言文本对应的SQL语句和所述第二类数据的预测数据,获得第四损失函数的函数值;

所述第四损失函数用于表征所述第二类数据的预测数据中对于所述第四部分的所述各查询条件中的条件值的差异程度;

若所述中间模型不满足第二预设收敛条件,则根据所述第四损失函数的函数值,调整所述中间模型的参数,并继续迭代训练所述中间模型;

若所述中间模型满足所述第二预设收敛条件,则将此时的所述中间模型作为所述预测模型。

可选的,所述获取模块还用于:

针对所述目标数据集任一训练数据,按照以下方式进行标准化处理得到所述训练数据:

将所述训练数据的原始数据中的自然语言文本与预设数据类型的正则数据表达式匹配,若所述自然语言文本中存在子文本与所述正则数据表达式匹配成功,则用匹配成功的正则匹配结果替换所述子文本;所述正则匹配结果为预设的标准化表达文本。

可选的,所述获取模块还用于:

针对所述目标数据集中的至少一条训练数据,按照以下方式进行脱敏处理得到所述至少一条训练数据:

根据所述至少一条训练数据的至少一条原始数据的数据类型,按照预设数据转换规则,将所述至少一条原始数据中的相应待转换数据转换为混淆数据;所述待转换数据的数据特性与所述混淆数据的数据特性之间的差异满足预设数据差异标准;

根据所述至少一条原始数据和所述混淆信息,获得所述至少一条训练数据。

上述第二方面及第二方面各个可选装置的有益效果,可以参考上述第一方面及第一方面各个可选方法的有益效果,这里不再赘述。

第三方面,本发明提供一种计算机设备,包括程序或指令,当所述程序或指令被执行时,用以执行上述第一方面及第一方面各个可选的方法。

第四方面,本发明提供一种存储介质,包括程序或指令,当所述程序或指令被执行时,用以执行上述第一方面及第一方面各个可选的方法。

本发明的这些方面或其他方面在以下实施例的描述中会更加简明易懂。

附图说明

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

图1为本发明实施例提供的一种数据库操作方法对应的步骤流程示意图;

图2为本发明实施例提供的一种数据库操作方法对应的具体过程示意图;

图3为本发明实施例提供的一种数据库操作方法对应的系统架构示意图;

图4为本发明实施例提供的一种数据库操作方法中的中间模型训练过程中一种可能的模型结构示意图;

图5为本发明实施例提供的一种数据库操作方法中的预测模型训练过程中一种可能的模型结构示意图;

图6为本发明实施例提供的一种数据库操作方法中的预测模型的实验结果示意图;

图7为本发明实施例提供的一种数据库操作装置的结构示意图。

具体实施方式

为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

如图1所示,本发明实施例提供一种数据库操作方法。

步骤101:获取目标自然语言文本。

步骤102:将所述目标自然语言文本输入至基于自然语言向结构化查询语言转化NL2SQL的预测模型,获得所述目标自然语言文本的目标结构化查询语言SQL语句。

步骤103:通过执行所述目标SQL语句,操作目标数据库。

需要说明的是,步骤101~步骤103中,所述目标SQL语句的数据结构为预设数据结构;所述预设数据结构包括各部分;所述各部分与SQL语句的预设格式的各语句片段对应;所述预测模型是基于目标数据集按照机器学习训练得到的;其中,所述目标数据集任一训练数据包括:自然语言文本以及所述自然语言文本对应的SQL语句,所述SQL语句的数据结构为所述预设数据结构。

需要说明的是,对于各种类型的目标数据库而言,SQL语句都有规范的预设格式。

一种可选实施方式中,所述各部分具体包括第一部分、第二部分、第三部分和第四部分;

其中,所述第一部分为待查询的各第一列名;所述第二部分为聚合函数;所述第三部分为各查询条件之间的关系运算符;所述第四部分为所述各查询条件;任一查询条件包括所限定的各第二列名、所述各第二列名的操作符及条件值。

各部分的设置可以根据具体应用场景来,如设置第四部分为所述各第二列名、所述各第二列名的操作符,在设置第五部分为所述各第二列名的条件值也可以。

需要说明的是,步骤101~步骤103的训练数据可以进行预处理:

一种可选实施方式中,针对所述目标数据集任一训练数据,所述训练数据是按照以下方式进行标准化处理得到:

将所述训练数据的原始数据中的自然语言文本与预设数据类型的正则数据表达式匹配,若所述自然语言文本中存在子文本与所述正则数据表达式匹配成功,则用匹配成功的正则匹配结果替换所述子文本;所述正则匹配结果为预设的标准化表达文本。

举例来说,标准化表达文本为2019年,2019年对应的正则数据表达式可以将19年、一九年、2019等文本标准化为2019年。

一种可选实施方式中,针对所述目标数据集中的至少一条训练数据,所述至少一条训练数据是按照以下方式进行脱敏处理得到:

根据所述至少一条训练数据的至少一条原始数据的数据类型,按照预设数据转换规则,将所述至少一条原始数据中的相应待转换数据转换为混淆数据;所述待转换数据的数据特性与所述混淆数据的数据特性之间的差异满足预设数据差异标准;

根据所述至少一条原始数据和所述混淆信息,获得所述至少一条训练数据。

举例来说,将所述至少一条原始数据中某一列名的值取平均值,作为所述至少一条原始数据的所述混淆信息,从而既保护了原列名的信息,又不至于与原始数据的差别过大。

上述两种对训练数据预处理的可选实施方式可以结合使用,也可以任选其一。

需要说明的是,步骤101~步骤103的方式中,所述预测模型的训练方式可以多种,如所述目标数据集的训练数据直接训练,每次训练时都用到完整的训练数据,并调参;也可以现根据所述目标数据集的训练数据的部分数据分阶段训练,先根据一部分数据的数据特性训练一个中间模型,再训练得到预测模型。

一种可选实施方式中,所述预测模型按照以下方式训练得到:

步骤(1):基于所述目标数据集中各训练数据的自然语言文本的第一类数据以及所述自然语言文本对应的SQL语句,对初始模型进行机器学习训练,得到中间模型。

任一训练数据的第一类数据为所述训练数据中按照预设规则选择的数据。

步骤(2):基于所述各训练数据的自然语言文本的第二类数据以及所述自然语言文本对应的SQL语句,对所述中间模型进行机器学习训练,得到所述预测模型。

所述第二类数据是所述训练数据中除所述第一类数据之外的数据。

上述可选实施方式中,可有多种情况组合:

一种可能的情形为,所述第一类数据包括:所述第一部分、所述第二部分、所述第三部分和所述第四部分的所述各查询条件中所述各第二列名、所述各第二列名的操作符;所述第二类数据具体为所述第四部分中所述各第二列名的条件值。

另一种可能的情形为,所述第二类数据包括:所述第一部分、所述第二部分、所述第三部分和所述第四部分的所述各查询条件中所述各第二列名、所述各第二列名的操作符;所述第一类数据具体为所述第四部分中所述各第二列名的条件值。

还可以有其他情形的组合,具体可以根据场景灵活设置。

一种可选实施方式中,步骤(1)具体可以为:

针对任一轮机器学习训练,将所述目标数据集中任一训练数据的自然语言文本的第一类数据以及所述自然语言文本对应的SQL语句输入至所述初始模型,获得预测SQL语句中所述第一类数据的预测数据;

根据所述自然语言文本对应的SQL语句和所述第一类数据的预测数据,获得第一损失函数的函数值、第二损失函数的函数值和第三损失函数的函数值;

所述第一损失函数用于表征所述第一类数据的预测数据中对于所述第一部分以及所述第二部分的差异程度;所述第二损失函数用于表征所述第一类数据的预测数据中对于所述第三部分的差异程度;所述第三损失函数用于表征所述第一类数据的预测数据中对于所述第四部分的所述各查询条件中待操作的列名、操作符的差异程度;

若所述初始模型不满足第一预设收敛条件,则根据所述第一损失函数的函数值、所述第二损失函数的函数值和所述第三损失函数的函数值,调整所述初始模型的参数,并继续迭代训练所述初始模型;

若所述初始模型满足所述第一预设收敛条件,则将此时的所述初始模型作为所述中间模型。

一种可选实施方式中,步骤(2)具体可以为:

针对任一轮机器学习训练,将所述目标数据集中任一训练数据的自然语言文本的第二类数据以及所述自然语言文本对应的SQL语句输入至所述中间模型,获得预测SQL语句中所述第二类数据的预测数据;

根据所述自然语言文本对应的SQL语句和所述第二类数据的预测数据,获得第四损失函数的函数值;

所述第四损失函数用于表征所述第二类数据的预测数据中对于所述第四部分的所述各查询条件中的条件值的差异程度;

若所述中间模型不满足第二预设收敛条件,则根据所述第四损失函数的函数值,调整所述中间模型的参数,并继续迭代训练所述中间模型;

若所述中间模型满足所述第二预设收敛条件,则将此时的所述中间模型作为所述预测模型。

下面结合图2,详细描述本发明实施例提供的一种数据库操作方法。

从图2中可以看出,本方案所提方法包括四个步骤:

步骤一,中文NL2SQL数据集构建:

对于相关数据表格,使用替换、乱序、平均取值、偏移等方法进行数据脱敏,对脱敏后的数据人工拟写SQL查询语句,按照一定格式进行数据标注,构建完成中文NL2SQL数据集。

步骤二,数据标准化处理:

针对中文自然语言表达中的各种数字形式,包括百分比、小数等,以及口语化的日期表达,将其转化为标准形式,方便后续值的提取和匹配。

步骤三,NL2SQL算法模型搭建:

对SQL生成任务进行拆解,将选择列和聚合函数合并进行预测,将每个条件的选择列和操作符合并进行预测,总体来看形成三个多分类问题,可纳入同一个中间模型中进行联合预测,条件值预测涉及条件值的抽取,单独使用一个预测模型预测。

步骤四,NL2SQL场景应用:

可以将训练好的预测模型进行运用,可以通过预测模型生成可视化报表,从而直接将可视化分析结果展示出来。

进一步地,下面结合图3,详细描述本发明实施例提供的一种数据库操作方法。从图3中可以看出,一种基于NL2SQL技术的数据库操作方法及应用,包括以下步骤:

步骤一、中文NL2SQL数据集构建:

步骤(1.1)数据脱敏:

对于获取的原始数据集的各条原始数据,通过替换、乱序、平均取值、偏移等方法对原始数据的敏感数据列进行数据脱敏。

替换:以虚构数据代替真实数据,建立字典数据表,对每一真实值记录产生随机因子,对原始数据内容进行字典内容替换。

乱序:对敏感数据列的值重新随机分布,混淆原有值和其他字段的联系。

平均取值:针对数值型数据,计算均值,然后使脱敏后的值在均值附近随机分布,从而保持数据的总和不变。

偏移:通过随机移位改变数字数据。

步骤(1.2)数据标注:

对脱敏后的数据进行数据标注,首先人工拟写SQL语句,然后按照以下格式(SQL语句的预设格式)进行标注:

"SQL":{"sel":[a],"agg":[b],"cond_conn_op":c,"conds":[[d,e,f]]}。

其中a为所述第一部分,即各第一列名,b为所述第二部分,即聚合函数,c为所述第三部分,[d,e,f]为所述第四部分,包括d,e,f。d为cond_sel、e为cond_op、f为cond_val,d,e,f分别是所限定的各第二列名、所述各第二列名的操作符及条件值。

标注规则如下:

条件中所述各第二列名的操作符:op_SQL_dict={0:">",1:"<",2:"==",3:"!="};

聚合函数:agg_SQL_dict={0:"",1:"AVG",2:"MAX",3:"MIN",4:"COUNT",5:"SUM"};

各查询条件之间的关系运算符:conn_SQL_dict={0:"",1:"and",2:"or"};

按照上述方法,构建了支付工具、分公司交易情况、银行卡相关的共1000条数据。

步骤二、数据标准化处理:

由于中文的自然语言表达对于SQL查询来说太过复杂,尤其是对于各种数字形式,包括百分比、小数等,都需要转化为标准形式,方便后续值的提取和匹配,可以采用一些规则化方法对数字、日期等进行标准化处理。

步骤(2.1)常用数字前后缀整理:

针对数字,可以首先整理常用前后缀。

常用前缀包括:['大于','等于','小于','超过','一共','达到','达到','高于','低于','不足','少于','成交','高过','不足','总计','排名','名次','破了','每股','过了','不到','超过','年的','最近','月还','幅后','幅前','没破','低于','收费','不到','多于','于了','需要','每平']。

常用后缀包括:['以上','克的','块钱','平米','多人','多个','多名','每平','每个','每只','每双','毛钱','月份','车道','毫升','级的',['亿以上','平方米','元以下','的排行','个以上','名以上','美元以']。

步骤(2.2)中文数字标准化:

辅助定位到数字位置后,使用正则进行匹配:

小数:r'([零|一|二|两|三|四|五|六|七|八|九|十|百|千|万|亿]+[点|块][零|一|二|两|三|四|五|六|七|八|九|十|百|千]+)'。

百分数:r'(百分之[一|二|两|三|四|五|六|七|八|九|十|百|千|万|亿|零|0|1|2|3|4|5|6|7|8|9|\.]+)'。

数字:r'([零|一|二|两|三|四|五|六|七|八|九|十|百|千|万|亿]+)'。

对于纯中文表达,我们使用cn2an函数,将中文表达转换为阿拉伯数字。

步骤(2.3)日期标准化:

针对口语化表达,例如“查一下19年营业额”,19年要标准化为2019年。相似的使用正则匹配:

数字,有年月日:'(\d+)(\-|\.)(\d+)(\-|\.)(\d+)';

数字,有年月:'(\d+)(\-|\.)(\d+)';

包含汉字,有年月日:'(.{2,4})年(.*?)月(.*?)日';

包含汉字,有年月:'(.{2,4})年(.*?)月';

包含汉字,只有年:'(\d{2,4})年';

即可抽取到标准的时间表达。

步骤三、基于NL2SQL的数据查询模型搭建:

可以首先将此问题简单定义,给定一个数据库表,以及与之相关的问题query(自然语言文本),利用机器自动将query转化成机器可执行的SQL语句。

SQL语句结构(预设数据结构)如下:sel为一个list,代表SELECT语句所选取的列;agg为一个list,与sel一一对应,表示对该列做哪个聚合操作,比如sum,max,min等;conds为一个list,代表WHERE语句中的一系列条件,每个条件是一个由(条件列-cond_sel,条件运算符-cond_op,条件值-cond_val)构成的三元组;cond_conn_op为一个int,代表conds中各条件之间的并列关系,可以是and或者or。

步骤(3.1)任务合并:

本方法对上述部分子任务进行了拆解。首先将sel和agg结构合并为sel_agg,同时进行预测,对于每个列形成一个多分类问题。

类别包括[“”,AVG,MAX,MIN,COUNT SUM,NONE],“NONE”表示此列没有被选中。

对于每个条件,将cond_sel和cond_op合并为cond_sel_op,同时进行预测,同样的对于每个列形成一个多分类问题。类别包括[>,<,==,!=,NONE],“NONE”表示此列没有被选中。

cond_conn_op和cond_val保持不变,作为子任务单独预测。

总体来看,cond_conn_op、sel_agg和cond_sel_op均可以视为多分类问题,因此我们将其纳入统一的模型中进行联合预测;cond_val涉及条件值的抽取预测,单独使用一个模型预测。

步骤(3.2)中间模型的训练:

需要说明的是,中间模型的总体结构如图4所示。

模型输入将用户question和表头连接起来。通过BERT预训练层后,[cls]可获得整个语句的向量表征,每个列前面的[Str]和[Real]获取每个列的向量表征,其中[Str]表示字符型表头,[Real]表示数值型表头。

对于cond_conn_op,即预测where中条件间操作符。将[cls]输出通过全连接(dense)层进行3分类,分别是“”、“and”、“or”,“”表示只有一个条件。

对于sel_agg,即预测select列及其聚合函数。我们将每个列的[Str]/[Real]输入dense层进行7分类,分别是“”,“AVG”,“MAX”,“MIN”,“SUM”,“COUNT”,“NONE”。

对于cond_sel_op,即预测where中要操作的列及其对应运算符。同样的将每个列的[Str]/[Real]输入dense层进行5分类,分别是“>”,“<”,“==”,“!=”,“NONE”。

可以将三个分类任务的损失(loss)函数统一进行联合训练,即第一损失函数、第二损失函数和第三损失函数。经过目标数据集多个周期(epoch)迭代,中间模型(BERT)即训练完成。可以得到SQL语句的select列、聚合函数、where条件列、条件中运算符和条件间连接符。接下来进行条件值的预测:

步骤(3.3)预测模型的训练:

模型的总体结构如图5所示。

在步骤(3.2)中,得到了条件中所选的列和运算符。对于条件值的预测,可以做如下设置:如使用枚举的方式,将[cond_sel,cond_op,cond_value]所有可能列举出来,单独作为一个candidate和question相连作为输入。

对于非数值型的列,cond_value直接从表格内容中提取;对于数值型的列,使用正则直接将cond_value从question中抽取。

同样的[cls]输出可获得整个语句的向量表征,将其输入dense层进行2分类。对所有candidate都进行此操作,最终选择概率值最高的候选,cond_value即可确定。至此NL2SQL模型完成,SQL语句各个组成部分均已确定。

步骤(3.4),实验:

如图6所示,使用步骤一构建的中文NL2SQL数据集进行实验。将数据按照7:3比例分割,70%为训练集,30%为测试集。测试集结果如下:

可以看到,条件连接符预测准确率约为95%,聚合函数及选择列的预测函数约为89%,条件部分的整体准确率约为77%。

步骤四、NL2SQL场景应用:

可以将基于NL2SQL的预测模型应用于数据报表中,从而为分公司提供各项经营指标的可视化展现,帮助分公司随时随地了解经营动态。

整体来说,通过上述步骤一~步骤四,可以将用户语音问题转化为文本信息,然后使用上述提到的数据标准化方法进行处理。之后使用训练好的NL2SQL模型进行SQL语句的转化,直接对数据仓库的表格进行查询。返回结果可通过数据报表进行可视化展示。

进一步地,下面具体描述步骤101~步骤103的方法在一台计算机上运行基于NL2SQL技术的数据库操作方法及应用的流程,可以对应图2示出的步骤一到步骤四。以下内容遵循图2示出方案中的步骤顺序,逐步介绍数据集构建、标准化处理、NL2SQL模型构建和场景应用的具体实施过程。

NL2SQL数据集构建:

此处选择“分公司交易情况”查询场景,原始数据表格如下:

其中“交易金额”至“累计活卡”列通过平均取值的方式进行了数据脱敏。

接下来人工构建SQL语句,举例如下:

可以看到,针对“20年3月18日上海分公司的交易金额是多少”进行SQL标准化标注,按照预先定义的规则,"table_id"表示该句话对应的表格;"question"表示问题,"sel":[1]表示选择的列为“交易金额”;"agg":[0]表示聚合函数为空即未使用;"cond_conn_op":1表示条件间操作符为“and”;"conds":[[5,2,"20200318"],[0,2,"上海分公司"]]表示有两个条件,第一个是“日期”==“20200318”,第二个是“分公司全称”==“上海分公司”。

按照上述方法,构建了支付工具、分公司交易情况、银行卡相关的共1000条训练数据。

数据标准化处理:

以查询语句“哪些分公司在20年3月18日的交易金额大于三千万”为例,可以首先将用户语音问题转化为文本信息,进行数字标准化,由“大于”前缀辅助正则定位到“三千万”,使用cn2an函数可直接转化为“30000000”;然后进行日期标准化,通过‘(.{2,4})年(.*?)月(.*?)日’,抽取到日期20、3、18,可标准化为20200318。

经过标准化处理后,查询语句变为“哪些分公司在20200318的交易金额大于30000000”。

目标SQL语句转化:

在上一步骤中,已经使用大量数据训练完成基于NL2SQL的预测模型,包括联合预测模型和条件值预测模型。首先将SQL语句与表头连接,输入联合预测模型。预测得到select列、聚合函数、where条件列、条件中运算符和条件间连接符,即得到:

"SQL":{"sel":[0],"agg":[0],"cond_conn_op":1,"conds":[[5,2,"xxx"],[1,0,"xxx"]]}。

接下来可以进行条件值的预测。使用枚举的方式,将[cond_sel,cond_op,cond_value]所有可能列举出来:

a.“日期==20200318”,“日期==20200322”。

b.“交易金额>30000000”。

日期列为非数值型,直接从表格数据中取值枚举;交易金额为数值型,同样使用正则从问题中提取。

每个情况单独作为一个candidate和question相连作为输入。同样的[cls]输出可获得整个语句的向量表征,将其输入dense层进行2分类。对所有candidate都进行此操作,最终选择概率值最高的候选,cond_value即可确定。在本实例中a.选择“日期==20200318”,b.选择唯一候选“交易金额>30000000”。最终SQL语句为“SELECT分公司全称WHERE日期==20200318AND交易金额>30000000”。

SQL语句查询:

该步骤中,已经将自然语言语句转化为SQL语句,直接在数据库表中进行查询,得到结果“上海分公司”,并以可视化形式展示出来。至此NL2SQL的整个流程完成。

如图7所示,本发明提供一种数据库操作装置,包括:

获取模块701,用于获取目标自然语言文本;将所述目标自然语言文本输入至基于自然语言向结构化查询语言转化NL2SQL的预测模型,获得所述目标自然语言文本的目标结构化查询语言SQL语句;

所述目标SQL语句的数据结构为预设数据结构;所述预设数据结构包括各部分;所述各部分与SQL语句的预设格式的各语句片段对应;

所述预测模型是基于目标数据集按照机器学习训练得到的;其中,所述目标数据集任一训练数据包括:自然语言文本以及所述自然语言文本对应的SQL语句,所述SQL语句的数据结构为所述预设数据结构;

执行模块702,用于通过执行所述目标SQL语句,操作目标数据库。

可选的,所述获取模块701具体用于:按照以下方式训练得到所述预测模型:

基于所述目标数据集中各训练数据的自然语言文本的第一类数据以及所述自然语言文本对应的SQL语句,对初始模型进行机器学习训练,得到中间模型;任一训练数据的第一类数据为所述训练数据中按照预设规则选择的数据;

基于所述各训练数据的自然语言文本的第二类数据以及所述自然语言文本对应的SQL语句,对所述中间模型进行机器学习训练,得到所述预测模型;所述第二类数据是所述训练数据中除所述第一类数据之外的数据。

可选的,所述各部分具体包括第一部分、第二部分、第三部分和第四部分;

其中,所述第一部分为待查询的各第一列名;所述第二部分为聚合函数;所述第三部分为各查询条件之间的关系运算符;所述第四部分为所述各查询条件;任一查询条件包括所限定的各第二列名、所述各第二列名的操作符及条件值;

所述第一类数据包括:所述第一部分、所述第二部分、所述第三部分和所述第四部分的所述各查询条件中所述各第二列名、所述各第二列名的操作符;所述第二类数据具体为所述第四部分中所述各第二列名的条件值。

可选的,所述获取模块701具体用于:

针对任一轮机器学习训练,将所述目标数据集中任一训练数据的自然语言文本的第一类数据以及所述自然语言文本对应的SQL语句输入至所述初始模型,获得预测SQL语句中所述第一类数据的预测数据;

根据所述自然语言文本对应的SQL语句和所述第一类数据的预测数据,获得第一损失函数的函数值、第二损失函数的函数值和第三损失函数的函数值;

所述第一损失函数用于表征所述第一类数据的预测数据中对于所述第一部分以及所述第二部分的差异程度;所述第二损失函数用于表征所述第一类数据的预测数据中对于所述第三部分的差异程度;所述第三损失函数用于表征所述第一类数据的预测数据中对于所述第四部分的所述各查询条件中待操作的列名、操作符的差异程度;

若所述初始模型不满足第一预设收敛条件,则根据所述第一损失函数的函数值、所述第二损失函数的函数值和所述第三损失函数的函数值,调整所述初始模型的参数,并继续迭代训练所述初始模型;

若所述初始模型满足所述第一预设收敛条件,则将此时的所述初始模型作为所述中间模型。

可选的,所述获取模块701具体用于:

针对任一轮机器学习训练,将所述目标数据集中任一训练数据的自然语言文本的第二类数据以及所述自然语言文本对应的SQL语句输入至所述中间模型,获得预测SQL语句中所述第二类数据的预测数据;

根据所述自然语言文本对应的SQL语句和所述第二类数据的预测数据,获得第四损失函数的函数值;

所述第四损失函数用于表征所述第二类数据的预测数据中对于所述第四部分的所述各查询条件中的条件值的差异程度;

若所述中间模型不满足第二预设收敛条件,则根据所述第四损失函数的函数值,调整所述中间模型的参数,并继续迭代训练所述中间模型;

若所述中间模型满足所述第二预设收敛条件,则将此时的所述中间模型作为所述预测模型。

可选的,所述获取模块701还用于:

针对所述目标数据集任一训练数据,按照以下方式进行标准化处理得到所述训练数据:

将所述训练数据的原始数据中的自然语言文本与预设数据类型的正则数据表达式匹配,若所述自然语言文本中存在子文本与所述正则数据表达式匹配成功,则用匹配成功的正则匹配结果替换所述子文本;所述正则匹配结果为预设的标准化表达文本。

可选的,所述获取模块701还用于:

针对所述目标数据集中的至少一条训练数据,按照以下方式进行脱敏处理得到所述至少一条训练数据:

根据所述至少一条训练数据的至少一条原始数据的数据类型,按照预设数据转换规则,将所述至少一条原始数据中的相应待转换数据转换为混淆数据;所述待转换数据的数据特性与所述混淆数据的数据特性之间的差异满足预设数据差异标准;

根据所述至少一条原始数据和所述混淆信息,获得所述至少一条训练数据。

基于同一发明构思,本发明实施例还提供了一种计算机设备,包括程序或指令,当所述程序或指令被执行时,如本发明实施例提供的数据库操作方法及任一可选方法被执行。

基于同一发明构思,本发明实施例还提供了一种计算机可读存储介质,包括程序或指令,当所述程序或指令被执行时,如本发明实施例提供的数据库操作方法及任一可选方法被执行。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

相关技术
  • 一种创建数据库接口的方法、数据库操作方法及装置
  • 一种数据库持久层装置及数据库操作方法
技术分类

06120112740658