0
点赞
收藏
分享

微信扫一扫

Self-Lengthen:阿里千问开源提升 LLM 长文本生成能力的训练框架

❤️ 如果你也关注大模型与 AI 的发展现状,且对大模型应用开发非常感兴趣,我会快速跟你分享最新的感兴趣的 AI 应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦!

🥦 微信公众号|搜一搜:蚝油菜花 🥦


🚀 快速阅读

  1. Self-Lengthen 是一个创新的迭代训练框架,通过生成器和扩展器的协同工作,提升大型语言模型生成长文本的能力。
  2. 该框架无需额外数据或专有模型,基于模型内在的知识和技能,有效解决长文本生成的训练缺陷问题。
  3. Self-Lengthen 可应用于多种不同的长文本生成任务,如文学创作、学术研究等。

正文(附运行示例)

Self-Lengthen 是什么

在这里插入图片描述

Self-Lengthen 是阿里巴巴千问团队推出的一个创新的迭代训练框架,旨在提升大型语言模型(LLMs)生成长文本的能力。框架基于两个角色——生成器(Generator)和扩展器(Extender)协同工作,生成器负责生成初始响应,扩展器将响应拆分、扩展产生更长的文本。整个过程不断迭代,逐步训练模型处理更长的输出。Self-Lengthen 无需额外数据或专有模型,基于 LLMs 的内在知识和技能,有效解决长文本生成的训练缺陷问题。

Self-Lengthen 的主要功能

  • 提升输出长度:让 LLMs 能生成比传统训练方法更长的文本输出。
  • 保持内容质量:在扩展文本长度的同时,保持甚至提升生成内容的连贯性和相关性。
  • 无需额外数据:不依赖外部数据源或专有模型,基于模型内在的知识和技能。
  • 迭代训练:基于迭代过程逐步提升模型处理长文本的能力。
  • 灵活性:能应用于多种不同的长文本生成任务,如文学创作、学术研究等。

Self-Lengthen 的技术原理

  • 生成器(Generator)和扩展器(Extender)
  • 生成器:负责生成初始的短文本响应。
  • 扩展器:将生成器的输出作为输入,扩展成长文本。
  • 迭代训练过程
    • 基于反复迭代,逐步增加生成器和扩展器处理长文本的能力。
    • 每次迭代中,扩展器尝试将生成器的输出扩展得更长,用更长的输出微调生成器,直接生成更长的文本。
  • 指令增广:用自指导技术扩充和多样化训练指令,更好地引导模型生成长文本。
  • 两阶段扩展方法
  • 第一阶段:扩展器扩展生成器输出的前半部分。
  • 第二阶段:用第一阶段的扩展结果指导扩展剩余部分,实现整个文本的扩展。
  • 微调模型:用基于扩展得到更长的文本微调生成器和扩展器,便于在未来的迭代中生成更长的文本。
  • 质量控制:基于规则和评估机制确保生成的长文本质量,避免重复、无意义的扩展。

如何运行 Self-Lengthen

🔧 准备工作

  1. 克隆此仓库。
  2. 我们在 FastChat 项目中进行了若干关键更改,以支持 vLLM LoRA 请求和额外的解码参数(如 repetition_penaltytop_k)。请克隆 此仓库 并运行 pip install -e ".[model_worker,webui]" 安装。
  3. 运行 pip install -r requirements.txt 安装其他所需包。
  4. 仓库包含适用于 Qwen 和 LLaMA 模型的 Self-Lengthen 代码。两者代码库的主要结构相同,只有细微差别(例如,聊天模板、提示词、过滤条件)以适应各自的特性。导航到 Qwen 或 LLaMA 目录以继续以下步骤。

运行代码

代码支持多节点和单节点执行。运行步骤如下:

  1. 更改 run.shrun_server.shrun_collect_data.shconfig.py 文件顶部的 base_model 变量为你基础模型的路径。
  2. 确保 WORLD_SIZERANKMASTER_ADDRMASTER_PORT 设置为你集群的适当值(对于单节点,WORLD_SIZE 为 1,RANK 为 0)。
  3. 在每个节点上执行:
bash run.sh > run_$RANK.log \
    --base_model=YOUR_MODEL_PATH \
    --instruct_count=5000 \
    --max_iter=3 2>&1

较大的 max_iter 将进行更多宏迭代,最终生成更长的响应。在每个宏迭代中,我们从服务由 FastChat 管理的 vLLM 工作器开始,然后依次执行步 0)自指导、步 1)初始响应生成 和步 2)响应扩展(考虑到用户隐私,我们仅发布运行所需的最少种子指令)。最后,关闭 vLLM 服务器并利用 LLaMA-Factory 微调生成器和扩展器。 4. 等待 Self-Lengthen 过程完成。对于小型集群,可能需要一些时间。

数据收集

Self-Lengthen 过程完成后:

  1. (可选)在每个节点上运行以下命令以生成更多数据;设置 total_count 为每个节点所需的生成数量:
bash run_collect_data.sh --base_model=YOUR_MODEL_PATH \
    --total_count=5000 \
    --instruct_count=500 \
    --max_iter=3
  1. 在主节点上运行 python collect_data.py 收集所有生成的训练数据。

训练过程

训练过程简单如下:

  1. 使用 eval/add_length_control.py 将长度需求纳入查询。
  2. 对(查询,长响应)对进行监督微调。

这有助于使模型的输出符合所需的长度要求,同时保持连贯性和相关性。

资源

  • 关注并回复公众号【65】或【SelfLengthen】获取相关项目资源。

❤️ 如果你也关注大模型与 AI 的发展现状,且对大模型应用开发非常感兴趣,我会快速跟你分享最新的感兴趣的 AI 应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦!

🥦 微信公众号|搜一搜:蚝油菜花 🥦

举报

相关推荐

0 条评论