Skip to content

Latest commit

 

History

History
249 lines (206 loc) · 10.7 KB

README_zh.md

File metadata and controls

249 lines (206 loc) · 10.7 KB

CoLLaMA: A Multilingual Instruction Dataset and Large Language Model for Code

License Python 3.9+

[ English | 中文 ]

CoLLaMA 项目旨在构建用于编码任务的多语言(中文和英文)指令调整数据集和大型语言模型。

介绍

当前的代码指令数据集对于指令调整任务至关重要,但往往是杂乱无章、单语言和单一编程语言集中的,同时涵盖的任务种类也不够丰富。开源的编码任务指令调整数据集也很少。

为此,我们提出了CoLLaMA项目,其具有以下优势:

  • 多语言数据集: 我们的数据集包含了多种编程语言的代码样本,包括Java、Python、C、C#、Go、PHP、JavaScript和Ruby等。它还提供了中英文两种语言的代码指令,使模型能够在不同的编程语言和口语语境中学习,从而增强其泛化能力。
  • 任务多样性: 数据集涵盖了广泛的编码任务,例如代码摘要、代码生成、代码搜索等。它包含了各种复杂度和要求的任务,从初学者到高级水平。这种全面的方法确保我们的指令可以处理不同类型的编码任务,并涵盖广泛的编程技能和知识。
  • 多编程范例: 该项目包括来自不同编程范式的代码示例,例如过程式、面向对象、函数式和事件驱动编程。这种广泛的覆盖范围为指令调整模型提供了各种不同的编码任务,以便学习和生成指令。
  • 真实世界的代码示例: 数据集包含来自实际项目或论坛(如StackOverflow和Github)的代码片段或摘录,以呈现更真实和实用的编码任务。这有助于指令调整模型生成适用于真实世界场景的指令。
  • 质量保证: 我们致力于为每个编码任务提供准确和高质量的数据集。例如,从Stackoverflow Q&A网站上提取的代码搜索指令数据集经过严格的过滤和清理,以确保其在实际的Q&A应用中可用。

改仓库包含以下内容:

  • 用于微调模型的 MulCo
  • 微调模型的代码
  • 模型权重
  • 评估代码

数据

data/MID_all_data 包含约88k条指令跟随数据,用于微调CoLLaMA模型。该文件是一个字典列表,每个字典包含以下字段:

  • instruction: 描述模型应执行的任务。
  • input: 任务的可选代码或上下文。例如,如果指令是“请总结这个PHP代码。”,则输入是PHP代码。
  • output: 指令的答案。

我们收集的所有数据都采用相同的模板格式,每个样本如下:

[
{"instruction":  `string`,
"input":  `string`, # (may be empty)
"output": `string`}
]

由于代码任务的不同,我们使用 gpt-3.5-turbo 或人工生成数据。与自结构技术生成数据不同,我们的数据中大部分代码来自真实场景,而大部分指令选择则是由gpt-3.5-turbo生成的。数据处理的详细过程将在下一节中描述。

数据集收集与处理

它包括8个数据集,涵盖以下8个场景的不同编码任务:

  • code generation: 根据用户输入的自然语言,生成相应的代码。

  • code summarization: 生成简洁易读的源代码摘要或描述。它涉及自动生成代码片段、函数或整个程序的人类可读的解释或摘要。

  • code search

    • code-to-code

      • clone detection: 给定一段代码,找到另一段与其语义相关的代码。
      • defect detection: 给定源代码,任务是澄清代码的具体缺陷是什么。这包括常见的错误,如空指针、解引用、数组越界、内存泄漏等。
      • code repair: 涉及完成或填写代码片段中缺失的部分。
      • code repair: 自动修复代码中的错误。
      • code translation: 将源代码从一种编程语言转换为另一种编程语言的过程。它涉及将原始代码的语法、结构和语义进行转换,同时保留其功能和行为。
    • query-to-code: 给定自然语言查询和多个代码片段,任务是搜索其功能与自然语言查询匹配的源代码。

MulCo 的简要概述如下:

Task Source Dataset name Num Lang Programming Lang
Code summarization CodeSearchNet 10k EN Go,Java,JavaScript,PHP,Python,Ruby
CodeSearchNet 10K CN Go,Java,JavaScript,PHP,Python,Ruby
Code generation CodeSearchNet 10k EN Go,Java,JavaScript,PHP,Python,Ruby
CodeGPT 20k CN C#,C,C++,Go,Java,JavaScript,PHP,Python,Ruby
CodeSearchNet 5k CN Go,Java,JavaScript,PHP,Python,Ruby
Code Search code-to-code Clone Detection BigCloneBench 10k EN Java
Defect Detection Devign 5K EN C
Cloze Test CT-all 5K EN Go,Java,JavaScript,PHP,Python,Ruby
Code Repair Bug2Fix 5K EN Java
Code Translation CodeTrans 5k EN Java,C#
query-to-code CodePro 10K EN Python,SQL
CodePro 5k CN Python,SQL

我们主要从 CodeSearchNet,CodeXGLUE, codeGPTCodePro中获取数据, 并对它们进行处理以获取上述数据集, 最终合并到一个 dataset中.

微调

微调过程基本上遵循codealpace.

要复制一个经过fine-tuning的LLaMA版本,请按照以下步骤操作:

为了有效地对llama-7b模型进行fine-tuning,我们使用了8个A100 80GB GPU。建议至少使用两个A100 80GB GPU以避免内存不足。同时,您需要调整训练参数和deepspeed配置文件。

在fine-tuning之前,请确保先安装所有依赖项:

pip install -r requirements.txt

执行以下脚本,使用deepspeed在一台配备8个A100 80G GPU的机器上,对LLaMA-7B模型进行fine-tuning。

torchrun --nproc_per_node=8 --master_port=2000 train.py \
    --model_name_or_path decapoda-research/llama-7b-hf \
    --data_path MID_train_EN_data.json \
    --fp16 True \
    --output_dir <output_path> \
    --num_train_epochs 3 \
    --per_device_train_batch_size 8 \
    --per_device_eval_batch_size 8 \
    --gradient_accumulation_steps 4 \
    --evaluation_strategy "no" \
    --save_strategy "steps" \
    --save_steps 500 \
    --save_total_limit 1 \
    --learning_rate 2e-5 \
    --weight_decay 0. \
    --warmup_ratio 0.03 \
    --lr_scheduler_type "cosine" \
    --logging_steps 1 \
    --deepspeed ds_config.json

您可以将--data_path替换为您自己的数据集。

您可以使用以下命令将fine-tuned模型上传至Huggingface(引用自此处):

python finetuning/push_to_hub.py --model_name_or_path PATH_TO_FINETUNED_MODEL/ --push_name HF_MODEL_NAME --auth_token HF_ACCESS_TOKEN

模型已于Huggingface开放:CoLLaMA-7b

评估 (TODO)

引用

Gang Hu1  Xi Wen1  Xin Liu1Jimin Huang2  Qianqian Xie*3
1School of Computer Science, Yunnan University  2ChanceFocus AMC  3School of Computer Science, Wuhan University 
@misc{Hu2023CoLLaMA,
      title={CoLLaMA: A Multilingual Instruction Dataset and Large Language Model for Code}, 
      author={Gang Hu and Xi Wen and Xin Liu and Jimin Huang and Qianqian Xie},
      year={2023},
}