LongAlign:大模型长文本处理能力提升之道

news2024/11/13 7:57:03

人工智能咨询培训老师叶梓 转载标明出处

大模型(LLMs)在处理长文本时,需要在输入序列上进行指令微调(instruction finetuning),以确保它们能够有效地处理长文本。现有的方法主要集中在上下文扩展(context extension),即通过位置编码扩展和对长文本的持续训练来提升模型的上下文长度。最近,一篇由清华大学和Zhipu.AI的研究人员共同撰写的论文《LongAlign: A Recipe for Long Context Alignment of Large Language Models》提出了一种新的方法,通过指令微调来提升LLMs处理长用户提示的能力。从而提高LLMs在长文本处理方面的能力。

在LongBench-Chat基准测试中的结果,包含了真实世界查询,长度在10k-100k之间

LongAlign

大模型(LLMs)通过监督式微调(Supervised Fine-Tuning, SFT)来学习对齐的基本概念程中,指令和响应被串联起来形成序列 [x, y],然后输入到自回归语言模型中,目标是最大化给定指令 x 下产生响应 y 的概率 。损失函数的设计与传统语言模型相似,主要关注目标标记 y 的损失。

为了创建一个多样化的长指令数据集,研究者从九个不同的来源收集了长文本,包括书籍、百科全书、学术论文和代码等。利用Claude 2.1工具,根据这些长文本上下文生成任务和答案。为了增加生成任务的多样性,研究者在提示中加入了不同类型的任务描述,比如摘要、信息提取和推理等。通过这种方法,他们为10,000个长文本创建了任务和答案,形成了10,000个监督数据实例,其中10%是中文数据。这些数据的长度范围从8k到64k不等,由ChatGLM3-6B分词器进行测量,因为该分词器对中文字符有更高的压缩率。

数据构建的例子,说明了如何从长文本中生成任务和答案

在数据构建过程中,研究者特别注重数据多样性的重要性。他们通过从不同的文本来源收集数据,并使用不同的任务类型提示来生成问题,确保了数据集能够覆盖广泛的任务类型和语言。

为了确保模型在监督式微调后能够同时处理长文本和短文本(一般能力),研究者将长指令数据与一般指令数据集混合进行训练。在这种混合数据中,大量的一般短数据与相对较少的长指令数据混合,导致数据长度分布呈现长尾特征。为了最小化每个批次中的空闲时间,研究者探索了两种训练方法:打包(Packing)和排序批处理(Sorted Batching)。

Packing(打包):涉及将不同长度的数据串联在一起,直到达到最大长度。然后将这些打包后的数据在多GPU上进行批处理和处理。为了防止同一打包中的不同序列在自注意力计算中发生交叉污染,研究者使用了 FlashAttention 2 中的 flash_attn_varlen_func 函数,该函数支持块对角注意力的高效计算。

在长尾数据长度分布下,通过打包或排序批处理可以减少空闲时间并加快训练过程

打包方法存在一个问题,即它倾向于更多地关注更长的序列和包含更多目标标记的序列。这是因为在最终损失计算中,不同打包包含的序列数量和目标标记数量不同,但它们对损失的贡献却被平等对待。为了解决这个问题,研究者们提出了一种损失加权策略,通过调整每个序列的损失权重,确保在损失计算中各个序列的贡献是平衡的。

Sorted Batching(排序批处理):排序批处理方法则是另一种提高训练效率的策略。它通过将长度相似的数据序列放在同一批次中来进行训练,从而减少了批次内部的空闲时间。尽管这种方法可能会导致不同批次之间的数据分布偏差,但研究者们发现,通过使用大的梯度累积步长和优化器的强大适应性,这种方法在加速训练的同时并没有对性能产生明显的负面影响。

评估基准是LongBench-Chat ,包括50个长文本实际查询,长度从10k到100k不等,涵盖了文档问答、摘要和编码等多种关键用户密集型场景。这个基准包括40个英文任务和10个中文任务。为了确保评估真正反映了模型遵循长文本指令的能力,研究者避免了使用在预训练期间可能已经被模型看到并记忆的流行长文本,并避免了提出模型在不阅读长文本的情况下就能回答的问题。

使用 GPT-4 作为评估者,根据给定的人工注释参考答案和每个问题的少量评分示例,对模型的响应进行1-10的评分。为了确保评估者能够仅根据地面真实和少量评分示例做出明智的判断,研究者避免了过于开放式的问题,例如“根据前面的文本写一首诗”。为了验证使用 GPT-4 作为 LongBench-Chat 评估者的可靠性,研究者进行了人类评估研究,并在表格中展示了 GPT-4 的评估与人类评估者之间的相关性。

人类标注者之间的相关性,以及GPT-4(有无少量示例)与人类标注的相关性

实验

数据:研究者使用ShareGPT作为短指令数据的来源,并过滤掉空助手响应。为了比较长指令数据对模型训练的影响,他们包括了四种长指令数据集:'LongAlign-0k', 'LongAlign-5k', 'LongAlign-10k' 和 'LongAlpaca-12k'。这些数据集根据第3.2节中描述的过程构建,并且 'LongAlpaca-12k' 数据集提供了与 'LongAlign' 数据集相比较的多样性影响。

模型:研究者选择了三种模型变体:ChatGLM3-6B, Llama-2-7B 和 Llama-2-13B。考虑到这些基模型的上下文窗口大小,他们首先执行上下文扩展,将上下文窗口扩展到64k。

训练:所有模型使用8xA800 80G GPU和DeepSpeed+ZeRO3+CPU卸载进行训练。设置训练数据的最大长度为64k,超出此长度的数据将从右侧截断。

评估:评估包括长文本任务和短文本任务。使用了LongBench-Chat和LongBench评估模型的长文本对齐熟练度和一般长文本理解能力。对于短文本任务,使用了MT-Bench和Open LLM Leaderboard上的一般任务进行评估。

研究者对ChatGLM3-6B-64k进行了使用ShareGPT数据混合不同长指令数据集的监督式微调(SFT)。除了 'LongAlign-0k' 外,所有模型都使用更高效的打包策略和损失加权训练。评估结果显示,长指令数据的数量增加可以一致地提高模型在所有长任务中的性能,同时在短任务中的性能保持与仅使用短指令训练时相当的水平。

ChatGLM3-6B-64k模型在不同数量和类型的长指令数据训练后的性能
ChatGLM3-6B-64k模型在不同长数据集混合ShareGPT训练后,在1k-60k长度范围内的“针堆”测试性能

研究者比较了不同的训练方法,包括朴素批处理、打包(带和不带损失加权)、排序批处理,对ChatGLM3-6B-64k和Llama-2-6B-64k的训练效率和最终性能的影响。打包和排序批处理的训练效率是朴素批处理的两倍,并且在长任务和短任务上的表现与朴素批处理相当。损失加权策略显著提高了打包训练在长指令任务上的性能。

ChatGLM3-6B-64k和Llama-2-7B-64k模型在不同训练方法下的性能
在8xA800 80G GPU下,不同训练方法所需的训练时间

研究者探索了LongAlign框架在两个方向上的扩展性:更大的模型规模和更长的上下文窗口。他们使用LongAlign-10k数据集微调了Llama-2-13B-64k,并使用两种高效的训练方法,发现与7B规模的模型相比,13B模型在LongBench-Chat上的表现提高了10%。

在LLama-2-13B模型上进行LongAlign扩展的结果

研究者还展示了在模型训练过程中,长任务和短任务相对性能曲线的变化,说明了随着训练步骤的增加,性能如何变化。如图6所示长任务和短任务的学习曲线趋势非常相似,都显示出在0-500步之间快速提升,之后提升变慢,并在1000步后趋于稳定。

ChatGLM3-6B-64k模型在训练过程中长任务和短任务的相对性能变化

通过这些实验得出结论,LongAlign方法在数据量、数据多样性和正确的训练方法方面对最终性能至关重要。并且长任务和短任务的学习过程可能由共享的潜在因素共同决定,这些因素在训练过程中被优化,以帮助模型同时对齐长指令和短指令。

论文链接:https://arxiv.org/abs/2401.18058

项目链接:GitHub - THUDM/LongAlign: LongAlign: A Recipe for Long Context Alignment Encompassing Data, Training, and Evaluation

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

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

相关文章

ACC2.【C语言】经验积累 栈区简单剖析

int main() {int i0;int arr[10]{1,2,3,4,5,6,7,8,9,10};for (i0;i<12;i){arr[i]0;printf("A");}return 0; } 执行后无限打印A 在VS2022&#xff0c;X86,Debug环境下&#xff0c;用监视后&#xff0c;原因是arr[12]的地址与i的地址重合&#xff08;数组越界&…

c++语言学习注意事项

当学习C语言时&#xff0c;有几个重要的注意事项可以帮助初学者更有效地掌握这门强大的编程语言&#xff1a; 1. 理解基本概念和语法 C 是一门复杂且功能强大的编程语言&#xff0c;因此理解其基本概念和语法至关重要。初学者应该重点掌握以下几个方面&#xff1a; 基本语法和…

BIO示例代码

一个请求开一个线程 package org.example.demo;import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;/*** author hrui* …

2024年第四届网络通信与信息安全国际学术会议(ICNCIS 2024,8月23-25)

2024年第四届网络通信与信息安全国际学术会议&#xff08;ICNCIS2024&#xff09;将于2024年8月23-25日于杭州召开。 会议围绕网络通信在信息安全领域中的最新研究成果&#xff0c;为来自国内外高等院校、科学研究所、企事业单位的专家、教授、学者、工程师等提供一个分享专业经…

智能化车载视频监控技术的崭新发展与应用

随着国内4G网络的快速建设和发展&#xff0c;智能车载终端监控领域的高清化进程也日益加快。尽管传统的车载终端监控已经在视频录像、GPS定位等基本应用方面取得了一定的成果&#xff0c;但随着视频分析技术的不断进步&#xff0c;普通视频监控已经无法满足日益增长的车载监控新…

基于DMASM镜像的DMDSC共享存储集群部署

DMv8镜像模式共享存储集群部署 环境说明 操作系统&#xff1a;centos7.6 服务器&#xff1a;2台虚拟机 达梦数据库版本&#xff1a;达梦V8 安装前准备工作 参考文档《DM8共享存储集群》-第11、12章节 参考文档《DM8_Linux服务脚本使用手册》 1、系统环境(all nodes) 1…

Hive3:基本介绍

一、概述 Apache Hive是一款分布式SQL计算的工具&#xff0c; 其主要功能是&#xff1a; 将SQL语句翻译成MapReduce程序运行 Hive是单机工具&#xff0c;只需要部署在一台服务器即可。 Hive虽然是单机的&#xff0c;但是它可以提交分布式运行的MapReduce程序运行。 二、基本…

7月23日JavaSE学习笔记

异常&#xff1a; 程序中一些程序处理不了的特殊情况 异常类 Exception 继承自 Throwable 类&#xff08;可抛出的&#xff09; Throwable继承树 Error&#xff1a;错误/事故&#xff0c;Java程序无法处理&#xff0c;如 OOM内存溢出错误、内存泄漏...会导出程序崩溃 常见的…

C++客户端Qt开发——Qt窗口(对话框)

5.对话框 ①对话框介绍 对话框是GUI程序中不可或缺的组成部分。一些不适合在主窗口实现的功能组件可以设置在对话框中。对话框通常是一个顶层窗口&#xff0c;出现在程序最上层&#xff0c;用于实现短期任务或者简洁的用户交互。Qt常用的内置对话框有&#xff1a;QFiledialog…

【NLP自然语言处理】为什么说BERT是bidirectional

首先&#xff0c;来看一下Transformer架构图&#xff1a; 我们知道&#xff0c;Bert设计时主要采用的是Transformer编码器部分&#xff0c;要论述Bert为啥是双向的&#xff0c;我想从编码器和解码器的注意力机制来阐述。 在看这篇博客前&#xff0c;需要对Transformer有一定的…

如何录制电脑内部声音?全方位介绍电脑录音软件:8款在线录音!(2024重新整理)

如何录制电脑内部声音&#xff1f;不管是娱乐圈还是现实生活&#xff0c;【录音】这个功能的重要性不言而喻。而电脑录音已在影视配音、音视频剪辑、会议记录、在线教育等多个领域发光发热&#xff01; 本文将为您推荐8款电脑录音软件&#xff0c;并详细介绍电脑录音的多种方式…

【Windows和Linux校验文件MD5值(详细)】

1、 什么是MD5&#xff1f; 文件的MD5校验是一种常用的文件完整性验证方法。MD5&#xff08;Message Digest Algorithm 5&#xff09;是一种广泛应用的哈希算法&#xff0c;它能够将任意长度的数据转换为固定长度的哈希值。在文件校验中&#xff0c;MD5算法通过计算文件的哈希…

访问所有节点的最短路径

847. 访问所有节点的最短路径 存在一个由 n 个节点组成的无向连通图&#xff0c;图中的节点按从 0 到 n - 1 编号。 给你一个数组 graph 表示这个图。其中&#xff0c;graph[i] 是一个列表&#xff0c;由所有与节点 i 直接相连的节点组成。 返回能够访问所有节点的最短路径的…

【吊打面试官系列-Dubbo面试题】服务调用是阻塞的吗?

大家好&#xff0c;我是锋哥。今天分享关于 【服务调用是阻塞的吗&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 服务调用是阻塞的吗&#xff1f; 默认是阻塞的&#xff0c;可以异步调用&#xff0c;没有返回值的可以这么做。 Dubbo 是基于 NIO 的非阻塞实现…

渗透测试:筑牢网络安全的坚固防线

在当今这个互联网高度发达的时代&#xff0c;网络安全已成为维护社会稳定和经济发展的重要基石。随着互联网的普及&#xff0c;网络攻击手段日益复杂多变&#xff0c;各类安全威胁层出不穷。为了有效应对这些挑战&#xff0c;渗透测试作为一种重要的安全测试与评估方法&#xf…

QT自定义无边框窗口(可移动控制和窗口大小调整)

QT是一个功能强大的跨平台开发框架&#xff0c;它提供了丰富的界面设计工具和组件。在界面开发中&#xff0c;QT窗口自带的标题栏无法满足我们的需求。我们就需要自定义无边框窗口&#xff0c;包括自定义标题栏和窗口大小调整功能。本文将介绍如何在QT中实现这些功能。 一、简…

AI绘画入门实践 | Midjourney:使用 --chaos 给图像风格来点惊喜

在 Midjourney 中&#xff0c;--chaos 影响初始图像网格的多样性&#xff0c;指 MJ 每次出的4张图之间的差异性。 默认值为0&#xff0c;值越高&#xff0c;差异性越大。 使用格式&#xff1a;--chaos 0-100的整数值 使用演示 a lot of flowers --chaos 0 --v 6.0a lot of fl…

基于微信小程序+SpringBoot+Vue的垃圾分类系统(带1w+文档)

基于微信小程序SpringBootVue的垃圾分类系统(带1w文档) 基于微信小程序SpringBootVue的垃圾分类系统(带1w文档) 本垃圾分类小程序也是紧跟科学技术的发展&#xff0c;运用当今一流的软件技术实现软件系统的开发&#xff0c;让环保方面的信息完全通过管理系统实现科学化&#xf…

3.5 查找和排序算法

大纲 算法基础 常用的表示算法的方法 算法的复杂度 查找 顺序查找、二分查找 哈希查找 真题 排序 插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 排序算法总结 真题

【数据结构】双向带头循环链表(c语言)(附源码)

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;数据结构 目录 前言 1.双向带头循环链表的概念和结构定义 2.双向带头循环链表的实现 2.1 方法声明 2.2 方法实现 2.2.1 创建新节点 2.2.2 初始化 2.2.3 …