💾 使用元数据#
反馈数据集#
注意
本节涵盖的数据集类是 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)