【万字长文】基于大模型的数据合成(增强)及标注

news2025/3/7 2:15:19

写在前面

由于合成数据目前是一个热门的研究方向,越来越多的研究者开始通过大模型合成数据来丰富训练集,为了能够从一个系统的角度去理解这个方向和目前的研究方法便写了这篇播客,希望能对这个领域感兴趣的同学有帮助! 欢迎点赞,收藏,关注!!!

第一次撰写时间: 20250304 17:27
第二次撰写时间: 20250305 08:55
未完待续!!!!

引言

大语言模型(Large Language Model)通过在大规模的语料上进行预训练,获得了强大地自然语言的理解和生成能力。随着OpenAI 提出 Scaling Law(通过增大数据量和模型参数量,可以得到更强的模型),研究者开始不断提高模型参数及数据量。但由于现实中的语料有限,所以越来越多的人开始关注合成数据。

起初,人们通过人工的方式进行标注数据,但这种方法由于成本高,且存在人类偏见(bias)。随着大模型能力的提升,人们开始关注于利用大语言模型去生成(合成)数据,用以进一步扩充数据集,提交数据集的多样性和丰富性。这种方法相较于人工方式,其成本较低且准确率也有所提高,所以越来越多的人开始利用大语言模型去合成数据以实现在下游任务上更好的性能表现。

所以本文将按照不同的分类方法对目前基于大模型的数据合成方法进行全面的介绍,主题包括:

  1. 方法论

通过总结现存研究的方法总结出一个统一的数据合成框架

重点关注利用大语言模型合成数据的各类方法,并强调各类方法在合成数据的两大关键质量指标做出的贡献:

  • 真实性(Faithfulness): 为了提供有效的监督,生成的数据必须首先在逻辑和语法上是连贯的。然而,大型语言模型(LLMs)固有的幻觉和长尾知识分布问题可能会给生成的结果带来显著的噪音,表现为事实错误、不正确的标签或无关的内容。当生成长篇、复杂或特定领域的数据时,这些问题会更加明显。
  • 多样性(Diversity):为了提高模型在下游任务的泛化能力,避免过拟合,数据的多样性非常重要。但是由于大模型自有的偏差,如果不进行控制,大模型生成的数据是很单一的,所以需要进一步控制。

问题定义

首先我们来定义一下问题生成的大致形式:
D gen ← M p ( T , D sup ) , \mathcal{D}_{\text{gen}} \leftarrow \mathcal{M}_{\mathcal{p}}(\mathcal{T},\mathcal{D}_{\text{sup}}), DgenMp(T,Dsup),其中 D g e n \mathcal{D}_{gen} Dgen表示生成的合成数据集, M \mathcal{M} M表示给定的大模型, p p p表示输入到大模型内的提示词 promot, D sup \mathcal{D}_{\text{sup}} Dsup表示小部分的有标签的数据集,后续可以通过 few-shot的形式给大模型进行更好的生成,从而提高合成数据集的质量。
为了对生成的数据集的质量进行控制, 保证该数据集存在较少的噪声且保证生成的数据的分布与真实的数据分布相差不要太远,保证了后续下游任务上数据的质量。此处重点关注两个部分(例如上述所说),真实性和多样性。所以后续的算法流程是为了更好地实现这两个目标

整体框架

整体的框架可以分为:Data Generation,Data Curation, Data Evaluation。 Data Generation重点关注数据合成的方法和流程;Data Curation重点关注为了保证数据的质量,需要把一些不好的数据(例如:具有假标签,相似度较高的数据)进行过滤,介绍各种目前主流的对数据质量控制的方法。 Data Evaluation重点介绍对数据质量的评估方法,包括最近很火的 LLM-as-a-judge 和一些通用的 benchmark评估。

Data Generation

Prompt Engineering:
基于提示词工程的方法很简单,就是通过设计一个很好的提示词在帮助大模型能够更好的遵循人类的指令而合成数据。提示词可以形式化表示为:
p ← ( e task , e condition , e demo ) , \mathcal{p} \leftarrow(e_{\text{task}},e_{\text{condition}},e_{\text{demo}}), p(etask,econdition,edemo),其中 p \mathcal{p} p表示为设计好的提示词, e task e_{\text{task}} etask表示为与特定任务相关的话术(类似于:rule-play的方式,你是一个在 xxx领域的专家,负责生成 xxx的数据); e condition e_{\text{condition}} econdition是为了控制问题生成的多样性从而给定生成问题的特定限制或条件(类似于生成数据的类型:复杂等),原因在于:如果不给大模型生成特定的限制或条件,大模型倾向于生成一些相似且简单的问题,不利于合成数据集的多样性。 e demo e_{\text{demo}} edemo是利用大模型 few-shot或 In-context learning的能力,给大模型示例已生成与真实数据更加相似的数据。

  • Task Specification:
    任务特定的提示词就不过多说了,就是与特定任务相关的一些信息,包括上述说到的 rule-play,与特定任务相关的外部知识等等
  • Conditional Prompting:
    合成数据生成的关键是确保足够的多样性,因为直接提示大语言模型(LLMs)为某些任务生成数据,往往会导致输出高度重复,即使使用较高的问题进行采样。为了解决这个问题,一个广泛采用的策略是条件提示,它明确而具体地向大语言模型传达所需的数据类型。条件提示的核心在于通过一系列条件-值对来界定目标数据:
    e condition = { ( c 1 , v 1 ) , ( c 2 , v 2 ) , ( c 3 , v 3 ) . . . ( c k , v k ) } . e_{\text{condition} = \{(c_1,v_1),(c_2,v_2),(c_3,v_3)...(c_k,v_k)\}}. econdition={(c1,v1),(c2,v2),(c3,v3)...(ck,vk)}.
    通过组合不同的条件的键值对可以得到我们定义的多样性,通过这样我们能够显式地迫使大模型生成更多丰富的合成数据。
    目前对于条件提示的研究主要集中在两个方面:
    (1)Conditioning Scope.
    这个其实在研究的是上述 e condition e_{\text{condition}} econdition中的 { c 1 , c 2 , … , c k } \{c_1,c_2,\ldots,c_k\} {c1,c2,,ck}也就是条件的键有哪些,在对于分类问题中,我们可以根据特定地标签作为键。在后续的研究中提出,使用更细致的属性(比如主题、长度和风格进行条件提示,可以因为可能的属性组合数量庞大,从而带来更多样化的生成结果,这也适用于开放式数据。
    (2)Conditioning Value.
    在定义了条件范围之后,我们还需要给每个条件分配具体的值。对于分类问题来说,就可以很简单地从标签值内进行采样得到。其他的一些方法:从外部知识图谱中检索条件实例;利用大型语言模型来生成多样化的实例用于条件提示;此外,提示模板E也可以被视为一种特殊的条件。研究表明,在整个生成过程中加入一定程度的随机性的模板可以增强生成内容的多样性
  • In-Context Learning:
    利用大模型上下文学习能力进行 few-shot的学习。这也是控制了生成数据的真实性,通过给大模型几个示例是一种很简单但却很高效的方式。

Multi-Step Generation
在前面,我们介绍了一种最常见的方式:利用设计更好的提示词来提高大模型的能力。 然而,在大多数情况下,由于缺乏足够的推理能力,期望大型语言模型在一次参考中生成整个所需的数据集是不现实的,特别是当目标数据具有复杂的结构或语义时。为了解决这个问题,一种常见的策略是多步骤生成,通过这种方式,整体生成过程被手动分解为一系列更简单的子任务 T 1 : k T_{1:k} T1:k
所以可以分解为一步步的方式,首先对每一个子任务 T i T_i Ti生成 ,所以问题生成就可以形式化为:
D i ← M p i i ( T i , D 0 : i − 1 ) , i = 1 , 2 , … , k , \mathcal{D}_i \leftarrow \mathcal{M}^i_{\mathcal{p_i}}(T_i,\mathcal{D}_{0:i-1}),i=1,2,\ldots,k, DiMpii(Ti,D0:i1),i=1,2,,k, 其中 D 0 : i − 1 \mathcal{D}_{0:i-1} D0:i1表示为在生成第 i i i步或子任务的时候,可以利用前 i − 1 i-1 i1步生成的内容为前提继续生成。具体来说,任务分解有两种常见的策略:样本分解(Sample-Wise Decomposition)和数据集分解(Dataset-Wise Decomposition),主要是为了提高不同尺度上合成数据的质量。

  • Sample-wise Decomposition:
    对于一些推理任务等需要多步才能生成一个样本的方式,我们可以把一个样本的生成过程分解为多步,每一步只生成样本的一部分,所以最后完整的 D gen \mathcal{D}_{\text{gen}} Dgen可以表示为:
    D gen ← ( D 1 , D 2 , … , D k ) , \mathcal{D}_{\text{gen}} \leftarrow (\mathcal{D}_1,\mathcal{D}_2,\ldots,\mathcal{D}_k), Dgen(D1,D2,,Dk),
  • Dataset-wise Decomposition
    有时候整体合成的数据集不可能一次性生成的非常好,要生成一系列这样的数据,最终能形成一个具有良好多样性和领域覆盖率的dataset,需要长期的规划。所以我们可以通过一次合成数据之后放到下游任务上,看看表现,把那些表现不好的数据在下一次合成的时候进行补充,让下游任务在这类数据上继续训练,提高其在这类数据上的表现。所以这类分解可以形式化表述为:
    D gen = ⋃ i = 1 k D i , \mathcal{D}_{\text{gen}}=\bigcup_{i=1}^k \mathcal{D_i}, Dgen=i=1kDi,
    具体来说,在每一轮迭代中都针对下游模型在之前生成数据上训练的性能,针对最常被错误标记的类别进行优化;一种先生成再扩展的范式,以此来提高整个数据集的多样性。还有一些方法利用特定的数据结构来模拟数据生成的路径,把领域空间建模为树状结构,并在树遍历的过程中不断优化生成数据,以此来促进生成数据的专化和领域覆盖。
Data Curation

因为合成的数据虽然通过上述方式提高了其真实性和多样性。在做了前面的步骤之后,可能会过度生成溢出和理论上无限的数据 D gen \mathcal{D}_{\text{gen}} Dgen。但是,这些数据集通常包含相当一部分的噪音、无价值甚至是有害的样本,这主要是由两个原因造成的。首先,由于幻觉问题,LLMs不可避免地会产生带有错误标签的损坏样本。其次,包含模糊描述的不当提示可能会让模型生成不相关或重复的样本。因此,如果不经过适当处理就直接使用这些低质量的数据,可能会产生很大的负面影响。
为了解决这个问题,已经研究了许多数据管理方法,这些方法主要分为两大类:高质量样本过滤(hige-quality sample filtering)和标签增强(label enhancement),如下所述。
在这里插入图片描述
High-Quality Sample Filtering
因为大模型生成的数据集总是会有一些错误,所以我们需要进行过滤,得到一个更加干净且有用的数据集 D curated ⊂ D gen \mathcal{D}_{\text{curated}} \subset \mathcal{D}_{\text{gen}} DcuratedDgen,然后基于这种思想的方法可以分为两种:heuristic criteria,re-weighting functions 去过滤或重排名(rerank)这些合成的数据。

  • heuristic criteria: 通过某一些特定的指标(启发式规则)等方式,并设定阈值直接筛选出其中比较重要且干净的数据集。
  • re-weighting functions: 这类方法认为合成的数据可能是有一些是有噪声的数据,但是这类数据也是有价值的,不应该直接被过滤掉而不使用他们,而是通过给不同的数据赋予权重的方式以实现不同数据的重要性的体现。

Label Enhancement
标签增强方法努力纠正生成样本中可能存在的错误标注。因为存在确认偏误,大型语言模型很难发现自己犯的错误。为了解决这个问题,最近的研究要么依赖人工干预,要么引入学生模型来实现无人工的知识的提炼。

  • Human Intervention
    一个简单的标签修正策略是让人类重新标注受损的样本。尽管这些方法很简单,但在实际应用中可能会导致相当高的标注成本,并且不太现实。
  • Auxiliary Model
    为了降低标注成本,开发了一种更务实的无人工干预范式,该范式涉及用于知识蒸馏和标签精炼的辅助学生模型。这些方法依赖于学生模型的弱监督能力,并假设从大型语言模型(LLM)教师中蒸馏出的学生模型可以生成更优质的标签。开创性工作FreeAL(Xiao等,2023)提出了一个协作框架,在这个框架中,学生模型被用来从弱标注中提取高质量的任务相关知识,并反馈给LLM进行标签精炼。MCKD(Zhao等,2023a)设计了一个多阶段的蒸馏流程,通过数据拆分训练和跨分区标注来避免对噪声标签的过拟合。
    随着LLM能力和可用性的不断扩展,辅助学生模型的结合将作为一种成本效益高的替代方案,在人类干预中发挥更重要的作用。
Data Evaluation

在这里插入图片描述

在经过上述的两个过程,我们已经得到了合成的数据集,但是为了保证在下游任务上的表现,还需要对合成的数据进行评估,目前评估的方法主要分为两类:直接和非直接的方法。

  • 直接评估(direct evaluation)
    检查真实性(Faithfulness): 一种最方便的方式就是从中采样一些样本,然后给人类专家进行评估,样本量越大对其评估就越准确,但这类方法的弊端就是人工成本很大。所以也有一些研究利用更大的模型进行检测(LLM-as-a-judge)
    检查多样性(Diversity):数据多样性的量化主要使用词汇统计和样本相关性计算。词汇统计,比如词汇量和N-gram频率(Yu等人,2023b),是一种简单直观的方法。但是,它们很难捕捉到数据集的语义信息。样本相关性的计算有效地弥补了这一不足。最常见的样本相关性度量是基于余弦相似度(Wang等人,2023b)和样本距离(Chung等人,2023b),这些方法能更好地捕捉到数据集的上下文和语义多样性。
  • 间接评估(indirect evaluation)
    Benchmark:核心思想在于在合成的数据集上对下游任务的模型进行训练,然后模型的表现也从侧面反应了生成的数据的质量。 对于模型性能的评估有一些方法,包括:TruthfulQA用于模型在回答真实问题上的能力。NIV2用于评估模型的自然语言的理解能力和推理能力。
    Open Evauation:有的时候由于一些问题没有准确的答案,所以就要用到辅助大模型来进行评估,所以目前的研究开始设计如何能让大模型评估的更加准确,例如:response ranking,four-level rating system。然而,通用型大型语言模型可能缺乏足够的知识来完成特定领域的任务,这阻碍了它们提供有效的评估。所以,为了评估目的收集人类评估数据,对开源模型进行微调,这在现实场景中是一个很重要的做法。
  1. 合成数据的方式

总结合成数据的方式,类似于:data creation, data labeling data reforment Co-annotation

  • Data Creation: 通过 few-shot的形式,利用少量的数据prompt大模型合成数据;
  • Data Labeling: 对已有的数据进行标注;
  • Data Reforment: 对先有的数据进行改写其他的数据,以增大数据集的多样性和丰富性;
  • Co-annotation: human-llm 协作的方式,类似于:先用大模型生成,然后挑出其中不好的数据,在人工检查。
  1. 基于合成数据的学习范式

目前利用合成的数据所对下游任务任务进行训练或学习的用法,包括 in-context learning suprised instruction tuning,performance alignment 等

目前大模型的学习或训练以提高下游任务的性能方法,可以包括:不用训练的方式:上下文学习(few-shot)的方式进行;微调(训练):sft(surprised fine-tuning),performance alignment(PA)等。

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

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

相关文章

MacBook上API调⽤⼯具推荐

在当今的软件开发中,API调用工具已经成为了开发者不可或缺的助手。无论是前端、后端还是全栈开发,API的调试、测试和管理都是日常工作中的重要环节。想象一下,如果没有这些工具,开发者可能需要手动编写复杂的CURL命令,…

【数据结构】LRUCache|并查集

目录 一、LRUCache 1.概念 2.实现:哈希表双向链表 3.JDK中类似LRUCahe的数据结构LinkedHashMap 🔥4.OJ练习 二、并查集 1. 并查集原理 2.并查集代码实现 3.并查集OJ 一、LRUCache 1.概念 最近最少使用的,一直Cache替换算法 LRU是Least Recent…

初识Qt · 信号与槽 · 基础知识

目录 前言: 信号和槽初识 两个问题 前言: 本文我们正式开始介绍信号与槽这个概念,在谈及Qt中的信号与槽这个概念之前,我们不妨回顾一下Linux中的信号,比如发生了除0错误,OS就会给该进程发送一个信号&am…

Java高频面试之集合-03

hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶 面试官:说说ArrayList和LinkedList的区别 ArrayList 与 LinkedList 的详细对比 一、底层数据结构 特性ArrayListLinkedList存…

宇树科技再落一子!天羿科技落地深圳,加速机器人创世纪

2025年3月5日,机器人行业龙头宇树科技(Unitree)在深圳再添新动作——全资子公司深圳天羿科技有限公司正式成立。这家注册资本10万元、法定代表人周昌慧的新公司,聚焦智能机器人研发与销售,标志着宇树科技在华南市场的战…

【长安大学】苹果手机/平板自动连接认证CHD-WIFI脚本(快捷指令)

背景: 已经用这个脚本的记得设置Wifi时候,关闭“自动登录” 前几天实在忍受不了CHD-WIFI动不动就断开,一天要重新连接,点登陆好几次。试了下在网上搜有没有CHD-WIFI的自动连接WIFI自动认证脚本,那样我就可以解放双手&…

计算机毕业设计SpringBoot+Vue.js电商平台(源码+文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

【杂谈】信创电脑华为w515(统信系统)登录锁定及忘记密码处理

华为w515麒麟芯片版,还有非麒麟芯片版本,是一款信创电脑,一般安装的UOS系统。 准备一个空U盘,先下载镜像文件及启动盘制作工具,连接如下: 百度网盘 请输入提取码 http://livecd.uostools.com/img/apps/l…

初始提示词(Prompting)

理解LLM架构 在自然语言处理领域,LLM(Large Memory Language Model,大型记忆语言模型)架构代表了最前沿的技术。它结合了存储和检索外部知识的能力以及大规模语言模型的强大实力。 LLM架构由外部记忆模块、注意力机制和语…

Vue+el-upload配置minIO实现大文件的切片并发上传、上传进度展示、失败重试功能

vue3el-upload实现切片上传 效果图 初始界面 上传中的界面 上传完成的界面 上传失败的界面 <template><div><el-uploadclass"BigFileUpload"ref"uploadRef"action"#"drag:show-file-list"false":on-change"…

正则表达式梳理(基于python)

正则表达式&#xff08;regular expression&#xff09;是一种针对字符串匹配查找所定义的规则模式&#xff0c;独立于语言&#xff0c;但不同语言在实现上也会存在一些细微差别&#xff0c;下面基于python对常用的相关内容进行梳理。 文章目录 一、通用常识1.通配符ps.反义 2.…

【仿muduo库one thread one loop式并发服务器实现】

文章目录 一、项目介绍1-1、项目总体简介1-2、项目开发环境1-3、项目核心技术1-4、项目开发流程1-5、项目如何使用 二、框架设计2-1、功能模块划分2-1-1、SERVER模块2-1-2、协议模块 2-2、项目蓝图2-2-1、整体图2-2-2、模块关系图2-2-2-1、Connection 模块关系图2-2-2-2、Accep…

服务流程设计和服务或端口重定向及其websocket等应用示例

服务流程设计和服务或端口重定向及其websocket等应用示例 目录 服务或端口重定向的服务设计和websocket等应用示例 一、通用请求控制流程 1.1、入口 1.2、所有GET请求首先预检控制单元 1.3、http请求会分别自动307重定向 1.4、所有请求首先执行跨源控制单元 1.5、然后…

【数据库】关系代数

关系代数 一、关系代数的概念二、关系代数的运算2.1 并、差、交2.2 投影、选择2.3 笛卡尔积2.4 连接2.5 重命名2.6 优先级 一、关系代数的概念 关系代数是一种抽象的数据查询语言用对关系的运算来表达查询 运算对象&#xff1a;关系运算符&#xff1a;4类运算结果&#xff1a;…

ubuntu20 安装python2

1. 确保启用了 Universe 仓库 在某些情况下&#xff0c;python2-minimal 包可能位于 Universe 仓库中。你可以通过以下命令启用 Universe 仓库并更新软件包列表&#xff1a; bash复制 sudo add-apt-repository universe sudo apt update 然后尝试安装&#xff1a; bash复制…

MySQL无法连接到本地localhost的解决办法2024.11.8

问题描述&#xff1a;我的MySQL可以远程连接服务器&#xff0c;但无法连接自己的localhost。 错误提示&#xff1a; 2003 - Cant connet to MySQL server on localhost(10061 "Unknown error")查找问题原因&#xff1a; 1. 检查环境变量是否正确&#xff1a;发现没…

最新Spring Security实战教程(一)初识Spring Security安全框架

&#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Micro麦可乐的博客 &#x1f425;《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程&#xff0c;入门到实战 &#x1f33a;《RabbitMQ》…

告别GitHub连不上!一分钟快速访问方案

一、当GitHub抽风时&#xff0c;你是否也这样崩溃过&#xff1f; &#x1f621; npm install卡在node-sass半小时不动&#x1f62d; git clone到90%突然fatal: early EOF&#x1f92c; 改了半天hosts文件&#xff0c;第二天又失效了... 根本原因&#xff1a;传统代理需要复杂…

Leetcode 1477. 找两个和为目标值且不重叠的子数组 前缀和+DP

原题链接&#xff1a; Leetcode 1477. 找两个和为目标值且不重叠的子数组 class Solution { public:int minSumOfLengths(vector<int>& arr, int target) {int narr.size();int sum0;int maxnINT_MAX;vector<int> dp(n,maxn);//dp[i]表示以索引i之前的满足要求…

R语言绘图:韦恩图

韦恩分析 韦恩分析&#xff08;Venn Analysis&#xff09;常用于可视化不同数据集之间的交集和并集。维恩图&#xff08;Venn diagram&#xff09;&#xff0c;也叫文氏图、温氏图、韦恩图、范氏图&#xff0c;用于显示元素集合重叠区域的关系型图表&#xff0c;通过图形与图形…