rg.Dataset.records
¶
使用示例¶
在大多数情况下,您不需要直接创建 DatasetRecords
对象。相反,您可以通过 Dataset
对象访问它
对于熟悉旧方法的用户
Dataset.records
对象用于与数据集中的记录进行交互。它以批次形式从服务器交互式地获取记录,而无需使用记录的本地副本。Dataset.records
的log
方法用于在数据集中添加和更新记录。如果记录包含已知的id
字段,则记录将被更新。如果记录不包含已知的id
字段,则记录将被添加。
向数据集添加记录¶
要向数据集添加记录,请使用 log
方法。记录可以作为字典或 Record
对象添加。单个记录也可以作为字典或 Record
添加。
您还可以通过直接初始化 Record
对象来向数据集添加记录。
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"
},
),
] # (1)
dataset.records.log(records)
- 这是一个定义的示例。在实际场景中,您将迭代数据结构并为每次迭代创建
Record
对象。
data = [
{
"question": "Do you need oxygen to breathe?",
"answer": "Yes",
},
{
"question": "What is the boiling point of water?",
"answer": "100 degrees Celsius",
},
] # (1)
dataset.records.log(data)
- 数据结构的键必须与 Argilla 数据集中的字段或问题匹配。在本例中,有名为
question
和answer
的字段。
data = [
{
"query": "Do you need oxygen to breathe?",
"response": "Yes",
},
{
"query": "What is the boiling point of water?",
"response": "100 degrees Celsius",
},
] # (1)
dataset.records.log(
records=data,
mapping={"query": "question", "response": "answer"} # (2)
)
- 数据结构的键必须与 Argilla 数据集中的字段或问题匹配。在本例中,有名为
question
和answer
的字段。 - 数据结构具有键
query
和response
,而 Argilla 数据集具有question
和answer
。您可以使用mapping
参数将数据结构中的键映射到 Argilla 数据集中的字段。
您还可以使用 Hugging Face 数据集向数据集添加记录。当您想使用来自 Hugging Face Hub 的数据集并将其添加到您的 Argilla 数据集时,这非常有用。
您可以添加数据集,其中列名对应于 Argilla 数据集中的字段、问题、元数据或向量的名称。
如果数据集的模式与您的 Argilla 数据集名称不对应,您可以使用 mapping
来指示数据集中的哪些列对应于 Argilla 数据集字段。
from datasets import load_dataset
hf_dataset = load_dataset("imdb", split="train[:100]") # (1)
dataset.records.log(records=hf_dataset)
- 在本例中,Hugging Face 数据集与 Argilla 数据集模式匹配。如果不是这种情况,您可以使用
datasets
库的.map
来准备数据,然后再将其添加到 Argilla 数据集。
在这里,我们使用 mapping
参数来指定 Hugging Face 数据集和 Argilla 数据集之间的关系。
- 在本例中,Hugging Face 数据集中的
txt
键对应于 Argilla 数据集中的text
字段,而 Hugging Face 数据集中的y
键对应于 Argilla 数据集中的label
字段。
更新数据集中的记录¶
记录也可以使用包含 id
的记录通过 log
方法进行更新,以标识要更新的记录。如上所述,记录可以作为字典或 Record
对象添加。
您可以通过直接初始化 Record
对象并提供 id
字段来更新数据集中的记录。
records = [
rg.Record(
metadata={"department": "toys"},
id="2" # (1)
),
]
dataset.records.log(records)
id
字段是标识要更新的记录所必需的。id
字段对于数据集中的每个记录都必须是唯一的。如果未提供id
字段,则该记录将作为新记录添加。
您还可以通过在数据结构中提供 id
字段来更新数据集中的记录。
id
字段是标识要更新的记录所必需的。id
字段对于数据集中的每个记录都必须是唯一的。如果未提供id
字段,则该记录将作为新记录添加。
您还可以通过在数据结构中提供 id
字段并使用映射将数据结构中的键映射到数据集中的字段来更新数据集中的记录。
data = [
{
"metadata": {"department": "toys"},
"my_id": "2" # (1)
},
]
dataset.records.log(
records=data,
mapping={"my_id": "id"} # (2)
)
id
字段是标识要更新的记录所必需的。id
字段对于数据集中的每个记录都必须是唯一的。如果未提供id
字段,则该记录将作为新记录添加。- 假设您的数据结构具有键
my_id
而不是id
。您可以使用mapping
参数将数据结构中的键映射到数据集中的字段。
您还可以使用 Hugging Face 数据集更新 Argilla 数据集中的记录。要更新记录,Hugging Face 数据集必须包含 id
字段以标识要更新的记录,或者您可以使用映射将 Hugging Face 数据集中的键映射到 Argilla 数据集中的字段。
from datasets import load_dataset
hf_dataset = load_dataset("imdb", split="train[:100]") # (1)
dataset.records.log(records=hf_dataset, mapping={"uuid": "id"}) # (2)
- 在本例中,Hugging Face 数据集与 Argilla 数据集模式匹配。
- Hugging Face 数据集中的
uuid
键对应于 Argilla 数据集中的id
字段。
添加和更新带有图像的记录¶
Argilla 数据集可以包含图像字段。您可以通过将图像作为远程 URL、本地图像文件路径或 PIL 对象传递给记录对象,从而向数据集添加图像。字段名称必须在数据集的 Settings
对象中定义为 rg.ImageField
才能被接受。图像将存储在 Argilla 数据库中,并使用数据 URI 模式返回。
作为 PIL 对象
要检索作为重新缩放的 PIL 对象的图像,您可以在导出记录时使用 to_datasets
方法,如本 操作指南 所示。
import os
from PIL import Image
image_dir = "path/to/images"
data = [
{
"image": os.path.join(image_dir, "image1.jpg"), # (1)
},
{
"image": Image.open(os.path.join(image_dir, "image2.jpg")), # (2)
},
]
dataset.records.log(data)
- 图像是本地文件路径。
- 图像是 PIL 对象。
Hugging Face 数据集可以直接传递给 log
方法。图像字段必须在数据集的特征中定义为 Image
。
hf_dataset = load_dataset("ylecun/mnist", split="train[:100]")
dataset.records.log(records=hf_dataset)
如果图像字段未在数据集的特征中定义为 Image
,您可以先将数据集转换为正确的模式,然后再将其添加到 Argilla 数据集。这仅在图像字段未在数据集的特征中定义为 Image
,并且不是 Argilla 支持的图像类型之一(URL、本地路径或 PIL 对象)时才需要。
hf_dataset = load_dataset("<my_custom_dataset>") # (1)
hf_dataset = hf_dataset.cast(
features=Features({"image": Image(), "label": Value("string")}),
)
dataset.records.log(records=hf_dataset)
- 在本例中,Hugging Face 数据集与 Argilla 数据集模式匹配,但图像字段未在数据集的特征中定义为
Image
。
迭代数据集中的记录¶
Dataset.records
可用于迭代服务器上数据集中的记录。记录将从服务器分批获取:
for record in dataset.records:
print(record)
# Fetch records with suggestions and responses
for record in dataset.records(with_suggestions=True, with_responses=True):
print(record.suggestions)
print(record.responses)
# Filter records by a query and fetch records with vectors
for record in dataset.records(query="capital", with_vectors=True):
print(record.vectors)
查看 rg.Record
类参考,了解有关记录上可用的属性和方法的更多信息,并查看 rg.Query
类参考,了解有关查询语法的更多信息。
DatasetRecords
¶
基类:Iterable[Record]
, LoggingMixin
此类用于处理来自数据集的记录,并通过 Dataset.records
访问。此类负责提供一个接口来与数据集中的记录进行交互,包括添加、更新、获取、查询、删除和导出记录。
属性
名称 | 类型 | 描述 |
---|---|---|
client |
Argilla
|
Argilla 客户端对象。 |
dataset |
Dataset
|
数据集对象。 |
源代码在 src/argilla/records/_dataset_records.py
中
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 |
|
__init__(client, dataset, mapping=None)
¶
使用客户端和数据集初始化 DatasetRecords 对象。参数:client:Argilla 客户端对象。dataset:Dataset 对象。
源代码在 src/argilla/records/_dataset_records.py
中
__call__(query=None, batch_size=DEFAULT_BATCH_SIZE, start_offset=0, with_suggestions=True, with_responses=True, with_vectors=None, limit=None)
¶
返回服务器上数据集中记录的迭代器。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
query |
可选[Union[str, Query]]
|
用于过滤记录的字符串或 Query 对象。 |
无
|
batch_size |
可选[int]
|
每个批次中要获取的记录数。默认值为 256。 |
DEFAULT_BATCH_SIZE
|
start_offset |
int
|
开始获取记录的偏移量。默认值为 0。 |
0
|
with_suggestions |
bool
|
是否在记录中包含建议。默认值为 True。 |
True
|
with_responses |
bool
|
是否在记录中包含响应。默认值为 True。 |
True
|
with_vectors |
可选[Union[List, bool, str]]
|
要在记录中包含的向量名称列表。默认值为 None。如果提供了列表,则仅包含指定的向量。如果提供了 True,则将包含所有向量。 |
无
|
limit |
可选[int]
|
要获取的最大记录数。默认值为 None。 |
无
|
返回值
类型 | 描述 |
---|---|
DatasetRecordsIterator
|
服务器上数据集中记录的迭代器。 |
源代码在 src/argilla/records/_dataset_records.py
中
log(records, mapping=None, user_id=None, batch_size=DEFAULT_BATCH_SIZE, on_error=RecordErrorHandling.RAISE)
¶
使用提供的记录在服务器上的数据集中添加或更新记录。如果记录包含已知的 id
字段,则记录将被更新。如果记录不包含已知的 id
字段,则记录将作为新记录添加。有关记录定义的更多信息,请参阅 rg.Record
。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
records |
Union[List[dict], List[Record], HFDataset]
|
|
必需 |
mapping |
可选[Dict[str, Union[str, Sequence[str]]]]
|
一个字典,用于将记录中的键/列名映射到 Argilla 数据集中的字段或问题。要将传入的键或列分配给多个字段或问题,请提供字段或问题名称的列表或元组。 |
无
|
user_id |
可选[UUID]
|
要与记录的响应关联的用户 ID。如果未提供,则使用当前用户 ID。 |
无
|
batch_size |
int
|
每个批次要发送的记录数。默认值为 256。 |
DEFAULT_BATCH_SIZE
|
返回值
类型 | 描述 |
---|---|
DatasetRecords
|
表示更新记录的 Record 对象列表。 |
源代码在 src/argilla/records/_dataset_records.py
中
delete(records, batch_size=DEFAULT_DELETE_BATCH_SIZE)
¶
使用提供的记录删除服务器上数据集中的记录,并基于 ID 进行匹配。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
records |
List[Record]
|
表示要删除的记录的 |
必需 |
batch_size |
int
|
每个批次要发送的记录数。默认值为 64。 |
DEFAULT_DELETE_BATCH_SIZE
|
返回值
类型 | 描述 |
---|---|
List[Record]
|
表示已删除记录的 Record 对象列表。 |
源代码在 src/argilla/records/_dataset_records.py
中
to_dict(flatten=False, orient='names')
¶
将记录作为字典返回。这是 dataset.records(...).to_dict() 的便捷快捷方式。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
flatten |
bool
|
导出字典的结构。 - True:记录字段、元数据、建议和响应将被展平。 - False:记录字段、元数据、建议和响应将被嵌套。 |
False
|
orient |
str
|
导出字典的方向。 - "names":字典的键将是字段、元数据、建议和响应的名称。 - "index":字典的键将是记录的 ID。 |
'names'
|
返回值:记录的字典。
源代码在 src/argilla/records/_dataset_records.py
中
to_list(flatten=False)
¶
将记录作为字典列表返回。这是 dataset.records(...).to_list() 的便捷快捷方式。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
flatten |
bool
|
列表中导出的字典的结构。 - True:记录键被展平,并使用点表示法记录属性及其属性。例如, |
False
|
返回值:记录的字典列表。
源代码在 src/argilla/records/_dataset_records.py
中
to_json(path)
¶
将记录导出到磁盘上的文件。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
path |
str
|
保存记录的文件的路径。 |
必需 |
返回值
类型 | 描述 |
---|---|
Path
|
记录保存到的文件的路径。 |
源代码在 src/argilla/records/_dataset_records.py
中
from_json(path)
¶
从磁盘路径创建 DatasetRecords 对象到 JSON 文件。JSON 文件应由 DatasetRecords.to_json
定义。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
path |
str
|
path |
必需 |
返回值
名称 | 类型 | 描述 |
---|---|---|
DatasetRecords |
List[Record]
|
从磁盘路径创建的 DatasetRecords 对象。 |