Meta 近日释出了一个基於 Llama 2 进行微调构建的大型语言模型 Code Llama。
(前情提要:ChatGPT企业版上线!OpenAI客制模型、共享对话… 六大功能一次看 )
(背景补充:AI办案!台湾检警靠「ChatGPT」破获1.5亿虚拟货币诈骗案 )
本文目录
Meta 近日释出了一个基於 Llama 2 进行微调构建的大型语言模型 Code Llama,可以使用文字提示生成程式码,并且开源,可供研究和商业用途。
Code Llama 是针对程式码任务的公开 LLM 的最先进技术,有可能使当前开发人员的工作流程更快、更高效,并降低学习编码人员的进入门槛。 Code Llama 有潜力用作生产力和教育工具,帮助程式员编写更强大、文件更齐全的软体。
Code Llama 的工作原理
今年 7 月,Meta(原 Facebook)释出了免费可商用的开源大模型 Llama 2。最新发布的 Code Llama 是 Llama2 的专门用於编码的专用版本,是通过在其特定於程式码的资料集上进一步训练 Llama 2 来建立的,从同一资料集中取样更多资料的时间更长。
总的来说,Code Llama 具有增强的编码功能,建立在 Llama 2 之上。它可以根据程式码和自然语言提示生成程式码和有关程式码的自然语言(例如,「给我写一个输出斐波那契序列的函式。」) 它还可用於程式码完成和除错。
Code Llama 支援当今使用的许多最流行的语言,包括 Python、C++、Java、PHP、Typescript (Javascript)、C# 和 Bash。
Code Llama 目前拥有三个引数版本: 70 亿引数、130 亿引数、340 亿引数 。
每个版本都使用 500B 程式码 token 和程式码相关资料进行训练。 70 亿 和 130 亿引数基础模型和指令模型也经过了中间填充 (FIM) 功能的训练,允许它们将程式码插入到现有程式码中,这意味着它们可以支援开箱即用的程式码完成等任务。
这三种模型满足不同的服务和延迟要求。 例如,70 亿模型可以在单个 GPU 上执行。 340 亿模型返回最佳结果并提供更好的编码辅助,但较小的 70 亿和 130 亿模型速度更快,更适合需要低延迟的任务,例如即时程式码完成。Code Llama 模型提供了具有多达 10 万个上下文 token 的稳定生成。 所有模型都在 16,000 个 token 的序列上进行训练,并在最多 100,000 个 token 的输入上显示出改进。
除了是生成更长程式的先决条件之外,拥有更长的输入序列还可以为程式码法学硕士解锁令人兴奋的新用例。 例如,使用者可以为模型提供来自其程式码库的更多上下文,以使各代更相关。 它还有助於除错较大程式码库中的场景,在这种情况下,掌握与具体问题相关的所有程式码对於开发人员来说可能具有挑战性。 当开发人员面临除错大量程式码时,他们可以将整个程式码长度传递到模型中。
Meta 还微调了 Code Llama 的两个附加版本: Code Llama – Python 和 Code Llama – Instruct 。
但是不建议使用 Code Llama 或 Code Llama – Python 执行一般自然语言任务,因为这两个模型都不是为遵循自然语言指令而设计的。 Code Llama 专门用於特定於程式码的任务,不适合作为其他任务的基础模型。
Code Llama 的效能如何?
HumanEval 和 Mostly Basic Python 程式设计 (MBPP) 是两个常用编码能力测试基准 —— HumanEval 用於测试模型根据文件字串完成程式码的能力,MBPP 用於测试模型根据描述编写程式码的能力。
根据这两个测试基准对 Code Llama 测试显示,Code Llama 优於开源、特定程式码的 Llama,并且优於 Llama 2 本身。例如,Code Llama 34B 在 HumanEval 上得分为 53.7%,在 MBPP 上得分为 56.2%,超越了 ChatGPT,但在 HumanEval 上仍逊於 GPT-4。
虽然 Code Llama 并未在测试中一骑绝尘,但这并不是 Code Llama 的全部,其另一个亮点就是再次微调。使用者可以通过对开源的 Code Llama 进行再次微调,构建出符合自己的需求的最佳版本。
Phind 最近根据自己的资料集上对 CodeLlama-34B 和 CodeLlama-34B-Python 进行了微调,其微调版本在 HumanEval 上分别实现了 67.6% 和 69.5% 的成绩,这超过了 OpenAI 3 月份公布的 GPT-4 的 67%。
相关连结:https://www.phind.com/blog/code-llama-beats-gpt4
实际使用对比 ChatGPT vs. Code Llama
首先,这次对比中使用了 GPT-3.5 版本的 ChatGPT,以及 Perplexity 平台支援的 Code Llama。我们将提出 8 个问题,以此来对比二者是否成功生成程式码。
问题 1: 使用 Python。 给定两个字串 word1 和 word2。 通过以交替顺序新增字母来合并字串,从 word1 开始。 如果一个字串比另一个字串长,请将附加字母附加到合并字串的末尾。
返回合并後的字串。
示例 1:
🟢 ChatGPT:成功 +1
🔵 Code Llama:成功 +1
问题 2: 使用 Python。 给定一个字串 s,仅反转字串中的所有母音并返回它。
母音为 「a」、「e」、「i」、「o」 和 「u」,它们可以以小写和大写形式出现多次。
示例 1:
🟢 ChatGPT:成功 +1
🔵 Code Llama:失败 +0
问题 3: 使用 Python。 给定一个整数阵列 nums,将所有 0 移至其末尾,同时保持非零元素的相对顺序。
请注意,您必须就地执行此操作,而不制作阵列的副本。
示例 1:
🟢 ChatGPT:成功 +1
🔵 Code Llama:失败 +0
问题 4: 使用 Python。 你有一个长长的花坛,其中有些地块种植了,有些则没有。 但是,相邻的地块不能种植花卉。
给定一个包含 0 和 1 的整数阵列花坛,其中 0 表示空,1 表示非空,以及一个整数 n,如果可以在花坛中种植 n 朵新花而不违反无相邻花规则,则返回 true,否则返回 false。
示例 1:
示例 2:
🟢 ChatGPT:成功 +1
🔵 Code Llama:成功 +1
问题 5: 使用 Python。 给定一个输入字串 s,反转单词的顺序。
单词被定义为非空格字元的序列。 s 中的单词将至少由一个空格分隔。
返回由单个空格按相反顺序连线的单词字串。
请注意,s 可能在两个单词之间包含前导或尾随空格或多个空格。 返回的字串应该只有一个空格来分隔单词。 请勿包含任何额外空格。
示例 1:
🟢 ChatGPT:成功 +1
🔵 Code Llama:成功 +1
问题 6: 使用 Python。 给定一个字串 s 和一个整数 k,返回 s 中长度为 k 的任何子串中母音字母的最大数量。
英语中的母音字母有 「a」、「e」、「i」、「o」 和 「u」。
示例 1:
解释:「lee」、「eet」 和 「ode」 包含 2 个母音。
🟢 ChatGPT:成功 +1
🔵 Code Llama:成功 +1
问题 7: 使用 Python。 给定一个字串 s,其中包含星号 *。
通过一次操作,您可以:
在 s 中选择一颗星。
删除其左侧最接近的非星号字元,并删除星号本身。
删除所有星星後返回字串。
示例 1:
🟢 ChatGPT:成功 +1
🔵 Code Llama:失败 +0
问题 8: 使用 Python。 给定一个表示每日温度的整数温度阵列,返回一个数组答案,其中 answer [i] 是在第 i 天之後您必须等待的天数才能获得较温暖的温度。 如果未来没有一天可以这样做,则保留 answer [i] == 0。
示例 1:
🟢 聊天 GPT:+1
🔵 程式码骆驼:+1
最终结果:
🟢 ChatGPT: 8/8
🔵 CodeLlama: 5/8
综上,在实际使用效果中,Code Llama 与 ChatGPT 相比并未体现出明显优势,不过以上测试并不能完全成为判定依据。而且,开源的 Code Llama 要比 ChatGPT 更容易让使用者根据需求订制,或许能够带来更多的可能性。
📍相关报导📍
GPT-4突然变笨?OpenAI被质疑「省成本」导致性能下滑、改变运算模式
Chatgpt之父的最伟大发明》WorldCoin愿景:在AI时代建立数十亿人的身份和金融网路
CoinFund谈投资Worldcoin:除了ChatGPT之父,更看重WLD的全球愿景..