transformers DataCollatorWithPadding类

构造方法

DataCollat​​orWithPadding(tokenizer:PreTrainedTokenizerBase
						padding:typing.Union[bool, str, transformers.utils.generic.PaddingStrategy] = True
						max_length : typing.Optional[int] = None
						pad_to_multiple_of : typing.Optional[int] = None
						return_tensors : str = 'pt ' )

在transfomers中,定义了一个DataCollator类,该类用于将数据集的单个元素打包成一批数据。DataCollatorWithPadding类是DataCollator类的一个实现类,该类在打包时将动态填充输入的数据。

参数tokenizer表示输入的分词器。参数padding可以为bool类型,True表示填充,False表示不填充;也可以为字符串,表示填充策略,"longest"表示根据输入数据中最长的数据来进行填充,"max_length"表示填充至参数max_length设置的长度,“do_not_pad"表示不填充。参数pad_to_multiple_of表示填充的数据的倍数。参数return_tensors表示返回的数据类型,可以为"pt”,pytorch数据类型;“tf”,tensorflow数据类型;“np”,"numpy"数据类型。

使用示例

>>> import transformers
>>> import datasets
>>> dataset = datasets.load_dataset("glue", "cola", split="train")
>>> dataset = dataset.map(lambda data: tokenizer(data["sentence"],padding=True), batched=True)
>>> dataset
Dataset({
    features: ['sentence', 'label', 'idx', 'input_ids', 'token_type_ids', 'attention_mask'],
    num_rows: 8551
})
>>> tokenizer = transformers.BertTokenizer.from_pretrained("bert-base-uncased")
>>> data_collator = transformers.DataCollatorWithPadding(tokenizer, 
						   								 padding="max_length",
						   								 max_length=12,
						   								 return_tensors="tf")
>>> dataset = dataset.to_tf_dataset(columns=["label", "input_ids"], batch_size=16, shuffle=False, collate_fn=data_collator)
>>> dataset
<PrefetchDataset element_spec={'input_ids': TensorSpec(shape=(None, None), dtype=tf.int64, name=None), 'attention_mask': TensorSpec(shape=(None, None), dtype=tf.int64, name=None), 'labels': TensorSpec(shape=(None,), dtype=tf.int64, name=None)}>
### 创建和使用自定义数据集 为了在 `Transformers` 库中创建并使用自定义数据集,可以遵循以下方法。这涉及到准备数据、预处理以及将其集成到训练流程中的具体步骤。 #### 准备环境 首先安装必要的依赖项: ```bash pip install datasets transformers torch ``` #### 加载和预览数据 假设有一个 CSV 文件作为输入源,其中包含两列:`text` 和 `label`。可以通过 Hugging Face 的 `datasets` 库来加载这个文件,并查看前几条记录以确认其结构。 ```python from datasets import load_dataset dataset = load_dataset('csv', data_files={'train': 'path/to/train.csv'}) print(dataset['train'][0]) ``` #### 数据预处理 对于文本分任务来说,通常需要对原始文本进行编码操作,转换成模型能够理解的形式。这里展示如何利用 `AutoTokenizer` 来完成这一过程。 ```python from transformers import AutoTokenizer tokenizer_name_or_path = "distilbert-base-uncased" max_length = 128 tokenizer = AutoTokenizer.from_pretrained(tokenizer_name_or_path) def preprocess_function(examples): return tokenizer( examples["text"], truncation=True, padding="max_length", max_length=max_length ) tokenized_datasets = dataset.map(preprocess_function, batched=True) ``` #### 设置 PyTorch DataLoader 为了让数据更高效地被送入 GPU 或 CPU 进行计算,建议构建一个基于 PyTorch 的 `DataLoader` 对象。 ```python import torch batch_size = 8 data_collator = DataCollatorWithPadding(tokenizer=tokenizer) dataloader = torch.utils.data.DataLoader( tokenized_datasets["train"], shuffle=True, collate_fn=data_collator, batch_size=batch_size, ) ``` 通过上述代码片段,已经成功地将自定义的数据集导入到了 `Transformers` 工具链当中[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不负韶华ღ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值