一种代码大模型语法约束解码方法及系统
本发明属于结构化文本生成,具体涉及一种代码大模型语法约束解码方法及系统。
背景技术:
1、在代码生成、sql 查询生成、领域专用语言生成、配置脚本生成和工具调用代码生成等场景中,大模型的输出通常需要作为机器可读内容被下游编译器、解释器、数据库系统或工具执行器解析和执行,因此不仅需要满足用户意图,还需要符合预定语法和格式规则。为此,语法约束解码(gcd)技术被应用于模型生成过程。其基本思想是将结构化约束表示为形式化语法,在模型逐步生成词元(token)时,依据已生成内容和目标语法判断候选词元是否合法,并对非法词元进行掩码处理,阻止输出不符合语法规则的内容。
2、实际应用中,语法约束解码既要保证输出符合目标语法,又要避免对模型原始生成分布造成不必要干扰。若原本不满足语法要求的词元被错误允许,可能导致生成结果违反目标语法;若原本满足语法要求的词元被错误排除,则可能使模型偏离原有的合法生成路径。前者可称为错误接受,后者可称为错误拒绝。因此,准确区分当前生成位置下合法与非法的词元,是语法约束解码可靠性的基础。
3、上述问题与大模型词元边界和目标语法终结符边界之间的不一致密切相关。代码大模型按照其自身词表进行分词,以词元为基本生成单位,而形式化语法通常以终结符作为语法分析的基本符号,两者的划分边界并不天然一致。一个语法终结符可能由多个模型词元共同构成,一个模型词元也可能同时包含一个终结符的结束部分和另一终结符的开始部分。例如,在程序代码中,标识符、字符串等可能被拆分为多个词元,而括号、运算符、分隔符等相邻语法成分也可能被组合在同一词元中。因此,在语法约束解码过程中,需要将模型词元对应的字节序列解释为目标语法中的终结符信息,才能据此判断词元是否满足目标语法约束。
4、当词元边界与终结符边界不一致时,且目标语法中存在具有公共前缀或相互重叠的终结符匹配规则时,同一词元的字节序列在当前生成上下文下可能对应不同的终结符解释。例如,某一字节前缀已经能够形成一个完整的较短终结符,同时继续读取后续字节又可能形成另一个更长的终结符。在这种情况下,对终结符匹配结束位置的不同选择可能进一步影响词元的合法性判断。
5、针对边界不一致的问题,现有相关方法大致可分为两类。一类方法采用较为确定的终结符匹配策略,例如按照贪婪最长匹配原则为词元选择单一终结符解释,该类方法实现简单、状态数量较少,但在终结符存在重叠时,可能遗漏符合语法要求的其他解释,使合法词元被错误排除,导致错误拒绝。另一类方法通过更细粒度的字节级处理,或在潜在终结符边界保留多种解释,以提高对边界不一致情况的适应能力。但在缺少有效筛选机制的情况下,此类方法容易引入不符合最长匹配规则或终结符优先级规则的终结符解释,使非法词元被错误保留,导致错误接受。同时,保留多种解释还会增加状态维护和计算开销。
6、除合法性判断精度外,语法约束解码还面临在线计算效率问题。在一种直接实现方式中,可以在每一解码步遍历模型词表中的词元,并分别根据当前语法状态判断各词元是否合法,再据此形成对模型输出范围的约束。由于现代大语言模型的词表规模通常较大,若对大量词元分别重复执行合法性检验,会带来较高的在线计算开销。
7、为提高约束解码效率,相关方法采用词元分区、自动机、离线预计算、状态共享等方式减少冗余计算。然而,现有方法通常难以同时兼顾终结符解释的准确性与在线处理效率,在降低计算开销的同时仍可能引入合法性判断误差。
8、因此,现有技术仍需要解决以下问题:在大模型词元与目标语法终结符边界不一致、且终结符可能存在重叠的情况下,如何准确保留能够满足后续语法要求的终结符解释,并排除不符合语法规则的解释,以提高词元合法性判断的准确性;同时,如何降低在线计算开销,提高语法约束解码效率。
技术实现思路
1、本发明针对代码大模型语法约束解码过程中,由词元边界与目标语法终结符边界不一致以及终结符匹配规则重叠所引起的词元合法性判断不准确,以及在线约束解码计算开销较高等问题,提供一种代码大模型语法约束解码方法及系统,其通过动态保留可能的终结符解释并结合词法、句法约束进行筛选,减少合法词元被错误拒绝以及非法词元被错误接受的情况,并抑制不必要的分支扩张,还可进一步借助解析状态共享、离线词法预计算、公共终结符前缀解析复用,削减在线解析开销,提升语法约束解码的词元掩码构造效率。
2、为实现上述目的,本发明的技术方案包括以下内容。
3、一种代码大模型语法约束解码方法,所述方法包括:
4、将初始提示语文本输入代码大模型,形成初始模型生成上下文,并根据目标语法初始化约束解析状态,得到初始解析分支集合;
5、代码大模型根据当前模型生成上下文执行前向计算,得到当前解码步的初始候选词元;
6、基于当前解析分支集合对初始候选词元执行合法性检验,并获取后继解析分支集合;其中,在至少一个初始候选词元被判定为合法词元的情况下,将该初始候选词元确定为当前解码步的输出词元,且保留该后继解析分支集合;在所有初始候选词元都被判定为非法词元的情况下,基于当前解析分支集合确定当前解码步允许生成的合法词元集合,重新确定当前解码步的输出词元,并获取对应的后继解析分支集合;
7、以所述后继解析分支集合更新当前解析分支集合,并基于输出词元扩展当前模型生成上下文之后,基于扩展结果重新执行所述代码大模型根据当前模型生成上下文执行前向计算的步骤,直至达到预设的正常结束条件,输出符合目标语法约束的代码。
8、进一步地,所述初始解析分支集合包含一个初始解析分支,所述初始解析分支以初始词法状态作为词法驻留状态,并将句法解析状态初始化为目标语法对应的初始句法解析状态;其中,所述词法驻留状态用于表示词法自动机对当前已生成内容进行扫描后所处的状态,所述句法解析状态用于表示当前已形成终结符序列对应的句法解析进度。
9、进一步地,在至少一个初始候选词元被判定为合法词元的情况下,将该初始候选词元确定为当前解码步的输出词元,且保留该后继解析分支集合,包括:
10、对每一初始候选词元执行词法扫描,获得该初始候选词元对应的词法结果;
11、对词法结果中的终结符序列和后继词法驻留状态进行句法检验,若检验通过,则得到对应的后继句法解析状态;
12、将所述词法结果的后继词法驻留状态与通过句法检验的后继句法解析状态组合,得到对应的后继解析分支,并将所述后继解析分支加入后继解析分支集合;
13、若后继解析分支集合中至少包含一个后继解析分支,则将该初始候选词元判定为合法词元。
14、进一步地,对每一初始候选词元执行词法扫描,获得该初始候选词元对应的词法结果,包括:
15、对于当前解析分支集合中的每一当前解析分支,基于词法驻留状态建立对应的词法分支;
16、执行词法分支的常规扫描;其中,所述常规扫描是词法分支按照最长匹配基础规则逐字节读取初始候选词元,并在当前待读字节不存在状态转移且当前词法状态为接受状态时,按照预设终结符优先级确定当前词法状态记录的输出终结符:若词法分支已输出的终结符序列非空,且该终结符序列中的最后一个非忽略终结符与该当前词法状态记录的输出终结符不满足终结符邻接关系,则舍弃该词法分支;否则,将当前词法状态记录的输出终结符追加至该词法分支已输出的终结符序列;其中,在当前待读字节不存在状态转移且当前词法状态为非接受状态时,舍弃该词法分支;
17、在常规扫描的基础上,在满足派生条件时,由当前词法分支派生形成最长匹配词法分支和提前匹配词法分支,且将最长匹配词法分支和该提前匹配词法分支作为词法分支,并以常规扫描方式继续扫描初始候选词元的剩余字节;其中,所述派生条件是当前词法状态为接受状态、读取下一字节存在状态转移且转移后的下一词法状态为非接受状态;所述最长匹配词法分支消费所述下一字节并转移至所述下一词法状态;所述提前匹配词法分支输出当前词法状态记录的输出终结符,将词法状态重置为初始状态,并从所述下一字节开始识别后续终结符;
18、在初始候选词元的字节序列扫描结束后,由完成扫描且未被舍弃的各词法分支分别形成词法结果;所述词法结果包括相应词法分支已输出的终结符序列和扫描结束后的后继词法驻留状态。
19、进一步地,对词法结果中的终结符序列和后继词法驻留状态进行句法检验,若检验通过,则得到对应的后继句法解析状态,包括:
20、以当前解析分支的句法解析状态对应的图结构栈栈头节点集合作为句法解析起点,依次处理所述词法结果中的终结符序列,并根据句法分析表获得并执行有效的句法解析动作:若根据句法分析表无法获得有效的句法解析动作,则舍弃对应的词法结果;否则,在完成所述终结符序列的句法解析后,得到该词法结果对应的后继句法解析状态;其中,所述句法分析表是根据目标语法中的句法规则构建;
21、计算后继句法解析状态的下一步可接受终结符集合,判断该可接受终结符集合与词法结果中的后继词法驻留状态对应的活跃终结符集合是否存在交集:若交集为空,则舍弃该后继句法解析状态和对应的词法结果;若交集不为空,则保留该后继句法解析状态和对应的词法结果。
22、进一步地,代码大模型根据当前模型生成上下文执行前向计算,得到当前解码步的初始候选词元,包括:
23、根据当前模型生成上下文执行前向计算,得到模型词表中各词元对应的 logits向量;
24、基于所述 logits 向量按照预设采样策略采样得到当前解码步的初始候选词元;其中,所述预设采样策略可包括温度缩放策略、top-k策略或top-p策略。
25、进一步地,基于当前解析分支集合确定当前解码步允许生成的合法词元集合,重新确定当前解码步的输出词元,并获取对应的后继解析分支集合,包括:
26、对于当前解析分支集合中的任一解析分支,以该解析分支的词法驻留状态查询词法查找表,获得该词法驻留状态对应的一组终结符序列以及各终结符序列所关联的一个或多个词元;其中,所述词法查找表为预计算生成的映射数据表,其键由起始词法驻留状态与词元共同构成,其值为采用该起始词法驻留状态作为解析分支的初始驻留状态、对该词元的完整字节序列执行前述带动态词法分支机制以及终结符邻接过滤的词法扫描后,所得到的全部有效词法结果集合;
27、将终结符序列组织为终结符字典树,使具有相同终结符前缀的多个终结符序列共享相同的字典树路径,并在各终结符序列对应的字典树节点记录与该终结符序列关联的词元;
28、以当前解析分支的句法解析状态作为起始状态,沿终结符字典树逐层输入终结符,并根据句法分析表执行相应的句法解析动作;其中,所述句法分析表是根据目标语法中的句法规则构建;当某一终结符序列对应的字典树节点能够通过句法解析时,将该字典树节点记录的词元加入当前解析分支对应的合法词元集合;
29、汇总各当前解析分支对应的合法词元集合,得到当前解码步的合法词元集合,并根据所述合法词元集合构造当前解码步的词元掩码;
30、将词元掩码作用于 logits 向量并重新采样,得到重新采样的输出词元;
31、基于当前解析分支集合对重新采样的输出词元执行合法性检验,并获取后继解析分支集合。
32、一种代码大模型语法约束解码系统,所述系统包括:
33、初始化模块,用于将初始提示语文本输入代码大模型,形成初始模型生成上下文,并根据目标语法初始化约束解析状态,得到初始解析分支集合;
34、前向计算模块,用于代码大模型根据当前模型生成上下文执行前向计算,得到当前解码步的初始候选词元;
35、代码生成模块,用于基于当前解析分支集合对初始候选词元执行合法性检验,并获取后继解析分支集合;其中,在至少一个初始候选词元被判定为合法词元的情况下,将该初始候选词元确定为当前解码步的输出词元,且保留该后继解析分支集合;在所有初始候选词元都被判定为非法词元的情况下,基于当前解析分支集合确定当前解码步允许生成的合法词元集合,重新确定当前解码步的输出词元,并获取对应的后继解析分支集合;以所述后继解析分支集合更新当前解析分支集合,并基于输出词元扩展当前模型生成上下文之后,基于扩展结果重新执行所述代码大模型根据当前模型生成上下文执行前向计算的步骤,直至达到预设的正常结束条件,输出符合目标语法约束的代码。
36、一种计算机设备,所述计算机设备包括:处理器以及存储有计算机程序指令的存储器;所述处理器执行所述计算机程序指令时实现上述任一项所述的代码大模型语法约束解码方法。
37、一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现上述任一项所述的代码大模型语法约束解码方法。
38、与现有技术相比,本发明至少具有以下有益效果。
39、(1)通过在满足条件的词法匹配位置同时保留最长匹配词法分支和提前匹配词法分支,使常规最长匹配可能遗漏的合法终结符解释得到保留,从而减少合法词元被错误拒绝的情况。
40、(2)通过对动态形成的多个终结符解释进行词法和句法筛选,并提前排除不满足终结符邻接关系的词法分支,减少非法词元被错误接受的情况,同时限制不必要的词法分支增长。
41、(3)在一些实施方式中,通过解析状态共享、离线词法预计算以及公共终结符前缀的解析复用,减少在线阶段的解析状态维护、重复词法扫描和重复句法解析开销,提高语法约束解码过程中词元掩码的构造效率。
版权声明:本站专利文献数据主要来源于国家知识产权局等公开渠道,由 技术新讯 进行整理汇编。页面设计及数据汇编的著作权归本站所有。全部内容仅供个人学习、科研评估与技术交流参考,严禁用于任何商业用途(包括但不限于直接生产制造、技术转让、倒卖数据等)。
免责条款:专利技术具有时效性,本站不对资料的绝对准确性、完整性和可实施性提供任何明示或暗示的担保。因参考本站内容造成的直接或间接损失,本站不承担相关法律责任。若您认为本站内容有侵权问题,请及时提供权属证明与我们联系,本站将在核实后依法处理。反馈意见:yyfuon@163.com