🤔 使用建议和回复#

反馈数据集#

注意

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

workflow

与元数据和向量不同,suggestionsresponses 未定义为 FeedbackDataset 模式的一部分。相反,它们在您创建记录时添加到记录中。

格式化 suggestions#

建议指的是可以添加到记录中的建议回复(例如,模型预测),以加快标注过程。这些可以在创建记录期间或稍后阶段添加。每个问题只能提供一个建议,并且建议值必须符合预定义的问题,例如,如果我们有一个 1 到 5 的 RatingQuestion,则建议应具有该范围内的有效值。

record = rg.FeedbackRecord(
    fields=...,
    suggestions = [
        {
            "question_name": "relevant",
            "value": "YES",
            "score": 0.7,
            "agent": model_name,
        }
    ]
)
record = rg.FeedbackRecord(
    fields=...,
    suggestions = [
        {
            "question_name": "content_class",
            "value": ["hate", "violent"],
            "score": [0.3, 0.2],
            "agent": model_name,
        }
    ]
)
record = rg.FeedbackRecord(
    fields=...,
    suggestions = [
        {
            "question_name": "preference",
            "value":[
                {"rank": 1, "value": "reply-2"},
                {"rank": 2, "value": "reply-1"},
                {"rank": 3, "value": "reply-3"},
            ],
            "score": [0.20, 0.10, 0.01],
            "agent": model_name,
        }
    ]
)
record = rg.FeedbackRecord(
    fields=...,
    suggestions = [
        {
            "question_name": "quality",
            "value": 5,
            "score": 0.7,
            "agent": model_name,
        }
    ]
)
from argilla.client.feedback.schemas import SpanValueSchema

record = rg.FeedbackRecord(
    fields=...,
    suggestions = [
        {
            "question_name": "entities",
            "value": [
                SpanValueSchema(
                    start=0, # position of the first character of the span
                    end=10, # position of the character right after the end of the span
                    label="ORG",
                    score=1.0
                )
            ],
            "agent": model_name,
        }
    ]
)
record = rg.FeedbackRecord(
    fields=...,
    suggestions = [
        {
            "question_name": "corrected-text",
            "value": "This is a *suggestion*.",
            "score": 0.7,
            "agent": model_name,
        }
    ]
)

添加 suggestions#

要将建议添加到记录中,这稍微取决于您使用的是 FeedbackDataset 还是 RemoteFeedbackDataset。有关端到端示例,请查看我们的关于添加建议和回复的教程

注意

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

for record in dataset.records:
    record.suggestions = [
        {
            "question_name": "relevant",
            "value": "YES",
            "agent": model_name,
        }
    ]
modified_records = []
for record in dataset.records:
    record.suggestions = [
        {
            "question_name": "relevant",
            "value": "YES",
            "agent": model_name,
        }
    ]
    modified_records.append(record)
dataset.update_records(modified_records)

注意

您也可以遵循相同的策略来修改现有建议。

格式化 responses#

如果您的数据集包含一些注释,您可以在创建记录时将其添加到记录中。确保回复遵循与 Argilla 输出相同的格式,并满足所回答的特定问题类型的模式要求。另请确保包含 user_id,以防您计划为同一问题添加多个回复。您只能使用空的 user_id 指定一个回复:user_id=None 的首次出现将被设置为活动的 user_id,而其余 user_id=None 的回复将被丢弃。

record = rg.FeedbackRecord(
    fields=...,
    responses = [
        {
            "values":{
                "relevant":{
                    "value": "YES"
                }
            }
        }
    ]
)
record = rg.FeedbackRecord(
    fields=...,
    responses = [
        {
            "values":{
                "content_class":{
                    "value": ["hate", "violent"]
                }
            }
        }
    ]
)
record = rg.FeedbackRecord(
    fields=...,
    responses = [
        {
            "values":{
                "preference":{
                    "value":[
                        {"rank": 1, "value": "reply-2"},
                        {"rank": 2, "value": "reply-1"},
                        {"rank": 3, "value": "reply-3"},
                    ],
                }
            }
        }
    ]
)
record = rg.FeedbackRecord(
    fields=...,
    responses = [
        {
            "values":{
                "quality":{
                    "value": 5
                }
            }
        }
    ]
)
from argilla.client.feedback.schemas import SpanValueSchema

record = rg.FeedbackRecord(
    fields=...,
    responses = [
        {
            "values":{
                "entities":{
                    "value": [
                        SpanValueSchema(
                            start=0,
                            end=10,
                            label="ORG"
                        )
                    ]
                }
            }
        }
    ]
)
record = rg.FeedbackRecord(
    fields=...,
    responses = [
        {
            "values":{
                "corrected-text":{
                    "value": "This is a *response*."
                }
            }
        }
    ]
)

添加 responses#

要将回复添加到记录中,这稍微取决于您使用的是 FeedbackDataset 还是 RemoteFeedbackDataset。有关端到端示例,请查看我们的关于添加建议和回复的教程

注意

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

for record in dataset.records:
    record.responses = [
        {
            "values":{
                "label":{
                    "value": "YES",
                }
            }
        }
    ]
from datetime import datetime

modified_records = []
for record in dataset.records:
    record.responses = [
        {
            "values":{
                "label":{
                    "value": "YES",
                }
            },
            "inserted_at": datetime.now(),
            "updated_at": datetime.now(),
        }
    ]
    modified_records.append(record)
dataset.update_records(modified_records)

注意

您也可以遵循相同的策略来修改现有回复。

其他数据集#

注意

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

添加 suggestions#

建议指的是可以添加到记录中的建议回复(例如,模型预测),以加快标注过程。这些可以在创建记录期间或稍后阶段添加。我们允许每个记录有多个建议。

在这种情况下,我们期望一个 List[Tuple[str, float]] 作为预测,其中元组的第一个元素是标签,第二个元素是置信度分数。

import argilla as rg

rec = rg.TextClassificationRecord(
    text=...,
    prediction=[("label_1", 0.75), ("label_2", 0.25)],
)

single_textclass_record

在这种情况下,我们期望一个 List[Tuple[str, float]] 作为预测,其中元组的第二个元素是预测的置信度分数。在多标签的情况下,记录的 multi_label 属性应设置为 True

import argilla as rg

rec = rg.TextClassificationRecord(
    text=...,
    prediction=[("label_1", 0.75), ("label_2", 0.75)],
    multi_label=True
)

multi_textclass_record

在这种情况下,我们期望一个 List[Tuple[str, int, int, float]] 作为预测,其中元组的第二个和第三个元素是文本中 token 的开始和结束索引。

import argilla as rg

rec = rg.TokenClassificationRecord(
    text=...,
    tokens=...,
    prediction=[("label_1", 0, 7, 0.75), ("label_2", 26, 33, 0.8)],
)

tokclass_record

在这种情况下,我们期望一个 List[str] 作为预测。

import argilla as rg

rec = rg.Text2TextRecord(
    text=...,
    prediction=["He has 3*4 trees. So he has 12*5=60 apples."],
)

text2text_record

添加 responses#

如果您的数据集包含一些注释,您可以在创建记录时将其添加到记录中。确保回复遵循与 Argilla 输出相同的格式,并满足模式要求。

在这种情况下,我们期望一个 str 作为注释。

import argilla as rg

rec = rg.TextClassificationRecord(
    text=...,
    annotation="label_1",
)

single_textclass_record

在这种情况下,我们期望一个 List[str] 作为注释。在多标签的情况下,记录的 multi_label 属性应设置为 True

import argilla as rg

rec = rg.TextClassificationRecord(
    text=...,
    annotation=["label_1", "label_2"],
    multi_label=True
)

multi_textclass_record

在这种情况下,我们期望一个 List[Tuple[str, int, int]] 作为注释,其中元组的第二个和第三个元素是文本中 token 的开始和结束索引。

import argilla as rg

rec = rg.TokenClassificationRecord(
    text=...,
    tokens=...,
    annotation=[("label_1", 0, 7), ("label_2", 26, 33)],
)

tokclass_record

在这种情况下,我们期望一个 str 作为注释。

import argilla as rg

rec = rg.Text2TextRecord(
    text=...,
    annotation="He has 3*4 trees. So he has 12*5=60 apples.",
)

text2text_record