本次研讨会涉及更通用且强大的内容,即如何使用我们创建的 Nemo Data Designer 工具构建数据管道,从而为模型或智能体添加任何类型的功能。让我们开始吧。顺便提一下,我在 GitHub 上有一个仓库,里面有一些笔记本代码。如果您感兴趣,可以扫描二维码或访问该 GitHub 仓库。我在其他幻灯片上也会保留相同的二维码,以防您错过获取机会。那么,本次研讨会的内容是什么?我们将学到什么?首先我们要学习的是如何将目标智能体行为转化为数据问题。基本上,我们能否为这种特定的智能体行为创建数据?然后训练模型学习如何执行该任务。为此,我们构建了一个名为 Data Designer 的工具来建立合成数据管道,这正是它的功能所在。
今天我们要针对的用例是搜索任务。顺便提一下,这是一个非常可复用的框架。如果您想为除搜索以外的其他内容创建数据,方法完全相同。参与本次研讨会的方式有两种:您可以跟随直播尝试运行笔记本代码;由于时间可能不到一小时,您也可以现在聆听,稍后再运行笔记本来实践。请确保获取 GitHub 链接。如果您需要幻灯片,我也将其放在了 GitHub 仓库中。无论您现在还是会后跟随操作,都需要准备四样东西:首先是一台配备 GPU 的机器,如云虚拟机或工作站;其次是 Tavi 搜索 API 密钥。Tavi 是一家为智能体提供搜索服务的公司,注册其网站可免费获得一千个积分。
您还需要 Data Designer 工具来创建数据,它是完全开源的,任何人都可以下载、使用或随意处理。此外还需要我提供在 GitHub 仓库中的所有笔记本代码。以下是今天的议程:我们将花几分钟介绍 Data Designer 是什么以及为什么需要这样的框架,然后讲解基础知识。我将展示三个笔记本的代码:第一个介绍 Data Designer 的基础知识,即如何创建所需数据;第二个涉及模型上下文协议(MCP),讲解如何创建智能体数据;第三个则是关于搜索这一超有趣用例,展示如何教模型进行搜索。最后留出时间回答问题。
我想以 Andre Karpathy 的一句名言开篇:“互联网数据并非你为 Transformer 模型所需的数据。”这是一个非常有力的观点,因为互联网数据来源不一:既有维基百科这样的高质量来源,也有 Twitter 或 X 等其他平台上个人的观点。那么我们如何判断哪些数据对训练 AI 模型有用,哪些无用呢?传统方法是对互联网数据进行处理和策展,从而创建训练数据。而我们提出的方案是:直接从零开始或基于种子数据集合成生成数据,这正是 Data Designer 的用武之地。
Data Designer 是一个用于创建合成数据的框架。“种子数据”是什么意思?例如,您可以使用维基百科数据作为种子,从中尝试创建合成训练数据。这样生成的合成数据并非由模型凭空捏造,而是扎根于真实世界的分布和数据中。Data Designer 是一个完全开源的框架,NVIDIA 有一个大型团队致力于此工作。您可以通过运行 pip install data-designer 来安装它。我们引以为豪的是,Data Designer 已用于创建六万亿五千亿个 token 的训练数据,且这一数字每天都在增加。我们也关注 GitHub Star 数量,如果您喜欢我们的仓库请为我们点赞。
什么是合成数据生成?一种方法是运行循环一百万次,例如若要创建产品评论数据集,就不断提示大型语言模型(LLM):“给我一个产品”、“给我一条评论”,然后“给出一个客户画像”。这是一种创建数据集的方法,但会遇到诸多问题。缺失了什么?首先是多样性,这是最重要的因素。如果不断提示 LLM,经过十几次甚至二十次尝试后,它开始重复内容,无法提供您所需的数据。其次,缺少数据集中各特征之间的关联性;缺乏多模态能力;难以引导数据集的创建过程;且没有验证机制。
如果我创建一个数据集,很难与您分享,因为您无法复现我创建该数据的过程和逻辑。这就是我们创造 Data Designer 的原因。它是如何工作的?Data Designer 包含许多不同的列或特征,这些本质上是 Data Designer 的抽象概念。在 Data Designer 中,我们逐列生成数据:首先是种子列(完全可选),例如之前提到的维基百科数据集。我们可以使用任何 CSV、JSONL 或 Parquet 文件作为种子,甚至可以使用贵公司数据。然后可以添加采样器列以注入多样性。例如创建编程数据集时,简单的采样器可以是“简单、中等、困难”的代码问题难度等级。
还可以添加子采样器,例如将“简单”映射到特定类型的问题,“中等”映射到另一种问题等。这些概念听起来可能有些抽象,但通过查看代码我们会详细展开。此外还有用于生成文本、结构化数据和代码的列。Data Designer 现已支持多模态,可以生成图像。您还可以验证生成的内容。其核心理念是……
构建一个描述数据集应如何构成的有向无环图(DAG)或图形,然后一旦你准备好执行它,只需点击一下即可从中获取数据集。因此今天我们将 walkthrough 三个不同的笔记本。嗯,我知道有些人在想:“好吧,在2026年他是要给我们展示代码对吧?”我的意思是现在有了 CodeEx 和 Cloud Code 以及所有这些令人惊叹的工具。所以我认为如果你理解代码,使用 CodeEx 或 Cloud Code 为你编写自己的合成数据工作流程将会容易得多。嗯,所以我们将简要查看每个笔记本。顺便说一下,这是我们的仓库。也就是我们的 Data Designer 仓库,它是完全开源的。嗯,这是我为本研讨会创建的 GitHub 仓库,里面包含了笔记本。所以你
可以尝试笔记本1、2和3,此外我们还有幻灯片在这里,如果你想跟随演示或者在研讨会后访问幻灯片。那么让我们进入第一个笔记本。这是我们的 Data Designer 简介笔记本。大家都能看见吗?好的,还是我应该放大一点?这样就好。好了,首先我们要设置环境。这里有一堆我们
正在导入的提示词(prompts)。然后我们所做的就是导入 Data Designer。字面意思上就是这样。嗯,一旦你这样做,你会看到在 Data Designer 中有一个“模型提供者”的概念。嗯,我们目前使用的是 VLLM,也就是本地推理。所以我是在一个 Nvidia GPU 集群上运行这个程序,然后我们可以访问不同类型的模型,对吧?所以在我的本地集群中,我
可以访问 GPT-OSS 120B(1200亿参数模型)。你可以使用任何模型或开源模型来创建合成数据。嗯,一些闭源模型由于许可问题阻止你从中创建数据并用于训练其他模型。但开源模型通常是可以自由使用的。所以我使用这个模型,嗯这里的目标是:我能否实际上取一个维基百科主题的
数据集用于本笔记本。就像你知道的,维基百科有那么多不同的页面和许多不同的主题。所以我们只是列出了这些主题放入一个 CSV 文件中,然后我们基本上只需调用我们的配置构建器并传入种子数据集。所以本质上现在我们要
尝试创建一个 Data Designer 工作流程,但使用的是维基百科主题。嗯,一旦你这样做,你可以添加问题难度等级。你可以说是简单、中等、
困难,或者你想要数据集呈现的任何方式。然后还有权重可以指定。所以你可以拥有比简单或困难更多的中等难度问题。此外还可以添加各种关于问题难度的采样器列。例如对于简单的问题,你可能会使用直接查找、简单事实或定义;而对于困难问题,你可能需要更详细
或者晦涩的内容。然后一旦我们进入 LLM 生成的列,你只需调用这个函数 add column(添加列),然后你有你的提示词,它基本上看起来像这样。
正在努力寻找中。
找到了。所以,“你是一位专业的 trivia(冷知识)问题编写专家。”嗯,这里有一个主题难度和题型。所以每当你在这些 ginger 模板中放入主题时,它将在运行时插入你之前创建的或在种子数据集中从维基百科获取的那些主题。所以本质上每个 LLM 看到的提示词现在都是独特且多样的。
因此当你实际点击生成时,模型将为你提供多样化的数据。嗯,此外你还可以拥有结构化列。所谓结构化列是指与其尝试生成文本数据
不如你可以尝试生成 JSON 或 Markdown 格式,或者任何你感兴趣的自定义格式。嗯我们知道 LLMs(大型语言模型)你需要对它们友好,你必须
与它们交流,但有时它们可能不会给出你想要的结构化格式。所以我们最终只能丢弃那些记录。
所以数据创建的工作方式是我们在 Data Designer 中有一个称为预览模式的功能。所以当点击预览时,它将尝试为你创建三条记录,然后你可以去查看这些记录。所以让我们看一些记录。这样一切都会变得更加清晰。这里的主题是“万维网”。嗯,问题或者是关于
某个万维网的联盟以及问题是:“哪个由三个字母缩写标识的 W3C 推荐标准,同时也作为挪威某个城市的机场代码?”所以我根本不可能知道这个问题的答案,对吧?这就是为什么这些问题本质上很难,因为你希望调用模型进行搜索。但在第一个笔记本中,我们只是
尝试创建问答对。所以这是一个非常简单的数据集。我想这是模型得出的答案。然后你还可以添加“LLM 作为裁判”来评估你的模型表现如何。这是模型提出的问题,这是它得出的答案。然后嗯这个是问题质量评分。所以我们可以让另一个模型来评判前一个
模型创建的问题怎么样,等等。所以在最后你最终会得到这样一个数据集。顺便说一下,我们有一个函数可以让你直接将你的数据集推送到 Hugging Face 平台。嗯所以使用起来超级简单,而且你也可以在这里可视化你所有的提问,正如你所见。然后你可以获得一些关于你的数据集的统计信息。显然我们这里只生成了三条
记录,所以嗯你知道这些统计数据没有太大意义,但如果你生成数百或数千条记录,就可以这样做。然后我们有一个称为批处理模式的功能。所以即 data designer.create 在这里我不需要写100,我可以只输入我需要多少其他记录,然后我可以去创建所有这些记录。正如我之前提到的我们逐列生成数据
所以在批处理模式下首先你生成问题然后生成答案对吧这显然是一个非常简单的例子,然后你有 LLM 作为裁判
这里是你的最终数据集看起来就是这个样子。这就是第一个笔记本。我认为一旦你查看并尝试它,它是相当直截了当的。嗯我们有一个第二个笔记本侧重于
更多 MCP 相关内容然后我们将构建到第三个笔记本,我认为每个人都会觉得它很有趣因为那里我们实际上会讨论搜索。抱歉。 >> 是的。 >> 哦对了所有的 GitHub 链接都是一样的,我只是把它们放在每一张幻灯片上。所以如果你错过了第一个你可以获取它。但如果你想扫描的话我会在这里暂停一分钟。
那么,我们来谈谈 MCP。MCP 是一个标准,它允许智能体(Agent)本质上连接到工具。这里的“Tavily”就是一个搜索工具,专为智能体设计。当然还有其他许多搜索工具。基本上,我们要教模型的核心能力是如何进行搜索。Tavily 是一个很好的工具,供模型学习如何执行搜索操作。
回到第二个笔记本(Notebook)。在这里,我们将基于第一个笔记本中的一些简单概念,并增加如何创建智能体数据的内容。你仍然有导入库、模型配置以及相同的种子数据集和采样器列,例如问题难度、问题类型等。然后你实际创建这个问题,最后得到一个配置(尽管它以浅色打印显示)。这本质上是你正在创建的图结构,接着是答案。
这与之前的情况完全相同,不同之处在于在创建答案时,我们添加了这个工具别名(tool alias)。现在的目标不再是仅仅尝试回答问题,而是模型将使用 Tavily 搜索工具去互联网上寻找答案。这就是我们基于第一个笔记本所做的改进:之前是“请生成一个问题,然后请生成一个答案”,现在是“请生成一个问题,并且你有一个可用的工具,请使用该工具去尝试寻找答案,而不是直接生成答案”。这就是第一个和第二个笔记本之间的区别。
接着你有预览模式,可以生成几条记录并查看它们。顺便提一下,数据创建是一个非常迭代的过程,并不是一次性完成的。当你创建了一些数据后,你会查看它们。如果你不满意,那么你可能需要更改工作流或提示词(prompts),然后进行迭代优化。一旦你满意了,就可以将其发送到批量执行模式。
让我们看看第二个笔记本产生了什么结果。假设问题是:“Telefunken 在1949年将总部迁至哪个德国城市?”有人知道答案吗?不知道。好吧,我不知道答案。我们希望创建具有挑战性的问题,以激发模型的推理能力和工具调用能力。当模型试图回答这个问题时(如你所见),它使用了 Tavily 搜索工具。
它的第一个搜索查询是:“Tell if you can moved its headquarters in 1949 to which company”(如果能,它在1949年将总部迁至哪家公司?)。它使用了一个名为 Tavily 的搜索工具,然后获取答案。这是模型的查询请求,以下是结果:所有 URL、每个 URL 的标题以及内容。这就是 Tavily 提供给代理(Agent)的内容,当代理发出查询时,最终你会得到响应。
最后,你可以像上次一样以批量模式创建数据集。如果你认为我只是快速浏览了前两个笔记本,那是因为这其中的核心内容在第三个笔记本中。这也是我今天希望大家重点关注的部分。让我们谈谈搜索,因为我们刚才通过几个笔记本展示了如何使用 Data Designer 工具,这很好,但我们实际要解决的问题是什么?
正如我之前提到的,我是 NVIDIA 的研究科学家,也是 Neotron 团队的一员。Neotron 是我们创建的一系列开源基础模型集合。我们刚刚发布了最新的 Ultra 模型,此外还有另外两个不同尺寸的模型。作为这项工作的一部分,我们需要教 Neotron 如何进行搜索。这非常重要,因为也许现在感觉有些遥远了,但两三年前,大家可能还记得查看 ChatGPT、Claude 或 Gemini 的网页界面时,上面写着“知识截止日期为2023年12月”。
之所以这样标注,是因为模型必须在某个时间点开始训练。因此,你必须在某个时候停止收集和数据创建工作。假设他们在2024年1月训练模型,那么在2023年12月前,他们必须冻结数据。也就是说,在2023年12月之后模型所知道的内容并不包含在其训练数据中。因此,如果你问“今天的天气如何”,模型无法从训练数据中找到答案来回答这个问题。(观众回应:是的。)
确实,一定要扫描二维码。那么问题来了:你如何教模型了解时事?因为学习时事似乎与甚至超过了解过去的事情一样重要。这就是搜索功能存在的原因,也是模型需要学习如何进行搜索的原因。回到幻灯片内容,教 Neotron 模型如何使用搜索工具是我们的动机所在。本质上,模型需要访问实时信息才能做有用的事情。
那么我们要如何做到这一点呢?在我解释具体方法之前,我们需要一个衡量进步的指标。在基础模型社区中,当你需要衡量某方面的进步时,你会使用基准测试(benchmark),即没有答案的标准化测试集。搜索的一个基准是 BrowseComp,这是一个非常困难的基准测试。
目前正值 FIFA 世界杯期间,我不知道这里有多少足球迷(我不称其为 Soccer),但我是一个铁杆球迷。问题如下:“1990年至1994年间,哪支球队在一场由巴西裁判执法的足球比赛中收到了四张黄牌(每队两张,共三张?此处原文可能有误或指特定情境)……”我不会读完整个问题的其余部分,但这确实是一个相当复杂的问题。
没有任何人能凭记忆直接回答这个问题,或者只有极少数专家能脱口而出。回想三四年前,面对这样复杂的查询,我们会尝试将问题分解,然后推理出应该进行哪些搜索。我们会在 Google 或其他地方进行搜索以获取更多信息,然后再根据原始目标和我们获得的信息进行推理。
NVIDIA Data Designer 框架介绍:通过合成数据管道训练 Agent 搜索能力(4/7)
访问这些信息,然后在此基础上继续推进,最后得出答案。对吧?所以答案是爱尔兰对阵罗马尼亚。我以前不知道这一点。嗯,那么我们究竟是如何创建一个数据集,使我们能够训练模型在 BrowseCom 基准测试中从 0% 提升到 30% 的呢?嗯,这就是我们今天将要了解的内容。为此,我们采取了一些措施……我们使用了一个种子数据集,我之前提到过这个概念,只不过我们的种子数据不仅仅是维基百科的内容,它本质上是一个由维基主题构成的图谱。
这个数据集被称为 WikiData(维基数据)。我们所做的是沿着这个图谱进行几次跳转,这些节点构成了我们的种子数据集。我知道右边的图表看起来像一棵树,但它实际上不是树状结构,而是一个图(Graph)。如果它看起来像棵树,那是我的失误。它应该被表示为一个图谱结构。基本上,你可以看到右边第一个主题是“英伟达(Nvidia)”,然后英伟达连接到杰森·黄(Jensen Huang),也就是我们的首席执行官。
接着,这个节点连接到俄勒冈州立大学,因为 WikiData 显示那是他就读的大学。而这所大学位于本顿县(Benton County),而本顿县的命名实际上是为了纪念一位名叫托马斯·哈特·本顿(Thomas Hart Benton)的人。所以,如果你在 WikiData 中随机采样一个实体,然后沿着它进行五到八次跳转——我会解释为什么是五到八次——你最终会得到像绿色箭头所示的一组实体连接。
这基本上就是我们的种子数据集,用于创建“搜索谜题”。例如,我可以从这些数据中创建一个搜索谜题。我不得不读一下我的演讲备注:哪家公司是由那位就读于以托马斯·哈特·本顿命名县份的大学的人创立的?显然,大型语言模型(LLM)在训练数据中不可能知道这个问题的答案。
因为如果我们给代理(Agent)作弊的机会,它就会作弊。它会直接给出答案,而不会使用我们期望它使用的工具调用或搜索功能。因此,我们要让问题尽可能困难、尽可能像谜题一样,以便激发模型使用搜索行为。这就是我们的种子数据生成逻辑。我之前讲过第一步:基于种子创建随机游走路径,并解释为什么是四到八次或五到八次跳转。
有时候如果你进行这些跳转,路径会完全偏离主题。比如它会说“我不知道”,或者提到一个人的名字,然后接着说是“人类”。这当然没错,但基本上与主题无关。你的跳转可能会偏离正轨,这就是为什么我们要作为一个启发式规则,将范围保持在四到八次之间。这对我们来说效果很好。
然后,我们将这些种子转化为搜索谜题,并通过 Tavily 搜索引擎执行搜索。这就是你如何创建一个包含提示词、搜索结果和响应数据的数据集,对吧?接着我们评估我们的数据。这里没有提到的一点是:我们要训练模型。一旦你有了数据集,就用它来训练模型,然后在标准化基准测试中衡量性能。让我们看看笔记本代码,了解具体如何操作。到目前为止有什么问题吗?是的。
之所以强调这一点,是因为问题不在于难度本身,而在于模型无法轻易在互联网上找到答案的问题。比如,如果你把我们在 BrowseCom 基准测试中拥有的那段完整文本放到网上搜索,你是找不到答案的。当然,现在有了 Gemini 这样的 AI 搜索工具可能会找到,但这正是我们试图教会模型做的事情。是的。好的。
这是端到端代理搜索的教程。我们已经讨论了这样做的方法以及如何创建数据,也提到了如何导入这些提示词。我还编写了一个函数来配合 Tavily 和 MCP(模型上下文协议)使用,大家可以稍后查看代码。这里展示的是我们的种子实体示例。这是我之前给大家看过的例子,这只是一个种子实体。
我的种子收集算法的工作方式是:你可以运行它一百万次,每次都会得到沿着 WikiData 的不同跳转路径。这些只是我们希望作为搜索谜题创建基础的随机主题。另一个主题是“现代艺术”。我并不是真正的艺术爱好者,所以我不太理解其中的许多术语,但这基本上是你获得的另一个种子跳转示例。
创建这个数据集的方法是:你作为一个专家搜索代理,利用网络搜索来准确回答问题,并提供包含最终答案、支持性 URL 和简短理由的有效 JSON。以下是你可用的工具:你有一个工具叫 Tavily Search,以及一些使用指南。比如我们会说:“请不要调用该工具超过一定次数(例如一百次),以免花费过多费用。”
当然,你可以放入各种指令。但基本上,除了开玩笑之外,你希望代理不要失控,避免为了回答一个非常简单的问题而花费大量资金。这就是为什么我们要包含所有这些指令的原因。此外,我们还有一个示例。这类似于上下文学习(In-context Learning),你在提示词中放入一个例子,模型就可以从这个示例中学习如何实际调用搜索工具。
以下是你要创建的提示词结构。我们收集了 WikiData 的跳转路径,可以将这些路径插入到提示词中作为种子实体。然后我们要求模型利用该跳转中的任何或所有种子实体来构思一个问题。接着,我们要模型使用我之前在第二个笔记本中展示的“代理解决方案图(Agent Solution Draw)”来创建一个响应。
一旦你完成这些步骤,就会得到一个预览数据集。例如,“印度医学研究理事会(Indian Council of Medical Research)”是种子的起始实体,它位于一个叫布巴内斯瓦尔(Bhubaneswar)的城市,这是印度某个邦的首府。这就是我们的种子路径。然后模型提出了一个问题。
“代理解决方案图”在此处未显示,但如果你查看它的内容,可以看到其大致样子。模型进行了一系列工具调用,对问题进行了推理,然后试图在互联网上寻找答案。这就是你创建搜索数据集的方法。我暂时停在这里回答问题,之后我们可以继续看接下来的几张幻灯片。有什么问题吗?如果有什么……是的。
是的,我们将Bird基准测试的得分从26%提升到了41%。你问了一个非常准确的问题,我们也有相关的博客文章可以阅读。所有使用Data Designer创建的数据集都有对应的博文,你可以直接查看。我也参与了这项工作。这篇文章主要讨论SQL方面,我稍后也可以分享链接给你。本质上,Data Designer可用于创建任何类型的AI模型训练数据集,如果你寻找与模型训练无关的测试数据集等也可以使用。除了Data Designer外,我们团队还创建了一系列数据工具,我将在最后进行介绍。
Soda得分为70而Bird较低是因为它是智能体(Agentic)驱动的,而我们当前的SQL数据集不具备这一特性。此外,基准测试的表现很大程度上依赖于模型本身。我们讨论的是提升Neotron Nano的性能,这是我们要小规模的LLM或SLM(尽管它是MOE架构,但仍可视为LLM)。对于该规模的模型来说,在Bird基准上取得了相当不错的成绩。
是的,这是一个确定性算法来创建种子数据,而工具调用和智能体部分则是在获取问题后执行实际搜索并生成轨迹(Trajectory)。创建搜索轨迹是确定性的,这只是我提出的一种生成种子数据的方法。当然,你可以使用任何类型的种子数据,甚至可能想出比这更好的方法来创建种子数据。
这是一个很好的问题。我们可以这样做。我们创建了可用于预训练和微调的数据集,我的主要焦点是创建用于后训练(Post-training)的数据集。这个特定项目属于监督微调(SFT)。除了因Nvidia与Tavily合作获得积分外,你也可以使用Exa等其他搜索代理提供商,或者编写自己的搜索工具。
黄金响应(Golden responses)是由Data Designer使用你选择的模型生成的,抱歉我讲得有点快,因为这次研讨会只有一小时(之前的版本是两小时)。我使用的模型是GPT-OSS-120B来创建数据。但Data Designer不仅仅是用来生成数据的LLM集合,它还包含多种LLM和非LLM模型协同工作,帮助你创建多样化的数据。
是的,你是在进行蒸馏(Distillation)。但在某些情况下,你可以超越单纯的蒸馏,这也是我想强调的。我们构建了允许创建多样化数据的工具。例如,我在另一个完全不同的用例中工作过:GPT-OSS在名为Structural的基准测试中获得了一定百分比的成绩,该基准用于衡量模型处理JSON、Markdown、XML、YAML和CSV格式的能力。Neotron实际上是从GPT-OSS蒸馏而来,但其性能超越了GPT-OSS。因此,虽然它是蒸馏,但由于Data Designer内置了多种功能,它也可以比单纯蒸馏更强大。
你可以使用Data Designer进行强化学习(RL)。目前NVIDIA团队正在为搜索任务做这件事。与其像之前描述的那样创建黄金解决方案或执行幻灯片上写的搜索谜题,你可以跳过那一步,从而得到一个充满提示词的数据集。然后我们有一个名为Nemo Gym的工具,本质上是一个RL奖励函数工具,用于教导模型如何进行强化学习。在Nemo Gym中,你编写一个给出奖励的函数,然后可以使用我们的任何RL训练框架实时执行这些工具并提供强化学习中的奖励。
这是一个很好的观点,我们目前正在思考如何实现这一点。但构建通用方案是一个挑战,因为我们不想只为单一用例构建特定功能。
这对于ETL(提取、转换、加载)可靠且准确吗?我自己尚未尝试,但我认为它是可靠的。因为我们使用Data Designer创建了一系列多样化的数据集,之前展示了约6.5万亿个token的数据量。如果它不可靠,欢迎联系我们看看我们如何提供帮助。(抱歉我听不清你说话。)
哦,我不知道那部分。我稍后回来找你,我们可以多聊聊。抱歉刚才的情况。我们还有大约15分钟,让我继续讲一个非常有趣的话题:评估你的合成数据。这并不容易做到,因为没有这个评估步骤,合成数据的价值就不大。为了让大家了解我们所谓的SDG(合成数据生成)是如何工作的,我最初使用了50,000个种子,最终只得到了7,000条高质量的全端到端SFT记录。我用这些数据训练模型,将基准测试得分从0提升到了30%。这很棒,但从50,000到7,000的筛选过程非常庞大。
我想强调的是,在创建数据时,数据质量是最重要的因素。什么是质量?它可以是特定于任务的,也可以是通用的,比如多样性就是衡量质量的一个维度。之后我创建了一个函数来展示LLM作为评判者对每条轨迹的评分,以及问题或搜索查询中的字数、保留率(66%)等。你可以稍后查看该函数,但真正有趣的是如何检查模型得到的答案是否正确。
我遇到了一个非常有趣的例子,搜索谜题很简单:哪个国家拥有美国钢铁公司(US Steel)?我认为答案是美国。在训练数据集中,智能体预测了“美国”,我的验证器也认为这是正确的。但我随后去谷歌搜索了一下,发现据我记得的,美国将US Steel卖给了日本。(由于音频问题,此处可能未完全听清后续内容。)
几年前,甚至我的维基数据种子都可能过时。因此,真正的挑战在于如何实际评估并判断你所创建的数据是否良好、准确且相关等。我想,如果你去实现一个确定性函数(像我之前做的那样简单的匹配功能),你可能会得到24%的结果,然后你会觉得“我的数据太糟糕了,我为什么要做这些”,但这并不完全正确。因为这里的低百分比是我预期的,因为我不知道如何实际创建那个函数。因此,“如何评估这些数据”是一个活跃的研究领域。
在我看来,评估是一个非常多层次的问题。你不能仅仅把LLM作为裁判放进去就指望它能给你一切。这是一个这样的问题:如果你检查100个问题,并且发现这100个问题都不存在(即你通过检查那100个问题只能得知数据集中不存在这100个issue),那么可能还存在其他一千个问题。所以挑战在于如何实际评估数据。我们有几种不同的方法来做这件事。
其中之一是我之前提到的“LLM作为裁判”,这是通用的。我做了一件很有趣的事:我实际上使用了LLM进行评判,然后将这些判断发送给人类审查员。让这些审查员交叉检查LLM的判断结果,并基本上给我信心,确认LLM是否正确判断了我的回答。这是一种方法。
而在搜索场景中,你可以查看实时信息。你基本上需要找到所有这些不同评估层的并集,这将本质上赋予你对数据集足够的信心。以上就是代码部分的内容。我知道我讲得很快,但希望我已经通过我的GitHub仓库提供了所有这些内容的访问权限,供你们查看。
接下来我们谈谈其他一些用例。如我之前所述,我们是创建Neotron的更大团队的一部分。我的关注点或我团队的关注点本质上是创建数据集,或者创建一个用于创建数据集的框架(或者是两者兼有)。我们创建了各种各样的数据集。今天我们讨论的第一个是搜索工具调用。
此外,我们还拥有一个用于多轮工具调用的数据集。我认为之前的搜索主要是单轮的,即从提示到响应。但是如果你有多个轮次怎么办?或者如果你拥有多个工具呢?不仅仅是搜索工具,比如你可能有一个天气工具或编码工具等。因此,我们在这里致力于多个不同的项目。
另一个非常有趣的领域是结构化输出生成。我简要提到了这一点,有一个名为Structral的基准测试,它衡量你在Toml、Json、Yaml、Csv、Xml等方面的表现。这些都超级重要,因为每个人都希望使用智能体来做所有事情。
我相信大家都见过LinkedIn上那个吹风机(blowtorch)的梗图,但如果我们要将智能体作为软件应用程序的核心部分使用,那么它们需要可靠地为我们提供Json格式或Yaml格式等。这就是我们在那方面关注的焦点。
我们还处理了SQL(有人在这里问过),以及科学推理。此外,我们使用Data Designer创建了用于STEM性能预训练的数据集等。我可以谈谈生成数据的最佳实践,虽然我不会详细展开(因为你们以后可以查看幻灯片),但核心原则是“多样性优于数量”。
Kim K2论文展示了类似的内容:10种策略运行一个epoch,比一种策略运行十个epoch更好。并且你总是希望使用最便宜的、正确的列类型。例如,使用LLM来创建采样器是没有意义的,这完全是浪费资源;但使用LLM生成文本数据则很有意义。因此我们的采样器是用Python编写的。
然后你过度生产数据,接着像之前提到的那样进行过滤,并验证你可以预览迭代的内容。我认为判断你的数据是否良好的最佳方式实际上是查看数据本身。如果你能审查一些样本,那就更好了。
当然,“Data Designer”这个概念是什么?本质上是将数据创建过程变成一种版本可控、像代码一样可共享的东西。所以我们正在创造能够生成数据的代码。现在你可以与任何人分享这段代码,因为我们已经建立了用于共享代码、版本控制以及其他所有功能的基础设施。
如果你试图进行搜索但不是完全按照我的方式,而是稍微不同地做,你可以拿我的代码进行修改,并从中创建你自己的数据集。这非常有趣。我进入了额外的幻灯片部分,原本没打算讲这个。我想我有10分钟左右的时间。
这真的很有趣。我们创建了一些被称为“人格(personas)”的东西,即Neotron Personas USA。这也受到另一篇论文的启发:“通过10亿个人格扩展合成数据创建”。什么是人格?本质上,我们试图解决这样一个问题:如何知道你创建的数据是否真的符合人口统计信息或扎根于某些现实世界的分布?这非常重要。
例如,如果我创建一个位于加利福尼亚州旧金山的医疗记录数据集,我希望确保旧金山的实际人口统计特征反映在我的数据集中。有很多种类的人口统计特征。因此我们创建了一个名为Neimatron Personas的数据集,使用Data Designer构建,但现在它也是Data Designer中的一个种子,用于创建更多数据集。
这本质上允许你从用户数据中学习,而不会泄露任何单个人的信息。现在你可以训练AI模型并从人们信息的聚合中学习,但你实际上不需要直接使用我的医疗记录等来训练AI模型。我反复使用医疗例子是因为我想找一个敏感行业,那里有HIPAA合规性等各种法规。
这些都是我们必须尊重的内容。所以,这是一个人物画像(Persona)。这个人是位50岁的药剂师,拥有自由奔放的精神,平衡着轻松的生活态度等等。但本质上,这里有一个专业的人物画像设定,包括名字、姓氏、中间名、性别、年龄等种种细节。我们要创建一百万个这样的人物画像。你可以随意使用这些数据作为种子来生成更多的数据。所以,关于人物画像部分我就讲到这里了。我们还有两分钟时间,我会介绍其他工具,然后留出时间来回答问题。哦,有个问题。是的。
这基本上就是我们创建它的原因:为了能够从聚合信息中学习,而不需要涉及真实的个人数据。比如,你可以生成合成的社会保障号码(SSN)。当然,它们并不是你真正的社保号,对吧?我的意思是,比如我不知道举什么例子好……是的。没错。例如,我们实际上为某位客户生成了一些税务数据。我意识到在美国,恰好有七个人在18岁以下,其纳税申报表上的年收入超过一千万美元。但相比之下,有更多年长的人赚取X、Y或Z数量的钱。
因此,当我们创建合成W2表格(工资单)时,我们要确保该表单不仅仅是由大语言模型生成的随机值。因为如果你让LLM讲个笑话,它每次都会给你同一个笑话;同样地,它也不会给出符合现实逻辑的数字。因为它总是倾向于返回事物的平均值。所以当你创建数据时,你要确保合成的W2表格或1040税表等实际上符合现实世界的分布规律。这就是为什么我们创建了这组人物画像数据集。
抱歉,只剩两分钟了,还有更多问题要回答。我们创建了许多工具。“Data Designer”只是冰山一角吧?但它是我们迄今为止最成功的工具,因为它是历史最悠久的。在英伟达(NVIDIA),我们还有数据策展工具,即NeMo Curator,我相信会有其他演讲介绍它。我在日程表上看到了相关信息,非常有趣。你需要处理现实世界的数据:策展、修改、后处理,使其达到可用于训练大语言模型的状态。
或者你可以创建合成数据。我认为这取决于你的用例,我不会站在这里说合成数据对一切都最好,但在某些特定场景下,你可能需要策展现实世界的数据,或者生成合成数据。我们有数据策展工具,有作为我们合成数据生成工具的Data Designer,还有一个新工具叫Anonymizer(匿名化工具)。顺便说一下,所有这些工具都是完全开源的。我们组织在英伟达做的所有工作都是全开源的,包括Neotron和所有这些工具。你可以随意使用它们。
这个数据工具叫做NeMo Anonymizer(NeMo匿名化工具)。这里的目标是:我们能否真正地对数据进行匿名化处理?我不知道你们大家如何,但我不确定在演讲被录制的时候是否应该这么说。但我曾经在我的智能体(Agent)中输入各种东西,比如有一次我不小心把API密钥放了进去,或者其他敏感信息。对于你使用的所有智能体的日志数据,你需要一种方法来在它们可用之前进行匿名化处理。这就是Anonymizer所做的功能示例,当然还有许多其他使用方式。
此外,我们还有NeMo Safe Synthesizer(NeMo安全合成器),它允许我们为敏感数据集生成安全的合成版本。是的,如果有任何问题欢迎来找我交流。这是我的LinkedIn主页,如果你想保持联系的话。再次强调,你可以使用Data Designer。我非常希望你们能尝试一下那些笔记本(Notebooks)。很抱歉我们只有一个小时,所以我不得不快速过完所有代码演示。
你们可以尝试运行这些笔记本。如果大家对文本到SQL或其他用例感兴趣,我们还有相关的博客文章。这里展示了如何使用人物画像数据。我想在某处有一篇关于如何为美国创建人物画像数据集的博客文章。我们采用了人口普查信息,并使用概率图模型(PGM)来建立连接。基本上就是获取这些人口统计信息进行处理,然后从中创建一个数据集。这就是我们所做的。
每个国家/地区都会发布此类人口统计信息。所以这并不局限于美国。我现在在看其他幻灯片,我们最近举办了很多这类研讨会。总之,如果你正在为美国以外的地方构建应用——比如日本、印度、新加坡或巴西——我相信我们现在有了更多相关数据。我们拥有各种各样的人物画像数据集,这为我们提供了一种为任何感兴趣的国家/地区创建定制化AI的方法。