💾 使用元数据#
反馈数据集#
注意
本节涵盖的数据集类是 FeedbackDataset。这个完全可配置的数据集将在 Argilla 2.0 中取代 DatasetForTextClassification、DatasetForTokenClassification 和 DatasetForText2Text。不确定使用哪个数据集?请查看我们关于选择数据集的部分。
定义 metadata_properties#
元数据属性允许你配置元数据信息的使用,以便在 UI 和 Python SDK 中进行筛选和排序功能。
你可以在 创建 FeedbackDataset 或将元数据属性添加到已存在的 FeedbackDataset 时,使用 Python SDK 定义元数据属性。它们具有以下参数:
name:元数据属性的名称,将在内部使用。title(可选):元数据属性的名称,将在 UI 中显示。默认为name值,但首字母大写。visible_for_annotators(可选):一个布尔值,用于指定元数据属性是否对在 UI 中具有annotator角色的用户可见(True),还是仅对具有owner或admin角色的用户可见(False)。默认设置为True。
以下参数适用于特定的元数据类型:
values(可选):在TermsMetadataProperty中,你可以传递此元数据属性的有效值列表,以防你想运行任何验证。如果未提供任何值,则将从记录中提供的值计算值列表。min(可选):在IntegerMetadataProperty或FloatMetadataProperty中,你可以传递最小有效值。如果未提供任何值,则将从记录中提供的值计算最小值。max(可选):在IntegerMetadataProperty或FloatMetadataProperty中,你可以传递最大有效值。如果未提供任何值,则将从记录中提供的值计算最大值。
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 可以用于 FeedbackDataset 或 RemoteFeedbackDataset,并接受以下参数:
model(可选):将使用的 spacy 模型的语言。默认为en。查看此处可用的语言和模型。metrics(可选):要提取的指标列表。默认提取的指标为:n_tokens、n_unique_tokens、n_sentences、perplexity、entropy和flesch_reading_ease。你可以根据以下组选择你的指标:descriptive_stats、readability、dependency_distance、pos_proportions、coherence、quality和information_theory。有关每个组的更多信息,请查看此文档页面。visible_for_annotators(可选):提取的指标是否应对应标注者可见。默认为True。show_progress(可选):是否在提取指标时显示进度条。默认为True。
有关实际示例,请查看我们的关于将文本描述符添加为元数据的教程。
这可以用于使用 FeedbackDataset 或 RemoteFeedbackDataset 中的 Fields 的 MetadataProperties 更新数据集和配置。
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 列表中的 Fields 的 Metadata 值更新记录。
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
)
其他数据集#
注意
本节涵盖的记录类对应于三个数据集:DatasetForTextClassification、DatasetForTokenClassification 和 DatasetForText2Text。这些将在 Argilla 2.0 中弃用,并由完全可配置的 FeedbackDataset 类取代。不确定使用哪个数据集?请查看我们关于选择数据集的部分。
添加 metadata#
你可以将元数据添加到 TextClassificationRecord、TokenClassificationRecord 或 Text2TextRecord。元数据是一个字典,其中名称作为键,元数据作为值。
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)