如你所知,对高质量数据的需求是现代大型语言模型开发的一个显著特点。当真实数据稀缺、昂贵或受隐私限制时,合成数据生成提供了一个实用的替代方案。本节概述了为大型语言模型创建人工数据的多种方法。这些方法涵盖了从简单的基于规则的系统到复杂的生成模型等不同种类。了解这些类别将有助于你为特定的大型语言模型项目选择合适的技术,无论是用于预训练还是微调。合成数据生成方法大致可分为几类,每类都有其自身的技术、优点和需要考虑的事项。digraph G { rankdir=LR; node [shape=box, style="rounded,filled", fontname="Arial"]; edge [fontname="Arial", color="#495057"]; Methods [label="合成数据生成方法", fillcolor="#4263eb", fontcolor="white", fontsize=14]; RuleBased [label="1. 基于规则与程序生成", fillcolor="#a5d8ff", color="#1c7ed6"]; Augmentation [label="2. 数据增强", fillcolor="#96f2d7", color="#0ca678"]; ModelBased [label="3. 基于模型生成", fillcolor="#ffc9c9", color="#f03e3e"]; Perturbation [label="4. 扰动与掩码", fillcolor="#ffd8a8", color="#f76707"]; Methods -> RuleBased; Methods -> Augmentation; Methods -> ModelBased; Methods -> Perturbation; Templates [label="模板与语法", shape=ellipse, style=filled, fillcolor="#e9ecef", color="#1c7ed6", fontcolor="#1c7ed6"]; RuleBased -> Templates; BackTrans [label="回译", shape=ellipse, style=filled, fillcolor="#e9ecef", color="#0ca678", fontcolor="#0ca678"]; Paraphrase [label="转述", shape=ellipse, style=filled, fillcolor="#e9ecef", color="#0ca678", fontcolor="#0ca678"]; HeuristicEdits [label="启发式修改(例如,同义词替换)", shape=ellipse, style=filled, fillcolor="#e9ecef", color="#0ca678", fontcolor="#0ca678"]; Augmentation -> BackTrans; Augmentation -> Paraphrase; Augmentation -> HeuristicEdits; Ngrams [label="统计模型(例如,N-gram)", shape=ellipse, style=filled, fillcolor="#e9ecef", color="#f03e3e", fontcolor="#f03e3e"]; GANsVAEs [label="早期神经网络模型(例如,用于文本的GAN和VAE)", shape=ellipse, style=filled, fillcolor="#e9ecef", color="#f03e3e", fontcolor="#f03e3e"]; LLMsGen [label="现代基于大型语言模型(例如,自我指令生成、提示)", shape=ellipse, style=filled, fillcolor="#e9ecef", color="#f03e3e", fontcolor="#f03e3e"]; ModelBased -> Ngrams; ModelBased -> GANsVAEs; ModelBased -> LLMsGen; }常见合成数据生成方法的分类。下面我们将详细介绍这些类别。基于规则与程序生成基于规则的方法是指利用预定义的规则、语法、模板或算法来生成文本。这些方法是数据生成中较为传统的技术,但在需要对输出结果有高精度和强控制时,它们仍然适用。模板与语法这种方式采用带有占位符的结构化模板,这些占位符通过程序或从列表中填充值。例如,要生成客服问题,你可以使用这样的模板:“我的[产品名称]的[功能]有问题。” [product_name]和[feature]将从预定义列表中填充。上下文无关语法(CFG)可以定义更复杂的句子结构,从而实现更广泛但仍受控的生成句子种类。优点:对内容和结构有高度控制。可以保证输出遵循特定格式或限制。对于简单的任务,实现相对容易。适用于生成具有特定已知属性的数据(例如,确保出现某些关键词)。缺点:定义全面的规则或语法可能需要大量人工。生成的文本可能缺乏自然性和多样性,听起来常是重复或人工痕迹明显。对于高度复杂的语言现象,可扩展性有限。易受影响;规则可能无法覆盖未预见的变化。基于规则的系统常用于为高度特定的任务启动数据集、生成代码,或创建模仿API响应的JSON对象等结构化数据表示。数据增强技术数据增强从现有的真实文本数据集开始,应用转换来创建新的合成样本。目标是增加数据集的大小和多样性,而无需从头开始创建全新内容。回译这种技术涉及将源语言(例如英语)的句子翻译成一种或多种目标语言(例如德语、西班牙语),然后再翻译回源语言。回译后的句子通常保留了原始含义,但使用了不同的措辞或句子结构。优点:可以有效地转述句子并引入词汇多样性。它会调用强大的机器翻译模型。缺点:生成数据的质量在很大程度上取决于所用翻译模型的质量。在两步翻译过程中,含义有时可能会被曲解或丢失(“翻译失真”)。可能无法引入深层的语义变化。转述模型专门的转述模型经过训练,专门用于改写输入文本,同时保持其语义内容。这些模型可以是经过转述任务微调的神经网络。优点:直接目标是生成相同含义的不同表达。与简单的基于规则的增强相比,可以产生听起来更自然的变体。缺点:性能与转述模型的复杂程度和训练数据相关。有时可能会产生过于相似的转述,或者反之,偏离原始含义太远。启发式修改这些是对文本进行的更简单、通常基于算法的转换:同义词替换:随机将词语替换为其同义词(例如,“big”替换为“large”)。需要注意,并非所有同义词都适用于所有语境。随机插入/删除:添加或删除词语。删除可以缩短句子,而插入可以添加填充词。词语/句子重排:改变句子内词语或段落内句子的顺序。这更具风险,因为它很容易破坏连贯性和语法。优点:实现简单且计算成本低。缺点:如果控制不当,生成语法错误或无意义文本的风险很高。通常会导致低质量、有噪声的数据,可能损害模型训练。修改通常停留在表面。基于模型生成基于模型生成采用统计模型或更普遍的神经网络模型来创建合成文本。这些模型从大量文本数据中学习模式,然后根据这些学习到的模式生成新的文本样本。统计模型(例如,N-gram)过去曾使用N-gram语言模型。N-gram模型根据前$n-1$个词预测下一个词。虽然是基础性的,但它们在捕获长距离依赖和生成高度连贯、新颖文本方面的能力有限。优点:易于理解和实现。可以捕获局部语言模式。缺点:生成的文本通常缺乏全局连贯性和创造性。难以处理长句和复杂想法。在高质量生成方面,已很大程度上被神经网络方法取代。早期神经网络模型(例如,用于文本的GAN和VAE)在Transformer模型占据主导地位之前,曾研究其他神经网络架构用于文本生成:生成对抗网络 (GANs):包含一个生成器负责创建文本,和一个判别器负责区分合成文本和真实文本。由于采样过程不可微等问题,为文本等离散数据训练GAN一直具有挑战性。变分自编码器 (VAEs):学习文本的压缩潜在表示,然后从这个潜在空间解码以生成新句子。它们可以产生多样文本,但有时缺乏其他方法的清晰度或流畅性。优点:可以学习复杂的数据分布。VAE可以通过潜在空间提供一些生成控制。缺点:GAN在文本训练方面非常困难。VAE有时会产生“模糊”或过于安全、通用的文本。在文本生成质量方面,通常不如现代大型语言模型。现代基于大型语言模型的生成这是目前功能强大且应用广泛的方法。大型语言模型在海量文本语料库上预训练,本身就是出色的合成数据生成器。它们可以通过提示或微调来生成用于多种用途的文本。零样本或少样本提示:你向大型语言模型提供自然语言指令(提示),可能带有一些示例,然后它会生成遵循该指令的文本。例如,“为一台虚构的咖啡机写一篇产品评论,强调其易用性和快速冲泡时间。”自我指令生成及其变体(例如,Evol-Instruct):这种技术涉及让大型语言模型生成新指令,然后让相同或另一个大型语言模型为这些指令生成响应(或输入-输出对)。这创建了一个反馈循环,用于生成多样化的遵循指令数据集。例如,一个大型语言模型可能首先生成任务“用简单的语言解释光合作用的原理”,然后生成一个适当的解释。用于生成的微调:一个较小、针对特定任务的大型语言模型可以在种子数据集(可以是真实的或部分合成的)上进行微调,然后用于生成更大体量的相似数据。优点:可以生成高度流畅、连贯且与上下文相关的文本。能够产生多样化的输出并遵循复杂的指令。可以生成特定风格、语气或格式的数据。像自我指令生成这样的技术可以快速扩大指令微调的数据集创建规模。缺点:可能继承并放大自身训练数据中存在的偏见。存在生成其原始训练集内容(记忆化)的风险。输出有时可能包含事实不准确或“幻觉”。通过API操作强大的专有大型语言模型在大规模应用时成本可能很高。过度依赖大型语言模型生成的纯合成数据可能导致“模型崩溃”或模型能力在多代训练后下降。扰动与掩码这些方法涉及对现有数据进行小幅修改,通常是为了增强隐私、提高稳定性,或创建特定类型的训练样本。数据掩码:识别并将敏感信息(如姓名、地址或专有代码)替换为通用占位符(例如,[人名]、[地点])。这对于创建保护隐私的数据集很重要。数据扰动:微调文本中的数值、日期或其他元素。例如,将价格从“$19.99”更改为“$20.05”。这有助于提高模型对微小输入变化的适应性。Token掩码/损坏:随机掩盖或损坏句子中的token,这可用于训练模型完成文本填充或去噪等任务。优点:可有效实现匿名化并创建符合隐私要求的数据集。可以提高模型对微小输入变化的抗干扰能力。实现相对直接。缺点:过度激进的掩码或扰动可能降低数据质量或改变含义。需要仔细设计,以确保合成数据对预期任务仍然有用。混合方式需要注意的是,这些方法并非总是单独使用。通常,最有效的合成数据生成流程会结合多种技术。例如,你可以使用大型语言模型生成文本的初始草稿,然后应用基于规则的系统以确保满足特定限制或插入特定实体。数据增强可以应用于大型语言模型生成的数据集,以进一步增加其规模和多样性。选择合成数据生成方法或其组合方式,很大程度上取决于以下因素:具体的大型语言模型应用(预训练、指令微调、特定任务)。所需数据的特点(例如,多样性、事实准确性、对特定风格的遵循)。种子数据(如果有)的可用性。计算资源和预算。对生成输出所需的控制程度。在学习本课程的过程中,你将看到这些方法的更多详细介绍,特别是它们如何应用于大型语言模型的预训练和微调,以及它们实现的实际考虑事项。后续章节将提供实践示例,并更细致地介绍那些影响大的技术,尤其是那些涉及大型语言模型作为生成器的技术。