python可以做网站,动漫制作专业就业,建行的官网网址是什么,东莞做工业产品网站建设学AI还能赢奖品#xff1f;每天30分钟#xff0c;25天打通AI任督二脉 (qq.com) 基于MindSpore通过GPT实现情感分类
%%capture captured_output
# 实验环境已经预装了mindspore2.2.14#xff0c;如需更换mindspore版本#xff0c;可更改下面mindspore的版本号
!pip uninsta…学AI还能赢奖品每天30分钟25天打通AI任督二脉 (qq.com) 基于MindSpore通过GPT实现情感分类
%%capture captured_output
# 实验环境已经预装了mindspore2.2.14如需更换mindspore版本可更改下面mindspore的版本号
!pip uninstall mindspore -y
!pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore2.2.14
# 该案例在 mindnlp 0.3.1 版本完成适配如果发现案例跑不通可以指定mindnlp版本执行!pip install mindnlp0.3.1
!pip install mindnlp
!pip install jieba
%env HF_ENDPOINThttps://hf-mirror.com
import osimport mindspore
from mindspore.dataset import text, GeneratorDataset, transforms
from mindspore import nnfrom mindnlp.dataset import load_datasetfrom mindnlp._legacy.engine import Trainer, Evaluator
from mindnlp._legacy.engine.callbacks import CheckpointCallback, BestModelCallback
from mindnlp._legacy.metrics import Accuracy
imdb_ds load_dataset(imdb, split[train, test])
imdb_train imdb_ds[train]
imdb_test imdb_ds[test]
imdb_train.get_dataset_size()
加载IMDB数据集。将IMDB数据集分为训练集和测试集。IMDB (Internet Movie Database) 数据集包含来自著名在线电影数据库 IMDB 的电影评论。每条评论都被标注为正面positive或负面negative因此该数据集是一个二分类问题也就是情感分类问题。
import numpy as npdef process_dataset(dataset, tokenizer, max_seq_len512, batch_size4, shuffleFalse):is_ascend mindspore.get_context(device_target) Ascenddef tokenize(text):if is_ascend:tokenized tokenizer(text, paddingmax_length, truncationTrue, max_lengthmax_seq_len)else:tokenized tokenizer(text, truncationTrue, max_lengthmax_seq_len)return tokenized[input_ids], tokenized[attention_mask]if shuffle:dataset dataset.shuffle(batch_size)# map datasetdataset dataset.map(operations[tokenize], input_columnstext, output_columns[input_ids, attention_mask])dataset dataset.map(operationstransforms.TypeCast(mindspore.int32), input_columnslabel, output_columnslabels)# batch datasetif 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
定义数据预处理函数。这个函数输入参数为数据集、分词器GPT Tokenizer以及一些可选参数如最大序列长度、批量大小和是否打乱数据。预处理包括将文本转换为模型可以理解的输入格式如input_ids和attention_mask并将标签转换为整数类型。
from mindnlp.transformers import GPTTokenizer
# tokenizer
gpt_tokenizer GPTTokenizer.from_pretrained(openai-gpt)# add sepcial token: PAD
special_tokens_dict {bos_token: bos,eos_token: eos,pad_token: pad,
}
num_added_toks gpt_tokenizer.add_special_tokens(special_tokens_dict)
加载GPT分词器并增加特殊标记。
# split train dataset into train and valid datasets
imdb_train, imdb_val imdb_train.split([0.7, 0.3])
将训练集划分为训练集和验证集。
dataset_train process_dataset(imdb_train, gpt_tokenizer, shuffleTrue)
dataset_val process_dataset(imdb_val, gpt_tokenizer)
dataset_test process_dataset(imdb_test, gpt_tokenizer)
用 process_dataset 函数对训练集、验证集和测试集进行处理得到相应的数据集对象。
next(dataset_train.create_tuple_iterator())
from mindnlp.transformers import GPTForSequenceClassification
from mindspore.experimental.optim import Adam# set bert config and define parameters for training
model GPTForSequenceClassification.from_pretrained(openai-gpt, num_labels2)
model.config.pad_token_id gpt_tokenizer.pad_token_id
model.resize_token_embeddings(model.config.vocab_size 3)optimizer nn.Adam(model.trainable_params(), learning_rate2e-5)metric Accuracy()# define callbacks to save checkpoints
ckpoint_cb CheckpointCallback(save_pathcheckpoint, ckpt_namegpt_imdb_finetune, epochs1, keep_checkpoint_max2)
best_model_cb BestModelCallback(save_pathcheckpoint, ckpt_namegpt_imdb_finetune_best, auto_loadTrue)trainer Trainer(networkmodel, train_datasetdataset_train,eval_datasetdataset_train, metricsmetric,epochs1, optimizeroptimizer, callbacks[ckpoint_cb, best_model_cb],jitFalse)
导入 GPTForSequenceClassification 模型和 Adam 优化器。设置GPT模型的配置信息包括pad_token_id和词汇表大小。使用Adam优化器对模型的可训练参数进行优化从这里没有看出是更新部分参数还是全部参数有可能是部分参数。通常会改变最后一层分类器的权重和偏置其他层的权重被冻结不变或者只微小更新些许参数。。
Accuracy作为评价指标。
定义回调函数用于保存检查点 - CheckpointCallback用于定期保存模型权重save_path 指定了保存路径ckpt_name保存文件的前缀epochs1 每个epoch保存一次keep_checkpoint_max2 表示最多保留2个检查点文件。 - BestModelCallback用于保存验证集上表现最好的模型auto_loadTrue表示在训练结束后自动加载最优模型的权重。
创建 Trainer 对象传入以下参数 - network要训练的模型。 - train_dataset训练数据集。 - eval_dataset验证数据集。 - metrics评估指标。 - epochs训练轮数。 - optimizer优化器。 - callbacks回调函数列表包括检查点保存和最佳模型保存。 - jit是否启用JIT编译这里设置为False。
trainer.run(tgt_columnslabels)
通过 Trainer 的 run 方法启动训练指定了训练过程中的目标标签列为 labels。
evaluator Evaluator(networkmodel, eval_datasetdataset_test, metricsmetric)
evaluator.run(tgt_columnslabels)
创建 Evaluator 对象传入以下参数 - network要评估的模型。 - eval_dataset测试数据集。 - metrics评估指标。 用MindSpore通过GPT实现情感分类Sentiment Classification的示例。首先加载了IMDB影评数据集并将其划分为训练集、验证集和测试集。然后使用GPTTokenizer对文本进行了标记化和转换。接下来使用GPTForSequenceClassification构建了情感分类模型并定义了优化器和评估指标。使用Trainer进行模型的训练并设置了保存检查点的回调函数。训练完成后通过Evaluator对测试集进行评估输出分类准确率。通过对IMDB影评数据集进行训练和评估模型可以自动进行情感分类识别出正面或负面情感。