推出合成数据生成器 - 使用自然语言构建数据集

发布于 2024 年 12 月 16 日
在 GitHub 上更新

推出合成数据生成器,这是一款用户友好的应用程序,采用无代码方法使用大型语言模型 (LLM) 创建自定义数据集。最棒的是:简单的分步过程,使数据集创建变得非技术性且轻松,任何人都能在几分钟内创建数据集和模型,无需任何代码。

短片演示视频
什么是合成数据,它为什么有用?

合成数据是人工生成的信息,旨在模拟真实世界的数据。它通过扩展或增强数据集来克服数据限制。

从提示到数据集再到模型

合成数据生成器接收您所需数据的描述(您的自定义提示),然后使用合成数据管道为您的用例返回一个数据集。在后台,这由 distilabel免费的 Hugging Face 文本生成 API 提供支持,但我们无需担心这些复杂性,我们可以专注于使用 UI。

支持的任务

该工具目前支持文本分类和聊天数据集。这些任务将决定您将生成的数据集类型,分类需要类别,而聊天数据需要对话。根据需求,我们将随着时间的推移添加评估和 RAG 等任务。

文本分类

文本分类常用于对客户评论、社交媒体帖子或新闻文章等文本进行分类。生成分类数据集依赖于我们使用 LLM 处理的两个不同步骤。我们首先生成多样化的文本,然后为其添加标签。一个合成文本分类数据集的良好示例是 argilla/synthetic-text-classification-news,它将合成新闻文章分为 8 个不同的类别。

聊天数据集

这种类型的数据集可用于监督微调 (SFT),这是一种允许 LLM 处理对话数据的技术,从而使用户可以通过聊天界面与 LLM 交互。一个合成聊天数据集的良好示例是 argilla/synthetic-sft-customer-support-single-turn,它展示了一个旨在处理客户支持的 LLM 示例。在此示例中,客户支持主题就是合成数据生成器本身。

通常,文本分类和聊天数据集的每分钟样本生成速度分别为 50 和 20。所有这些都由免费的 Hugging Face API 提供支持,但您可以通过使用自己的帐户并选择自定义模型、API 提供商或生成配置来扩大规模。我们稍后将回到这一点,但首先让我们深入了解基础知识。

让我们生成第一个数据集

我们将创建一个基本的聊天数据集。当您访问生成器时,您必须登录才能允许该工具访问您想要为其生成数据集的组织。这将允许该工具上传生成的数据集。如果身份验证失败,您可以随时重置连接

登录后,UI 将引导您完成一个简单的三步流程

1. 描述您的数据集

首先提供您要创建的数据集的描述,包括示例用例,以帮助生成器理解您的需求。请务必尽可能详细地描述助手的目标和类型。当您点击“创建”按钮时,将创建一个样本数据集,然后您可以继续进行第 2 步。

2. 配置和完善

通过调整根据您的描述生成的 系统提示 并调整特定于任务的设置来完善您生成的样本数据集。这将帮助您获得所需的特定结果。您可以通过点击“保存”按钮并重新生成样本数据集来迭代这些配置。当您对配置满意时,继续进行第 3 步。

3. 生成并推送

填写数据集名称和组织的一般信息。此外,您可以定义要生成的样本数量以及生成时使用的温度。此温度代表生成的创造力。让我们点击“生成”按钮开始完整生成。输出将直接保存到 Argilla 和 Hugging Face Hub。

我们现在可以点击“在 Argilla 中打开”按钮,直接进入我们生成的数据集。

审查数据集

即使处理合成数据,了解和查看数据也很重要,这就是我们创建与 Argilla 直接集成的缘故。Argilla 是一个协作工具,供 AI 工程师和领域专家构建高质量数据集。这使您可以通过语义搜索和可组合过滤器等强大功能有效地探索和评估合成数据集。您可以在本指南中了解更多信息。之后,我们可以将整理好的数据集导出到 Hugging Face Hub,并继续使用它微调模型。

训练模型

别担心;现在甚至无需代码即可使用 AutoTrain 创建强大的 AI 模型。要了解 AutoTrain,您可以查看其文档。在这里,我们将创建自己的 AutoTrain 部署,并像之前为合成数据生成器所做的那样登录。

还记得开头的 argilla/synthetic-text-classification-news 数据集吗?让我们训练一个可以正确分类这些示例的模型。我们需要选择任务“文本分类”并提供正确的“数据集源”。然后,选择一个不错的项目名称并按下播放!关于成本的弹出警告可以忽略,因为我们仍在使用免费的 Hugging Face CPU 硬件,这对于这个文本分类示例来说已经足够了。

瞧,几分钟后,我们就有了我们自己的模型!剩下的就是将其部署为实时服务,或者使用一些最少的 Python 代码将其用作文本分类管道

高级功能

尽管您可以从提示到专用模型,而无需了解任何编码知识,但有些人可能喜欢通过一些更高级的技术功能来定制和扩展其部署的选项。

提高速度和准确性

您可以通过创建工具的自有部署并将其配置为使用不同的参数或模型来提高速度和准确性。首先,您必须复制合成数据生成器。请确保将其创建为私有空间,以确保其他人无法访问它。接下来,您可以更改一些环境变量的默认值。我们来回顾一些场景:

  1. 使用不同的免费 Hugging Face 模型。您可以通过将 MODEL 从默认值 meta-llama/Llama-3.1-8B-Instruct 更改为不同的模型,例如 meta-llama/Llama-3.1-70B-Instruct 来实现。
  2. 使用 OpenAI 模型。您可以通过将 BASE_URL 设置为 https://api.openai.com/v1/ 并将 MODEL 设置为 gpt-4o 来实现。
  3. 增加批处理大小,这将每分钟生成更多样本。您可以通过将 BATCH_SIZE 从默认值 5 更改为更高的值,例如 10 来实现。请注意,您的 API 提供商可能会限制每分钟的请求数量。
  4. 私有 Argilla 实例。您可以通过将 ARGILLA_URLARGILLA_API_KEY 设置为您的免费 Argilla 实例的 URL 和 API 密钥来实现。

本地部署

除了在 Hugging Face Spaces 上托管该工具之外,我们还将其作为 Apache 2 许可下的开源工具提供,这意味着您可以前往 GitHub 并根据需要使用、修改和调整它。您可以通过简单的 pip install synthetic-dataset-generator 将其安装为 Python 包。请务必在创建时配置正确的环境变量。

自定义管道

每个合成数据管道都基于 distilabel,这是一个用于合成数据和 AI 反馈的框架。distilabel 是开源的;管道代码的酷炫之处在于它可共享且可重现。例如,您可以在 Hugging Face Hub 上的存储库中找到 argilla/synthetic-text-classification-news 数据集的管道。或者,您也可以找到许多其他 distilabel 数据集及其管道

接下来呢?

合成数据生成器已经提供了许多酷炫的功能,使其对任何数据或模型爱好者都非常有用。尽管如此,我们的 GitHub 上仍有一些有趣的改进方向,我们邀请您贡献、点赞并提出问题!我们正在进行的一些工作包括:

  • 检索增强生成 (RAG)
  • 使用 LLM 作为判断器进行自定义评估

开始合成

社区

这看起来超级有趣,但是当我尝试使用 UI 时,很多时候它会生成无意义的内容(见截图),针对“2. 配置您的任务”给出的系统提示。有时,如果您再次点击“保存”按钮以进行“2. 配置您的任务”,问题就会解决,但即使生成的上下文和问题有意义,响应似乎总是为空。

此外,每次我点击“推送到 Hub”时,都会收到有关 Arguilla SDK 的错误(见截图)。我尝试撤销已连接应用程序的访问权限并重新登录,但它仍然失败 :(

image.png

image.png

image.png

Spaces 应用程序现在出现 404 错误。

注册登录 发表评论