Bootstrap

昇思25天学习打卡营第16天|基于MindSpore通过GPT实现情感分类

今天的这个代码几乎没有任何解释,结合之前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  
;