昇思大模型平台打卡体验活动:项目1基于MindSpore实现BERT对话情绪识别

ops/2024/11/14 5:04:59/

基于MindSpore实现BERT对话情绪识别

1. 模型简介

BERT(Bidirectional Encoder Representations from Transformers)是由Google于2018年末开发并发布的一种新型语言模型,基于Transformer架构中的Encoder,并且具有双向编码的特性。BERT在自然语言处理任务中广泛应用,如问答、命名实体识别、自然语言推理和文本分类等。

BERT的主要创新在于其预训练方法,它结合了Masked Language Model(MLM)和Next Sentence Prediction(NSP)两种任务来捕捉词语级和句子级的语义表示。

  • Masked Language Model:在训练过程中,BERT会随机选择15%的词汇进行Mask操作。这些被Mask的词汇会通过三种方式处理:

    • 80%的词汇被直接替换为特殊的[Mask]标记;
    • 10%的词汇会被替换成随机的新词;
    • 10%的词汇则保持不变。
  • Next Sentence Prediction:该任务旨在让BERT理解两个句子之间的关系。训练输入包括两个句子A和B,其中B有一半的概率是A的下一句,BERT模型的任务是预测B是否为A的下一句。

BERT预训练完成后,会保存其Embedding表和Transformer权重(例如BERT-BASE保存12层的Transformer权重,BERT-LARGE保存24层的Transformer权重)。预训练后的BERT模型可以用于Fine-tuning,完成文本分类、相似度判断、阅读理解等下游任务。

在对话情绪识别(Emotion Detection)任务中,模型的目标是分析用户在智能对话中的情绪,自动判断情绪类别(如积极、消极、中性),并给出置信度。该技术可广泛应用于聊天、客服等场景,帮助企业提升对话质量、改善用户体验,并降低人工质检成本。

以下示例展示了如何使用BERT进行情感分类任务。

2. 数据集

我们使用一个已标注并经过分词预处理的中文机器人聊天数据集,数据集由百度飞桨团队提供。每条数据包含两列,第一列为情绪标签(0代表消极、1代表中性、2代表积极),第二列为以空格分隔的中文分词文本。数据文件为UTF-8编码。

示例数据如下:

label--text_a
0--谁骂人了?我从来不骂人,我骂的都不是人,你是人吗 ?
1--我有事等会儿就回来和你聊
2--我见到你很高兴谢谢你帮我

3. 数据处理与模型训练

数据处理包括数据集的读取、格式转换、文本的Tokenize处理以及Padding操作。以下展示了数据处理过程的代码和示意图。

在这里插入图片描述

在这里插入图片描述
1731232658032)

我们使用封装好的trainer来简化训练流程,以下是训练过程的代码示例:

在这里插入图片描述

在这里插入图片描述

在完成训练后,模型能够在测试集上进行推理,并输出每个文本的情绪预测结果。训练过程非常快速,以下为训练完成后的代码和结果展示:

在这里插入图片描述

在这里插入图片描述

最后,我们可以加载自己的数据并进行推理,以下是推理结果的展示:


http://www.ppmy.cn/ops/132898.html

相关文章

Java中的时间类型:从java.util.Date到java.time

引言 在Java编程中,时间处理是一个常见且重要的任务。无论是记录日志、处理日期、计算时间差,还是进行定时任务,我们都需要与时间类型打交道。随着Java版本的迭代,时间处理的API也在不断演进,从早期的java.util.Date到…

Android Framework 框架层主要功能类的基本介绍

Android 框架层简介 Android框架层(Android Framework)是Android操作系统中负责提供应用程序编程接口(API)的一部分,它构成了Android的中间层,位于操作系统核心与应用层之间。框架层的主要功能是为应用开发者提供各种服务和功能,以便他们能够更容易地构建Android应用。…

【360】基于springboot的志愿服务管理系统

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装志愿服务管理系统软件来发挥其高效地信息处理的作用&#x…

贪心算法day3(最长递增序列问题)

目录 1.最长递增三元子序列 2.最长连续递增序列 1.最长递增三元子序列 题目链接:. - 力扣(LeetCode) 思路:我们只需要设置两个数进行比较就好。设a为nums[0],b 为一个无穷大的数,只要有比a小的数字就赋值…

Linux命令学习,diff 命令

diff 是 Linux 和 Unix 系统中的一个命令行工具,用于比较两个文件的内容,并显示它们之间的差异。diff 命令非常有用,特别是在代码审查、文件同步和版本控制中。 基本用法 diff [选项] 文件1 文件2 常见参数: -i 或 --ignore-ca…

深度学习为什么不用二阶优化?

1. 计算复杂度与资源开销 Hessian矩阵的规模:在神经网络中,二阶优化需要计算损失函数相对于所有模型参数的二阶偏导数,这形成了一个巨大的 Hessian 矩阵。假设一个神经网络有 n 个参数,那么 Hessian 矩阵的大小是 nn,…

机器学习系列----介绍前馈神经网络和卷积神经网络 (CNN)

前言 在深度学习领域,神经网络是一种模拟人脑神经元结构和功能的数学模型。它通过大量的层次结构和参数调整来实现模式识别、分类、回归等任务。常见的神经网络结构有前馈神经网络(Feedforward Neural Networks,简称 FNN)和卷积神…

使用 Python 流式 Websocket 传输 Binance 订单更新 附代码

对于从事加密货币行业的任何人来说,使用 RESTapi从交易所查询实时数据并不总是最佳做法,原因有很多 效率低下:每个查询都需要时间,并且会显着影响性能,尤其是对于高频策略。 交易所施加的限制很容易被打破,例如Binance的硬限制为每分钟 1200 个请求权重您只能检索有限数量…