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

编程语句纠错方法、装置、电子设备及存储介质与流程

2021-10-29 23:22:00 来源:中国专利 TAG:纠错 语句 编程 计算机 电子设备


1.本公开涉及计算机技术领域,具体而言,涉及基于计算机技术的一种编程语句纠错方法、编程语句纠错装置、电子设备及计算机可读存储介质。


背景技术:

2.随着计算机技术的发展,越来越多的非代码工程师的用户,例如市场运营人员开始通过编写代码的方式来实现简单基础的功能。
3.以结构化查询语言(sql)为例,其可被用于数据分析的工作。然而非代码工程师的用户由于编程经验不足,所编写的sql语句中常常会出现各种错误,从而导致sql语句无法正常运行;同时,在通过查询引擎来查询语句是否正确的过程中,当查询引擎返回报错信息时,用户往往无法理解报错信息所指示的错误内容,并难于找到语句中的错误,因此往往不得不又转而求助于代码工程师。从而造成了sql语句错误率高、调试效率低下、sql编码对经验不丰富的用户不友好、缺乏对用户的纠错辅助等一系列问题。
4.需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。


技术实现要素:

5.本公开实施例的目的在于提供一种编程语句纠错方法、编程语句纠错装置、电子设备及计算机可读存储介质,从而至少在一定程度上克服了sql语句调试效率低下的问题,并同时对用户提供了一种有效的纠错辅助手段。
6.根据本公开的一个方面,提供一种编程语句纠错方法,包括:
7.对用户输入的编程语句进行查询,并确定所述编程语句是否正确;
8.当确定所述编程语句正确时,将所述编程语句采集至预训练样本集中;
9.建立预训练模型,并基于所述预训练样本集对所述预训练模型进行训练;
10.当确定所述编程语句错误时,将所述编程语句以及与所述编程语句对应的正确的编程语句采集至纠错样本集中;
11.建立纠错模型,并基于所述纠错样本集和经训练的所述预训练模型对所述纠错模型进行训练;
12.通过经训练的所述纠错模型对用户输入的错误的编程语句进行纠错。
13.在本公开的一种示例性实施例中,当确定所述编程语句正确时,还将所述编程语句的元信息采集至所述预训练样本集中;以及当确定所述编程语句错误时,还将所述编程语句的报错信息和元信息采集至所述纠错样本集中。
14.在本公开的一种示例性实施例中,所述当确定所述编程语句正确时,将所述编程语句采集至预训练样本集中,包括:确定所述编程语句与前一编程语句的相似度,并确定所述相似度是否小于预设的阈值;当所述相似度大于或等于所述预设的阈值时,将所述编程语句采集至预训练样本集中。
15.在本公开的一种示例性实施例中,所述方法还包括:当所述相似度小于所述预设的阈值时,确定所述前一编程语句为正确的编程语句或错误的编程语句;当所述前一编程语句为错误的编程语句时,将所述编程语句采集至预训练样本集中,并且还将所述编程语句采集至所述纠错样本集中。
16.在本公开的一种示例性实施例中,所述方法还包括:对所述编程语句、所述报错信息或所述元信息进行分词处理,得到多个token;对所述多个token进行分类处理,得到属于保留关键词类别的多个token和属于自定义变量类别的多个token;将编程语句、所述报错信息或所述元信息的多个token转换为独热编码,其中,将属于保留关键词类别的多个token转换为预定的多个独热编码,将属于自定义变量类别的多个token转换为对应的独热编码段中的各相应的独热编码。
17.在本公开的一种示例性实施例中,所述基于所述预训练样本集对所述预训练模型进行训练,包括:对所述编程语句的属于自定义变量类别的多个token中的至少一个token进行掩码处理,并使所述预训练模型对经掩码处理的所述至少一个token进行还原。
18.在本公开的一种示例性实施例中,所述至少一个token为彼此相邻的多个token。
19.在本公开的一种示例性实施例中,所述方法还包括:通过所述预训练样本集对所述预训练模型输入正确的编程语句的元信息;所述基于所述纠错样本集和经训练的所述预训练模型对所述纠错模型进行训练,包括:通过所述纠错样本集对所述纠错模型输入所述错误的编程语句以及所述错误的编程语句的报错信息和元信息;基于经训练的所述预训练模型以及所述错误的编程语句的报错信息和元信息,使所述纠错模型对所述错误的编程语句进行纠错处理,其中,所述纠错处理包括对所述错误的编程语句的token进行保留或删除,或者在所述错误的编程语句中插入token。
20.根据本公开的一个方面,提供一种编程语句纠错装置,其特征在于,包括:
21.查询模块,用于对用户输入的编程语句进行查询,并确定所述编程语句是否正确;
22.采集模块,用于当确定所述编程语句正确时,将所述编程语句采集至预训练样本集中;以及当确定所述编程语句错误时,将所述编程语句以及与所述编程语句对应的正确的编程语句采集至纠错样本集中;
23.预训练模块,用于建立预训练模型,并基于所述预训练样本集对所述预训练模型进行训练;以及
24.纠错模块,用于建立纠错模型,并基于所述纠错样本集和经训练的所述预训练模型对所述纠错模型进行训练,其中,经训练的所述纠错模型用于对用户输入的错误的编程语句进行纠错。
25.根据本公开的一个方面,提供一种电子设备,包括:处理器;以及存储器,用于存储所述处理器的可执行指令;其中,所述处理器被配置为经由执行所述可执行指令来执行上述任意一项所述的方法。
26.根据本公开的一个方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意一项所述的方法。
27.本公开示例性实施例可以具有以下部分或全部有益效果:
28.在本公开示例实施方式所提供的编程语句纠错方法中,一方面,通过将正确的编程语句采集至预训练样本集中,同时将错误的编程语句以及相应的正确的编程语句采集至
纠错样本集中,使得在对模型进行训练时无需对模型的训练样本集中的样本进行人工标注,从而提高了模型训练的效率并同时节省了由人工标注带来的人力成本。另一方面,通过使用经训练的纠错模型对用户输入的错误的编程语句进行纠错,使得尤其是编程经验不丰富的用户无需自行查找错误出处并进行修改,从而提高了编程语句的调试效率,并同时对用户提供了高效且准确的纠错辅助。
29.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
30.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
31.图1示意性示出了根据本公开的一个实施例的编程语句纠错方法的流程图;
32.图2示意性示出了根据本公开一个实施例的采集预训练样本和纠错样本的流程图;
33.图3示意性示出了根据本公开一个实施例的将编程语句、报错信息或元信息的多个token转换为独热编码的流程图;
34.图4示意性示出了根据本公开一个实施例的对预训练模型进行训练的流程图;
35.图5示意性示出了根据本公开一个实施例的对纠错模型进行训练的流程图;
36.图6示意性示出了根据本公开的一个实施例的编程语句纠错装置的框图;
37.图7示出了适于用来实现本公开实施例的电子设备的计算机系统的结构示意图。
具体实施方式
38.现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本公开的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知技术方案以避免喧宾夺主而使得本公开的各方面变得模糊。
39.此外,附图仅为本公开的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
40.以下对本公开实施例的技术方案进行详细阐述:
41.本示例实施方式提供了一种编程语句纠错方法,该方法既可以运行在具有相关运
算处理能力的服务器上,也可以运行在诸如个人计算机之类的终端设备上。参考图1所示,该编程语句纠错方法可以包括以下步骤:
42.步骤s110.对用户输入的编程语句进行查询,并确定所述编程语句是否正确;
43.步骤s120.当确定所述编程语句正确时,将所述编程语句采集至预训练样本集中;
44.步骤s130.建立预训练模型,并基于所述预训练样本集对所述预训练模型进行训练;
45.步骤s140.当确定所述编程语句错误时,将所述编程语句以及与所述编程语句对应的正确的编程语句采集至纠错样本集中;
46.步骤s150.建立纠错模型,并基于所述纠错样本集和经训练的所述预训练模型对所述纠错模型进行训练;
47.步骤s160.通过经训练的所述纠错模型对用户输入的错误的编程语句进行纠错。
48.在本公开示例实施方式所提供的编程语句纠错方法中,一方面,通过将正确的编程语句采集至预训练样本集中,同时将错误的编程语句以及相应的正确的编程语句采集至纠错样本集中,使得在对模型进行训练时无需对模型的训练样本集中的样本进行人工标注,从而提高了模型训练的效率并同时节省了由人工标注带来的人力成本。另一方面,通过使用经训练的纠错模型对用户输入的错误的编程语句进行纠错,使得尤其是编程经验不丰富的用户无需自行查找错误出处并进行修改,从而提高了编程语句的调试效率,并同时对用户提供了高效且准确的纠错辅助。
49.下面,在另一实施例中,对上述步骤进行更加详细的说明。
50.在步骤s110中,对用户输入的编程语句进行查询,并确定所述编程语句是否正确。
51.在本示例实施方式中,当检测到用户输入了sql编程语句时,可以自动地或响应于用户的指令而调用查询引擎来查询所输入的sql编程语句是否正确。其中,查询引擎例如可以是hive、spark sql、presto等等,可以根据实际需求选用合适的查询引擎来对sql编程语句进行查询,本示例实施方式对此不做特别限定。
52.在步骤s120和s140中,当确定所述编程语句正确时,将所述编程语句采集至预训练样本集中;以及当确定所述编程语句错误时,将所述编程语句以及与所述编程语句对应的正确的编程语句采集至纠错样本集中。
53.在本示例实施方式中,例如可以借助于sql采集器来完成对编程语句的采集。其中该sql采集器例如被嵌入在sql客户端的控制台中,或者也可以被部署在服务器端;同时该sql采集器可以是关系型数据库管理系统sql server所自带的采集器,也可以是其他具有相似功能的sql采集器,本示例实施方式对此不做特别限定。
54.当通过查询引擎的返回信息确定所输入的sql编程语句正确时,也就是可以正常运行时,则可以通过采集器将该正确的编程语句作为预训练样本采集至预训练样本集中。而当通过查询引擎的返回信息确定所输入的sql编程语句错误时,也就是无法正常运行时,则可以通过采集器将该错误的编程语句以及与该编程语句对应的正确的编程语句作为纠错样本采集至纠错样本集中,其中对应的正确的编程语句可以作为该错误的编程语句的比对样本,二者构成一个完整的样本对。其中该预训练样本集和纠错样本集可以分别用于对预训练模型和纠错模型进行训练,后文将对此进行详细说明。
55.在一个示例中,在对编程语句进行采集的同时,还可以对编程语句的元信息或报
错信息进行采集。其中,元信息指用于存储各sql编程语句的数据库和数据表(例如,hive架构下的数据库表)的结构的信息;当获知某一sql编程语句的元信息时,则能够在相应的存储位置搜索到该编程语句。而报错信息可以包括错误提示、错误类型、出错位置或字段等,通过该报错信息,可以大致反映出错误的编程语句中出现的是什么错误,例如错误字段、多字段、缺字段等,并且还可以反映是在语句中的什么位置出现了错误,以便能够快速地定位出错的具体位置。因此,当确定sql编程语句正确时,还可以将该编程语句的元信息也采集到预训练样本集中;类似地,当确定sql编程语句错误时,可以将该编程语句的报错信息和元信息也采集到纠错样本集中,其中,可以通过from关键词来确定该编程语句所使用的数据库名和表名,进而获得相应库和表的元信息。采集之后,可以以日志的形式对各预训练样本和各纠错样本进行储存。通过上述这种方式,在后续的对预训练模型和纠错模型进行训练的过程中,能够快速地查找到相应的正确或错误的编程语句,并能够确定错误类型和出错位置,从而提高了模型训练的效率。
56.在另一个示例中,在将正确的编程语句采集至预训练样本集的过程中,对于当前所采集的编程语句,还可以确定该编程语句与前一编程语句的相似度,其中该相似度例如可以为莱文斯坦(levenshtein)距离,也称为编辑距离,代表针对两个字符串(例如英文字)之间的差异程度的量化量测,量测方式是看至少需要多少次的处理(包括替换、插入或删除单个字符)才能将一个字符串变成另一个字符串,因此该相似度的值为不小于1的自然数,并且该相似度的值越小,表示两个字符串或两个编程语句之间越相似;而该相似度的值越大,则表示两个编程语句之间越不相似。因此,可以设置一阈值,例如设置为2,并确定当前的编程语句与前一编程语句之间的相似度是否小于该阈值。当相似度小于该阈值时,可以表示当前的编程语句与前一编程语句之间具有足够高的相似度并且可以认为是同一编程语句;而当相似度大于或等于该阈值时,则可以表示这两个编程语句之间的相似度未达到预期的水平,因而可视作两个不同的编程语句。其中上述阈值的取值可以根据实际需要灵活设置,而并不限于本示例中所举例说明的数值。
57.除此之外,考虑到用户在调试编程语句的过程中的实际操作情况,往往是一条语句正确后输入下一条语句,该下一条语句可以是与上条语句无实质区别的等同语句也可以是不同的语句;而当该下一条语句被反馈存在错误时,用户往往会输入数条经调整后的语句来查询是否修改为正确状态,而在最后输入的语句被查询为正确之前输入的数条语句都会是错误的语句。因此,在本示例中,在当前的编程语句为正确语句时,还可以判断前一编程语句为正确的还是错误的编程语句。
58.综上,当相似度大于或等于该阈值时,当前的编程语句与前一编程语句是不同的语句,二者之间无论为正确语句还是错误语句均不存在关联关系,因而可以将当前的编程语句直接采集至预训练样本集中;而当相似度小于该阈值时,并且在前一编程语句为正确的编程语句的情况下,可以认为当前的编程语句与前一编程语句是相同的语句,因而可以将当前的编程语句丢弃,或者也可以用当前的编程语句覆盖前一编程语句,以避免出现重复样本。相似地,在将编程语句采集至纠错样本集中的过程中,也可以判断当前语句与前一语句之间的相似度,并且在大于或等于相应阈值时直接采集,在小于相应阈值时进行样本的覆盖或合并,或者直接丢弃。
59.在一个进一步的示例中,在前一编程语句为错误的编程语句的情况下,除了将当
前的编程语句采集至预训练样本集中之外,还可以将该编程语句作为前一条语句的正确对照样本采集至纠错样本集中,从而形成样本对或样本子集,以便在后续的纠错过程中作为前一条语句所代表的错误语句的修正标准样本来使用。在本公开的实施例中,同时包含正确语句与错误语句的样本对被视为完整的样本,并且可用于纠错模型的训练;而仅包含错误语句的样本将被认为是非完整样本而将被丢弃。
60.以上对当前语句为正确语句的情况进行了说明,而在当前语句为错误语句的情况下,同样可以借助于上述相似度来辅助进行样本采集。举例来说,当查询引擎的返回信息指示当前的编程语句错误时,用户则会对该错误的编程语句进行调整;此时可以确定用户后续输入并查询的编程语句与当前语句的相似度并且根据查询引擎的返回信息来确定后续查询的语句是否正确,直至检测到与当前语句的相似度小于预定阈值并且为正确的编程语句,则该正确的编程语句即为用户经过调整并修正了其中错误的修正语句,也就是与当前的编程语句对应的正确的编程语句。此时则可以将当前的错误编程语句以及对应的正确的编程语句作为一个完整的纠错样本采集至纠错样本集中。
61.图2示出了对预训练样本和纠错样本进行采集的整体流程图,其中:
62.在s201,可以通过查询引擎对用户输入的编程语句进行查询,进而触发对样本的采集动作;
63.在s202,可以记录下当前被查询的语句,并且等待返回查询的状态信息;
64.同时在s203,还可以对编程语句进行解析,以从编程语句中获取该语句对应的数据库名和表名,并且可以执行元信息查询,进而获得相应的数据库和表的元信息;
65.在s204,可以通过查询引擎的返回信息确定当前的编程语句是否正确;
66.如果错误,则在s205,可以进一步确定当前的编程语句与上一条语句是否相似,也就是说,二者之间的相似度是否小于相应的阈值;
67.如果是,则在s207,可认为当前的编程语句与上一条语句为相同的语句,因而可与前次查询所得到的错误样本合并,并将合并后的样本标记为input,即纠错模型的输入;
68.如果否,则在s206,可以将当前的编程语句采集至纠错样本集中并新建样本,同时标记为input;
69.如果在s204通过查询引擎的返回信息确定当前的编程语句正确,则在s208,可以进一步确定当前的编程语句与上一条语句是否相似,也就是说,二者之间的相似度是否小于相应的阈值;
70.如果不相似,则在s209,可以将当前的编程语句直接归入预训练样本集中;
71.如果相似,则在s210,可以再进一步判断上一条语句是否为错误语句;
72.如果否,则可以将当前的编程语句丢弃;
73.如果是,则在s211,可以将当前的编程语句归入上一条语句所在的纠错样本集中,并且标记为output,即纠错模型完成纠错后的输出;同时还可以在s209将当前的编程语句采集至预训练样本集中。
74.在上述示例中,通过充分考虑用户在输入编程语句样本的过程中的操作规律,并同时引入语句间的相似度,一方面使得能够在样本的采集过程中避免重复样本的出现,从而保持样本集的简洁与样本的单一性;另一方面使得能够将同一编程语句的正确的和错误的样本采集为样本对或样本子集,从而在纠错过程中提供了正确对照项并且能够提高错误
样本与正确样本的匹配速度,进而提高了模型训练效率和纠错效率。
75.在步骤s130中,建立预训练模型,并基于所述预训练样本集对所述预训练模型进行训练。
76.在本示例实施方式中,例如可以基于bert模型来实现预训练模型,其中该bert模型是一种基于深度神经网络的大型预训练模型,本质上为一种去噪自编码器。为了将sql编程语句转化为符合bert模型的格式要求的输入,在一个示例中,可以将bert模型的输入所涉及的编程语句、报错信息或元信息转换为独热编码,如图3所示,转换为独热编码的方式可以如下:
77.在s310,可以对编程语句、报错信息或元信息进行分词处理,从而得到以空格分隔的多个token;其中,token还可被称为“标记”,是语义处理过程中的一个有意义的单元,也可以理解为token是经分词得到的具有实际语义的最小语言单元,在本公开中,token可以指sql语句中以空格分隔的关键词和各种其他符号(如 ,()等)。
78.在s320,可以对得到的多个token进行分类处理,得到属于保留关键词类别的多个token和属于自定义变量类别的多个token;其中,保留关键词可以指sql中所定义的语法词(例如from)或sql规则中所规定的保留词,以及报错信息模板中的固定专用词;而自定义变量则可以指用户在编写sql编程语句的过程中所输入或创建的用以实现各种功能的自定义字段,例如可以包括数学运算符号、换行符号、制表符号、数字字符、英文字符等,同时还可以包括为已知变量类型的元信息。
79.在s330,由于在sql中变量的定义没有固定的字典,而且彼此独立,因此token之间具有较高的独立性,且不随着上下文变化而发生歧义,这与彼此之间独立的独热编码具有可类比性,因而可以将编程语句、报错信息或元信息的多个token转换为独热编码;其中,可以预先指定好若干个固定不变的独热编码专用于属于保留关键词类别的多个token,并且在转换时可以从这若干个预定的独热编码中选择用于保留关键词的独热编码;而对于属于自定义变量类别的多个token,则可以分配多个独热编码段,并且在转换时从这多个独热编码段中选择用于自定义变量的独热编码。
80.举例来说,由于sql不区分大小写,因此进行转换可以前先把sql语句转为小写,并对所有字段的来源表进行补全。之后例如可以预先指定用于保留关键词,例如sql指令select的独热编码为000010,而用于from的独热编码为010000等等;对于自定义变量中的元信息,由于考虑到常用的查询语句中涉及的数据库一般不超过5个,单个数据库涉及的表不超过15个,而一个表的字段数一般不超过50个,因此可以:
81.a).将数据库名转换为不多于5个独热编码,编码的使用顺序可以按照数据库名出现的顺序;
82.b).将数据表名转换为不多于15个独热编码,编码的使用顺序可以按照数据表名在相应的数据库中出现的顺序,而不同数据库中的具有相同序号的数据表可以对应相同的数据表名独热编码;以及
83.c).将数据字段转换为不多于50个独热编码,编码的使用顺序可以按照数据字段在相应的数据表的元信息中出现的顺序,而不同数据表中的具有相同序号的数据字段可以对应相同的数据字段独热编码。
84.此外,对于例如报错信息关键字、运算符号、英文字符等自定义字段,例如可以将
其转换为不多于60个独热编码,编码的使用顺序按照自定义字段出现的顺序。
85.而独热编码的编码位数则可以根据所使用的所有独热编码的个数来确定。在上述的举例说明中,例如预先指定20个独热编码用于保留关键词,并将5个独热编码用于数据库名、将15个独热编码用于数据表名、将50个独热编码用于数据字段以及将60个独热编码用于自定义字段,则所采用的独热编码的编码位数可以至少为20 5 15 50 60=150;也就是说,可以设置一编码位数为150位的编码段,其包括150个独热编码,例如与数据字段相对应的各独热编码在其中可以占据包括50个独热编码的编码段,与数据库名相对应的各独热编码在其中可以占据包括5个独热编码的编码段,等等。也可以在此基础上增大独热编码的编码位数,例如增大至300,以便预留出由于临时添加等原因而新增的独热编码的备用编码段。上述所列举的例如独热编码个数等数值仅仅是出于示例性说明的目的,在实际应用中可以根据实际需求应用其他的数值而并不限于本示例中所列举的数值。
86.在上述示例中,通过将token转换为独热编码的方式有效地实现了sql的词嵌入,并且去除了编程者的变量命名习惯,而仅保留sql的命令信息,从而使得能够将sql编程语句、报错信息和元信息转化为符合格式要求的模型输入,因而实现了能够利用模型自动对编程语句进行纠错。
87.在转换为独热编码之后,则可以基于预训练样本集对预训练模型进行训练。例如在如图4所示的示例中,训练过程可以包括:
88.(1)将包括正确运行的sql编程语句的预训练样本集作为自监督训练集,对预训练模型输入正确的sql语句序列,其中该正确的sql语句序列例如可以包括第1至第n个共n个token;
89.(2)在s410,可以采用bert模型的mask lm方法对sql语句序列中的至少一个token进行掩码处理,例如将共n个token中的第x个和第y个token进行了掩码处理,则在处理后的序列中不包括该第x个和第y个token;
90.(3)另外可以接入元信息序列和为报错信息预留的填充序列,且不同序列之间使用特殊间隔符[sep]间隔开;虽然在对预训练模型进行训练的过程中仅涉及正确的编程语句和元信息,而不涉及对报错信息的调用,但在此接入填充序列可以为在后续的纠错模型训练中接入报错信息预留出相应的填充位置,使得在对纠错模型进行训练时能够快速地接入报错信息;
[0091]
(4)在s420,可以使预训练模型对经掩码处理的至少一个token,例如第x个和第y个token进行还原,从而得到初始输入的sql语句序列。可以对预训练模型输入另一正确的sql语句序列,并重复上述步骤,直至达到预期的训练效果为止。
[0092]
在一个进一步的示例中,由于sql与自然语言相比具有更清晰的结构,因此可以增大预训练模型的训练难度,即,可以增加被掩码处理的token的数量,并且使被掩码处理的token为在语句中的位置彼此相邻的多个token。通过这种方式,能够提高预训练模型对被掩码的token的还原性能,从而有助于提高后续的编程语句纠错的正确率。
[0093]
通过上述示例,实现了利用正确的sql编程语句进行无标注的训练,并且对被掩码处理的token进行还原的过程与后续语句纠错处理中的字段插入操作相类似,从而有助于在纠错处理过程中快速实现字段插入功能,并相应地能够提高纠错处理的效率。
[0094]
在步骤s150中,建立纠错模型,并基于所述纠错样本集和经训练的所述预训练模
型对所述纠错模型进行训练。
[0095]
在本示例实施方式中,例如可以基于lasertagger模型来实现纠错模型,其中该lasertagger模型是一种快速文本编辑生成模型。在对纠错模型进行训练之前,例如可以通过预训练样本集对预训练模型输入正确的编程语句的元信息,使得能够通过元信息快速检索到对应的正确编程语句,以便在纠错模型的训练过程中作为纠错语句/对照项来使用。例如在如图5所示的示例中,基于纠错样本集和经训练的预训练模型对纠错模型进行的训练过程可以包括:
[0096]
(1)通过纠错样本集对纠错模型输入错误的编程语句,例如包括第1至第n个共n个token的错误sql语句序列,以及输入错误的编程语句的报错信息序列和元信息序列。如前所述,由于已经对报错信息预留出了相应的填充位置,则此时能够借助于填充序列而快速地接入报错信息,元信息的输入方式可以为:按照“库名

表名

[字段名

字段类型]”的序列依次输入;通过这种方式,可以使纠错模型借助于错误语句的元信息快速查找到相应的错误编程语句,并能够获知错误语句的错误类型、出错位置等;
[0097]
(2)在s510,可以基于预训练模型并例如结合报错信息,将错误sql语句序列与正确的sql语句进行比对,并相应得到标签(tag)和插入序列(ins seq)两种输出。其中,标签例如可以包括[keep]和[delete]两种标签,分别表示在输出的语句序列中的对应位置上的sql token应被保留或者应被删除;而插入序列则可以包括待插入的sql token序列和特殊的序列结束符[eos],当在输出的语句序列中的对应位置上的token前需要插入字段时,适用该待插入的sql token序列,而当在该输出语句序列中的对应位置上无需插入时,则适用该序列结束符[eos];在图5所示的示例中,例如所输出的标签指示与错误sql语句序列中第4个token对应的标签为[delete],其余token对应的标签为[keep],则表示在经过纠错的sql语句序列中应删除第4个token并且保留其余的token;以及所输出的插入序列指示在错误sql语句序列中第5个token前待插入token x和token y,其余token对应于[eos],则表示在经过纠错的sql语句序列中,在第5个token前应包括token x和token y,而其余的token位置不插入字段。
[0098]
(3)在s520,可以基于纠错模型所输出的标签和插入序列对错误sql语句序列进行纠错处理,例如在图5所示的示例中,对第4个token进行删除并且在第5个token前插入token x和token y,其余的token的位置保持不变,由此得到经过纠错的sql语句序列。可以对纠错模型输入另一错误的sql语句序列,并重复上述步骤,直至达到预期的训练效果为止。
[0099]
通过上述示例,将复杂的长序列生成问题转化为了一个token分类问题和若干个短序列生成问题,从而实现了能够以简化的纠错手段(即,保留、删除、插入)对错误的sql编程语句自动进行纠错处理,进而为用户提供了高效且准确的纠错辅助手段。
[0100]
在步骤s160中,通过经训练的所述纠错模型对用户输入的错误的编程语句进行纠错。
[0101]
在以上文所述的方式对纠错模型完成训练后,则可以将经训练的纠错模型用作为sql编程语句纠错器,对用户后续输入的错误的编程语句自动完成纠错并输入经过纠错后的sql语句序列。
[0102]
应当注意,尽管在附图中以特定顺序描述了本公开中方法的各个步骤,但是,这并
非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
[0103]
进一步的,本示例实施方式中,还提供了一种编程语句纠错装置,参考图6所示,该编程语句纠错装置600可以包括查询模块610、采集模块620、预训练模块630以及纠错模块640,其中:
[0104]
查询模块610可以用于对用户输入的编程语句进行查询,并确定所述编程语句是否正确;
[0105]
采集模块620可以用于当确定所述编程语句正确时,将所述编程语句采集至预训练样本集中;以及当确定所述编程语句错误时,将所述编程语句以及与所述编程语句对应的正确的编程语句采集至纠错样本集中;
[0106]
预训练模块630可以用于建立预训练模型,并基于所述预训练样本集对所述预训练模型进行训练;以及
[0107]
纠错模块640可以用于建立纠错模型,并基于所述纠错样本集和经训练的所述预训练模型对所述纠错模型进行训练,其中,经训练的所述纠错模型用于对用户输入的错误的编程语句进行纠错。
[0108]
在本公开的一种示例性实施例中,采集模块620还可以用于:当确定所述编程语句正确时,还将所述编程语句的元信息采集至所述预训练样本集中;以及当确定所述编程语句错误时,还将所述编程语句的报错信息和元信息采集至所述纠错样本集中。
[0109]
在本公开的一种示例性实施例中,采集模块620可以用于:确定所述编程语句与前一编程语句的相似度,并确定所述相似度是否小于预设的阈值;当所述相似度大于或等于所述预设的阈值时,将所述编程语句采集至预训练样本集中。
[0110]
在本公开的一种示例性实施例中,采集模块620还可以用于:当所述相似度小于所述预设的阈值时,确定所述前一编程语句为正确的编程语句或错误的编程语句;当所述前一编程语句为错误的编程语句时,将所述编程语句采集至预训练样本集中,并且还将所述编程语句采集至所述纠错样本集中。
[0111]
在本公开的一种示例性实施例中,所述装置还可以包括独热编码模块,该独热编码模块可以用于:对所述编程语句、所述报错信息或所述元信息进行分词处理,得到多个token;对所述多个token进行分类处理,得到属于保留关键词类别的多个token和属于自定义变量类别的多个token;将编程语句、所述报错信息或所述元信息的多个token转换为独热编码,其中,将属于保留关键词类别的多个token转换为预定的多个独热编码,将属于自定义变量类别的多个token转换为对应的独热编码段中的各相应的独热编码。
[0112]
在本公开的一种示例性实施例中,预训练模块630可以用于:对所述编程语言的属于自定义变量类别的多个token中的至少一个token进行掩码处理,并使所述预训练模型对经掩码处理的所述至少一个token进行还原。
[0113]
在本公开的一种示例性实施例中,所述至少一个token为彼此相邻的多个token。
[0114]
在本公开的一种示例性实施例中,预训练模块630还可以用于通过所述预训练样本集对所述预训练模型输入正确的编程语句的元信息;纠错模块640可以用于:通过所述纠错样本集对所述纠错模型输入所述错误的编程语句以及所述错误的编程语句的报错信息
和元信息;基于经训练的所述预训练模型以及所述错误的编程语句的报错信息和元信息,使所述纠错模型对所述错误的编程语句进行纠错处理,其中,所述纠错处理包括对所述错误的编程语句的token进行保留或删除,或者在所述错误的编程语句中插入token。
[0115]
上述编程语句纠错装置中各模块或单元的具体细节已经在对应的编程语句纠错方法中进行了详细的描述,因此此处不再赘述。
[0116]
图7示出了适于用来实现本公开实施例的电子设备的计算机系统的结构示意图。
[0117]
需要说明的是,图7示出的电子设备的计算机系统700仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
[0118]
如图7所示,计算机系统700包括中央处理单元(cpu)701,其可以根据存储在只读存储器(rom)702中的程序或者从存储部分708加载到随机访问存储器(ram)703中的程序而执行各种适当的动作和处理。在ram 703中,还存储有系统操作所需的各种程序和数据。cpu 701、rom 702以及ram 703通过总线704彼此相连。输入/输出(i/o)接口705也连接至总线704。
[0119]
以下部件连接至i/o接口705:包括键盘、鼠标等的输入部分706;包括诸如阴极射线管(crt)显示器、液晶显示器(lcd)等以及扬声器等的输出部分707;包括硬盘等的存储部分708;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分709。通信部分709经由诸如因特网的网络执行通信处理。驱动器710也根据需要连接至i/o接口705。可拆卸介质711,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器710上,以便于从其上读出的计算机程序根据需要被安装入存储部分708。
[0120]
特别地,根据本公开的实施例,下文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分709从网络上被下载和安装,和/或从可拆卸介质711被安装。在该计算机程序被中央处理单元(cpu)701执行时,执行本技术的方法和装置中限定的各种功能。
[0121]
作为另一方面,本技术还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该电子设备执行时,使得该电子设备实现如上述实施例中所述的方法。
[0122]
需要说明的是,本公开所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd

rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限
于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、rf等等,或者上述的任意合适的组合。
[0123]
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0124]
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
再多了解一些

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

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

相关文献

  • 日榜
  • 周榜
  • 月榜