transformers使用中不能先把dataset进行tokenize再送入dataloader,应该写作一个colle_fn再送入dataloader 或者不用dataloder

错误调用示例:

from datasets import load_dataset
dataset = load_dataset('lansinuote/ChnSentiCorp',split='train')
tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
def tokenize(batch):
    return tokenizer.batch_encode_plus(batch["text"],padding='max_length',truncation=True,max_length=1000,return_tensors='pt')
dataset=dataset.map(tokenize)
import torch
dataloader = torch.utils.data.DataLoader(dataset,shuffle = True,batch_size = 32)

这么用是有问题的!!不能先把dataset进行tokenize再送入dataloader,应该写作一个colle_fn再送入dataloader

def collate_fn(data):
    sents = [i[0] for i in data]
    labels = [i[1] for i in data]

    data = token.batch_encode_plus(batch_text_or_text_pairs=sents,
                                   truncation=True,
                                   padding='max_length',
                                   max_length=500,
                                   return_tensors='pt',
                                   return_length=True)

    input_ids = data['input_ids']
    attention_mask = data['attention_mask']
    token_type_ids = data['token_type_ids']
    labels = torch.LongTensor(labels)

    return input_ids, attention_mask, token_type_ids, labels

loader = torch.utils.data.DataLoader(dataset=dataset,
                                     batch_size=16,
                                     collate_fn=collate_fn,
                                     shuffle=True,
                                     drop_last=True)

或者不用dataloder的话:

total_examples = len(dataset)
batch_size = 32
for start in range(0, total_examples, batch_size):
    end = min(start + batch_size, total_examples)
    batch_examples = dataset[start:end]
    batch_inputs = tokenizer([example["text"] for example in batch_examples], padding='max_length', truncation=True, max_length=1000, return_tensors='pt', return_length=True)
    with torch.no_grad():
        batch_outputs = model(**batch_inputs)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值