来源:机器之心
本文约1600字,建议阅读5分钟
本文介绍了官方的 codeLlama开源代码。
GPT-4:在代码生成这块,你们依然是「弟弟」。
近日,Meta 的开源 Llama 模型家族迎来了一位新成员——专攻代码生成的基础模型 Code Llama。
作为 Llama 2 的代码专用版本,Code Llama 基于特定的代码数据集在其上进一步微调训练而成。
Meta 表示,Code Llama 的开源协议与 Llama 2 一样,免费用于研究以及商用目的。
相关论文《Code Llama: Open Foundation Models for Code》已经公布,足足有 47 页,作者有 25 位。
论文地址:https://ai.meta.com/research/publications/code-llama-open-foundation-models-for-code/
GitHub 地址:https://github.com/facebookresearch/codellama
Code Llama 系列模型有三个版本,参数量分别为 7B、13B 和 34B。并且支持多种编程语言,包括 Python、C++、Java、PHP、Typescript (Javascript)、C# 和 Bash。
Code Llama 稳定支持了最高 10 万 token 的上下文生成。下图 2 为 Code Llama 的微调流程。
就其效果来说,Code Llama 的不同版本在 HumanEval 和 MBPP 数据集上的一次生成通过率(pass@1)都可以超越 GPT-3.5。
另外,Code Llama 的「Unnatural」34B 版本在 HumanEval 数据集上的 pass@1 接近了 GPT-4(62.2% vs 67.0%)。Meta 没有发布这个版本,但通过一小部分高质量编码数据的训练实现了明显的效果改进。
这个特殊版本引起了很多人的注意,其中就有特斯拉前 AI 总监、回归 OpenAI 的 Andrej Karpathy。
文中虽然提到它是「在 15000 个 unnatural 指令上微调的 Code Llama-Python 34B 版本」,但 Karpathy 仍然对这个「神秘的名称、模糊的描述、碾压其他的保密模型」感到很好奇。
Code Llama 如何工作
Code Llama 编码能力非常强,它可以根据代码和自然语言提示生成代码(例如用户输入提示「帮我写一个输出斐波那契序列的函数。」) 它还可帮助用户进行代码补全和调试代码。
三个参数版本的 Code Llama 模型都使用了 500B 的代码 tokens 和代码相关数据进行训练。7B 和 13B 基础和指令模型也经过了 FIM(fill-in-the-middle)训练,从而允许将代码插入到现有代码中,这意味着它们可以支持开箱即用的代码补全等任务。
下表为 Code Llama 的训练数据集。
有了这三种模型,不同的服务和延迟要求都能得到满足。例如,7B 模型可以在单个 GPU 上运行;34B 模型能够返回最佳结果并提供更好的编码辅助,但就速度而言,较小的 7B 和 13B 模型速度更快,更适合低延迟任务,例如实时代码补全。
Code Llama 不仅提供了多达 100000 个上下文 token 的稳定生成,所有模型的训练 token 序列也高达 16000。
除了作为生成更长程序的先决条件外,拥有更长的输入序列也为 Code Llama 带来新的功能。例如,用户可以为模型提供来自他们代码库的更多上下文,以使生成的代码更相关。
值得一提的是,Meta 更进一步微调了 Code Llama 的两个附加变体:Code Llama - Python 和 Code Llama - Instruct。
Code Llama-Python 是 Code Llama 的一种变体,其在 Python 代码的 100B token 上进一步微调。下表为 Code Llama-Python 的训练数据集。
Code Llama - Instruct 是 Code Llama 的指令微调和对齐变体,能够更好地理解输入提示。Meta 建议在使用 Code Llama 进行代码生成时使用 Code Llama - Instruct 变体,因为 Code Llama - Instruct 已经过微调,可以用自然语言生成有用且安全的答案。
Meta 表示,他们不建议使用 Code Llama 或 Code Llama - Python 执行一般的自然语言任务,因为这两个模型都不是为遵循自然语言指令而设计的。Code Llama 专门用于特定于代码的任务,不适合作为其他任务的基础模型。
使用 Code Llama 模型时,用户必须遵守许可和使用政策。
Code Llama 性能如何
Meta 使用了 HumanEval 和 MBPP(Mostly Basic Python Programming)两个编码基准进行测试。其中,HumanEval 测试模型基于文档字符串(docstrings)完成代码的能力,MBPP 测试模型基于描述编写代码的能力。
结果表明,Code Llama 的性能优于开源、特定于代码任务的 LLM,并且优于自家 Llama 2。例如,Code Llama 34B 在 HumanEval 上得分为 53.7%,在 MBPP 上得分为 56.2%,与其他最先进的开源解决方案相比是最好的,与 ChatGPT 相当。
不过,Code Llama 也存在风险,Meta 表示构建负责任地 AI 模型至关重要,他们在发布 Code Llama 之前采取了许多安全措施。作为红队测试工作的一部分,Meta 对 Code Llama 生成恶意代码的风险进行了定量评估。他们创建了一些提示,以试图让模型生成恶意代码,并将 Code Llama 对这些提示的响应与 ChatGPT (GPT3.5 Turbo) 进行比较。结果发现,Code Llama 的回答更安全。
由此看来,编码能力不是特别强的 Llama 2,这个坑已被 Code Llama 填上了。Meta 希望 Code Llama 的出现能够激励其他研究者基于 Llama 2 为研究和商业产品创建新的创新工具。
参考链接:
https://ai.meta.com/blog/code-llama-large-language-model-coding/
编辑:王菁
校对:林亦霖