Stability AI 因其 Stable Diffusion 文本到图像生成模型而闻名,但这并不是这家生成式人工智能初创公司有兴趣开发的全部。Stability AI 正在涉足代码生成领域。

8 月 8 日,Stability AI 宣布首次公开发布 StableCode,这是其新的开放式大型语言模型(LLM),旨在帮助用户生成编程语言代码。StableCode 有三个不同级别:适用于一般用例的基础模型、指令模型和可支持多达 16000 个 token 的长上下文窗口模型。

Stability AI进军编程领域,发布工具StableCode

图源:Stability AI (Stability AI 与其他具有类似参数数量和训练过的 token 数量的模型的比较。Stability AI 使用流行的 HumanEval 基准,采用标准的 pass@1 和 pass@10 指标。)‌

 

StableCode 模型得益于来自开源 BigCode‌ 项目的初始编程语言数据集,以及 Stability AI 提供的额外过滤和微调。最初,StableCode 将支持 Python、Go、Java、JavaScript、C、Markdown 和 C++ 编程语言的开发。

Stability AI 研究主管 Christian Laforte 在接受 VentureBeat 独家采访时说:“我们希望利用这种模型做与 Stable Diffusion 类似的事情,而后者旨在帮助世界上的每个人成为艺术家。”“我们想用 StableCode 模式做同样的事情:基本上让任何有好想法的人都能写出一个程序来解决这个问题。”

StableCode:建立在 BigCode 和大创意之上

任何 LLM 的训练都依赖于数据,而对于 StableCode 来说,这些数据来自 BigCode 项目。使用 BigCode 作为 LLM 生成式人工智能代码工具的基础并不是一个新想法。HuggingFace 和 ServiceNow 早在今年 5 月就推出了开放式 StarCoder LLM‌,其基础就是 BigCode。

Stability AI 首席研究科学家 Nathan Cooper 在接受 VentureBeat 独家采访时解释说,StableCode 的训练涉及对 BigCode 数据的大量过滤和清理。

“我们很喜欢 BigCode,他们在数据治理、模型治理和模型训练方面做了很多了不起的工作,“Cooper 说。”我们采用了他们的数据集,并应用了额外的质量过滤器,还构建了大上下文窗口版本的模型,然后在我们的集群上进行了训练。”

Cooper 说,除了 BigCode 核心模型之外,Stability AI 还执行了许多训练步骤。这些步骤包括对特定编程语言的连续训练。根据官网描述,StableCode 在其高性能计算集群上,用 5600 亿代码 token 对模型进行了训练。

“它采用了一种与自然语言‌领域非常相似的方法,即首先对通用模型进行预训练,然后在一组特殊的任务上对其进行微调,在这种情况下就是对语言进行微调。”Cooper 说。

StableCode 更长的 token 长度将改变代码生成的游戏规则

除了 BigCode 基础之外,StableCode 的长上下文版本还能为用户带来带来显着的好处。

StableCode 的长上下文窗口版本具有 16,000 个 token 的上下文窗口,Stability AI 称这比其他任何模型都要大。Cooper 解释说,较长的上下文窗口可以使用更专业、更复杂的代码生成提示。这也意味着用户可以让 StableCode 查看包含多个文件的中等规模代码库,以帮助理解和生成新代码。

Cooper 说:“你可以使用这个较长的上下文窗口,让模型更多地了解你的代码库,以及其他文件中定义了哪些功能。”“这样,当它提出代码建议时,就能更符合你的代码库和需求。”

利用 RoPE 更好地生成代码

与所有现代人工智能生成模型一样,StableCode 也是基于 transformer 神经网络。

StableCode 没有使用 ALiBi(Attention with Linear Biases)方法来定位 transformer 模型中的输出(StarCoder 在其开放式生成式人工智能编码模型中使用了这种方法),而是使用了一种称为 RoPE 的方法。

Cooper 说,transformer 模型中的 ALiBi 方法倾向于更多地权衡当前的 token,而不是过去的 token。在他看来,这对代码来说并不是一种理想的方法,因为与自然语言不同,代码并没有一个具有开头、中间和结尾的固定叙事结构。代码功能可以为应用流程中的任何一点进行定义。

“我认为,代码本身并不适合这种权衡现在比过去更重要的想法,所以我们使用……RoPE,[它] 不存在这种偏见。”

目前,StableCode 还处于早期阶段,首次发布的目标是了解开发人员将如何接受和使用该模型。

Cooper 说:“我们将与社区进行互动和合作,看看他们会提出哪些很酷的方向,并探索生成式开发者空间。”