今天的这个代码几乎没有任何解释,结合之前GPT生成文本摘要的代码。
大概记录一下
import numpy as np # 导入NumPy库def process_dataset(dataset, tokenizer, max_seq_len=512, batch_size=4, shuffle=False): # 判断当前设备是否为Ascend,如果是ascen的话就硬件加速is_ascend = mindspore.get_context('device_target') == 'Ascend' # 定义一个内部函数用于文本分词def tokenize(text): # 如果是在Ascend上运行,则在分词时添加padding到最大长度,入门提到过ascend有硬件加速,所以可以最大if is_ascend: tokenized = tokenizer(text, padding='max_length', truncation=True, max_length=max_seq_len) else: # 在非Ascend设备上,只进行截断,不强制添加padding到最大长度,节省时间tokenized = tokenizer(text, truncation=True, max_length=max_seq_len) return tokenized['input_ids'], tokenized['attention_mask'] # 如果需要打乱数据集,使得每次读取的数据都具有随机性if shuffle: dataset = dataset.shuffle(buffer_size=len(dataset)) dataset = dataset.map(operations=[tokenize], input_columns="text", output_columns=['input_ids', 'attention_mask']) # 映射数据集,将'label'列的数据类型转换为mindspore.int32 dataset = dataset.map(operations=transforms.TypeCast(mindspore.int32), input_columns="label", output_columns="labels") # 根据是否是Ascend设备,选择不同的batch大小if is_ascend: dataset = dataset.batch(batch_size) else: dataset = dataset.padded_batch(batch_size, pad_info={'input_ids': (None, tokenizer.pad_token_id), 'attention_mask': (None, 0)}) # 返回处理后的数据集 return dataset