🗂️ 将记录分配给你的团队#

根据您的项目性质和标注团队的规模,您可能希望控制标注重叠,即对单个记录进行多次标注。在本节中,我们将演示一种实现此目的的简便方法。

反馈数据集#

注意

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

完全重叠#

默认情况下,“反馈任务”支持对您的记录进行多次标注。这意味着所有有权访问数据集的用户都可以对数据集中的所有记录做出响应。要实现完全重叠,只需在所有团队成员都有权访问的工作区中推送数据集(如 创建反馈数据集 中详述)。了解更多关于管理用户对工作区的访问权限的信息,请点击此处

受控重叠#

我们提供了易于使用的实用程序函数,用于在您的团队中分发记录。下面,我们概述了此任务的一般方法。有关更全面的示例,请参阅我们的端到端教程。

  1. 获取将要进行标注的用户列表和记录。

import argilla as rg

# Optional: filter users to get only those with annotator role
users = [u for u in rg.User.list() if u.role == "annotator"]

records = [...]
  1. 使用 assign_records 函数来分配标注。您可以通过提供以下参数来指定分配参数

  • users:用户列表或包含组和相应用户的字典。这将允许您在用户或用户组之间进行分配。

  • records:记录列表。

  • overlap:每个记录的标注数量。请注意,一个组将被视为一个唯一的标注者,同一组的所有成员将标注相同的记录。

  • shuffle:是否在分配记录之前对其进行洗牌。默认为 True

from argilla.client.feedback.utils import assign_records
assignments = assign_records(
    users=users,
    records=records,
    overlap=1,
    shuffle=True
)
  1. 通过将数据集推送到其对应的工作区来分配记录。为此,您可以使用 assign_workspaces,它将检查工作区是否存在,如果需要,则创建它。您可以通过提供以下参数来指定参数

  • assignments:包含上一步分配的字典。

  • workspace_typegroupgroup_personalindividual 之一。选择 group 表示每个组共享一个工作区并标注相同的数据集。如果您选择 group_personal,则每个组成员都会获得一个个人工作区。当您不使用组(即,个人用户列表)时,请使用 individual,其中每个用户将拥有一个单独的工作区。

from argilla.client.feedback.utils import assign_workspaces

assignments = assign_workspaces(
    assignments=assignments,
    workspace_type="individual"
)

for username, records in assignments.items():
    dataset = rg.FeedbackDataset(
        fields=fields,
        questions=questions,
        metadata_properties=metadata_properties,
        vector_settings=vector_settings,
        guidelines=guidelines
    )
    dataset.add_records(records)
    remote_dataset = dataset.push_to_argilla(name="my_dataset", workspace=username)

注意

如果您希望有一个所有队友都可以访问的单个数据集,您可以使用元数据分配记录,无论是否重叠(通过将单个标注者作为元数据添加到每个记录)或重叠(通过添加多个标注者的列表)。标注者只需在 Argilla UI 中按其用户名过滤数据集即可获得其分配的记录

#Add the metadata to the existing records using id to identify each record
id_modified_records = {}
for username, records in assignments.items():
    for record in records:
        record_id = id(record)
        if record_id not in id_modified_records:
            id_modified_records[record_id] = record
            record.metadata["annotators"] = []
        if username not in id_modified_records[record_id].metadata["annotators"]:
            id_modified_records[record_id].metadata["annotators"].append(username)

# Get the unique records with their updated metadata
modified_records = list(id_modified_records.values())

# Push the dataset with the modified records
dataset = rg.FeedbackDataset(
        fields=fields,
        questions=questions,
        metadata_properties=[rg.TermsMetadataProperty(name="annotators")]
        vector_settings=vector_settings,
        guidelines=guidelines,
    )
dataset.add_records(modified_records)
remote_dataset = dataset.push_to_argilla(name="my_dataset", workspace="workspace_name")

其他数据集#

注意

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

零重叠#

默认情况下,这些数据集不允许重叠,即它们只允许一个响应。这意味着您只需要在所有标注团队成员都有权访问的工作区中记录您的数据集即可获得零重叠。

您可以要求您的团队进行自我组织并处理任何可用的无效记录,但为了避免互相干扰,建议在您的队友之间分配记录。请按照本教程学习如何操作。

完全重叠#

如果您想收集标注团队所有成员对每个记录的响应,那么您需要多次记录完整数据集,在每个标注者的个人工作区中记录一次。

为此,请获取用户列表,如上文所述,并运行以下代码

# Make a list of records
records = [...]

# Loop through the user list
for user in users:
    # Check that the user has a personal workspace and create it if not
    try:
        workspace = rg.Workspace.from_name(user.username)
    except:
        workspace = rg.Workspace.create(user.username)
        user = rg.User.from_name(user.username)
        workspace.add_user(user.id)

    # Log the records in their personal workspace
    rg.log(
        records=records,
        workspace=workspace,
        name='my_dataset'
    )

受控重叠#

要控制这些数据集中的标注重叠,您可以按照 关于反馈数据集的部分 中详述的相同方法进行操作,尽管日志记录方法不同。一旦您运行了该部分中的代码来进行分配,您就可以像这样记录它们

# Loop through the assignments dictionary
for user, records in assignments.items():
    # Check that the user has a personal workspace and create it if not
    try:
        workspace = rg.Workspace.from_name(user.username)
    except:
        workspace = rg.Workspace.create(user.username)
        user = rg.User.from_name(user.username)
        workspace.add_user(user.id)
    # Log the records in their personal workspace
    rg.log(
        records=records,
        workspace=workspace,
        name="my_dataset"
    )