UniCoder: 通过通用编码扩展代码大规模语言模型

💡 原文中文,约1800字,阅读约需5分钟。
📝

内容提要

本文介绍了多种新型跨模态和代码处理模型,如UniCode、UniXcoder和KnowCoder。这些模型通过统一的预训练方法和多模态学习,显著提升了视觉数据处理、代码生成和语言转换的性能,尤其在代码相关任务上取得了重要进展。

🔎

延伸解读

统一码书与多模态标记化

UniCode 的核心创新在于学习统一的码书,将视觉、文本和其他信号标记化为紧凑的表示。这种方法通过语言驱动的迭代训练和图像解压缩预训练任务,使模型能够解释压缩的视觉数据并生成高质量图像。尽管训练参数和数据较少,UniCode 在视觉重建和生成方面表现出潜力,并在 VQA 基准测试中达到与领先 MLLM 相当的性能。这为多模态大模型的高效训练提供了新思路。

跨模态代码表示学习

UniXcoder 利用前缀适配器控制模型行为,并引入语法树和代码注释等跨模态内容增强代码表示。通过多模态对比学习和跨模态生成任务,模型在编程语言间对齐表示,在五个代码相关任务上取得最先进结果。这表明结合代码的结构化信息(如 AST)和自然语言注释,能有效提升代码理解与生成的性能。

编译器中间表示提升多语言能力

研究探讨了利用编译器中间表示改进代码语言模型的多语言能力,并构建了并行数据集 SLTrans。通过对不同规模的代码语言模型进行连续因果语言建模训练,在多种代码生成任务和度量标准上实现了显著且一致的提升。这提示我们,中间表示作为源语言与目标语言之间的桥梁,有助于缓解跨语言转换中的语义差异问题。

代码转换的验证与修复

UniTrans 是一个统一代码转换框架,针对 LLM 在代码转换中因理解不足、缺少 I/O 类型指令和忽略源目标差异而导致的错误,通过生成测试用例、自动增强转换并验证执行过程来修复错误。在 Python、Java 和 C++ 之间的六个转换数据集上,三个近期 LLM 经 UniTrans 改进后性能大幅提升。这表明结合动态验证能有效提高代码转换的可靠性。

❓

Q&A

UniCode 是什么?

UniCode 是一种新方法,通过学习统一的码书,有效处理视觉、文本和其他信号。

UniXcoder 如何增强代码表示?

UniXcoder 使用前缀适配器和交叉模态内容,如语法树和代码注释,来增强代码表示。

KnowCoder 的主要功能是什么?

KnowCoder 是一个大型语言模型,用于通用信息抽取,旨在开发统一的模式表示方法。

UniTrans 是如何修复代码转换错误的?

UniTrans 通过生成测试用例、自动增强转换并验证正确性来修复代码转换错误。

CodeT5 + 在代码生成任务中表现如何?

CodeT5 + 在不同的代码相关基准测试中取得了最先进的结果,尤其是在代码生成任务中表现突出。

Codeditor 有什么创新之处?

Codeditor 是第一个能够将代码从一种编程语言翻译成另一种的 LLM,超越了现有方法。

🏷️

标签

➡️

继续阅读