一种SQL语句查询正确性判别方法与流程

专利检索2025-06-07  14


本发明涉及数据科学,尤其涉及一种sql语句查询正确性判别方法。


背景技术:

1、在数据科学和机器学习领域,大模型如gpt-4,chatgpt等已经被广泛应用于各种任务,其中之一就是生成sql查询语句,这些大模型通常利用自然语言处理技术来理解用户的查询问题,并将其转换为相应的sql查询语句,目前,已有一些方法用于判断sql查询语句的正确性,例如,一些方法使用图自编码器对sql语法树进行编码,然后基于图拓扑结构训练图卷积神经网络,从而得到sql语句判别模型;

2、现有的技术方案主要有以下几种:

3、基于语法分析的方法:这种方法利用语法分析器将sql语句解析成语法树,然后根据预定义的语法规则对语法树的各个节点进行检查,发现并报告语法错误,这种方法的优点是简单且高效;

4、基于规则检查的方法:这种方法在语法分析的基础上,增加了一些额外的规则,用于检查sql语句的逻辑和语义正确性;这些规则可以是通用的,如sql的数据类型匹配、表名和列名的存在性等,也可以是特定的,如sql的优化建议、业务逻辑约束等,这种方法的优点是可以覆盖更多的错误类型;

5、基于机器学习的方法:这种方法利用机器学习模型,如神经网络、决策树等,来学习sql语句的正确性,这种方法可以从大量的sql语句和数据库中自动学习规则,无需人工编写和维护,而且可以适应不同的数据库和场景,这种方法的优点是可以实现端到端的检测,而且可以利用深度学习的强大表达能力来捕捉sql语句的复杂特征;

6、但是,上述技术方案存在以下缺点:

7、基于语法分析的方法:这种方法只能检测语法错误,无法检测逻辑和语义错误,也无法考虑数据库的结构和内容,例如,如果sql语句中的表名或列名不存在,或者sql语句中的条件表达式不符合数据库的数据类型,这种方法就无法发现;

8、基于规则检查的方法:这种方法的优点是可以覆盖更多的错误类型,但是规则的编写和维护需要专业知识和人工成本,而且规则的数量和复杂度会随着数据库的规模和复杂度增加,这种方法需要人工编写和维护规则,规则的数量和复杂度会随着数据库的规模和复杂度增加,而且规则可能存在冲突或遗漏,例如,如果sql语句中的优化建议和业务逻辑约束相矛盾,或者sql语句中存在一些隐含的错误,这种方法就无法处理;

9、基于机器学习的方法:这种方法需要大量的标注数据和计算资源,而且难以解释和调试,例如,如果机器学习模型的训练数据不足或不平衡,或者机器学习模型的参数设置不合理,这种方法就无法保证sql语句的正确性和效率;

10、因此,如何提供一种sql语句查询正确性判别方法是本领域技术人员亟需解决的问题。


技术实现思路

1、本发明的一个目的在于提出一种sql语句查询正确性判别方法,本发明可以有效地解决大模型在生成sql语句时可能存在的错误或不足,如语法错误、逻辑错误、语义错误、效率低下等,其次可以适应不同的数据库和场景,无需人工编写和维护规则,而且可以利用深度学习的强大表达能力来捕捉sql语句的复杂特征,可以处理更大规模和更真实的数据库,可以应对数据库中的海量和嘈杂的数据值,以及需要外部知识推理的问题,相比于传统的深度学习算法,拥有较强语义理解能力的大语言模型在处理问题、结构数据库以及sql语句三种异构数据方面拥有更强大的自适应性,更高的可靠性。

2、根据本发明实施例的一种sql语句查询正确性判别方法,包括以下步骤:

3、s1、创建选表选列模型,其中具体包括表列信息编码模块、列信息增强模块以及focal loss函数;

4、s2、通过选表选列模型对输入数据库的序列化信息进行信息抽取,提取候选表列信息,具体步骤为:

5、s21、首先对输入的用户查询问题和数据库完整的表列结构信息进行编码,这里采用两层bilstm和一个非线性全连接层作为编码器,得到表列信息编码后的表示向量;

6、s22、然后再利用多头注意力机制作为列增强模块,得到表列信息的概率分布;

7、s23、最后对表列信息的概率进行排序,选出最相关的top-k1个表及每个表的top-k2个列;

8、s3、基于bert的多语言预训练模型创建判别模型,并根据用户查询问题、sql语句以及数据库结构信息组成三元信息训练一个分类器;

9、s4、使用训练好的判别模型对生成的语句进行判别。

10、进一步的,所述s1中表列信息编码模块将用户查询问题和数据库结构信息输入roberta,为了获得表名和列名作为一个整体的向量表示,我们引入了一个池化模块对每一个模型输出的表列向量进行池化操作。

11、该技术方案中,将用户查询问题和数据库结构信息输入roberta,为了将表名和列名作为一个整体的输入,引入池化模块对表名和列名的输出的嵌入向量进行池化操作,可以确保模型能够全面理解表名和列名的语义和上下文,而不会将其拆分成多个不相关的部分。

12、进一步的,所述池化模块由一个两层bilstm和一个非线性全连接层组成,池化后,每个表名的嵌入向量可以表示为:

13、;

14、每个列名的嵌入向量可以表示为:

15、;

16、其中d表示为嵌入向量的维度,r指代的是一个向量,其中n为表的数量,i表示数据库中第i个表,为第i个表中列的数量,j指的是表的第j个列。

17、在该技术方案中,通过池化操作,可以从这些嵌入向量中提取最重要的语义特征,从而更好地表示每个表名和列名所包含的信息,池化操作可以将每个嵌入向量的维度减少到固定的大小,从而降低了输入的维度,使得后续处理更加高效,且池化操作将每个表名和列名的嵌入向量转化为固定维度的表示,使得模型在处理长短不一的表名和列名时能够保持一致的输入大小,从而提高了模型的效率和稳定性。

18、进一步的,所述s1中列信息增强模块可将列信息注入到相应的表嵌入向量中,具体来说,我们通过多头注意力层和一个特征融合层将列嵌入层注入到表嵌入层中,即:

19、;

20、其中,为query值,即多头注意力层中的query,两组同时代表多头注意力层中的key和value,即多头注意力层中的k和v,h代表多头数目;

21、再将原始表嵌入和列注意表嵌入相加,得到经过列增强后的表嵌入,即:

22、;

23、其中,norm表示归一化函数。

24、在该技术方案中,通过多头注意力层和一个特征融合层将列嵌入层注入到表嵌入层中可增强表嵌入向量的表示,使其能够更好地捕捉列名对表名的影响,并提高模型对用户自然语言查询的理解能力。

25、进一步的,所述s1中focal loss函数可以使模型在训练过程中更加关注难分类的样本,从而提高模型的性能和鲁棒性,focal loss的主要思想是降低易分类样本的损失权重,增加难分类样本的损失权重,使得损失函数更加聚焦于难分类样本。

26、在该技术方案中,focal loss通过添加的调节因子,使得损失函数更加聚焦于难分类样本,即那些被模型错误分类的样本,这样可以确保模型在训练过程中更加关注和重视那些对于模型而言更具挑战性的样本,从而提高了模型对难度较大样本的学习能力;

27、其次,通过降低易分类样本的损失权重,focal loss能够有效减少易分类样本对模型训练的影响,避免了这些样本的过度影响,从而更好地集中模型的注意力于那些难以分类的样本上;

28、除此之外,focal loss能够使得模型更加关注难分类样本,从而提高了模型对于复杂情况的处理能力,增强了模型的鲁棒性,通过更好地处理难以分类的样本,模型的性能也会得到提升;

29、最后,当训练数据中存在样本不平衡问题时,focal loss能够更好地处理这种情况,通过增加难分类样本的损失权重,可以缓解样本不平衡带来的问题,使得模型更加平衡地学习各个类别的特征,从而提高了模型的泛化能力和适应性;

30、进一步的,所述focal loss的数学表达式为:

31、;

32、其中是模型预测的概率,表示focal loss函数,反映了与ground truth即真实类别y的接近程度,γ是一个可调节的参数,当γ=0时,focal loss退化为交叉熵损失函数。

33、在该技术方案中,使用focal loss作为损失函数能够使模型更加关注难分类样本,减少易分类样本的影响,从而提高模型性能和鲁棒性,特别适用于处理样本不平衡问题。

34、进一步的,所述s3中判别模型具体包括以下步骤:

35、s31、数据预处理:采用cspider数据集进行数据预处理工作,其中cspider数据集基于spider数据集进行了中文翻译和本地化处理的数据集,cspider数据集用于中文的复杂和跨领域的语义解析和text-to-sql任务;

36、s32、特征提取:将预处理后的序列化文本输入到bert-base-multilingual-uncased模型中,模型的输出可以被视为输入文本的高级特征表示;

37、s33、线性分类层:采用线性分类层创建分类器,并使用所提取的特征来训练该分类器。

38、在该技术方案中,数据预处理目的是对原始数据进行预处理,使其适合用于模型训练,特征提取的目的是将预处理后的序列化文本输入到预训练的bert-base-multilingual-uncased模型中,从而提取文本的高级特征表示,而线性分类层目的是在特征提取的基础上创建一个线性分类器,并利用提取的特征来训练该分类器;

39、而上述步骤s31可使用cspider数据集进行预处理能够提高数据的质量和适用性,使得数据更加符合实际应用场景,并且可以为中文语义解析和text-to-sql任务提供更多样化和丰富的数据样本;

40、上述步骤s32通过bert-base-multilingual-uncased模型进行特征提取,可以有效地捕捉文本的语义信息,包括单词、短语和句子级别的语义表示,从而提供更加全面和准确的特征表示,为后续分类任务提供更多的信息支持;

41、上述步骤s33使用线性分类层创建分类器,并利用提取的特征进行训练,可以有效地将文本映射到目标类别的空间,并进行分类预测,这样可以实现对用户自然语言问题与对应的sql查询语句之间的准确匹配,提高了text-to-sql任务的分类性能和准确性。

42、进一步的,所述s32中所提取的特征主要包括用户问题、候选表列以及候选sql语句组成的三元信息。

43、进一步的,所述s31中数据预处理时为了减少模型学习差异将对原始sql查询语句做以下规范化预处理:

44、当sql语句不指定排序方式时,默认添加一个asc关键字;

45、在括号周围添加空格并将单引号替换双引号;

46、删除和替换表的别名。

47、在该技术方案中,当原始sql查询语句中没有指定排序方式时,默认添加一个asc关键字,以确保查询结果的顺序性和可预测性;

48、在原始sql查询语句中,可能存在括号周围缺少空格的情况,以及单引号和双引号混用的情况。为了统一格式和规范,对这些部分进行处理,以提高可读性和一致性;

49、在原始sql查询语句中,可能存在表的别名,为了减少模型学习差异,将删除和替换表的别名,以简化查询语句,降低学习复杂度,同时确保模型更加专注于主要语义内容的学习。

50、本发明的有益效果是:

51、1、本发明通过表列信息编码模块,列信息增强模块,以及一个用于解决数据不均衡问题的损失函数,可以准确从用户的查询问题中识别出相关的表名、列名、数据类型、条件表达式等信息,从而生成候选的数据库的结构,此方法相当于起了一个信息过滤的作用,可以大大简化模型的输入信息。

52、2、本发明通过根据用户的查询问题、过滤后的数据库结构信息以及具体的sql语句组成的三元信息,对sql语句进行语法、逻辑、语义的检查,从而判断sql查询语句是否符合用户的需求和数据库的规则,较传统两元组信息判别方式而言大大提高了模型判别的准确性。


技术特征:

1.一种sql语句查询正确性判别方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的一种sql语句查询正确性判别方法,其特征在于,将用户查询问题和数据库结构信息输入所述s1中表列信息编码模块,这一步引入一个池化模块对输入表列进行池化操作,并将其送入多头注意力层,最终获得表列信息的概率分布。

3.根据权利要求2所述的一种sql语句查询正确性判别方法,其特征在于,所述池化模块由一个两层bilstm和一个非线性全连接层组成,池化后,每个表名的嵌入向量可以表示为:

4.根据权利要求2所述的一种sql语句查询正确性判别方法,其特征在于,所述s1中列信息增强模块可将列信息注入到相应的表嵌入向量中,具体来说,我们通过多头注意力层和一个特征融合层将列嵌入层注入到表嵌入层中,即:

5.根据权利要求1所述的一种sql语句查询正确性判别方法,其特征在于,所述s1中focal loss函数可以使模型在训练过程中更加关注难分类的样本,从而提高模型的性能和鲁棒性。

6.根据权利要求5所述的一种sql语句查询正确性判别方法,其特征在于,所述focalloss的数学表达式为:

7.根据权利要求1所述的一种sql语句查询正确性判别方法,其特征在于,所述s3中判别模型具体包括以下步骤:

8.根据权利要求7所述的一种sql语句查询正确性判别方法,其特征在于,所述s32中所提取的特征主要包括用户问题、候选表列以及候选sql语句组成的三元信息。

9.根据权利要求7所述的一种sql语句查询正确性判别方法,其特征在于,所述s31中数据预处理时为了减少模型学习差异将对原始sql查询语句做以下规范化预处理:


技术总结
本发明公开了一种SQL语句查询正确性判别方法,包括选表选列模型和判别模型,整体流程分成两个阶段,第一阶段对输入的数据库的序列化信息进行信息抽取,得到候选表列信息;第二阶段根据用户问题,候选表列,以及候选SQL语句,对SQL语句的正确性进行判别。本发明通过两个阶段完成判别,其中第一阶段选表选列模型进行信息过滤,第一阶段利用选表选列模型可对输入信息进行过滤得到更为精简的数据库结构信息,而第二阶段与现有相关技术不同的是不仅输入有用户查询问题和后选的SQL语句两元组,还包括过滤后的数据库结构信息,因此通过三元信息完成语句正确性的判别工作,这样就提高了模型判别的准确性。

技术研发人员:邱阳,柯芝锦,江宇晨,张星,吴奇,周锐,王佐成
受保护的技术使用者:数据空间研究院
技术研发日:
技术公布日:2024/5/29
转载请注明原文地址:https://win.8miu.com/read-1154784.html

最新回复(0)