跳到内容

导入和导出数据集和记录

本指南概述了如何将您的数据集或其记录导入和导出到 Python、本地磁盘或 Hugging Face Hub。

在 Argilla 中,您可以导入/导出数据集的两个主要组成部分

  • 数据集的完整配置在 rg.Settings 中定义。如果您想分享您的反馈任务或稍后在 Argilla 中恢复它,这将非常有用。
  • 存储在数据集中的记录,包括 MetadataVectorsSuggestionsResponses。如果您想在 Argilla 之外使用数据集的记录,这将非常有用。

查看 Dataset - Python 参考 以详细了解导出 Dataset 类的属性、参数和方法。

主要类

rg.Dataset.to_hub(
    repo_id="<my_org>/<my_dataset>",
    with_records=True,
    generate_card=True
)
rg.Dataset.from_hub(
    repo_id="<my_org>/<my_dataset>",
    name="my_dataset",
    workspace="my_workspace",
    client=rg.Client(),
    with_records=True
)
rg.Dataset.to_disk(
    path="<path-empty-directory>",
    with_records=True
)
rg.Dataset.from_disk(
    path="<path-dataset-directory>",
    name="my_dataset",
    workspace="my_workspace",
    client=rg.Client(),
    with_records=True
)
rg.Dataset.records.to_datasets()
rg.Dataset.records.to_dict()
rg.Dataset.records.to_list()

查看 Dataset - Python 参考 以详细了解导出 Dataset 类的属性、参数和方法。

查看 Record - Python 参考 以详细了解 Record 类的属性、参数和方法。

导入和导出数据集

首先,我们将介绍从 Argilla 导出完整数据集的过程。这包括数据集的设置和记录。所有这些方法都使用 rg.Dataset.from_*rg.Dataset.to_* 方法。

Hugging Face Hub

导出到 Hub

您可以将数据集从 Argilla 推送到 Hugging Face Hub。如果您想与社区分享数据集或进行版本控制,这将非常有用。您可以使用 rg.Dataset.to_hub 方法将数据集推送到 Hugging Face Hub。

import argilla as rg

client = rg.Argilla(api_url="<api_url>", api_key="<api_key>")

dataset = client.datasets(name="my_dataset")

dataset.to_hub(repo_id="<my_org>/<my_dataset>")

包含或不包含记录

上面的示例会将数据集的 Settings 和记录推送到 Hub。如果您只想推送数据集的配置,可以将 with_records 参数设置为 False。如果您只对特定的数据集模板感兴趣,或者想更改数据集设置和/或记录,这将非常有用。

dataset.to_hub(repo_id="<my_org>/<my_dataset>", with_records=False)

从 Hub 导入

您可以将数据集从 Hugging Face Hub 拉取到 Argilla。如果您想恢复数据集及其配置,这将非常有用。您可以使用 rg.Dataset.from_hub 方法从 Hugging Face Hub 拉取数据集。

import argilla as rg

client = rg.Argilla(api_url="<api_url>", api_key="<api_key>")

rg.Dataset.from_hub(repo_id="<my_org>/<my_dataset>")

默认情况下,Dataset.from_hub 方法将返回数据集配置页面的 URL。此页面允许您在 Argilla 中创建数据集之前预览数据集的配置和记录。

您可以通过将 settings 参数配置为 "auto" 来自动推断数据集的设置。这将根据 datasets.Features 中数据集的特征来推断数据集的设置。

import argilla as rg

client = rg.Argilla(api_url="<api_url>", api_key="<api_key>")

dataset = rg.Dataset.from_hub(repo_id="<my_org>/<my_dataset>", settings="auto")

rg.Dataset.from_hub 方法从数据集仓库加载配置和记录。如果您只想加载记录,可以将 datasets.Dataset 对象传递给 rg.Dataset.log 方法。这使您可以配置自己的数据集并重用现有的 Hub 数据集。有关更多信息,请参阅关于记录的指南

包含或不包含记录

上面的示例将从 Hub 拉取数据集的 Settings 和记录。如果您只想拉取数据集的配置,可以将 with_records 参数设置为 False。如果您只对特定的数据集模板感兴趣,或者想更改记录,这将非常有用。

dataset = rg.Dataset.from_hub(repo_id="<my_org>/<my_dataset>", with_records=False, settings="auto")

然后,您可以使用 datasets 包的 load_dataset 方法记录数据集的记录,并将数据集传递给 rg.Dataset.log 方法。

hf_dataset = load_dataset("<my_org>/<my_dataset>")
dataset.records.log(hf_dataset) # (1)
  1. 您还可以使用 mapping 参数将记录字段名称映射到 argilla 字段和问题名称。

从 Hub 导入设置

从 Hub 导入数据集时,Argilla 将通过三种方式从 Hub 加载设置

  1. 如果数据集是由 Argilla 推送到 Hub 的,则设置将通过配置文件从 Hub 加载。
  2. 如果数据集是由其他来源加载的,则 Argilla 将根据 datasets.Features 中数据集的特征定义设置。例如,为文本特征创建 TextField 或为标签类创建 LabelQuestion
  3. 您可以通过 settings 参数将自定义 rg.Settings 对象传递给 rg.Dataset.from_hub 方法。这将覆盖从 Hub 加载的设置。
settings = rg.Settings(
    fields=[rg.TextField(name="text")],
    questions=[rg.TextQuestion(name="answer")]
) # (1)

dataset = rg.Dataset.from_hub(repo_id="<my_org>/<my_dataset>", settings=settings)
  1. 您传递给 rg.Dataset.from_hub 方法的设置将覆盖从 Hub 加载的设置,并且需要与正在加载的数据集对齐。

本地磁盘

导出到磁盘

您可以将数据集从 Argilla 保存到本地磁盘。如果您想备份数据集,这将非常有用。您可以使用 rg.Dataset.to_disk 方法。我们建议您使用空目录。

import argilla as rg

client = rg.Argilla(api_url="<api_url>", api_key="<api_key>")

dataset = client.datasets(name="my_dataset")

dataset.to_disk(path="<path-empty-directory>")

这会将数据集的配置和记录保存到指定的路径。如果您只想保存数据集的配置,可以将 with_records 参数设置为 False

dataset.to_disk(path="<path-empty-directory>", with_records=False)

从磁盘导入

您可以将数据集从本地磁盘加载到 Argilla。如果您想恢复数据集的配置,这将非常有用。您可以使用 rg.Dataset.from_disk 方法。

import argilla as rg

dataset = rg.Dataset.from_disk(path="<path-dataset-directory>")

将数据集定向到名称和工作区

您还可以在从磁盘加载数据集时指定数据集的名称和工作区。

dataset = rg.Dataset.from_disk(path="<path-dataset-directory>", name="my_dataset", workspace="my_workspace")

导入和导出记录

仅记录可以从 Argilla 的数据集中导出。如果您想在 Python 中处理记录、将其导出到不同的平台或在模型训练中使用它们,这将非常有用。所有这些方法都使用 rg.Dataset.records 属性。

导出记录

记录可以导出为字典、字典列表或 datasets 包的 Dataset

包含图像

如果您的数据集包含图像,则导出记录的推荐方法是使用 to_datasets 方法,该方法将图像导出为重新缩放的 PIL 对象。使用其他方法,图像将使用数据 URI 模式导出。

记录可以从 Dataset.records 导出为字典。to_dict 方法可用于将记录导出为字典。您可以指定字典输出的方向。您还可以决定是否展平字典。

import argilla as rg

client = rg.Argilla(api_url="<api_url>", api_key="<api_key>")
dataset = client.datasets(name="my_dataset")

# Export records as a dictionary
exported_records = dataset.records.to_dict()
# {'fields': [{'text': 'Hello'},{'text': 'World'}], suggestions': [{'label': {'value': 'positive'}}, {'label': {'value': 'negative'}}]

# Export records as a dictionary with orient=index
exported_records = dataset.records.to_dict(orient="index")
# {"uuid": {'fields': {'text': 'Hello'}, 'suggestions': {'label': {'value': 'positive'}}}, {"uuid": {'fields': {'text': 'World'}, 'suggestions': {'label': {'value': 'negative'}}},

# Export records as a dictionary with flatten=True
exported_records = dataset.records.to_dict(flatten=True)
# {"text": ["Hello", "World"], "label.suggestion": ["greeting", "greeting"]}

记录可以从 Dataset.records 导出为字典列表。to_list 方法可用于将记录导出为字典列表。您可以决定是否展平它。

import argilla as rg

client = rg.Argilla(api_url="<api_url>", api_key="<api_key>")

workspace = client.workspaces("my_workspace")

dataset = client.datasets(name="my_dataset", workspace=workspace)

# Export records as a list of dictionaries
exported_records = dataset.records.to_list()
# [{'fields': {'text': 'Hello'}, 'suggestion': {'label': {value: 'greeting'}}}, {'fields': {'text': 'World'}, 'suggestion': {'label': {value: 'greeting'}}}]

# Export records as a list of dictionaries with flatten=True
exported_records = dataset.records.to_list(flatten=True)
# [{"text": "Hello", "label": "greeting"}, {"text": "World", "label": "greeting"}]

记录可以从 Dataset.records 导出到 datasets 包。to_dataset 方法可用于将记录导出到 datasets 包。您可以指定数据集的名称和拆分以导出记录。

import argilla as rg

client = rg.Argilla(api_url="<api_url>", api_key="<api_key>")
dataset = client.datasets(name="my_dataset")

# Export records as a dictionary
exported_dataset = dataset.records.to_datasets()

导入记录

要将记录导入数据集,请使用 rg.Datasets.records.log 方法。有关如何执行此操作的指南,请参阅 操作指南 - 记录,或者您可以查看 Record - Python 参考