📥 导出数据集#

你的 Argilla 实例将始终保存并可访问你的所有数据集和注释。但是,如果你想将数据集本地保存或保存到 Hugging Face Hub 中,在本节中,你将找到一些有用的方法来做到这一点。

反馈数据集#

注意

本节涵盖的数据集类是 FeedbackDataset。这个完全可配置的数据集将取代 Argilla 2.0 中的 DatasetForTextClassificationDatasetForTokenClassificationDatasetForText2Text。不确定使用哪个数据集?请查看我们关于选择数据集的部分。

从 Argilla 拉取#

第一步是使用 FeedbackDataset.from_argilla() 方法从 Argilla 拉取数据集。此方法将返回一个新的 FeedbackDataset 实例,该实例具有与 Argilla 中数据集相同的指南、字段、问题和记录(如果存在响应)。

注意

从 Argilla 1.14.0 开始,调用 from_argilla 将从 Argilla 拉取 FeedbackDataset,但该实例将是远程的,这意味着记录的添加、更新和删除将在进行后立即推送到 Argilla。这与以前版本的 Argilla 不同,在以前的版本中,你必须再次调用 push_to_argilla 才能将更改推送到 Argilla。

remote_dataset = rg.FeedbackDataset.from_argilla("my-dataset", workspace="my-workspace")
local_dataset = remote_dataset.pull(max_records=100) # get first 100 records

如果你的数据集包含向量,默认情况下,为了提高性能,这些向量将不会与数据集的其余部分一起拉取。如果你想拉取记录中的向量,你需要像这样指定它

remote_dataset = rg.FeedbackDataset.from_argilla(
    name="my-dataset",
    workspace="my-workspace",
    with_vectors="all"
)
remote_dataset = rg.FeedbackDataset.from_argilla(
    name="my-dataset",
    workspace="my-workspace",
    with_vectors=["my_vectors"]
)

此时,你可以使用此数据集执行任何你可能需要的后处理,例如,来自多个注释者的统一响应。一旦你对结果感到满意,你可以决定以下一些选项来保存它。

推回 Argilla#

当使用通过 FeedbackDataset.from_argilla 从 Argilla 拉取的 FeedbackDataset 时,如果你想克隆数据集或在后处理后探索它,你可以随时将数据集推回 Argilla。

# This publishes the dataset with its records to Argilla and returns the dataset in Argilla
remote_dataset = dataset.push_to_argilla(name="my-dataset", workspace="my-workspace")
local_dataset = remote_dataset.pull(max_records=100) # get first 100 records
# This publishes the dataset with its records to Argilla and turns the dataset object into a dataset in Argilla
dataset.push_to_argilla(name="my-dataset", workspace="my-workspace")

此外,你仍然可以通过调用 push_to_argilla 来克隆既未推送也未从 Argilla 拉取的本地 FeedbackDataset 数据集。

dataset.push_to_argilla(name="my-dataset-clone", workspace="my-workspace")

推送到 Hugging Face Hub#

也可以将 FeedbackDataset 保存和加载到 Hugging Face Hub 中以进行持久化。push_to_huggingfacefrom_huggingface 方法允许你分别推送到或从 Hugging Face Hub 拉取。

当将 FeedbackDataset 推送到 HuggingFace Hub 时,可以提供参数 generate_card 以生成和推送 Dataset Card。generate_card 默认为 True,因此除非指定 generate_card=False,否则它将始终生成。

# Push to HuggingFace Hub
dataset.push_to_huggingface("argilla/my-dataset")

# Push to HuggingFace Hub as private
dataset.push_to_huggingface("argilla/my-dataset", private=True, token="...")

请注意,FeedbackDataset.push_to_huggingface() 方法不仅上传数据集记录,还上传一个名为 argilla.yaml 的配置文件,其中包含数据集配置,即字段、问题和指南(如果有)。这样,你可以使用 from_huggingface 方法将任何已推送到 Hub 的 FeedbackDataset 加载回 Argilla。查看 Hugging Face Hub 上的所有公共 Argilla 兼容数据集

# Load a public dataset
dataset = rg.FeedbackDataset.from_huggingface("argilla/my-dataset")

# Load a private dataset
dataset = rg.FeedbackDataset.from_huggingface("argilla/my-dataset", use_auth_token=True)

注意

push_to_huggingface 的 args 和 kwargs 是 🤗Datasetspush_to_hub 的 args,而 from_huggingface 的 args 是 🤗Datasetsload_dataset 的 args。

保存到磁盘#

此外,由于与 🤗 Datasets 的集成,你还可以通过首先使用 format_as("datasets") 方法将 FeedbackDataset 转换为 datasets.Dataset,以你喜欢的格式在本地导出 FeedbackDataset 的记录。然后,你可以将 datasets.Dataset 导出为 CSV、JSON、Parquet 等。查看 🤗Datasets 文档中的所有选项。

hf_dataset = dataset.format_as("datasets")

hf_dataset.save_to_disk("sharegpt-prompt-rating-mini")  # Save as a `datasets.Dataset` in the local filesystem
hf_dataset.to_csv("sharegpt-prompt-rating-mini.csv")  # Save as CSV
hf_dataset.to_json("sharegpt-prompt-rating-mini.json")  # Save as JSON
hf_dataset.to_parquet()  # Save as Parquet

注意

此解决方法只会将记录导出为所需的格式,而不会导出数据集配置。如果你想将记录加载回 Argilla,你将需要创建 FeedbackDataset添加记录,如相应指南中所述。

其他数据集#

注意

本节涵盖的记录类对应于三个数据集:DatasetForTextClassificationDatasetForTokenClassificationDatasetForText2Text。这些将在 Argilla 2.0 中被弃用,并被完全可配置的 FeedbackDataset 类取代。不确定使用哪个数据集?请查看我们关于选择数据集的部分。

从 Argilla 拉取#

你可以使用 rg.load() 函数轻松地从 Argilla 加载数据集。

import argilla as rg

# load your annotated dataset from the Argilla web app
dataset_rg = rg.load("my_dataset")

为了方便和可管理性,Argilla 提供了到 Hugging Face Datasets 和 Pandas DataFrame 的转换。

# export your Argilla Dataset to a datasets Dataset
dataset_ds = dataset_rg.to_datasets()
# export to a pandas DataFrame
df = dataset_rg.to_pandas()

推回 Argilla#

当使用通过 rg.load 从 Argilla 拉取的其他数据集时,你可以随时将数据集推回 Argilla。这可以使用 rg.log() 函数完成,就像你第一次将记录推送到 Argilla 时一样。如果记录在数据集中尚不存在,则会将其添加到数据集中,否则,将更新现有记录。

import argilla as rg

dataset_rg = rg.load("my_dataset")

# loop through the records and change them
rg.log(dataset_rg, name="my_dataset")

推送到 Hugging Face Hub#

你可以以 Hugging Face Dataset 的形式直接将数据集推送到 hub。只需使用上一节中解释的 to_datasets() 转换并推送数据集

# push the dataset to the Hugging Face Hub
dataset_ds.push_to_hub("my_dataset")

保存到磁盘#

你的数据集将始终安全且可从 Argilla 访问,但如果你需要共享或将其保存到其他地方,以下是一些选项。

或者,你可以将数据集本地保存。为此,我们建议首先将数据集格式化为 Hugging Face DatasetPandas DataFrame,并使用这些库的原生方法导出为 CSV、JSON、Parquet 等。

# save locally using Hugging Face datasets

import argilla as rg

# load your annotated dataset from the Argilla web app
dataset_rg = rg.load("my_dataset")

# export your Argilla Dataset to a datasets Dataset
dataset_ds = dataset_rg.to_datasets()

dataset_ds.save_to_disk("my_dataset")  # Save as a `datasets.Dataset` in the local filesystem
dataset_ds.to_csv("my_dataset.csv")  # Save as CSV
dataset_ds.to_json("my_dataset.json")  # Save as JSON
dataset_ds.to_parquet()  # Save as Parquet
# save locally using Pandas DataFrame
import argilla as rg

# load your annotated dataset from the Argilla web app
dataset_rg = rg.load("my_dataset")

# export your Argilla Dataset to a Pandas DataFrame
df = dataset_rg.to_pandas()

df.to_csv("my_dataset.csv")  # Save as CSV
df.to_json("my_dataset.json")  # Save as JSON
df.to_parquet("my_dataset.parquet")  # Save as Parquet