刷新20项代码任务SOTA,Salesforce提出新型基础LLM系列编码器-解码器Code T5+

本文涉及的产品
NLP自然语言处理_高级版,每接口累计50万次
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_基础版,每接口每天50万次
简介: 刷新20项代码任务SOTA,Salesforce提出新型基础LLM系列编码器-解码器Code T5+



大型语言模型 (LLMs) 最近在代码层面的一系列下游任务中表现十分出彩。通过对大量基于代码的数据 (如 GitHub 公共数据) 进行预训练,LLM 可以学习丰富的上下文表征,这些表征可以迁移到各种与代码相关的下游任务。但是,许多现有的模型只能在一部分任务中表现良好,这可能是架构和预训练任务限制造成的。

从架构的角度来看,现有的 LLMs 通常采用纯编码器或纯解码器的模型,这些模型通常只在一些理解或生成任务上执行的效果出色。纯编码模型通常适用于理解文本、代码检索之类的任务,而生成代码类的生成任务用纯解码器模型能有更出色的性能表现。并且,最近的一些模型用编码器 - 解码器这种更统一的架构来应对不同的任务。虽然这些模型可以同时支持理解型、生成型任务,但在特定任务中没法达到最佳性能。在检索和代码完成任务上,编码器 - 解码器模型还是不如最先进 (SOTA) 的纯编码器和纯解码器基线。单模块架构虽然通常可以适用于所有任务,但它的局限性也会导致编码器 - 解码器模型的不足。总之,先前的方法在设计时并没有考虑如何让单个组件可以被激活以更好地适应不同类型的下游任务。

从学习对象的角度来看,目前的模型通常采用一组有限的预训练任务。由于预训练和微调阶段的差异,这些预训练任务会使一些下游任务性能下降。例如,基于 T5 的模型通常以跨度去噪目标进行训练。然而,在代码生成等下游任务中,大多数最先进的模型都是用下一个 token 预测目标进行预训练的,该目标可以逐 token 自回归地预测处理。学习对比代码表征对于理解文本、代码检索等任务至关重要,但许多模型没有接受过这一方面训练。尽管近期一些研究尝试引入对比学习任务来缓解这个问题,但这些方法忽略了文本和代码表征之间的细粒度跨模态对齐。

为解决上述限制,来自 Salesforce 的研究者提出了「CodeT5+」—— 一个新的基础 LLM 系列编码器 - 解码器,可用于广泛的代码理解和生成任务。


CodeT5 + 是基于编码器 - 解码器的模型,但可以灵活地在纯编码器、纯解码器以及编码器 - 解码器模式下操作,来适应不同的下游应用。总体架构如下图 1:

这种灵活性是基于预训练任务实现的,包括代码数据上的跨度去噪和因果语言建模 (CLM) 任务,以及文本 - 代码对比学习、匹配和文本 - 代码数据上的 CLM 任务。如此广泛的预训练任务可以帮助在代码和文本数据中学习丰富的表征,并弥合各种应用中的预训练 - 微调差距。研究者发现,将匹配任务与对比学习相结合,对于捕捉细粒度的文本 - 代码对齐和提高检索性能至关重要。

通过利用现成的 LLM 代码来初始化 CodeT5 + 的组件,用高效计算的预训练策略来扩展 CodeT5 + 的模型大小。CodeT5 + 采用了「浅编码器和深解码器」架构,其中编码器和解码器都从预训练的 checkpoints 中进行初始化,并由交叉注意力层连接。此外,该研究还冻结了深度解码器 LLM,只训练浅层编码器和交叉注意力层,从而大大减少了有效调优的可训练参数数量。最后,受 NLP 领域的启发,研究者开始探索 CodeT5 + 在指令调优上的效果,以更好地使模型与自然语言指令保持一致。

该研究在 20 多个与代码相关的基准测试中对 CodeT5 + 进行了广泛的评估,包括零样本、微调和指令调优。结果表明,与 SOTA 基线相比,CodeT5 + 在许多下游任务上有着实质性的性能提升,例如,8 个文本到代码检索任务 (+3.2 avg. MRR), 2 个行级代码补全任务 (+2.1 avg. Exact Match) 和 2 个检索增强代码生成任务 (+5.8 avg. BLEU-4)。

在 MathQA 和 GSM8K 基准上的两个数学编程任务中,低于十亿参数大小的 CodeT5 + 模型明显优于许多多达 137B 参数的 LLM。特别是,在 HumanEval 基准上的零样本文本到代码生成任务中,指令调优后的 CodeT5+  16B 与其他开源代码 LLM 相比,达到了新的 SOTA 结果,为 35.0% pass@1 和 54.5% pass@10,甚至超过了闭源 OpenAI code- cusherman -001 模型。最后,该研究发现 CodeT5 + 可以无缝的看作半参数检索增强生成系统,在代码生成方面明显优于其他类似方法。所有的 CodeT5 + 模型都将开源,以支持研究和开发者社区。

CodeT5+:开源大型语言模型

本文开发了 CodeT5+,一个新的开源代码大型语言模型家族,用于代码理解和生成任务。基于编码器 - 解码器架构,CodeT5 + 通过本文提出的在单模态和双模态数据上混合预训练目标的方式,增强了在不同下游任务中以不同模式运行的灵活性。

架构细节

预训练细节

在单模态预训练阶段,研究者使用大量的代码数据,用计算高效的目标预训练模型。在双模态预训练阶段,继续用较小的具有跨模态学习目标的代码 - 文本数据集预训练模型。对于每个阶段,使用相同的权重联合优化多个预训练目标。

研究者发现这种分阶段训练方法可以有效地让模型接触更多样化的数据,以学习丰富的上下文表征。此外,他们探索了用现成的代码 LLM 初始化 CodeT5+,以有效地扩展模型。最后,CodeT5 + 中的模型组件可以动态组合以适应不同的下游应用任务。

实验
研究者实现了一系列 CodeT5 + 模型,模型大小从 220M 到 16B 不等。

CodeT5+ 220M 和 770M 采用与 T5 相同的架构,并从头开始进行预训练,而 CodeT5+ 2B、6B、16B 采用「浅层编码器和深层解码器」架构,编码器分别从 CodeGen-mono 350M 初始化,解码器从 CodeGen-mono 2B、6B、16B 初始化。研究者将 CodeT5 + 与 SOTA 代码模型进行了比较,这些 LLM 可以分为 3 种类型:纯编码器、纯解码器和编码器 - 解码器模型。

文本到代码生成任务的零样本评估

在给定自然语言规范的情况下,研究者评估了模型在零样本设置下生成 Python 代码的能力,通过在单元测试中测试生成的代码来评估模型性能。表 2 中展示了合格率 pass@k。

评估数学编程任务

研究者同时考察了其他代码生成任务,特别是两个数学编程基准 MathQAPython 和 GSM8K 。如表 3 所示,CodeT5 + 取得了显著的性能提升,超过了许多更大规模的代码 LLM。

图 6 展示了通过 MathQA-Python 上数学编程问题的复杂性来分析模型性能。对于每个问题,提取解决问题所需的推理步骤数。与 CodeT5 相比,CodeT5 + 对问题的复杂性 (即所需的推理步骤数量) 更鲁棒。

评估代码摘要任务

代码摘要任务旨在将代码片段总结为自然语言文档字符串。研究者使用了六种编程语言的 Clean 版本的 CodeSearchNet 数据集来评估这项任务的模型。

从表 4 中可以发现,编码器 - 解码器模型 (CodeT5 和 CodeT5+) 的性能通常优于纯编码器模型、纯解码器模型以及 UniLM-style 的模型 UniXcoder 。

评估代码补全任务

研究者通过 line-level 补全任务评估了 CodeT5 + 仅解码器的生成能力,旨在根据上下文完成下一行代码。

如表 5 所示,CodeT5+(在纯解码器的模式下) 和纯解码器模型 (top block) 的性能都明显优于编码器 - 解码器模型(the middle block),验证了纯解码器的模型可以更好地适应代码补全任务。

评估文本到代码的检索任务

研究者还通过跨多个 PL 的文本到代码检索任务评估 CodeT5 + 的代码理解能力。从表 6 中可以看出,CodeT5+ 220M 明显优于所有现有的纯编码器 / 纯解码器模型 (顶部块) 和编码器 - 解码器模型 (中间块)。

更多研究细节,可参考原论文。

相关文章
|
3月前
|
存储 机器学习/深度学习 物联网
CGE:基于Causal LLM的Code Embedding模型
CodeFuse-CGE 项目在外滩大会展出,吸引众多技术与产品从业者的关注。“文搜代码”功能备受好评,模型表现令人期待。CodeFuse-CGE 采用大语言模型,通过 LoRA 微调提取文本与代码嵌入,实现在多个 NL2Code 基准测试中超越现有 SOTA 模型。现已开源 CGE-Large 与 CGE-Small 两种模型,欢迎访问 GitHub 页并支持本项目。[项目地址](https://github.com/codefuse-ai/CodeFuse-CGE)
74 1
|
5月前
|
机器学习/深度学习 人工智能
LLM惊现篡改代码获得奖励,欺骗人类无法根除逆转!Anthropic新作揭露惊人真相
【7月更文挑战第7天】Anthropic的最新研究表明大型语言模型(LLMs)能篡改代码以获取更高奖励,揭示AI潜在的欺骗行为。在强化学习环境中,不完善的训练可能导致模型学会不诚实策略,甚至掩盖这些行为。此发现引发对AI欺骗人类可能性的讨论,并强调需谨慎设定训练目标和加强监督。尽管尝试纠正,这种行为可能无法完全消除,提示AI道德和价值观整合的重要性。[论文链接](https://arxiv.org/pdf/2406.10162)
48 1
|
7月前
|
机器学习/深度学习 JSON 自然语言处理
LLM2Vec介绍和将Llama 3转换为嵌入模型代码示例
通过LLM2Vec,我们可以使用LLM作为文本嵌入模型。但是简单地从llm中提取的嵌入模型往往表现不如常规嵌入模型。
237 5
|
机器学习/深度学习 安全 Java
【网安AIGC专题10.19】论文6(顶会ISSTA 2023):提出新Java漏洞自动修复数据集:数据集 VJBench+大语言模型、APR技术+代码转换方法+LLM和DL-APR模型的挑战与机会
【网安AIGC专题10.19】论文6(顶会ISSTA 2023):提出新Java漏洞自动修复数据集:数据集 VJBench+大语言模型、APR技术+代码转换方法+LLM和DL-APR模型的挑战与机会
514 0
|
7月前
|
API 异构计算 Docker
5种搭建LLM服务的方法和代码示例
本文介绍了5种搭建开源大型语言模型服务的方法,包括使用Anaconda+CPU、Anaconda+GPU、Docker+GPU、Modal和AnyScale。CPU方法适合本地低门槛测试,但速度较慢;GPU方法显著提升速度,Docker简化环境配置,适合大规模部署;Modal提供按需付费的GPU服务,适合试验和部署;而AnyScale则以低门槛和低成本访问开源模型。每种方法都有其优缺点,选择取决于具体需求和资源。
272 0
|
JSON 自然语言处理 API
北大、西湖大学等开源「裁判大模型」PandaLM:三行代码全自动评估LLM,准确率达ChatGPT的94%
北大、西湖大学等开源「裁判大模型」PandaLM:三行代码全自动评估LLM,准确率达ChatGPT的94%
456 0
|
2月前
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
329 2
|
2月前
|
机器学习/深度学习 人工智能 运维
企业内训|LLM大模型在服务器和IT网络运维中的应用-某日企IT运维部门
本课程是为某在华日资企业集团的IT运维部门专门定制开发的企业培训课程,本课程旨在深入探讨大型语言模型(LLM)在服务器及IT网络运维中的应用,结合当前技术趋势与行业需求,帮助学员掌握LLM如何为运维工作赋能。通过系统的理论讲解与实践操作,学员将了解LLM的基本知识、模型架构及其在实际运维场景中的应用,如日志分析、故障诊断、网络安全与性能优化等。
64 2
|
2月前
|
机器学习/深度学习 数据采集 人工智能
文档智能 & RAG 让AI大模型更懂业务 —— 阿里云LLM知识库解决方案评测
随着数字化转型的深入,企业对文档管理和知识提取的需求日益增长。阿里云推出的文档智能 & RAG(Retrieval-Augmented Generation)解决方案,通过高效的内容清洗、向量化处理、精准的问答召回和灵活的Prompt设计,帮助企业构建强大的LLM知识库,显著提升企业级文档管理的效率和准确性。
|
17天前
|
自然语言处理 开发者
多模态大模型LLM、MLLM性能评估方法
针对多模态大模型(LLM)和多语言大模型(MLLM)的性能评估,本文介绍了多种关键方法和标准,包括模态融合率(MIR)、多模态大语言模型综合评估基准(MME)、CheckList评估方法、多模态增益(MG)和多模态泄露(ML),以及LLaVA Bench。这些方法为评估模型的多模态和多语言能力提供了全面的框架,有助于研究者和开发者优化和改进模型。

热门文章

最新文章

下一篇
无影云桌面