Project Icon

AutoIF

基于执行反馈的大语言模型指令遵循能力提升方法

AutoIF是一种创新的大语言模型指令遵循能力提升方法。它通过代码执行反馈自动生成和验证指令数据,结合指令增强、验证函数生成和交叉验证等技术合成高质量训练样本。实验结果显示,AutoIF能有效提升不同规模模型的指令遵循表现,为大语言模型指令微调提供了新的研究思路。

基于执行反馈的自我对弈:提升大型语言模型的指令跟随能力

PWC

董观亭, 卢柯铭, 李成鹏, 夏婷玉, 于博文, 周畅, 周靖人

阿里巴巴集团 Qwen团队


:sparkles: 概述

本仓库包含了论文《基于执行反馈的自我对弈:提升大型语言模型的指令跟随能力》中提出的AutoIF方法的核心实现。

AutoIF是首个可扩展且可靠的方法,用于自动生成指令跟随数据并通过代码执行反馈验证其质量。

image

:rocket: AutoIF的数据合成

我们将AutoIF的数据合成过程分为几个步骤,并为每个步骤提供了10-20个样本以便您复现。请记得用您自己的输入替换这些样本。

:wrench: 依赖项

一般环境设置:

  • Python 3.9
  • PyTorch (目前在版本2.1.2+cu121上测试)
  • Transformers (版本4.41.2,低于此版本可能无法工作)
cd ./AutoIF/
pip install -r requirements.txt

指令增强与验证

首先,我们手写了36条种子指令: image

步骤1:种子指令自我指导

将指令与RFT提示词连接。

python 1_RFT.py

请使用监督模型(如GPT-4、Qwen2-72B)进行k次RFT,保存格式为seed_instruction.txt。

步骤2:验证函数和案例生成

使用种子和增强指令生成验证函数和案例。

python 2_verification_funcs_cases_generation.py

请为每个样本生成K个验证函数和案例,保存在eval_func_rft.jsonl中。

步骤3:质量交叉验证

交叉验证验证函数和案例的通过率,以确保高质量指令。

python 3_cross_validation.py

步骤4 & 5:反向翻译

请将验证函数反向翻译为指令,然后使用mDeBERTa进行一致性筛选。

python 4_eval_func_backtranslator.py
python 5_eval_func_backtranslator_filter.py

查询增强与验证

步骤1:查询重构和增强

我们随机将每个查询与ShareGPT的K个查询连接,并使用我们的响应RFT模板重新格式化:

python 6_concat_sharegpt_query.py

请使用监督模型为每个查询生成k个响应。

步骤2:指令跟随验证

交叉验证验证函数和增强响应的通过率,以获得高质量查询。

python 7_query_vertification.py

在这一步中,我们还将每个样本与一致性评分提示词连接。请使用监督模型对它们进行评分。

步骤3:查询质量验证

最后,我们筛选出得分> 8的样本,并将其保存为LlaMA-Factory的SFT数据格式。

python 8_query_score_filiter.py
python 9_sft_data_construction.py

⚡ DPO数据构建

图片

:sparkles:提示: 在我们的论文中,DPO包含两种设置,以下是它们的区别:

  • **离线DPO:**响应是从您的SFT数据中获得的,这些数据由监督模型生成。
  • **在线DPO:**响应是在每次训练迭代期间由您的基础模型生成的。

请使用上一步生成的评估函数处理您的SFT数据,并将结果格式化为dpo_query_eval_score_results.jsonl。

步骤1:验证函数评分

我们使用相应的验证函数来验证每个响应的通过率。

python 1_dpo_rft_wash.py

步骤2:数据选择

我们使用正样本(准确率>=0.5)和负样本(准确率=0)构建DPO对。

python 2_dpo_data_query_construct.py

构建完成后,您需要按照LlaMA-Factory中的DPO数据格式进行处理。


🎯 训练

我们使用LlaMA-Factory v0.6.3版本。感谢他们出色的工作。

:sparkles:提示: 我们两种设置的区别:

  • **强到弱蒸馏:**我们使用强大的模型作为监督模型(例如GPT-4、Qwen2-72B、Llama3-70B),弱模型(例如Qwen2-7B、Llama3-8B)作为基础模型。
  • **自对齐:**我们使用相同的模型(例如Qwen2-72B、Llama3-70B)作为监督和基础模型。

(1) SFT训练:

deepspeed --num_gpus=8 train_bash.py \
        --deepspeed $deepspeed_zero3_config_path \
        --stage sft \
        --do_train \
        --use_fast_tokenizer \
        --flash_attn \
        --adam_beta1 0.9 \
        --adam_beta2 0.95 \
        --model_name_or_path $MODEL_PATH \
        --dataset $dataset \
        --template $Template \
        --finetuning_type full \
        --output_dir $OUTPUT_PATH \
        --overwrite_cache \
        --overwrite_output_dir \
        --warmup_steps 20 \
        --weight_decay 0.1 \
        --per_device_train_batch_size 4 \
        --gradient_accumulation_steps 4 \
        --ddp_timeout 9000 \
        --learning_rate 7e-6 \
        --lr_scheduler_type "linear" \
        --logging_steps 1 \
        --cutoff_len 8192 \
        --save_steps 200 \
        --num_train_epochs 3.0 \
        --plot_loss \
        --bf16 

(2) DPO训练:

deepspeed --num_gpus 8 train_bash.py \
        --deepspeed $deepspeed_zero3_config_path \
        --stage dpo \
        --do_train \
        --model_name_or_path $MODEL_PATH \
        --dataset $dataset \
        --dataset_dir $DATA_PATH \
        --template $Template \
        --finetuning_type full \
        --output_dir $OUTPUT_PATH \
        --overwrite_cache \
        --overwrite_output_dir \
        --cutoff_len 4096 \
        --preprocessing_num_workers 1 \
        --per_device_train_batch_size 1 \
        --gradient_accumulation_steps 2 \
        --lr_scheduler_type cosine \
        --logging_steps 10 \
        --warmup_ratio 0.1 \
        --save_steps 1000 \
        --learning_rate 5e-6 \
        --num_train_epochs 2.0 \
        --max_samples 200000 \
        --ddp_timeout 180000000 \
        --plot_loss \
        --fp16

关于7B和70B模型训练的实现细节,请参考我们的论文。


:mag_right: 总体结果

图片


引用

如果您发现这项工作对您的研究有帮助,请引用它。

@article{董2024自我对弈,
  标题={基于执行反馈的自我对弈:提升大型语言模型的指令遵循能力},
  作者={董冠廷 和 陆可明 和 李成鹏 和 夏亭玉 和 余博文 和 周畅 和 周景仁},
  期刊={arXiv预印本 arXiv:2406.13542},
  年份={2024}
}
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

稿定AI

稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号