第二节 基于MindSpore的BERT模型的情感分析

基于MindSpore的BERT模型的情感分析

一 Bert模型原理

语言模型的发展:
word2vec/Glove将离散的文本数据转换为固定长度的静态词向量,然后根据下游任务训练不同的语言模型
ELMo预训练模型将文本数据结合上下文信息,转换为动态词向量,根据下游任务训练不同的语言模型
BERT同样将文本数据转换为动态词向量,能够更好地捕捉句子级别的信息与语境信息,后续只需对BERT参数进行微调,仅重新训练最后的输出层即可适配下游任务
GPT等预训练语言模型主要用于文本生成类任务,需要通过prompt方法来应用于下游任务,指导模型生成特定的输出。

1.1 模型整体流程

第一步:Tokenization,输入的句子经过分词后,首尾添加[CLS]与[SEP]特殊字符,后转换为数字id

在这里插入图片描述
第二步:Embedding,输入到BERT模型的信息由三部分内容组成:
表示内容的 tokenids
表示位置的positionids
用于区分不同句子的tokentypeids
在这里插入图片描述
第三步:将三种信息分别输入Embedding层
第四步:BERT会针对每一个位置输出大小为hidden size的向量,在下游任务中,会根据任务内容的不同,选取不同的向量放入输出层

模型结构:
在这里插入图片描述
在这里插入图片描述
本次学习中,主要通过预训练模型,实现语句情感分析,只需要取输出部分CLS对应的特征进行全连接计算推断类别即可。

二 模型构建

模型构建无需,人工构建,直接通过mindnlp框架中内置的Transfomer中实现的BERT模型进行使用即可:

from mindnlp.transformers import BertForSequenceClassification

# set bert config and define parameters for training
model = BertForSequenceClassification.from_pretrained('bert-base-chinese', num_labels=3)

三 模型数据

模型所用数据来自百度飞浆,由两列组成,以制表符(‘\t’)分隔,第一列是情绪分类的类别(0表示消极;1表示中性;2表示积极),第二列是以空格分词的中文文本,如下示例,文件为 utf8 编码。

0–谁骂人了?我从来不骂人,我骂的都不是人,你是人吗 ?

数据操作流程包括:数据集读取,数据格式转换,数据 Tokenize 处理和 pad 操作

import os

import mindspore
from mindspore.dataset import text, GeneratorDataset, transforms
from mindspore import nn, context

from mindnlp.engine import Trainer

# prepare dataset
class SentimentDataset:
    """Sentiment Dataset"""

    def __init__(self
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值