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 应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦!

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/884485.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

双向链表及如何使用GLib的GList实现双向链表

双向链表是一种比单向链表更为灵活的数据结构,与单向链表相比可以有更多的应用场景,本文讨论双向链表的基本概念及实现方法,并着重介绍使用GLib的GList实现单向链表的方法及步骤,本文给出了多个实际范例源代码,旨在帮助…

C++笔试题之实现一个定时器

一.定时器(timer)的需求 1.执行定时任务的时,主线程不阻塞,所以timer必须至少持有一个线程用于执行定时任务 2.考虑到timer线程资源的合理利用,一个timer需要能够管理多个定时任务,所以timer要支持增删任务…

【Java笔记】1-JDK/JRE/JVM是个啥?

JDK、JRE、JVM可以说是入门必须了解的三个词汇 先说全称 JDK:Java Development Kit,Java开发工具包 JRE:Java Runtime Environment,Java运行环境 JVM:Java Virtual Machine,Java虚拟机 再说关系 JVM⊆J…

c语言-进位计数制

文章目录 一、进位计数制是什么?二、c语言1.二进制转十进制2.十进制转二进制 一、进位计数制是什么? 进位计数制简称进制,是人类用于计算数量的基本规则。 可使用数字符号的数目称为基数或底数,基数个数为n个,即可称n…

HTML 基础标签——结构化标签<html>、<head>、<body>

文章目录 1. <html> 标签2. <head> 标签3. <body> 标签4. <div> 标签5. <span> 标签小结 在 HTML 文档中&#xff0c;使用特定的结构标签可以有效地组织和管理网页内容。这些标签不仅有助于浏览器正确解析和渲染页面&#xff0c;还能提高网页的可…

【算法赌场】区间合并

区间问题 区间问题的引入 数学上&#xff0c;用两个数字可以确定数轴上的一个区间&#xff0c;较小的数字叫做区间的左端点&#xff0c;也叫区间起点&#xff0c;较大的数字叫做区间的右端点&#xff0c;也叫区间终点。 在算法竞赛中&#xff0c;很多题目是以区间为单位去进行…

给定开始日期时间结束日期时间、间隔得到符合条件的序列pandas.timedelta_range()

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 给定开始日期时间 结束日期时间、间隔 得到符合条件的序列 pandas.timedelta_range() [太阳]选择题 以下代码执行后&#xff0c;delta中包含的时间差序列的个数是多少&#xff1f; import pa…

【AI工作流】FastGPT - 深入解析FastGPT工作流编排:从基础到高级应用的全面指南

文章目录 一、工作流编排概述二、FastGPT的节点类型1. 基础功能插件(1) 文本输出(2) 功能调用(3) 工具(4) 外部调用(5) 其他 2. 系统插件3. 团队插件 三、工作流中的流向结语 在当今快速发展的人工智能领域&#xff0c;工作流编排的能力已成为提升用户体验和应用效率的关键因素…

qt QAction详解

1、概述 QAction是Qt框架中的一个抽象类&#xff0c;用于表示用户界面中的一个动作&#xff08;action&#xff09;。这些动作可以绑定到菜单项、工具栏按钮或快捷键上&#xff0c;提供了一种灵活的方式来处理用户交互。QAction不仅包含了动作的名称、图标、提示信息等属性&am…

MRCTF2020:你传你ma呢

文件上传题先判断黑白名单过滤&#xff0c;先传个最简单的木马 这里上传不了php文件&#xff0c;猜测可能是对php文件进行了过滤&#xff0c;将文件改为任意后缀这里改为.abc 还是上传不成功&#xff0c;猜测可能对MIME也做了过滤&#xff0c;将Content-Type更改为image/jpeg再…

LeetCode (206单链表反转)

目录 题目描述: 代码: 第一种: 第二种: 第三种: 第四种: 第五种: 主函数: ListNode类: 题目描述: 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3…

C# Modbus RTU通讯回顾

涉及技术&#xff1a; 1.使用NMdbus4 库 2.ushort[]转int 记得之前刚学习的时候&#xff0c;是ushort[] → Hex字符串→byte[] → 翻转byte[] →BitConverter.ToInt32()&#xff0c;饶了一大圈&#xff1b;实际上可以直接转&#xff1b;这里也有小细节&#xff1a;使用BitCo…

RHCE6

一、DNS域名解析服务器 DNS &#xff08; Domain Name System &#xff09;是互联网上的一项服务&#xff0c;它作为将域名和 IP 地址相互映射的一个分布式数据库&#xff0c;能够使人更方便的访问互联网。DNS 系统使用的是网络的查询&#xff0c;那么自然需要有监听的 port 。…

uni-app 下拉刷新、 上拉触底(列表信息)、 上滑加载(短视频) 一键搞定

一、下拉刷新 1. 首先找到pages.json中 给需要进行下拉刷新的页面设置可以下拉刷新 2. 然后在需要实现下拉刷新的script标签内添加 导入onPullDownRefresh import {onPullDownRefresh} from dcloudio/uni-app 下拉刷新触发的事件 onPullDownRefresh(()> {console.log(正…

QML旋转选择器组件Tumbler

1. 介绍 Tumbler是一个用于创建旋转选择器的组件。它提供了一种直观的方式来让用户从一组选项中进行选择&#xff0c;类似于转盘式数字密码锁。网上找的类似网图如下&#xff1a; 在QML里&#xff0c;这种组件一共有两个版本&#xff0c;分别在QtQuick.Extras 1.4(旧)和QtQuic…

车载无人机用来做什么?车载无人机技术详解

车载无人机是将车和无人机组合到一起的产品&#xff0c;它有效地结合了无人机的灵活性和指挥车的远距离移动性&#xff0c;大大扩展了无人机的使用范围。以下是对车载无人机技术的详细解析&#xff1a; 一、车载无人机的应用 1. 应急现场指挥&#xff1a; 车载无人机可迅速抵…

HarmonyOS NEXT 应用开发实战(九、知乎日报项目详情页实现详细介绍)

在本篇博文中&#xff0c;我们将探讨如何使用 HarmonyOS Next 框架开发一个知乎日报的详情页&#xff0c;逐步介绍所用到的组件及代码实现。知乎日报是个小巧完整的小项目&#xff0c;这是一个循序渐进的过程&#xff0c;适合初学者和有一定开发经验的工程师参考。 1. 项目背景…

C++线程异步

std::future std::future作为异步结果的传输通道&#xff0c;可以很方便地获取线程函数的返回值。 std::future_status Ready (std::future_status::ready): 当与 std::future 对象关联的异步操作已经完成时&#xff0c;std::future 处于 ready 状态。在这个状态下&#xff0c;…

阿里云k8s-master部署CNI网络插件遇到的问题

问题 按照网络上的部署方法 cd /opt/k8s # 下载 calico-kube-controllers配置文件&#xff0c;可能会网络超时 curl https://docs.projectcalico.org/manifests/calico.yaml -O kubectl apply -f calico.yaml 试了很多次都不行&#xff0c;k8s-master都是Not ready的状态 ca…

从壹开始解读Yolov11【源码研读系列】——Data.Base.py.BaseDataset:可灵活改写的数据集加载处理基类

目录 一、base.BaseDataset 1.__init__类初始化 2.get_img_files根据地址获得图片详细地址 3.get_labels&#xff08;自定义&#xff09;获取标签数据 4. update_labels指定类别和单分类设定 5.set_rectangle开启批量矩阵训练 6.cache_images加载图片进程可视化 7.load_image内…