【大模型 数据增强】LLM2LLM:迭代学习 + 针对性增强 + 错误分析 + 合成数据生成 + 质量控制

LLM2LLM:迭代学习 + 针对性增强 + 错误分析 + 合成数据生成 + 质量控制

    • 提出背景
      • 针对性和迭代性数据增强(LLM2LLM)
      • 步骤1:在数据集上训练
      • 步骤2:在数据集上评估
      • 步骤3:生成额外数据
    • 算法流程
    • 医学领域数据增强,对比和其他增强方法的独特之处
    • 全流程优化
      • 问题识别
      • 提出解法
      • 子解法及潜在替代品
      • 替换一个子解法

 


提出背景

论文:https://arxiv.org/pdf/2403.15042.pdf

代码:https://github.com/SqueezeAILab/LLM2LLM

当前,预训练的大型语言模型(LLMs)是解决绝大多数自然语言处理任务的最先进技术。

尽管许多实际应用仍需要进行微调才能达到令人满意的性能水平,但其中许多应用处于低数据范畴,使得微调变得具有挑战性。

为了解决这一问题,我们提出了LLM2LLM,一种针对性和迭代的数据增强策略,该策略使用一个教师LLM来增强小型种子数据集,通过增加可以用于特定任务微调的附加数据。

  • (1)在初始种子数据上对基线学生LLM进行微调
  • (2)评估和提取模型预测错误的数据点
  • (3)使用教师LLM根据这些错误数据点生成合成数据,然后将这些数据重新加入到训练数据中。

这种方法通过在训练期间放大LLM预测错误的数据点的信号,并将它们重新整合到数据集中,专注于对LLM来说更具挑战性的例子。

我们的结果显示,LLM2LLM在低数据范畴中显著提高了LLM的性能,超过了传统微调和其他数据增强基准。

LLM2LLM减少了对劳动密集型数据整理的依赖,为更可扩展和高性能的LLM解决方案铺平了道路,使我们能够应对数据受限的领域和任务。

我们在使用LLaMA2-7B学生模型的低数据范畴中,在GSM8K数据集上实现了高达24.2%的改进,在CaseHOLD上为32.6%,在SNIPS上为32.0%,在TREC上为52.6%,在SST-2上为39.8%,超过了常规微调。

针对性和迭代性数据增强(LLM2LLM)


LLM2LLM框架,它使用教师模型(M_teacher)生成新的训练数据点以提高学生模型(M_student)的性能。

步骤1:在数据集上训练

  • 子解法1:种子数据集上的微调
    • 之所以使用这个子解法,是因为我们需要建立一个对特定任务有初步理解的基线模型。

例如,在医学领域,这意味着首先在一个包含医疗术语和病例的初始数据集上训练模型。

步骤2:在数据集上评估

  • 子解法2:评估学生模型并提取错误
    • 之所以使用这个子解法,是因为需要识别出学生模型在哪些类型的问题上表现不佳,特别是在它未能准确预测或解答的数据点上。

在医学方面,可能要识别出模型在诊断特定疾病或理解复杂病症描述方面的缺陷。

步骤3:生成额外数据

  • 子解法3:使用教师模型生成合成数据
    • 之所以使用这个子解法,是因为我们要通过合成数据来扩展训练集,特别关注学生模型答错的那些问题。

在医学应用中,如果学生模型无法正确理解某些症状和治疗方案的关系,教师模型就可以生成包含这些元素的新问题和答案,用于进一步训练学生模型。

图中的示例说明了这个过程:正确答案的例子会被保留,而错误答案的例子则被用来生成新的训练数据。

然后,这些新生成的数据(LLM2LLM数据)会被重新加入训练数据集中,用于进一步训练学生模型。

这个循环过程帮助学生模型在更加困难的问题上进行自我改进,从而提升其在特定任务上的性能。

例如,在医学领域,一个模型可能需要在一组特定的病例报告中识别出不常见的疾病。

如果在初始训练中模型不能正确执行这一任务,LLM2LLM方法就可以通过分析错误答案来生成新的、类似但更具挑战性的病例报告,进而用这些新生成的报告来增强模型对这类病例的理解和识别能力。

拆解 3 步:

  • 子解法1:迭代微调学生LLM
    • 之所以使用这个子解法,是因为要提高模型在少数据情况下的性能。

首先,在初始数据集上微调一个学生LLM,然后对训练数据进行评估,找出模型训练后错误的数据点。

这样可以确保模型在后续迭代中专注于那些难以正确预测的例子,从而提高性能。

举例来说,如果初次微调后的模型在识别罕见疾病名称和相关症状上表现不佳,这一步骤就能够识别出这类错误,为下一步生成针对性的训练数据做准备。

  • 子解法2:使用教师LLM生成合成数据
    • 之所以使用这个子解法,是因为需要更多的、针对性的训练数据来改进学生LLM。

使用教师LLM基于模型预测错误的数据点生成新的合成数据,这些数据随后被加回训练数据集中。

例如,针对学生模型难以准确识别的罕见疾病和症状,教师LLM可以生成更多包含这些罕见疾病描述的文本数据。

这样不仅增加了训练数据集的多样性,也帮助学生模型更好地学习和理解这些罕见病症的特点。

  • 子解法3:Self-Instruct风格的数据增强
    • 之所以使用这个子解法,是因为传统的数据增强方法(如同义词替换、字符替换)不足以扩展训练数据,尤其是在新领域和专业任务中。

通过采用Self-Instruct风格的数据增强,我们能够根据教师LLM的输出生成更加丰富和多样化的训练示例,从而更有效地扩展训练数据集。

在这个步骤中,可以通过模拟真实世界中的医学案例,生成包含复杂病例描述、多样化症状和治疗方法的数据。

例如,创建一个关于急性和慢性疾病治疗反应不同的合成病历报告,这有助于模型更好地理解不同疾病状态和治疗方案之间的关系。

这些子解法的结合,即LLM2LLM方法,通过在训练过程中不断迭代优化和精准目标化数据增强,有效解决了在少数据情况下微调LLMs的挑战,显著提升了模型在特定任务上的性能。

算法流程

问题:预训练的语言模型在面对目标领域数据时(如医疗数据集),零样本或微调后性能不佳。

解法:LLM2LLM框架,它使用教师模型(M_teacher)生成新的训练数据点以提高学生模型(M_student)的性能。

  1. 初始化学生模型(M0_student)和教师模型(M_teacher),并设置初始数据集(D0)。
  2. 进入迭代过程:从i=0开始,直到达到预定的迭代次数n。
  3. 微调学生模型(M^i_student)。
  4. 用学生模型评估当前数据集(Di),并记录评估结果(Ei)。
  5. 筛选出模型预测错误的数据点(W^i)。
  6. 使用教师模型基于错误数据点生成新的训练数据(A^i)。
  7. 将新生成的数据(Ai)加入到现有数据集中(D{i+1} = D^i + A^i),以供下一轮迭代使用。
  8. 完成迭代后,评估学生模型的最终性能(M^*_student)。

医学领域数据增强,对比和其他增强方法的独特之处

在医学领域进行数据增强时,LLM2LLM方法的独特之处在于它是针对性和迭代性的,而且特别关注于改善学生模型在特定数据点上的性能不足。

对比于其他数据增强方法,如简单的同义词替换或随机文本扰动,LLM2LLM提供了以下独特优势:

  1. 针对性强化:LLM2LLM专注于学生模型在初次评估中回答错误的数据点。这意味着数据增强不是盲目进行的,而是有针对性地解决学生模型的弱点。

在医学领域,这一点尤其重要,因为模型需要对复杂的医疗术语和临床案例有精确的理解。

通过专注于错误答案,可以生成新的案例,例如模拟不同的症状描述或治疗响应,从而直接提升模型在这些关键区域的性能。

  1. 迭代学习:通过迭代过程,模型不断地在新生成的、更具挑战性的数据上训练。

每轮迭代后,模型都将获得更丰富的训练数据,这有助于提升其在复杂医学问题上的准确性和鲁棒性。

  1. 质量控制:LLM2LLM通过限制使用教师模型生成的数据,来防止错误的传播和数据质量的下降。

这在医学领域至关重要,因为错误的信息可能会导致严重的后果。通过确保数据增强专注于改进错误答案,该方法可以有效控制数据集的质量。

  1. 避免数据膨胀:该方法限制了合成数据生成的范围,仅在原始错误答案的基础上进行增强,而不是整个数据集。

这避免了数据膨胀问题,确保了训练集的管理和处理更加可控,同时也降低了过拟合的风险。

在医学领域的具体应用中,例如提高模型在分类罕见病症或解析复杂医疗图像方面的能力,LLM2LLM能够生成更加贴近实际临床场景的数据,比如根据模型识别错误的病症症状生成新的案例,

这些案例在结构和语义上与原始案例不同,但又足够相似,以挑战和训练学生模型。

这样的迭代过程确保了模型不仅学习到了特定任务的表层特征,也能够适应和泛化到更广泛的医学语境和情景。

全流程优化

当我们分析一个完整的流程,从问题识别到提出解法,再到具体的子解法及其潜在替代方案,这个过程涉及到深入了解问题的本质、现有解决方案的局限性,以及潜在替代方案的可行性。

让我们以LLM2LLM方法在医学领域的应用为例,来分析这个流程。

问题识别

  • 主问题:预训练的语言模型在特定领域(如医学领域)的任务上表现不佳。
  • 问题要素:语言模型可能缺乏对医学术语的理解、对罕见疾病描述的识别能力,以及对复杂医疗数据的处理能力。

提出解法

  • 解法:使用LLM2LLM,一种迭代的数据增强框架,通过教师模型生成错误数据点的新训练数据,来改进学生模型。
  • 解法要素:迭代学习 + 针对性增强 + 错误分析 + 合成数据生成 + 质量控制。

子解法及潜在替代品

  • 子解法1:迭代微调

    • 要素:数据集的质量、增强数据与原始数据的一致性、模型的适应性和泛化能力。
    • 替代品:传统的微调方法,比如使用更大规模的数据集进行一次性微调。
    • 对比分析:传统微调可能在数据丰富的情况下有效,但在数据受限的医学领域中,LLM2LLM的迭代微调可以更精确地解决模型的弱点。
  • 子解法2:生成合成数据

    • 要素:合成数据的真实性、多样性、以及与任务相关性。
    • 替代品:使用现有的医学数据库或开源医学数据集进行数据增强。
    • 对比分析:现有数据库可能没有覆盖学生模型性能不足的特定区域,而LLM2LLM可以根据模型的错误直接生成有针对性的训练数据。
  • 子解法3:限制合成数据的生成

    • 要素:数据管理、训练效率、避免过拟合。
    • 替代品:在每次迭代中使用全部错误数据点生成合成数据。
    • 对比分析:无限制地增加合成数据可能会导致模型训练效率低下和过拟合。LLM2LLM通过限制生成的数据数量,保证了数据质量和训练效率。

替换一个子解法

  • 替换:将“生成合成数据”替换为“使用现有医学数据集增强”。
  • 分析:虽然现有医学数据集可能提供了大量真实的医学案例,但这些数据可能不具备LLM2LLM所追求的针对性和个性化。

现有数据集可能缺少学生模型所需的特定错误类型的案例,这将减少微调过程中针对性强化的机会,可能导致模型在特定任务上的性能提升不如LLM2LLM方法明显。

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

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

相关文章

c++之旅第八弹——多态

大家好啊,这里是c之旅第八弹,跟随我的步伐来开始这一篇的学习吧! 如果有知识性错误,欢迎各位指正!!一起加油!! 创作不易,希望大家多多支持哦! 一&#xff0…

Java项目:74 ssm基于Java的超市管理系统+jsp

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 功能包括:商品分类,供货商管理,库存管理,销售统计,用户及角色管理,等等功能。项目采用mave…

Selenium 自动化 —— 浏览器窗口操作

更多内容请关注我的专栏: 入门和 Hello World 实例使用WebDriverManager自动下载驱动Selenium IDE录制、回放、导出Java源码 当用 Selenium 打开浏览器后,我们就可以通过 Selenium 对浏览器做各种操作,就像我们日常用鼠标和键盘操作浏览器一…

Spring Data Elasticsearch 与ES版本对应关系记录

参考: Versions :: Spring Data Elasticsearch

探索文件管理新境界:XYplorer,您的高效办公助手

在这个数字化时代,文件管理已经成为我们日常工作和生活中不可或缺的一部分。但是,你是否经常在寻找一个文件时感到力不从心?是否厌倦了传统的文件管理方式?别担心,XYplorer 来了,它将彻底改变你的文件管理体…

❤ leetCode简易题1-两数之和、简易2--回文数判断、简易14-最长公共前缀

❤ leetCode简易题1-两数之和、简易题14- 最长公共前缀 1、简易1-两数之和 ① 题目要求 数字A B target,以target为求和结果,找出数组中符合的A、B数字下标。 第一次做的时候完全脑子一片蒙,随后认真看了看题目发现是发现找符合target和…

了解一波经典的 I/O 模型

最近读了波网络 I/O 相关的文章,做下总结、摘录。(未完) 经典 I/O 模型 {% checkbox red checked, 阻塞式 I/O(blocking I/O) %}{% checkbox red checked, 非阻塞式 I/O(non-blocking I/O) %}…

docker可视化界面 - portainer安装

目录 一、官方安装说明 二、安装portainer 2.1拉取镜像 2.2运行portainer容器 2.3登录和使用portainer 一、官方安装说明: Install PortainerChoose to install Portainer Business Edition or Portainer Community Edition.https://www.portainer.io/install…

C# LINQ笔记

C# LINQ笔记 from子句 foreach语句命令式指定了按顺序一个个访问集合中的项。from子句只是声明式地规定集合中的每个项都要访问,并没有指定顺序。foreach在遇到代码时就执行其主体。from子句什么也不执行,只有在遇到访问查询变量的语句时才会执行。 u…

Unbtun环境切换

之前的环境都是下载到系统环境里面的,后面安装了anaconda发现切换不到系统环境里面了,通过查找资料可以发现: ubuntu的python可分为三大类: ubuntu自带的系统python环境 一般安装在/usr/bin/中python2和python3可以共存 anaconda…

[Qt学习笔记]Qt实现自定义控件SwitchButton开关按钮

1、功能介绍 在项目UI中使用较多的打开/关闭的开关按钮,一般都是找图片去做效果,比如说如下的图像来表征打开或关闭。 如果想要控件有打开/关闭的动画效果或比较好的视觉效果,这里就可以使用自定义控件,使用Painter来绘制控件。软…

JavaScript的学习笔记

<script src"index.js" defer></script>&#xff0c;defer的作用是延迟加载index.js文件 定义变量 变量的类型分为两大类&#xff1a;基本类型和复合类型 JavaScript是一种弱类型语言&#xff0c;所以没有强类型语言所具有的int,float,char等等&#x…

VScode通过ssh连接github

通过ssh连接github 1.生成公钥和私钥2.设置config文件3.配置ssh免密登录4.远程仓库初始化 1.生成公钥和私钥 首先选择一个文件夹&#xff0c;右击 git bash here&#xff0c;在命令行输入命令&#xff0c;按下三次回车生成一个**.ssh文件夹**&#xff0c;一般在用户的user根目…

AI浪潮下,新闻媒体的新变革与记者职业的未来发展

中国媒体经历了从口口相传到报纸、再到电视&#xff0c;最后到互联网自媒体的演变过程。传统报业在新媒体冲击下面临着存亡的挑战。 中国媒体的演变概括如下&#xff1a; 19世纪初&#xff1a;主要依靠口口相传和阅读报纸获取信息&#xff1b;20世纪&#xff1a;电视逐渐取代报…

MyBatis:查询与连接池

一、查询 1、多表查询 尽量避免使用多表查询&#xff0c;尤其是对性能要求较高的项目。因为多表查询必然会导致性能变低。 例如&#xff1a;select *from ta运行需要10ms&#xff0c;select *from tb 运行也需要10s。但是&#xff0c;select *from ta left join tb on ta.xx…

zabbix监控vmware esxi

一、zabbix服务端配置 修改zabbix_server.conf配置文件 vim /etc/zabbix/zabbix_server.conf #######zabbix_server.conf底部第二行开始添加下面配置######## StartVMwareCollectors5 #StartVMwareCollectors - 预先启动Vmware collector收集器实例的数量。此值取决于要监控的…

GEE显示研究区sentinel-2每年可用影像

第一次使用GEE&#xff0c;用了别人的代码&#xff0c;想查看每年影像可用数量&#xff0c;但是老是报错&#xff0c;说是null geometry&#xff0c;之前我是用GAMMA软件导出的kml文件&#xff0c;后面在arcgis自己勾画了sho文件&#xff0c;线类型&#xff0c;然后我就在想会不…

MySQL进阶-----索引的结构与分类

目录 前言 一、认识索引 二、索引结构 1.概述 2. 二叉树 3 .B-Tree 4.BTree 5.Hash 三、索引的分类 1 .索引分类 2 .聚集索引&二级索引 前言 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构(有序)。在数据之外&#xff0c;数据库系统还维…

【第十二届“泰迪杯”数据挖掘挑战赛】【2024泰迪杯】B题基于多模态特征融合的图像文本检索—解题全流程(持续更新)

2024 年(第 12 届)“泰迪杯”数据挖掘挑战赛B题 解题全流程&#xff08;持续更新&#xff09; -----基于多模态特征融合的图像文本检索 一、写在前面&#xff1a; ​ 本题的全部资料打包为“全家桶”&#xff0c; “全家桶”包含&#xff1a;模型数据、全套代码、训练好的模…

OpenLayers基础教程——使用WebGLPoints加载海量点数据

1、前言 最近遇到一个问题&#xff1a;如何在OpenLayers中高效加载海量的场强点&#xff1f;由于项目中的一些要求&#xff0c;不能使用聚合的方法加载。一番搜索之后发现&#xff1a;OpenLayers中有一个WebGLPoints类&#xff0c;使用该类可以轻松应对几十万的数据量&#xf…