标题:Rethinking Repetition Problems of LLMs in Code Generation 随着神经网络语言模型的兴起,代码生成性能得到了显著提升。然而,生成过程中重复出现的问题仍然存在。此前的研究主要集中在内容重复上,但这只是代码生成中更广泛的重复问题的一小部分。更普遍和更具挑战性的问题是结构性重复。在结构性重复中,重复的代码以各种模式出现,但具有固定的结构,这可以内在的反映在语法中。本文正式定义了结构性重复,并提出了一种名为RPG(Repetition Penalization based on Grammar,基于语法的重复惩罚)的高效解码方法,以减轻LLM代码生成中的重复问题。

为了解决结构性重复问题,研究者提出了RPG方法。RPG的核心思想是利用代码的语法结构来识别和惩罚重复模式。具体来说,RPG包含以下几个关键步骤: 1. 语法规则归约:利用下推自动机(PDA)将生成的代码归约为其底层语法规则。由于不同的代码片段具有相同的结构模式,因此可以由相同的语法规则表示,RPG 使用基于语法规则构建的下推自动机来检测生成过程中的重复问题。 2. 重复检测:使用后缀数组和最长公共前缀(LCP)数组来高效地检测归约后的语法规则序列中的重复模式。 3. 重复惩罚:通过动态调整token的权重来降低重复模式的生成概率。该权重基于重复模式的频率和新近度进行调整,从而鼓励模型生成更多样化的代码。

RPG 通过策略性地降低导致重复的关键token的可能性来减轻代码生成中的重复。 研究者构建了一个新的数据集CodeRepetEval,用于全面评估代码生成中重复问题的缓解方法。CodeRepetEval 包含三种场景:人工合成、代码生成基准测试和真实世界的存储库。

实验结果表明,在CodeRepetEval数据集以及HumanEval和MBPP基准测试中,RPG的性能明显优于表现最佳的基线,有效地减少了重复并提高了生成的代码的质量。RPG 在各个场景中都显著优于其他基线,尤其是在结束句子生成百分比(EGP)和编译器正确性百分比(CCP)等指标上。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐