新的模型家族基于Llama 2的基础,以在不同的代码生成任务中达到最先进的性能。

我最近开始了一个以人工智能为重点的教育性新闻通讯,已经有超过16万订阅者了。TheSequence是一个无虚假(即没有炒作,没有新闻等)以机器学习为导向的新闻通讯,只需要5分钟阅读。目标是让您及时了解机器学习项目、研究论文和概念。请通过以下订阅来试试:
TheSequence | Jesus Rodriguez | Substack
机器学习、人工智能和数据发展的最佳信息来源…
thesequence.substack.com
编码已迅速成为大型语言模型(LLM)最活跃的行动领域之一。自OpenAI去年发布Codex(现在是GPT-4的一部分)以来,编码语言模型的创新水平令人叹为观止。在过去几个月中,我们看到了Salesforce、Hugging Face、DeepMind、亚马逊等公司发布的代码LLM。上周,Meta AI推出了Code Llama,这是一个基于最近发布的Llama 2的开源代码LLM。Code Llama的发布非常重要,因为Meta在开源基础模型运动中的影响。Meta AI开发了Code Llama,这是Llama 2的一个专门版本,通过对编码相关数据集的深度训练而产生。通过从以代码为中心的数据集中密集提取数据,Code Llama在增强其编码能力方面得到了发展,有效地增强了从Llama 2继承的功能。这个先进版本在代码生成和关于代码的自然语言表达方面表现出优势。无论输入是代码还是自然语言,比如“编写一个生成斐波那契数列的函数”的请求,Code Llama都能熟练地生成相关的代码和文字解释。此外,它还能熟练地帮助完成代码和调试工作,无缝支持Python、C++、Java、PHP、Typescript(Javascript)、C#和Bash等流行语言。
Code Llama内部
Code Llama的发布不仅包括一个模型,而是三种不同的变体,其参数大小分别为7B、13B和34B。每个模型都经过广泛的训练,涵盖了500B个代码和相关信息的令牌。值得注意的是,7B和13B的基础模型和指导模型都具备了填充中间(FIM)的能力,使它们能够无缝地将代码插入现有的代码结构中。这个特性使它们能够处理从一开始就涉及代码完成的任务。这三个模型针对不同的服务和延迟需求。例如,7B模型具有在单个GPU上运行的能力。而34B模型则以产生最佳结果和提升编码辅助能力而脱颖而出,较小的7B和13B版本在速度上表现出色,适用于低延迟任务,如实时代码完成。
Meta AI的创新进一步延伸到Code Llama的两个细微的改进:Code Llama — Python和Code Llama — Instruct。
- Code Llama — Python是一个专门的派生版本,经过精心研磨,涵盖了100B个Python代码的令牌。考虑到Python在代码生成基准和AI社区中的重要地位,这个专注的模型增加了实用性。
- Code Llama — Instruct通过指示性微调对Code Llama进行了对齐和改进。这种新颖的训练方法是将“自然语言指令”输入与预期输出配对。这种策略性方法增强了模型理解提示中人类期望的能力。对于涉及代码生成的任务,建议选择Code Llama — Instruct版本,因为它们经过了校准,可以产生有用和安全的自然语言响应。
在深入探索Code Llama的训练和微调过程中,有几个方面值得强调:1)数据集 Llama的训练基于一个精心策划的数据集,其中包含丰富的公开可用代码,提供了一个几乎没有重复代码的环境。该数据集在初始阶段包含了500B个标记,并从7B、13B和34B版本开始。另外,还从与代码领域相关的自然语言数据集中提取了额外的8%的样本数据。
2)代码填充 在代码填充领域,一个关键任务是在程序中预测缺失的部分,同时受到上下文环境的引导。实际应用包括在集成开发环境(IDE)中进行代码补全、类型推断,甚至生成代码中的文档,如文档字符串。Meta AI的填充模型遵循由Aghajanyan等人(2022年)和Fried等人(2023年)提出的因果屏蔽概念,并通过将训练序列的部分转移到结尾来进行训练,为自回归预测铺平道路。在这个过程中,多功能的7B和13B模型都经历了以填充为导向的训练,这与Bavarian等人(2022年)提出的策略相呼应。
3)长上下文微调:在基于Transformer的语言模型领域,处理大量序列的复杂性是一项艰巨的任务。关键挑战涉及到超出训练范围的序列长度的外推,以及注意力传递的二次复杂度,这使得对于有效训练而言,短到中等长度的输入更具优势。Meta AI提出了一种独特的解决方案,引入了长上下文微调(LCFT)的专用领域。LCFT采用包含16,384个标记的序列,相比Llama 2初始代码训练阶段中的4,096个标记,这是一个巨大的进步,使模型具备了扩展范围的能力。这种策略性转变发生在微调阶段,避免了训练成本不必要的升级。
4)指令微调:Code Llama的能力扩展到指令微调,体现在经过改进的Code Llama — Instruct模型中。这个版本利用Code Llama作为基础,经过塑造以适当地响应查询。将监督微调与大量的拒绝抽样示例相结合,产生了这种指导性的能力。
5)自我指导 在数据集领域,Meta AI进行了一次独特的旅程,策划了与代码相关任务相联系的实例。鉴于从人类注释者或通过人类反馈获取数据的资源密集性,特别强调自我指导。以专业开发人员的见解为基础的编码任务领域成为这种创新方法的画布。
结果
为了评估Code Llama,Meta AI使用了两个公认的编码基准测试:HumanEval和Mostly Basic Python Programming (MBPP)。HumanEval基准测试系统评估模型在通过文档字符串进行代码补全方面的能力,而MBPP基准测试则检验模型将描述翻译为可执行代码的能力。经过细致的基准测试,Code Llama超越了开源的以代码为中心的大型语言模型(LLMs),甚至胜过了其前身Llama 2。例如,在Code Llama 34B的情况下,出现了令人瞩目的分数 — 在HumanEval基准测试中达到了令人印象深刻的53.7%,在MBPP基准测试中达到了56.2%。这些分数是可比较的最先进解决方案中最高的,使Code Llama 34B与ChatGPT的显著能力处于同一水平。
Code Llama承诺将成为未来最重要的代码LLMs之一。它无疑为不同领域的开源基础模型的价值提供了再次确认。