虽然生成大量合成数据可以做到,但其真正的价值在于数据具有多样性和独创性。同质或重复的合成数据可能导致您的LLM学到表面模式,无法泛化到新的、未见过的输入,甚至造成性能下降,比如模型崩溃等情况。此处提供实用的方法,以充分提升合成数据集的多样性和独创性,确保它们能为您的模型训练和微调工作提供高质量的输入。为什么需要多样且新颖的合成数据设想一下,如果一个为客服设计的LLM只用礼貌的询问来训练。虽然它在处理这类问题上表现会很出色,但面对沮丧或愤怒的客户消息时,它很可能会表现不佳。训练数据的多样性让您的模型为各种输入做好准备。另一方面,独创性则确保合成数据不只是对现有信息的重复,而是引入新颖的情景或表达方式,这能拓展模型的理解力。如果缺乏足够的多样性和独创性,您的合成数据可能会:导致模型对合成样本的特定风格或内容过度拟合。未能覆盖边缘情况或较少见的情景。如果有限的多样性反映了狭窄的视角,可能引入意外的偏见。提供递减的回报,因为增加更多同类数据为模型带来的新信息很少。提升多样性的策略合成数据的多样性指的是数据集中主题、风格、结构和词汇的广度。以下是实现这一点的方法:良好开端:种子数据和提示的作用输出的质量通常是输入的反映。丰富种子样本: 如果您的生成过程依赖于种子数据(例如,用于少样本提示或作为释义的基础),请确保这些种子本身是多样的。一个小型、同质的种子集几乎必然导致一个同质的合成数据集。从不同来源获取种子,覆盖不同的子主题,并包含不同程度的复杂性。设计多样的提示结构: 在使用LLM进行生成时,不要只依赖单一的提示模板。开发多个模板,以不同方式询问信息,或从不同角度设置任务。例如,与其总是使用“为X写一篇产品评论”,不如尝试“描述一个X有用的情景”,或者“从初学者角度看X的优缺点是什么?”加入占位符: 在您的提示中使用占位符,这些占位符可以从预定义列表中填充不同值,或实时生成。例如:"Generate a short story about a [character_role] who discovers a [magical_object] in a [setting]."通过改变[character_role]、[magical_object]和[setting],您可以生成各种独特的叙事。调整生成参数大多数LLM提供控制其输出随机性和创造性的参数。请尝试以下这些:温度(Temperature): 较高的温度值(例如,0.8-1.0)使输出更随机,可能更有创造性,从而带来更大的多样性。较低的值(例如,0.2-0.5)使输出更集中和确定。Top-p (核心) 采样: 此技术仅考虑累积概率超过阈值 $p$ 的最可能词元。更高的 $p$ 值(例如0.95)允许更大的多样性,而更低的 $p$ 值使选择更保守。Top-k 采样: 此方法将LLM的选择限制在最可能的 $k$ 个下一个词元。更大的 $k$ 可以增加多样性。为这些参数找到适当平衡通常是一个迭代过程。过多的随机性可能导致语无伦次或毫无意义的文本,而过少则可能导致重复的输出。利用多种生成来源和方法不要把所有的鸡蛋放在一个篮子里。结合LLM: 如果您能获得多个LLM(即使是同一模型族的不同大小),请用每个模型生成数据并结合结果。不同的模型可能具有不同的优势,并产生多样化的输出。混合技术: 将通过LLM生成的数据与来自其他方法(如基于规则的系统、回译或释义模型)的数据混合。每种技术都能为多样性贡献不同的“风味”。下图说明了不同策略如何有助于产生多样化的输出。digraph G { rankdir=LR; node [shape=box, style="rounded,filled", fillcolor="#e9ecef", fontname="sans-serif"]; edge [fontname="sans-serif"]; subgraph cluster_seeds { label="输入与提示策略"; bgcolor="#f8f9fa"; s1 [label="多样的种子样本", fillcolor="#a5d8ff"]; s2 [label="多样的提示模板", fillcolor="#a5d8ff"]; } subgraph cluster_generation { label="生成时技术"; bgcolor="#f8f9fa"; g1 [label="温度与采样\n(例如,↑温度增加随机性)", fillcolor="#96f2d7"]; g2 [label="多源生成\n(例如,LLM A + LLM B)", fillcolor="#96f2d7"]; g3 [label="迭代扩展\n(例如,Self-Instruct)", fillcolor="#96f2d7"]; } subgraph cluster_post { label="生成后优化"; bgcolor="#f8f9fa"; p1 [label="释义与回译", fillcolor="#ffec99"]; p2 [label="扰动与掩码", fillcolor="#ffec99"]; } subgraph cluster_output { label="期望结果"; bgcolor="#f8f9fa"; out [label="高独创性\n和\n高多样性\n合成数据", shape=ellipse, fillcolor="#b2f2bb"]; } s1 -> out [label="增加输入多样性"]; s2 -> out [label="引导多样化输出"]; g1 -> out [label="控制输出随机性"]; g2 -> out [label="结合优势"]; g3 -> out [label="生成新颖任务/数据"]; p1 -> out [label="修改表层形式"]; p2 -> out [label="创建变体"]; }提高合成数据生成中多样性和独创性的方法概览。迭代生成框架Self-Instruct(您可能在第四章中提到过)等技术旨在生成新任务或指令,这本质上提升了所产生指令-响应对的多样性。Evol-Instruct 更进一步,通过演化现有指令来创建更复杂和多样的指令。这些框架能有效生产用于微调的大型、多样化数据集。增强独创性的策略独创性确保您的合成数据不仅仅是对现有文本(无论是您的种子数据还是LLM的训练数据)的轻微修改。真正的独创性涉及生成新颖的理念、组合或表达。超越表层变化虽然释义可以增加表面多样性,但它不一定总能带来真正原创的内容。为培养更深的独创性:提示进行抽象和综合: 与其要求LLM“重写”一段文本,不如让它“总结主要论点”、“用简单语言解释基本原理”,或“结合文本A和文本B的观点提出一个新方案”。侧重思想提取: 指导模型从源文本中提取特定类型的信息或思想,然后使用这些提取出的元素来生成全新的文本。控制与已知语料的重叠一个重要的挑战是确保LLM生成的合成数据与其自身的训练语料库不过度相似,这可能导致记忆问题。相似性检查: 尽管难以全面做到,但您可以在生成数据与潜在训练语料库中任何已知敏感部分或您自己的源文档之间进行相似性检查(例如,使用n-gram重叠或嵌入相似性),如果合成数据旨在与它们相比具有新颖性的话。负面约束: 尝试使用明确阻止重复的提示,例如:“解释概念X,但不要使用与之相关的常见短语”,尽管其有效性可能有所不同。通过创意约束培养新颖性通过设置创意任务,引导LLM走向独创性:情景生成: 要求LLM为情景生成文本。“设想一个[不寻常的前提]的情景。描述[特定任务]将如何不同。”组合不同概念: 提示模型连接或找到看似无关的想法之间的关系。“写一段哲学家和软件工程师关于人工智能伦理的对话,其中融入海洋生物学的比喻。”衡量独创性和多样性:实用指标“如果你无法衡量它,你就无法改进它。”评估合成数据的多样性和独创性是一个重要一步。词汇多样性指标这些指标关注词汇的丰富程度。词型-词例比 (TTR): 这是一个简单的衡量方法,计算方式为文本或数据集中唯一词汇数(词型)除以总词汇数(词例)。 $$ TTR = \frac{\text{唯一词汇数(词型)}}{\text{总词汇数(词例)}} $$ 较高的TTR通常表示更大的词汇多样性。然而,TTR对文本长度敏感(较短的文本往往有较高的TTR)。为了进行比较,请确保文本长度相似,或使用标准化的TTR衡量方法,如Root TTR或Corrected TTR。其他词汇衡量指标: 像Yule's K或Honoré's R这样的指标提供了更多衡量词汇丰富度的标准,并且较少依赖于样本大小。语义多样性分析词汇多样性无法衡量含义是否多样。为此,我们转向语义分析,通常使用文本嵌入。平均成对不相似度: 为所有合成样本生成嵌入。然后,计算所有唯一嵌入对之间的平均余弦距离(或其他距离指标,如欧几里得距离)。较高的平均距离表明更大的语义分布。 $$ \text{平均语义距离} = \frac{1}{N(N-1)/2} \sum_{i<j} \text{distance}(emb_i, emb_j) $$ 其中 $N$ 是样本数量, $emb_i$ 是样本 $i$ 的嵌入。嵌入可视化: 使用UMAP(均匀流形近似与投影)或t-SNE(t分布随机邻近嵌入)等降维技术,将高维嵌入投影到2D或3D空间。直观地检查这些图可以帮助您了解数据是聚集还是分散。紧密聚集的簇可能表示语义多样性较低。{"data": [{"x": [1, 1.1, 0.95, 1.05, 0.85, 4.5, 4.6, 4.4, 4.55, 4.35, 2.5, 5, 0.5], "y": [1, 0.9, 1.1, 1.05, 0.95, 4.5, 4.4, 4.6, 4.35, 4.55, 0.5, 2.5, 4.5], "text": ["Sample A1", "Sample A2", "Sample A3", "Sample A4", "Sample A5", "Sample B1", "Sample B2", "Sample B3", "Sample B4", "Sample B5", "Outlier 1", "Outlier 2", "Outlier 3"], "mode": "markers", "type": "scatter", "name": "合成样本", "marker": {"color": ["#fa5252","#fa5252","#fa5252","#fa5252","#fa5252", "#20c997","#20c997","#20c997","#20c997","#20c997", "#5c7cfa", "#5c7cfa", "#5c7cfa"], "size": 10, "line": {"width":1, "color":"#495057"}}}], "layout": {"title": {"text":"合成数据的语义空间示例", "x":0.5}, "xaxis": {"title": "嵌入维度1(降维)", "showgrid": false, "zeroline": false}, "yaxis": {"title": "嵌入维度2(降维)", "showgrid": false, "zeroline": false}, "showlegend": false, "width": 600, "height": 450, "font": {"family": "sans-serif"}, "plot_bgcolor": "#f8f9fa"}}文本嵌入的2D投影示例。形成不同簇(例如,红色和绿色组)的数据点表明主题多样性,而广泛分散的点(蓝色)可能代表高度新颖的数据或异常值。一个非常密集的单个簇将表明语义多样性较低。N-gram重叠和独特性这些方法有助于识别逐字重复或近似重复。数据集内重叠: 计算生成数据集中重复n-gram(例如,三元组,四元组)的百分比。高重叠表明重复性。与源数据的重叠: 如果您的合成数据源自或受特定源文档启发,请衡量与这些源的n-gram重叠,以确保您不仅仅是复制现有内容。去重: 实施严格或模糊的去重流程,以删除相同或高度相似的样本。细节的人工评估指标提供定量见解,但人工审查对于评估独创性和真正多样性的细节方面非常宝贵。人工评估者可以:识别不同的措辞是否仍然过于频繁地传达相同的基础思想。判断理念或情景的真正创新性。检测数据虽然词汇多样,但听起来是否不自然或“机器生成”。平衡之举:有用多样性与噪音目标不仅仅是不惜一切代价的最大多样性和独创性。极端随机性可能产生语无伦次、事实不正确或与目标任务无关的数据。目的是生成有用的多样性:即多变且新颖,但仍合理、连贯,并与您的LLM预期领域和风格一致的数据。持续监控生成数据的质量,并调整策略以保持这种平衡。这涉及生成、使用所讨论指标进行评估以及改进生成技术的迭代循环。