Hugging Face datasets
库中的 map
方法
map
是 datasets
库中最重要的 数据处理 方法之一,它可以 对数据集中的每个样本进行转换、过滤、扩展 等操作,适用于 文本预处理、数据增强、特征提取、标签转换等任务。
1. map
方法的基本用法
map
适用于 整个数据集 或 数据集的某个子集(如 train/test/validation),它的基本语法如下:
dataset = dataset.map(function, batched=False, num_proc=None)
参数 | 作用 |
---|---|
function | 处理单个样本或多个样本的函数 |
batched | 是否批量处理数据(默认 False ) |
num_proc | 进行多进程加速(默认 None ) |
remove_columns | 移除不需要的列 |
2. map
的基本示例
假设我们有一个文本分类数据集:
from datasets import load_dataset
dataset = load_dataset("imdb")
print(dataset["train"][0])
输出:
{'text': 'This is a great movie!', 'label': 1}
2.1. 处理单个样本
如果我们想要将 text
转换为小写:
def lowercase(example):
example["text"] = example["text"].lower()
return example
dataset = dataset.map(lowercase)
print(dataset["train"][0])
输出:
{'text': 'this is a great movie!', 'label': 1}
3. map
处理多个字段
如果我们想要 添加新字段,例如计算 text
的长度:
def add_length(example):
example["text_length"] = len(example["text"])
return example
dataset = dataset.map(add_length)
print(dataset["train"][0])
输出:
{'text': 'this is a great movie!', 'label': 1, 'text_length': 23}
4. map
进行批量处理(batched=True
)
如果 batched=True
,map
会 一次处理多个样本,可以 提高处理速度:
def add_length_batch(batch):
batch["text_length"] = [len(text) for text in batch["text"]]
return batch
dataset = dataset.map(add_length_batch, batched=True)
当数据集 较大 时,batched=True
会显著加快 map
的执行速度。
5. 使用 num_proc
进行多进程加速
如果数据集非常大,可以使用 num_proc
进行 多进程处理:
dataset = dataset.map(lowercase, num_proc=4)
num_proc=4
表示 使用 4 个 CPU 进程同时处理数据。- 适用于 大规模数据集,如
wikitext
或c4
。
6. map
方法的高级用法
6.1. 只修改特定列
如果 function
只修改某个列,map
会默认保留其他列:
dataset = dataset.map(lowercase, input_columns=["text"])
6.2. 移除不需要的列
如果你想移除 text_length
列:
dataset = dataset.map(lowercase, remove_columns=["text_length"])
6.3. 处理多个字段
如果你想 合并多个字段:
def merge_texts(example):
example["merged_text"] = example["title"] + " " + example["text"]
return example
dataset = dataset.map(merge_texts)
7. map
方法 vs filter
方法
方法 | 作用 |
---|---|
map | 修改或扩展数据(如文本预处理) |
filter | 筛选数据(如移除短文本) |
示例:筛选 文本长度大于 100 的数据:
dataset = dataset.filter(lambda example: len(example["text"]) > 100)
8. map
适用于哪些任务?
任务 | 适用 |
---|---|
文本预处理 | ✅ |
分词 | ✅ |
计算特征 | ✅ |
数据增强 | ✅ |
标签转换 | ✅ |
9. 总结
map
是datasets
处理数据的核心方法,可 批量修改数据集中的样本。- 支持
batched=True
进行批量处理,提高速度。 - 支持
num_proc
进行多进程加速,适用于大规模数据集。 - 可以新增、修改、删除字段,也可配合
filter
进行数据筛选。