LLama3技术报告笔记(垂直能力)
3.4.1 代码能力
典型应用:Copilot; Codex;
多任务:代码生成;写文档;debug;code review;
多语种:Python, Java, JavaScript, C/C++,... , HTML/CSS, SQL, bash/shell
1. Code专家模型
从预训练模型分支出来,加入1T token的混合数据(code占比85%),做continue-pretraining;
使用CodeLlama的配方;最后数千个steps改用long-context微调(16K窗口);最后,使用code占比高的数据,做SFT+DPO对齐训练;
用途:为主模型,做rejection-sampling;
2. 数据生成
痛点:follow指令;代码语法错误;生成错误的代码;fix bug;
自动生成了270万个样本,用来作SFT;
2.1 带feedback的代码生成
研究表明,用自己模型生成的代码,再训练自己模型,效果不变好反变差;因此,这里引入feedback,让模型从自己的错误中学到东西,回到正轨;
- 生成题目描述:从代码数据中,随机摘取代码片断,输入大模型做内容描述;
- 生成代码:将以上题目描述输入大模型,使用多种编程语言,生成代码;有提升:在prompt里加上良好变成规范的描述,在prompt里加上把代码解释放在注释里;
- 正确性分析:静态:用代码parser、linter来给出错误提示信息;动态:让大模型生成单元测试代码,放在container里运行,收集报错信息;
- 错误修正:将<题目描述,代码,单元测试用例,报错信息>输入大模型,让其生成正确的代码/单元测试用例;多迭代几次直到静态+动态分析通过;初始报错的题目里有20%可以通过这步生成通过测试;
- 多轮迭代:多迭代几轮,逐步增强大模型能力;
2.2 小语种
痛点:小语种数据量少;
解决:用大语种的代码做为输入,让模型翻译成小语种代码,结果喂给代码parser、执行等筛出正确的;
2.3 增强文档和注释能力
痛点:无法借助自动执行等工具;
解决:1. 将代码输入模型,让其生成注释、文档、代码解释;2. 将上步生成的注释或文档(去掉代码本身),输入模型,让其生成代码;3. 将原始代码和生成的代码,输入大模型,让其裁判生成代码的质量,分高的就说明注释、文档是好数据,加入训练样本中;
2.4 调优system prompt
system prompt里,让代码follow标准代码规范,注意性能(算法时间复杂度、空间复杂度)等;
2.5 增强伪码生成正确性
痛点:有些数据、任务,本身题目就是让给出伪码或代码片段,无法用执行来得到feedback
解决:用大模型来做裁判;分多个维度(正确性,风格)给出打分;分高的才通过;
遇到问题:本身就很难的代码,不容易通过;解决:人工修正了这些题目的代码,让其挤过去通过模型裁判;