💾 使用元数据#

反馈数据集#

注意

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

workflow

定义 metadata_properties#

元数据属性允许你配置元数据信息的使用,以便在 UI 和 Python SDK 中进行筛选和排序功能。

你可以在 创建 FeedbackDataset 或将元数据属性添加到已存在的 FeedbackDataset 时,使用 Python SDK 定义元数据属性。它们具有以下参数:

  • name:元数据属性的名称,将在内部使用。

  • title(可选):元数据属性的名称,将在 UI 中显示。默认为 name 值,但首字母大写。

  • visible_for_annotators(可选):一个布尔值,用于指定元数据属性是否对在 UI 中具有 annotator 角色的用户可见(True),还是仅对具有 owneradmin 角色的用户可见(False)。默认设置为 True

以下参数适用于特定的元数据类型:

  • values(可选):在 TermsMetadataProperty 中,你可以传递此元数据属性的有效值列表,以防你想运行任何验证。如果未提供任何值,则将从记录中提供的值计算值列表。

  • min(可选):在 IntegerMetadataPropertyFloatMetadataProperty 中,你可以传递最小有效值。如果未提供任何值,则将从记录中提供的值计算最小值。

  • max(可选):在 IntegerMetadataPropertyFloatMetadataProperty 中,你可以传递最大有效值。如果未提供任何值,则将从记录中提供的值计算最大值。

rg.TermsMetadataProperty(
    name="groups",
    title="Annotation groups",
    values=["group-a", "group-b", "group-c"] #optional
)
rg.IntegerMetadataProperty(
    name="integer-metadata",
    title="Integers",
    min=0, #optional
    max=100, #optional
    visible_for_annotators=False
)
rg.FloatMetadataProperty(
    name="float-metadata",
    title="Floats",
    min=-0.45, #optional
    max=1000.34, #optional
    visible_for_annotators=False
)

添加 metadata_properties#

如果你想在创建数据集时添加元数据属性,你可以将它们作为 MetadataProperty 实例的列表传递给 FeedbackDataset 构造函数的 metadata_properties 参数,如此处所示。如果你想将元数据属性添加到现有数据集,你可以使用 add_metadata_properties 方法。有关端到端示例,请查看我们的关于添加元数据的教程

metadata_property = rg.TermsMetadataProperty(
    name="groups",
    title="Annotation groups",
    values=["group-a", "group-b", "group-c"]
)
dataset.add_metadata_property(metadata_property)

添加元数据属性后,你可以使用 metadata_property_by_name 检查它们的定义。

dataset.metadata_property_by_name("groups")
# rg.TermsMetadataProperty(
#     name="groups",
#     title="Annotation groups",
#     values=["group-a", "group-b", "group-c"]
# )

更新 metadata_properties#

你可以通过赋值来更新 FeedbackDataset 的元数据属性。如果数据集已推送到 Argilla 并且你正在使用 RemoteFeedbackDataset,则可以使用 update_metadata_properties 方法更新它们。

注意

尚未推送到 Argilla 或从 HuggingFace Hub 拉取的数据集是 FeedbackDataset 的实例,而从 Argilla 拉取的数据集是 RemoteFeedbackDataset 的实例。

metadata_config = dataset.metadata_property_by_name("groups")
metadata_config.title = "Teams"
dataset.update_metadata_properties(metadata_config)

删除 metadata_properties#

如果你需要从已配置的 FeedbackDataset 中删除元数据属性,你可以使用 delete_metadata_properties 方法。

dataset.delete_metadata_properties(metadata_properties="groups")

格式化 metadata#

记录元数据可以包含关于记录的任何信息,这些信息不是表单字段的一部分,以字典的形式存在。如果你希望元数据与为数据集配置的元数据属性相对应,以便可以将这些元数据用于筛选和排序记录,请确保字典的键与元数据属性 name 相对应。当键不对应时,这将视为额外的元数据,将与记录一起存储(只要数据集的 allow_extra_metadata 设置为 True),但不能用于筛选和排序。对于任何元数据属性,你可以定义单个元数据值(以字符串或整数的形式),或多个元数据值(以字符串或整数列表的形式)。

record = rg.FeedbackRecord(
    fields={...},
    metadata={"source": "encyclopedia", "text_length":150}
)
record = rg.FeedbackRecord(
    fields={...},
    metadata={"source": ["encyclopedia", "wikipedia"], "text_length":150}
)

添加 metadata#

一旦定义了 metadata_properties,要将元数据添加到记录,这稍微取决于你使用的是 FeedbackDataset 还是 RemoteFeedbackDataset。有关端到端示例,请查看我们的关于添加元数据的教程。请记住,你可以为元数据属性定义单个元数据值,也可以在 TermsMetadataProperty 中聚合元数据值,以列表的形式用于一个记录属于多个元数据类别的情况。

注意

尚未推送到 Argilla 或从 HuggingFace Hub 拉取的数据集是 FeedbackDataset 的实例,而从 Argilla 拉取的数据集是 RemoteFeedbackDataset 的实例。两者之间的区别在于,前者是本地数据集,对其所做的更改保留在本地。另一方面,后者是远程数据集,对其所做的更改直接反映在 Argilla 服务器上的数据集上,这可以使你的过程更快。

for record in dataset.records:
    record.metadata["my_metadata"] = "new_metadata"
modified_records = []
for record in dataset.records:
    record.metadata["my_metadata"] = "new_metadata"
    modified_records.append(record)
dataset.update_records(modified_records)

注意

你也可以遵循相同的策略来修改现有元数据。

添加文本描述符#

你可以使用基于 TextDescriptives 库的 TextDescriptivesExtractor 轻松地将文本描述符添加到你的记录或数据集,这将自动添加相应的元数据属性和元数据。TextDescriptivesExtractor 可以用于 FeedbackDatasetRemoteFeedbackDataset,并接受以下参数:

  • model(可选):将使用的 spacy 模型的语言。默认为 en。查看此处可用的语言和模型。

  • metrics(可选):要提取的指标列表。默认提取的指标为:n_tokensn_unique_tokensn_sentencesperplexityentropyflesch_reading_ease。你可以根据以下组选择你的指标:descriptive_statsreadabilitydependency_distancepos_proportionscoherencequalityinformation_theory。有关每个组的更多信息,请查看此文档页面

  • visible_for_annotators(可选):提取的指标是否应对应标注者可见。默认为 True

  • show_progress(可选):是否在提取指标时显示进度条。默认为 True

有关实际示例,请查看我们的关于将文本描述符添加为元数据的教程

这可以用于使用 FeedbackDatasetRemoteFeedbackDataset 中的 FieldsMetadataProperties 更新数据集和配置。

from argilla.client.feedback.integrations.textdescriptives import TextDescriptivesExtractor

dataset = ... # FeedbackDataset or RemoteFeedbackDataset

tde = TextDescriptivesExtractor(
    model="en",
    metrics=None,
    visible_for_annotators=True,
    show_progress=True,
)

dataset = tde.update_dataset(
    dataset=dataset
    fields=None # None means using all fields
    update_records=True # Also, update the records in the dataset
    overwrite=False # Whether to overwrite existing vectors
)

这可以用于使用 FeedbackRecords 列表中的 FieldsMetadata 值更新记录。

from argilla.client.feedback.integrations.textdescriptives import TextDescriptivesExtractor

records = [...] # FeedbackRecords or RemoteFeedbackRecords

tde = TextDescriptivesExtractor(
    model="en",
    metrics=None,
    visible_for_annotators=True,
    show_progress=True,
)

records = tde.update_records(
    records=records,
    fields=None # None means using all fields
    overwrite=False # Whether to overwrite existing vectors
)

其他数据集#

注意

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

添加 metadata#

你可以将元数据添加到 TextClassificationRecordTokenClassificationRecordText2TextRecord。元数据是一个字典,其中名称作为键,元数据作为值。

rg.TokenClassificationRecord(
    text=" ".join(tokens),
    tokens=tokens,
    metadata={"my_metadata": metadata},
)

你可以通过修改 metadata 字典轻松地向记录添加元数据。这也可以用于修改现有元数据。

dataset = rg.load("my_dataset")
modified_records = []
for record in dataset:
    record.metadata["my_metadata"] = "my_value"
    modified_records.append(record)
rg.log(name="my_dataset", records=modified_records)