个人理解:
初赛阶段主要聚焦在如何通过 SFT 提升基础模型的代码能力,需要选手基于最新开源的 Qwen 1.8 模型作为基础模型,上分的关键主要通过收集高质量的代码数据提升模型的在Python, JavaScript, Java, Go, C++, Rust六种编程语言的代码生成能力。
比赛要求采用通义千文模型,因此选手能做的只有微调和数据处理。
微调部分,无非是采用各种tune技术,如prefix-tune,prompt-tune,lora等;数据处理部分则是搜集网络上尽可能相关的数据集,在其上进行finetune。
个人方案
采用了XXXXX数据集,将其从alpha格式改造成了多轮对话模式。
缺点:没有针对性的挑选或改造数据集,没有针对评测数据的特点进行深入研究。举例来说,评测方案里有代码修复的任务,但是自己找的数据集里并没有相关的
第一名方案
初赛:
针对代码修复任务:(构造修复案例,加上改错入口)
通过写prompt让gpt辅助生产数据,主要是对leetcode-rosetta.jsonl、Evol-Instruction-66k、code_alpaca等公开数据集中相关语言的数据进行改造;
每种语言会单独写几个prompt example(覆盖不同的改错类型),给定题目和正确答案,让其把正确答案改为错误,作为fixtests的数据。
同时每条数据会生成对应的declaration、test、entry_point等,并在数据中加上f’Fix bugs in entry_point’的字样,使得构造的数据格式和预测框架更为一致。
针对代码生成任务:(拼接与测试集格式相同的信息)
使用原始数据中content/explanation/instruction等信息生成测试集格式的instruction、prompt、declaration。然后把这些字段信息拼接在一起作为synthesize的sft数据;这样也保证了构造数据的格式和测试集的格式一致
复赛:主要工作还是收集各种相关数据进行清洗和改造
借鉴点:SFT数据对与测试集相似的数据进行过采样;对于英文数据集,可以写prompt让gpt进行翻译
第二名方案
初赛:现在自然语言注释、文本、相关代码的数据集上进行预训练,再在编程训练数据集上进行微调。
利用OSS-INSTRUCT数据进行预训练。OSS-INSTRUCT如何得到的?使用大型语言模型生成,从来开源代码文档,生成符合预先设定的prompt代码数据。【从80K个代码文档中收集了80K个初始种子片段,其中包括40K的Python,以及C++,Java,TypeScript,Shell,C#,Rust,PHP,和Swift各5K。然后,每个收集到的种子代码片段被应用到图2所示的提示模板,一个教师模型将其作为输入,并输出一个代码问题及其解决方案。】
复赛:
收集LeetCode相关的Python语言开源数据,收集LeetCode相关解题思路,用于代码解释
心得:
1.第一步,先研究清楚测试数据是怎么样的
第三名方案
https://tianchi.aliyun.com/forum/post/659773
对数据、模型、框架的讲解都很仔细
初赛:主要还是收集数据,过滤去重,解决了任务不平衡和任务异质性的问题。