文本分类¶
- 目标: 展示文本分类任务的标准工作流程,包括零样本建议和模型微调。
- 数据集: IMDB,一个电影评论数据集,需要分类为正面或负面。
- 库: datasets, transformers, setfit
- 组件: TextField, LabelQuestion, Suggestion, Query, Filter
开始入门¶
部署 Argilla 服务器¶
如果您已经部署了 Argilla,您可以跳过此步骤。否则,您可以按照本指南快速部署 Argilla。
设置环境¶
要完成本教程,您需要通过 pip
安装 Argilla SDK 和一些第三方库。
让我们进行所需的导入
您还需要使用 api_url
和 api_key
连接到 Argilla 服务器。
# Replace api_url with your url if using Docker
# Replace api_key with your API key under "My Settings" in the UI
# Uncomment the last line and set your HF_TOKEN if your space is private
client = rg.Argilla(
api_url="https://[your-owner-name]-[your_space_name].hf.space",
api_key="[your-api-key]",
# headers={"Authorization": f"Bearer {HF_TOKEN}"}
)
数据集概览¶
我们将查看数据集,以了解其结构和包含的数据类型。我们通过使用嵌入式 Hugging Face Dataset Viewer 来做到这一点。
配置和创建 Argilla 数据集¶
现在,我们将需要配置数据集。在设置中,我们可以指定指南、字段和问题。如果需要,您还可以添加元数据和向量。但是,对于我们的用例,我们只需要一个文本字段和一个标签问题,分别对应于 text
和 label
列。
注意
查看此操作指南以了解有关配置和创建数据集的更多信息。
labels = ["positive", "negative"]
settings = rg.Settings(
guidelines="Classify the reviews as positive or negative.",
fields=[
rg.TextField(
name="review",
title="Text from the review",
use_markdown=False,
),
],
questions=[
rg.LabelQuestion(
name="sentiment_label",
title="In which category does this article fit?",
labels=labels,
)
],
)
让我们使用名称和定义的设置创建数据集
添加记录¶
即使我们已经创建了数据集,它仍然缺少要标注的信息(您可以在 UI 中查看)。我们将使用来自 Hugging Face Hub 的 imdb
数据集。具体来说,我们将使用 train
拆分的 100 个样本。
我们将使用 log
和映射轻松地将它们添加到数据集中,在映射中,我们指示列 text
是应添加到字段 review
的数据。
添加初始模型建议¶
下一步是将建议添加到数据集。这将使标注团队的工作更轻松、更快速。建议将显示为预选选项,因此标注员只需更正它们。在我们的例子中,我们将使用零样本 SetFit 模型生成它们。但是,您可以使用您选择的框架或技术。
我们将首先定义一个示例训练集,其中包含所需的标签:positive
和 negative
。使用 get_templated_dataset
将从默认模板创建句子:“This sentence is {label}.”
现在,我们将准备一个函数来训练 SetFit 模型。
注意
有关进一步的自定义,您可以查看 SetFit 文档。
让我们训练模型。我们将使用 TaylorAI/bge-micro-v2
,它在 Hugging Face Hub 中可用。
您可以将其本地保存或推送到 Hub。然后,从那里加载它。
# Save and load locally
# model.save_pretrained("text_classification_model")
# model = SetFitModel.from_pretrained("text_classification_model")
# Push and load in HF
# model.push_to_hub("[username]/text_classification_model")
# model = SetFitModel.from_pretrained("[username]/text_classification_model")
是时候进行预测了!我们将设置一个函数,该函数使用 predict
方法来获取建议的标签。模型将根据文本推断标签。
要更新记录,我们需要从服务器检索它们,并使用新建议更新它们。id
始终需要提供,因为它是记录的标识符,用于更新记录并避免创建新记录。
瞧!我们已将建议添加到数据集中,它们将在 UI 中标记为 ✨。
使用 Argilla 评估¶
现在,我们可以开始标注过程。只需在 Argilla UI 中打开数据集并开始标注记录。如果建议正确,您只需单击 Submit
。否则,您可以选择正确的标签。
注意
查看此操作指南以了解有关在 UI 中标注的更多信息。
训练您的模型¶
由于每个记录只有一个响应,我们可以直接检索选定的标签,并创建每个标签包含 8 个样本的训练集。我们为每个标签选择了 8 个样本,以获得用于少样本学习的平衡数据集。
我们可以使用我们之前的函数来训练模型,但这次使用高质量的人工标注训练集。
由于训练数据质量更高,我们可以期待更好的模型。因此,我们可以使用新模型的建议更新剩余的未标注记录。
结论¶
在本教程中,我们展示了一个文本分类任务的端到端示例。这可以作为基础,但它可以迭代执行并无缝集成到您的工作流程中,以确保高质量的数据管理和改进的结果。
我们首先配置数据集,添加记录,并训练零样本 SetFit 模型(作为一个例子)以添加建议。在标注过程之后,我们使用标注数据训练了一个新模型,并使用新建议更新了剩余的记录。