使用 FastData 和 Hugging Face 生成合成数据

社区文章 发布于2025年1月7日

引言

在人工智能 (AI) 和机器学习 (ML) 的世界中,获取高质量数据对于构建准确可靠的模型至关重要。然而,获取大型数据集,尤其是涉及敏感或私人信息的数据集,可能具有挑战性,并且通常涉及伦理和法律考量。合成数据生成提供了一个强大的解决方案,它可以在不使用实际个人信息的情况下创建模仿真实世界数据的人工数据集。

在这篇博文中,我们将探讨如何使用专门为此目的设计的 Python 库 FastData 来生成合成数据,以及如何将其与 Hugging Face Hub 集成以进行数据集托管和共享。

目录

  1. 什么是合成数据生成,为何它在今天如此重要?
  2. 什么是 Hugging Face 数据集查看器?
  3. 什么是 FastData?
  4. 设置库
  5. 设置工件
  6. 定义代码
  7. 结论

1. 什么是合成数据生成,为何它在今天如此重要?

合成数据生成是创建模仿真实世界数据但未使用任何实际敏感或个人信息的人工数据的过程。这些数据通过算法、模拟或模型生成。在机器学习 (ML) 和深度学习的背景下,合成数据至关重要,因为它:

  • 提高了模型性能:当真实数据不足时(例如,医疗数据、财务记录等),合成数据有助于训练模型,而不会侵犯隐私或违反伦理约束。
  • 减少数据稀缺性:许多行业发现收集足够的数据来训练复杂模型具有挑战性。合成数据可以增加模型训练的可用数据,从而提供解决方案。
  • 确保数据隐私:合成数据不包含真实用户信息,这在医疗保健、金融和保险等领域非常重要。

合成数据生成在人工智能研究中变得越来越重要。它允许研究人员克服隐私问题,并在无需访问真实世界数据的情况下创建健壮的模型。


2. 什么是 Hugging Face 数据集查看器?

如果您正在进行数据研究或机器学习项目,您需要一种可靠的方式来共享和托管您的数据集。Hugging Face Hub 提供了一个无缝的平台,用于在全球范围内托管和共享数据集。通过在 Hub 上托管数据集,您可以立即访问数据集查看器,这是一个提供许多功能以探索和与数据集交互的工具。

用于 fka/awesome-chatgpt-prompts 数据集的数据集查看器。

Hugging Face 数据集查看器的主要功能:

  • 交互式探索:您可以检查数据、查看单个记录并执行基本分析,无需任何编码或下载。
  • 获取有关数据的有见地统计信息
  • 搜索和过滤:它提供搜索和过滤选项,帮助您找到最适合您用例的数据。
  • 协作:您可以轻松地与同事或更广泛的研究社区共享数据集的 URL。

您可以通过以下步骤将数据集上传到 Hugging Face Hub。但是,在本教程中,我们将使用 FastData,它方便地集成了此功能,从而简化了您的过程。


3. 什么是 FastData?

FastData 是一个最小的 Python 库,旨在简化合成数据生成过程,特别是用于训练深度学习模型。它提供了一些有用的功能:

  • 可定制的模式:您可以轻松地为您想要生成的合成数据定义自定义模式。
  • 带模板的数据生成:FastData 支持基于提示的生成,您可以为数据定义模板,库将生成一致且相关的输出。
  • 多线程:它支持多线程,允许您通过指定最大工作线程数来并行生成大量数据。
  • 推送到 Hugging Face:在 0.0.4 版本中,FastData 添加了使用 generate_to_hf 方法将生成的数据直接推送到 Hugging Face 的功能,使数据共享和协作更加容易。它还支持增量加载以防止数据丢失并优化性能。

使用 FastData 和 Hugging Face 生成数据的关键参数:

  • prompt_template (str):用于生成提示的模板。
  • inputs (list[dict]):要处理的输入字典列表。
  • schema:定义生成数据的结构。
  • repo_id (str):Hugging Face 数据集名称。
  • temp (float, optional):生成温度。控制输出中的随机性。
  • sp (str, optional):助手的系统提示。默认为“你是一个乐于助人的助手。”
  • max_workers (int, optional):最大工作线程数。默认为 64。
  • max_items_per_file (int, optional):每个文件中保存的项目数。
  • commit_every (Union[int, float], optional):每次提交到 Hugging Face 的间隔时间(分钟)。
  • private (bool, optional):将存储库设置为私有。默认为 None
  • token (Optional[str], optional):用于提交到存储库的令牌。
  • delete_files_after (bool, optional):处理后是否删除文件。默认为 True

4. 设置库

FastData 目前支持 Anthropic 模型。因此,您必须拥有您想使用的模型的 API 密钥,并配置必要的环境变量。请按照以下步骤进行设置:

安装依赖

pip install python-fastdata datasets

设置 Anthropic API 密钥

  1. 在 Anthropic 创建账户并获取您的 API 密钥。
  2. 在您的环境变量中设置 API 密钥
export ANTHROPIC_API_KEY="your_api_key_here"

设置 Hugging Face Hub 密钥

  1. 在 Hugging Face 上创建账户并获取您的令牌
  2. 在您的环境变量中设置 Hugging Face 令牌
export HF_TOKEN="your_hugging_face_token"

5. 设置工件

要生成数据,您首先需要使用模式定义数据的结构。接下来,您将定义用于生成数据的提示,最后,您将提供将指导数据生成过程的输入

模式定义

在本教程中,我们将生成一个儿童故事数据集,每个故事都包含一个标题、内容和一个我们旨在通过故事传授的习惯。让我们从定义类开始:

from fastcore.utils import *
from fastdata.core import FastData
from datasets import load_dataset

class ChildrenStory:
    """
    Represents a children's story with a title, content, and the habit it promotes.
    """

    def __init__(self, title:str, content:str, habit:str):
        self.title = title
        self.content = content
        self.habit = habit
    
    def __repr__(self):
        return f"{self.title} ({self.habit}) ➡ *{self.content}*"

定义提示模板

prompt_template = """\
Generate Children's Stories with title, content and the corresponding habit on the following topic <topic>{text}</topic> 
"""

定义输入

我们将使用另一个现有数据集作为我们生成的输入。该数据集的“text”列包含一个关于我们旨在通过故事传授的良好习惯/日常习惯的想法/主题,例如:

建立一个规律的睡前习惯,包括阅读一本书,可以改善儿童的睡眠质量和整体健康。

让我们根据 infinite-dataset-hub/PositiveRoutine 数据集中的主题生成 10 个儿童故事。

inputs = load_dataset('infinite-dataset-hub/PositiveRoutine', split='train[:10]')

6. 定义代码

设置完成后,您可以定义代码以生成合成数据并将其推送到 Hugging Face Hub。

fast_data = FastData(model="claude-3-haiku-20240307") # Here you can choose change the Anthropic model
dataset_name = "children-stories-dataset" # Here you define the output dataset name

repo_id, stories = fast_data.generate_to_hf(
    prompt_template=prompt_template,
    inputs=positive_routines_dataset,
    schema=ChildrenStory,
    repo_id=dataset_name,
    max_items_per_file=4,
)

print(f"A new repository has been create on {repo_id}")
print(tales)

就是这样!我们的数据集已经生成并推送到 Hub。

如果您认为您的过程需要更长时间才能完成,并希望对数据集进行增量更新,只需在 generate_to_hf 方法中设置以下参数,更具体地说:

  • max_items_per_file:指定每个共享文件中要推送到 Hub 的记录数。
  • commit_every:您希望调度程序每隔多少分钟推送到 Hub,例如每 5 分钟。

7. 结论

合成数据生成在人工智能和机器学习项目中发挥着至关重要的作用,通过帮助研究人员和开发人员在真实数据稀缺或难以获取的情况下生成有用的数据集。借助 FastDataHugging Face Hub 等工具,生成和共享合成数据集从未如此简单。您现在可以创建大型数据集,将其推送到 Hugging Face Hub,并使用数据集查看器进行交互式探索。FastData 的集成简化了整个过程,使大规模合成数据生成变得更加容易。

祝您数据生成愉快!

社区

注册登录以评论