昇思25天学习打卡营第12天 |昇思MindSpore 基于 MindSpore 通过 GPT 实现情感分类
一、环境准备
# 安装指定版本的 MindSpore
!pip uninstall mindspore -y
!pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore==2.2.14# 安装 MindNLP 和 jieba
!pip install mindnlp
!pip install jieba# 设置 HF_ENDPOINT
%env HF_ENDPOINT=https://hf-mirror.com
二、原理公式
情感分类的基本原理通常基于对文本特征的提取和分析。在使用 GPT 模型时,模型通过学习大量的文本数据,自动捕捉语言的模式和规律。
常见的数学公式可能涉及到损失函数的计算,如交叉熵损失函数:
Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过 Euler integral
L = − 1 N ∑ i y i log ( y ^ i ) + ( 1 − y i ) log ( 1 − y ^ i ) L = -\frac{1}{N} \sum_{i} y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i) L=−N1i∑yilog(y^i)+(1−yi)log(1−y^i)
其中, y i y_i yi 是真实标签, y ^ i \hat{y}_i y^i是模型预测的概率。
三、推理流程
- 数据加载与预处理:
- 加载
imdb
数据集,并将其划分为训练集、验证集和测试集。 - 对文本数据进行分词、添加特殊标记、截断或填充等操作,将其转换为适合模型输入的格式。
- 加载
- 模型构建与训练:
- 基于预训练的
openai-gpt
模型进行微调。 - 定义优化器(如
Adam
)和损失函数,通过反向传播不断更新模型的参数,以最小化损失函数。
- 基于预训练的
- 模型评估与预测:
- 使用验证集或测试集对训练好的模型进行评估,计算准确率等指标。
- 对于新的输入文本,通过模型进行预测,得到其情感分类结果。
四、操作流程
- 加载所需的库和模块:
import os
import mindspore
from mindspore.dataset import text, GeneratorDataset, transforms
from mindspore import nn
from mindnlp.dataset import load_dataset
from mindnlp._legacy.engine import Trainer, Evaluator
from mindnlp._legacy.engine.callbacks import CheckpointCallback, BestModelCallback
from mindnlp._legacy.metrics import Accuracy
import time
- 加载
imdb
数据集,并进行划分:
imdb_ds = load_dataset('imdb', split=['train', 'test'])
imdb_train = imdb_ds['train']
imdb_test = imdb_ds['test']
- 定义数据处理函数
process_dataset
:
def process_dataset(dataset, tokenizer, max_seq_len=512, batch_size=4, shuffle=False):# 内部处理逻辑#...return dataset
- 参数:- `dataset` :待处理的数据集。- `tokenizer` :用于分词的工具。- `max_seq_len` :序列的最大长度。- `batch_size` :批次大小。- `shuffle` :是否打乱数据集。
- 功能:对输入的数据集进行分词、类型转换、批次处理等操作。
- 例句:
dataset_train = process_dataset(imdb_train, gpt_tokenizer, shuffle=True)
- 进行分词器的设置和特殊标记的添加:
gpt_tokenizer = GPTTokenizer.from_pretrained('openai-gpt')
special_tokens_dict = {"bos_token": "<bos>","eos_token": "<eos>","pad_token": "<pad>",
}
num_added_toks = gpt_tokenizer.add_special_tokens(special_tokens_dict)
- 划分训练集和验证集:
imdb_train, imdb_val = imdb_train.split([0.7, 0.3])
- 处理数据集:
dataset_train = process_dataset(imdb_train, gpt_tokenizer, shuffle=True)
dataset_val = process_dataset(imdb_val, gpt_tokenizer)
dataset_test = process_dataset(imdb_test, gpt_tokenizer)
- 定义模型、优化器和评估指标:
model = GPTForSequenceClassification.from_pretrained('openai-gpt', num_labels=2)
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_rate=2e-5)metric = Accuracy()
- 设置回调函数并进行训练:
ckpoint_cb = CheckpointCallback(save_path='checkpoint', ckpt_name='gpt_imdb_finetune', epochs=1, keep_checkpoint_max=2)
best_model_cb = BestModelCallback(save_path='checkpoint', ckpt_name='gpt_imdb_finetune_best', auto_load=True)trainer = Trainer(network=model, train_dataset=dataset_train,eval_dataset=dataset_train, metrics=metric,epochs=1, optimizer=optimizer, callbacks=[ckpoint_cb, best_model_cb],jit=False)
- 进行评估:
evaluator = Evaluator(network=model, eval_dataset=dataset_test, metrics=metric)
evaluator.run(tgt_columns="labels")
五、情感分类模型的应用领域
- 客户反馈分析:帮助企业了解客户对产品或服务的满意度和意见。
- 社交媒体监测:洞察公众对特定话题、事件或品牌的情感倾向。
- 在线评论分类:对电商平台、旅游网站等的用户评论进行分类。
- 舆情分析:了解社会舆论对政府政策、公共事件的态度。
六、常用的情感分类模型
- 朴素贝叶斯分类器
- 支持向量机(SVM)
- 决策树
- 卷积神经网络(CNN)
- 循环神经网络(RNN)及其变体,如长短期记忆网络(LSTM)和门控循环单元(GRU)
七、如何评估情感分类模型
- 准确率(Accuracy):正确分类的样本数占总样本数的比例。
- 召回率(Recall):正确分类的正例样本数占实际正例样本数的比例。
- 精确率(Precision):正确分类的正例样本数占预测为正例样本数的比例。
- F1 值:综合考虑精确率和召回率的调和平均值。
- 混淆矩阵(Confusion Matrix):直观展示不同类别之间的分类情况。
八、调用库的名称、功能
mindspore
:用于深度学习模型的构建和训练。mindnlp
:提供自然语言处理相关的数据集和工具。jieba
:中文分词库。