强大大型语言模型(LLM)的开发很大程度上依赖于获取多样化的数据集。合成数据提供了一种实用的方法来满足这些数据需求,尤其是在真实数据因可用性、成本或隐私考量而受限时。那么,合成数据到底是什么?本质上,合成数据是人工生成而非由直接事件或测量产生的信息。 在大语言模型的背景下,这指的是通过算法或其他模型创建的文本、代码、指令-响应对或其它数据格式,而不是由人类在自然语境中书写或从现有的人类生成产物中收集的。可以打个比方:真实数据就像自然场景的照片,按其原貌拍摄。而合成数据则更像逼真的数字绘画或场景的详细3D渲染。虽然它可能旨在高度相似于现实或描绘不易找到的特定元素,但其来源是创造性或生成性过程,而非直接观察。你可能想知道我们为什么要费力去创建数据。如前所述,现代大语言模型对训练材料有巨大需求。通常,特定任务所需的数据类型或数量不易获得。真实数据在小众方面可能稀缺,可能带有隐私问题(如个人可识别信息或敏感医疗记录),获取和标注成本可能过高,或者仅仅无法覆盖你希望大语言模型学习的特定边缘情况或期望的行为。合成数据生成为应对这些挑战提供了一种有效途径。区分精心设计的合成数据与单纯的随机噪声或“虚假”信息很重要。高质量的合成数据是经过有目的地设计,旨在具备几个有价值的特点:统计相似性: 它常力求反映相关真实数据集中发现的统计特性、模式和潜在分布。例如,如果生成合成客户支持对话,你会希望某些问题的频率、语气以及交互的典型长度与真实对话保持一致。任务特定性: 合成数据可以针对特定任务或方面进行精确调整。如果目标是训练大语言模型从自然语言描述中生成Python代码,可以合成大量(自然语言,Python代码)对。可控变异性: 它允许系统性引入变体,生成稀有事件的例子,或确保不同类别间的平衡表示,这在使用自然获取的数据时可能难以实现。隐私保护: 一个重要优势是,合成数据可以生成,以捕获真实数据集的统计洞察,同时不包含任何实际的个体记录。这在处理受严格隐私法规约束的数据时具有非常大的价值。生成合成数据的方法种类繁多。它们可以从相对简单的基于规则的系统和模板(例如:“公司{公司名称}宣布了{产品名称},它将{动作动词}市场。”)到使用其他机器学习模型,包括大语言模型本身,生成新数据点的高度复杂方法,这种技术常被称为自我指令或数据蒸馏。我们将在第二章“合成文本生成的核心技术”中详细审查这些方法。为了进一步阐明,以下是真实数据和合成数据之间一些区别的比较:特性真实数据合成数据来源事件、人类交互、传感器算法、模型、模拟获取方式观察、测量、记录生成、计算、合成可用性可能稀缺、有偏差或不完整潜在无限,可设计以实现平衡成本通常很高(收集、标注、存储)生成成本各异;规模化后可降低隐私可能暴露敏感信息可设计为保护隐私可控性对内容和分布的控制有限对特点和场景的高度控制偏见反映偏见可能继承源数据/生成中的偏见;也提供缓解方法独创性直接独创派生;独创性取决于生成方法并非总是非此即彼的选择。通常,合成数据用于扩充现有真实数据集。这可能涉及填补覆盖空白、平衡偏斜分布,或只是增加训练材料的总量。在某些场景下,尤其对于新应用或真实数据极难获取时,合成数据甚至可以作为训练大语言模型的主要依据。基本思想是,合成数据是大语言模型开发者工具包中的多功能工具。它提供了一种生成信息的方法,可以训练、微调和评估模型,尤其是在数据源不足时。然而,合成数据的效用在很大程度上依赖于其质量、与当前任务的相关性,以及其生成与大语言模型的预期学习目标匹配程度。在本课程中,一个核心主题将是了解如何有效地生成和使用高价值合成数据。以下图表显示了真实数据和合成数据进入大语言模型训练过程的来源和流程:digraph G { bgcolor="transparent"; rankdir="LR"; node [shape=box, style="rounded,filled", fillcolor="#e9ecef", fontname="sans-serif"]; edge [fontname="sans-serif"]; subgraph cluster_0 { label = "数据来源"; style = "rounded"; bgcolor = "#f8f9fa"; /* Light gray background for the subgraph */ fontname="sans-serif"; real_world [label="事件\n(例如,对话、文档)", fillcolor="#a5d8ff"]; /* Light Blue */ algorithms [label="算法与模型\n(例如,基于规则的系统,其他LLM)", fillcolor="#b2f2bb"]; /* Light Green */ } subgraph cluster_1 { label = "数据类型"; style = "rounded"; bgcolor = "#f8f9fa"; /* Light gray background for the subgraph */ fontname="sans-serif"; authentic_data [label="真实数据", fillcolor="#74c0fc"]; /* Blue */ synthetic_data [label="合成数据", fillcolor="#8ce99a"]; /* Green */ } llm [label="大语言模型 (LLM)\n训练 / 微调", shape=cylinder, fillcolor="#ffec99", height=1.5]; /* Yellow */ real_world -> authentic_data [label=" 收集与观察", color="#495057"]; algorithms -> synthetic_data [label=" 生成过程", color="#495057"]; authentic_data -> llm [label=" 用于训练", color="#1c7ed6"]; synthetic_data -> llm [label=" 用于训练", color="#37b24d"]; }此图显示了真实数据(来源于事件)和合成数据(由算法或模型创建)如何作为大语言模型训练或微调的输入。这个初步定义将合成数据确立为一种独特的类别,而非次要或劣等的数据类型,具有其自身优势和特定应用。重要的是有策略地生成和应用它,以促进大语言模型的发展。本章接下来的部分将在此基础上展开,进一步分析大语言模型为何需要如此大量的数据,对合成和真实数据源进行更详细的比较,并概述常见的生成方法。