这篇文章介绍了 Argilla 新的实验性 python SDK,这是一个供 ML/ AI/ NLP 工程师定义人工反馈任务和收集反馈数据的工具包。新的 SDK 简化了与 Argilla 服务器的交互,专注于简化管理数据集的方法,并旨在改善用户体验和功能。反过来,它应有助于更高效地创建高质量的数据集。
在过去的 12 个月中,Argilla 一直在调整其平台,使其从专注于自然语言处理任务(如文本分类或命名实体识别)的以任务为中心的数据集,转向针对复杂或多项任务的可扩展数据集。反过来,Argilla 的 V1 SDK 也在不断发展以支持这两种数据集范例。
最近,我们向社区征求了他们对 SDK 开发的意见。我们与来自不同背景的用户进行了交谈,从在生产环境中部署 Argilla 的用户,到首次学习 Argilla 和以人为中心的 ML 的用户。我们还与处理从分类等经典 NLP 任务到处理诸如直接偏好优化数据集等 LLM 项目的用户进行了交谈。从这些讨论中,我们了解了关于 SDK 的两件主要事情
- 他们喜欢并且需要通过
FeedbackDataset
切换到可扩展任务。 - 不断增长的功能变得难以学习和跟上最新进展。
专注于可扩展数据集
因此,我们决定 Argilla 的 V2 SDK 将纯粹专注于可扩展数据集。这使我们能够构建一个更简单、更简洁的 SDK,专注于与 Argilla 服务器和可扩展数据集的核心交互。此外,通过专注于可扩展数据集,我们可以使 SDK 更易于学习和使用。
在这篇文章中,我们将概述新 SDK 的核心变化及其背后的动机。SDK 中的核心任务包括
- 连接到 Argilla 服务器
- 通过字段和问题定义反馈任务
- 在服务器上添加和更新记录
- 查询和收集记录以用于下游任务
连接到 Argilla 服务器
SDK 最显著的变化在于它的第一行代码。我们已经放弃了定义全局变量的 init 方法,而是使用了客户端对象
import argilla as rgclient = rg.Argilla( api_url="https://argilla.example.com", api_key="my_token",)
客户端接受配置参数或收集环境变量,并用于编辑 Argilla 服务器上的数据集等资源。您可以拥有多个客户端或随时重新定义它们。这里没有障眼法。
客户端还允许您访问 Argilla 服务器上已有的资源
my_dataset = client.datasets("my_dataset")my_workspace = client.workspaces("my_workspace")my_user = client.users("my_user")
有关如何管理反馈团队的更多信息,请查看 此处 的深入指南。
🤔 我们为什么要这样做?
init
方法节省了大量时间或代码行,但它不是一个包含服务器信息的透明对象。我们将client
对象视为您 Argilla 服务器的网关。
使用设置定义反馈任务
由于我们专注于可扩展数据集,我们将 FeedbackDataset
重命名为 Dataset
。但是,SDK 中最重要的更改是 Settings
类。此类与 Dataset
协同工作,以定义数据集的所有字段、问题、向量和元数据。您可以将 Settings
视为您的反馈任务蓝图。
rg.Settings( fields = [ rg.TextField(name="text") ], questions = [ rg.LabelQuestion( name="label", labels=["label_1", "label_2", "label_3"] ) ], metadata = [ rg.TermsMetadataProperty( name="metadata", options=["option_1", "option_2", "option_3"] ) ], vectors = [ rg.VectorField(name="vector", dimensions=10) ], guidelines = "guidelines", allow_extra_metadata = True,)
Settings
将所有内容都集中在一个位置,因此您可以改进和维护数据集配置,或在多个数据集之间使用它。
rg.Dataset( name="name", settings=settings,)
当您准备好在 Argilla UI 中共享您的数据集时,只需应用 dataset.create()
即可。
🤔 我们为什么要这样做? 定义反馈任务对于获得高质量数据至关重要。
Settings
对象允许您的代码专注于该任务,并将其与数据集的生命周期分离。
在服务器上添加和更新记录
添加记录到 Argilla 服务器已得到改进,可以与现有的通用数据结构一起使用。Argilla 仍然使用 rg.Record
类来表示数据集中的记录。
重构后的 SDK 使用熟悉的 rg.Record
类来表示记录。该类具有 fields
、suggestions
、responses
、metadata
和 vectors
的属性和参数。这些实例化的记录可以直接传递给重新启用的 log
方法 🎉。
records = [ rg.Record( fields={ "question": "Do you need oxygen to breathe?", "answer": "Yes" }, ), rg.Record( fields={ "question": "What is the boiling point of water?", "answer": "100 degrees Celsius" }, ),]dataset.records.log(records)
此外,新的 SDK 将解析您的数据结构并为您实例化记录。这意味着您可以将记录作为字典状结构的列表添加
# ! Here we are defining dictionaries to illustrate the data structuredataset.records.add( records=[ { "question": "What is the capital of France?", # 'question' matches the `rg.TextField` name "answer": "Paris" # 'answer' matches the `rg.TextQuestion` name }, { "question": "What is the capital of Germany?", "answer": "Berlin" },])
这使您可以将数据保留在其原生结构中,而无需定义摄取流程。实际上,log
方法也接受 Hugging Face 数据集。因此,您可以将数据集传递给 log
方法。
ds = load_dataset("imdb")dataset.records.log(ds)
为了使过程更简单,log
方法采用从您的键到 Argilla 属性(如字段、问题、元数据和向量)的映射。
# IMDB dataset column name is 'label'ds = load_dataset("imdb")# Argilla dataset question name is 'sentiment'dataset.records.log(ds, mapping={"label":"sentiment"})
如果您想更新现有记录,您也可以使用 log
方法和类似的属性。
# Update records in a datasetdataset.records.log( records=[ { "id": "1", # matches id used to add records "answer": "Paris", } ])
🤔 我们为什么要这样做? 数据源的质量和表示形式各不相同,而反馈任务应采用 UI 用户可以理解的形式。通过抽象数据摄取,您可以将数据保留在其原生形式,并专注于适合 UI 用户的命名。
查询和收集记录以用于下游任务
要使用查询从 Argilla 收集记录,您可以使用 Filter
类来定义条件,并将它们传递给 Dataset.records
属性,以根据条件获取记录。条件包括“==”、“>=”、“<=”或“in”,并且可以与点表示法结合使用,以根据元数据、建议或响应来过滤记录。查询还可以与搜索词结合使用。
# Create a range from 10 to 20range_filter = rg.Filter( [ ("metadata.count", ">=", 10), ("metadata.count", "<=", 20) ])# Query records with metadata count greater than 10 and less than 20query = rg.Query(filter=range_filter, query="paris")# Iterate over the resultsfor record in dataset.records(query=query): print(record)
下一步
在接下来的几周内,我们将推出 Argilla 2.0 和此处展示的新 SDK。目前,该 SDK 仍处于实验阶段,但欢迎您按照以下说明试用。我们欢迎您的反馈、问题、贡献和意见。
实验性 SDK 在 此仓库 中开发。查看 README 或 文档 以进行安装。
这对我当前的项目意味着什么?
您是否正在使用可扩展数据集(如 FeedbackDataset)?
这不会影响您的 Argilla 服务器。您可以将新的 SDK 与 1.27
之后的 argilla 服务器版本一起使用。您可以选择更新客户端代码,您会发现更改非常小。
您是否正在使用旧的特定于任务的数据集(如 TextClassificationDataset)?
在 1.29
版(当前版本)之后,argilla 服务器或客户端将不再支持特定于任务的数据集。我们将维护此版本的安全性和错误修复,但如果您需要旧版数据集,则应保留在此版本上。