研究背景
在大语言模型(LLMs)的发展过程中,合成数据逐渐成为关键资源,特别是用于训练和增强模型能力。然而,传统的合成数据生成方式在扩展数据规模时常常面临多样性不足的问题。现有研究尝试通过实例驱动或关键点驱动的方法生成多样化数据,但这些方法在大规模生成时存在明显的局限性。因此,如何实现多样性和规模化的统一,成为合成数据生成领域的一个重大挑战。
研究目标
为解决上述问题,本文提出了一种基于"角色驱动"的合成数据生成方法,旨在通过构建一个包含10亿个角色的"Persona Hub"来从不同的视角生成多样化的数据。这些角色作为世界知识的分布式载体,能够指导LLM生成与之相匹配的多样性数据。研究目标包括展示该方法在多种场景(如数学问题、逻辑推理问题、用户指令、知识丰富文本、游戏NPC及工具开发)中的应用,并探讨其在推动LLM研究与应用中的潜在价值。
相关工作
现有的合成数据生成主要依赖于以下两种方法:
实例驱动生成:通过利用种子语料库生成新实例,例如基于种子实例进行扩展。然而,这种方法的多样性主要来源于种子语料库本身,扩展性受限,难以突破语料库的限制。
关键点驱动生成:通过预定义的全面关键点列表进行生成,如主题、概念等。这种方法也面临着在广泛领域内难以覆盖所有关键点的问题,尤其在需要跨领域生成多样化数据时效率较低。
本文提出的"角色驱动"方法,通过引入不同角色的视角来指导LLM生成数据,从而在理论上实现了大规模多样化数据生成的可能性。
方法论
角色构建
Persona Hub 的构建基于两种主要方法:
文本转角色:通过从海量的网络文本数据中推断出可能的角色。例如,根据一个科技论文的内容,可以推断出撰写或阅读该论文的角色是"神经网络研究员"。这一方法通过大语言模型对文本的理解来生成角色描述,可以细化到非常具体的职业和兴趣领域。
角色转角色:在生成初步角色的基础上,通过人与人之间的关系(如患者与护士、同事关系等)进一步生成关联角色。例如,一个儿童护理护士可以推导出与其相关的角色,如一名患有慢性疾病的儿童。通过多次迭代,进一步丰富角色集合。
为了保证角色的多样性,本文使用了基于MinHash和嵌入的去重技术,最终生成了约10亿个独特角色。
角色使用方式
角色驱动的数据生成方法核心在于将角色嵌入到数据生成的提示中,从而让大语言模型以该角色的视角生成特定内容。本文提出了三种生成方式:
- 零样本生成(Zero-shot prompting):直接使用角色生成合成数据,无需任何示例。
- 少样本生成(Few-shot prompting):提供若干示例以确保生成的数据符合预期。
- 角色增强的少样本生成:结合角色描述和少样本提示,生成更加符合角色特征的数据。
这种方法可以灵活应用于多种数据生成场景,具有高度的通用性和扩展性。
用例
数学问题
通过引入角色(如"化学动力学研究员"或"高中数学教师")来生成不同背景下的数学问题。
并通过1.07百万个生成实例微调的7B模型,在MATH基准测试集上取得了64.9%的准确率,表现优于多个开源模型,并接近GPT-4-turbo-preview的表现。
逻辑推理问题
生成不同类型的逻辑推理问题,包括空间推理、弱智吧风格的问题等。
指令
模拟不同类型用户的需求,生成指令以供LLM进行指令微调。
对更多例子感兴趣的读者可以参考通过 0-shot和角色增强的2-shot提示合成的50,000条指令
知识增强文本
利用角色生成有深度的知识文章,例如关于植物学、建筑保存的文章。
游戏NPC
向LLM提供游戏的背景和世界构建信息,我们就可以提示LLM将角色角色中心(通常是真实世界的角色)投射到游戏世界中的角色中。这样,我们就可以显著减少在游戏设计过程中进行头脑风暴的npc所需的努力。以天涯明月刀为例:
工具开发
我们可以使用个人角色中心来预测用户可能需要的工具,以便我们可以预先预先构建这些工具(函数)。当实际用户发出类似的请求时,LLM可以直接调用这些预先构建的工具来返回结果,而不必每次都从头开始构建工具。