版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
情绪识别模型设计案例分析目录TOC\o"1-3"\h\u29406情绪识别模型设计案例分析 1177181.1基于BERT预训练模型 1284361.2数据预处理 352401.2.1数据清洗 3272001.2.2可视化 5190081.2.3对数据进行分词及向量化 6114331.3基于BERT预训练语言模型与CNN的情感分析模型 7191651.4基于BERT预训练语言模型与RNN的情感分析模型 10312081.5优化函数和损失函数设计 111.1基于BERT预训练模型由于BERT语言模型从维基百科的海量语料中进行了大量的无监督训练,BERT预训练模型本身已经具备了不俗的特征提取能力和表示能力,且能够得到不错的文本分布式表示形式,当把BERT预训练模型迁移到其他的自然语言处理任务时,也能获得不错的性能。本节使用BERT+分类层的深度学习模型,把BERT模型运用到有关于疫情的情感分析。对于本节,仅在BERT之后添加一个额外的分类层对BERT的输出进行扩展,整个实验过程主要有数据预处理过程、模型训练阶段和模型测试阶段。实验过程的具体流程为:模型训练阶段:先加载模型的配置参数,包括预训练模型的路径、数据集的路径、学习率等,然后加载数据集并对数据进行预处理操作,为预处理后的数据创建迭代器,然后实例化一个模型,并对整个模型的参数进行初始化,再将训练数据输入到模型中训练,并调用优化函数对模型的参数进行优化,当训练的batch数超过require_improvement且模型没有性能的提升时,自动结束训练,并保存训练好的模型。模型测试阶段:先加载测试集的数据,并对测试数据进行与训练阶段相同的数据预处理操作,然后加载保存的训练好的模型,将测试数据输入模型得到最终的分类结果,并根据结果对模型进行性能评估。具体流程如图3-1。图3-1模型流程图BERT实验模型构建的核心代码如图3-2所示。图3-2BERT实验模型核心代码1.2数据预处理本次实验的数据集使用的是DataFountain举办的疫情期间网民情绪识别比赛的数据集,该数据集包含了100万条数据,数据的内容是根据肺炎疫情在微博进行搜索并获取,其中有10万条数据是带标签的,标签有三类,0代表中性,-1代表消极,1代表积极;还有90万条数据不带标签,数据内容包含用户名的属性。同时提供了未标注的测试集nCov_10k_test,其中包含1万条未标注的待分类数据。1.2.1数据清洗对于训练集的数据,经过分析可以发现,数据集的数据存在表情符号,口语化等问题,部分表情符还会导致乱码。因此,为了获取较为干净的数据,需要对数据进行清洗,为后续输入模型的数据质量提供保障。本节主要使用Python中的re模块,该模块提供了正则表达式功能,能够对数据的字符串进行模糊匹配,进而获取想要的字符串部分,因此可以很方便地对数据进行清洗操作。同时,本节还使用了Pandas模块,Pandas模块是一个基于Numpy的出色的结构化数据分析工具集,它可以用于分析数据和数据清理,其拥有出色的性能。Pandas还支持诸如表格数据、带行列标签的矩阵数据在内的多种数据类型,使得它能够很好地处理本次所用的数据集。在载入数据集后,首先查看数据集的结构和基本特征,具体如表3-1所示。表3-1数据特征变量名数据量数据类型微博id100000int64微博发布时间100000object发布人账号100000object微博中文内容99646object微博图片100000object微博视频100000object情感倾向99919object从表3-1可以看出,数据集由100000条7列的数据组成,但是微博中文内容和情感倾向部分有些数据为空,这说明有些微博没有文字内容,且有些数据的标签丢失。然后对情感倾向部分数据中的值进行统计,得到的结果如表3-2所示。表3-2情感倾向情感倾向统计数量057619125392-11690241.1-2191-1101从表3-2可以看出,情感倾向中存在一些非法的异常值,这些异常的分类标签会对训练效果产生影响,需要对数据进行清洗,由于异常的数据量不多,决定直接删除这些数据。为了后续模型的训练,将情感倾向属性改为整数型,将其转换为数值型。对异常数据清洗后得到99913条有效数据。得到有效数据后开始对微博中文内容进行数据清洗,根据多次对比实验最终确定了数据清洗方式,主要是对5种类型进行去除,分别为:(1)去除正文中的英文、数字及大部分非法的乱码字符,(2)去除正文中的“@”符号及跟在该符号之后的回复、转发中的用户名,(3)去除正文中的网址,(4)去除正文中无意义的词语,如“转发微博”、“展开全文”等,(5)合并正文中重复出现过多的空格。数据清洗的核心代码如图3-3所示。图3-3数据清洗核心代码数据清洗前后对比如图3-4所示。图3-4数据清洗前后对比图1.2.2可视化对数据进行清洗后,通过可视化工具对数据进行简单的可视化操作,对数据的分布和趋势进行分析,为后续模型的参数设计提供帮助。情感倾向的分布占比如图3-5所示。图3-5情感倾向的分布占比通过图3-5可以得出在数据集中有接近60%的用户是中立的,持积极态度的用户占25%,15%的用户持消极态度。微博长度分布如图3-6所示。图3-6微博长度分布通过图3-4可以看出,微博的长度集中在150词左右,长度大于150的微博占比很小,因此在padding长度的设置上应大于150且小于200,以免丢失过多信息。本文将该值设置为170。1.2.3对数据进行分词及向量化文本分词就是按照特定的规则,将文本分割成一个个独立的词。而本次实验使用的BERT预训练模型是基于字的,因此需要对文本以字为单位进行分割,根据预训练模型中提供的词汇表,通过调用pytorch_pretrained库中的tokenize模块对数据进行分词,再对分词后的数据在开头加上分类标记[CLS],分词后的数据如图3-7所示。图3-7分词后的文本数据为了让模型学习到文本的特征,需要将文本数据转换成向量形式,通过调用pytorch_pretrained库中的convert_tokens_to_ids对数据进行向量化操作,最终的结果如图3-8所示。图3-8文本预处理最终效果1.3基于BERT预训练语言模型与CNN的情感分析模型对于BERT预训练模型,除了直接使用外,还有两种应用方式,一种是将数据输入到BERT中,通过BERT对数据进行Embedding处理,再将输出的Embedding向量作为特征向量输入到其他的网络模型中进行学习,另一种方式是在BERT模型的基础上,构建其他的网络层,并接入到新的输出层,再对整个模型架构的参数进行微调。本次实验将采用第一种方式来构建对比模型,以探索更优的算法实现。具体流程为:先加载模型的配置参数,包括文件路径等,再载入数据集文件,创建模型的数据集并创建数据集的迭代器,然后创建一个模型,对整个模型的参数进行初始化,再将数据集输入到BERT模型中以获得句子的Embedding向量,最后将得到Embedding向量输入到神经网络中进行训练。在本次对比实验中,使用的是将BERT得到的Embedding向量输入到卷积神经网络中进行学习[10],本次实验的卷积神经网络模型是基于Pytorch框架进行搭建,具体模型如图3-9所示。图3-9BERT_CNN模型结构卷积神经网络的详细构造设计如下:(1)卷积层设置在本次对比实验中,BERT模型输出的Embedding向量为二维数据内容,其大小为(pad_size,hidden_size),通道数为1,因此使用二维卷积模型对数据进行卷积处理,卷积操作在行上卷积核的长度使用与hidden_size相同的长度进行卷积,在列上卷积核使用不同的高度对数据进行卷积。在进行卷积操作之后,需要引入激活函数,对数据特征做非线性变换,加入非线性因素,使模型能更好地拟合数据。对于卷积层,通过调用nn.Conv2d函数进行卷积操作,输入为Embedding向量,输入的通道数为1,卷积核尺寸为filter_sizes,宽度为hidden_size,卷积核数目设置为num_filters。对于非线性激活函数,本次实验使用Relu函数对数据进行激活,通过nn.functional.relu实现激活函数的调用。(2)池化层设置对数据进行卷积操作后,得到的是高维的数据特征,其包含了输入数据的所有特征,为了获得最具有代表性的特征值,需要对其进行压缩降维操作。因此将卷积后的数据送入池化层,以保留主要特征。关于池化操作,主要分为均值池化操作和最大池化操作,其中均值池化操作是对整个感受域进行分区,再对每个分区里的所有值求均值;而最大池化操作是选取每个分区中的最大值,以获得所在分区中最大的特征值。在本次对比实验中,在池化层采用的是最大池化操作,通过调用nn.functional.max_pool1d函数,以获取最优的特征。(3)全连接层设置数据特征经过卷积、池化操作后,保留下来的就是最能代表某一分类的特征,需要把这些特征映射到样本的标签,以获取最终的分类信息,因此需要借由全连接层对特征进行全连接操作,全连接层起到“分类器”的作用。在本次对比实验中,在进行全连接操作前,先调用了nn.dropout函数对数据进行Dropout操作,该操作是神经元在训练时每次迭代都会以dropout的概率被失活,不参与训练,该操作用以防止模型出现过拟合现象;然后对特征的维度进行压缩,通过调用nn.Linear对特征进行全连接操作,使特征的维度降到num_classes得到最终的预测结果值。实验模型构造的核心代码如图3-10所示。图3-10BERT_CNN模型核心代码1.4基于BERT预训练语言模型与RNN的情感分析模型在本次对比实验中,使用的是将BERT得到的Embedding向量输入到循环神经网络中进行学习,本次实验的循环神经网络模型是基于Pytorch框架进行搭建,具体模型如图3-11所示。图3-11BERT_RNN模型结构循环神经网络的详细构造设计如下:(1)隐含层设置对于循环神经网络的模型选择一般为长短期记忆网络模型或门控循环单元模型,在本次实验中的隐含层采用的是LSTM模型作为Embedding输入的循环神经网络。对于隐含层,通过调用torch.nn.LSTM模块构建出层数为num_layers的LSTM循环神经网络,网络中使用双向传播,既能捕捉到后续的信息,也可以使用到以前的信息,最后将从BERT得到的Embedding向量输入到网络中。(2)全连接层设置对于循环神经网络,同样也需要接入全连接层对得到的特征向量做分类处理,使学习到的分布式特征表示映射到样本标记空间。由于在隐含层使用了双向LSTM模型,输出是一个按时间顺序的hidden和一个按时间逆序的hidden拼接而成,因此全连接层的输入维度为rnn_hidden的两倍。在本次对比实验中,在进行全连接操作前,与卷积神经网络相同,先调用了nn.dropout函数对数据进行Dropout操作,用以防止模型出现过拟合现象;然后对特征的维度进行压缩,通过调用nn.Linear对特征进行全连接操作,Linear的输入维度为rnn_hidden*2,输出维度为num_classes,使特征的维度降到样本的分类数,得到最终的预测值。实验模型构造的核心代码如图3-12所示。图3-12BERT_RNN模型核心代码1.5优化函数和损失函数设计(1)优化函数在深度学习对模型进行训练的过程中,需要把计算得到的损失值从最外层反向传播到之前的层,用以计算每一层的梯度值,再通过梯度下降对整个模型的参数进行调整优化,因此需要选择合适的优化函数。本次实验中使用的BERT模型、BERT_CNN模型、BERT_RNN模型均采用BertAdam优化器作为模型的优化函数。在本次实验中,通过调用pytorch_pretrained库中的BertAdam模块对模型参数进行优化。(2)损失函数设计在训练模型的过程中,需要通过计算预测标签与实际标签之间的差值来衡量模型预测的效果,同时损失函
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业风险生产监测方案
- 火力发电厂安全生产管理制度
- 办公楼高空坠物伤人事故应急处置预案
- 2026楚群电商面试题目及答案
- 2026考研数学(一-二-三)全套真题及标准答案解析
- 校园安全宣传活动总结(15篇)
- 沧州市盐山县2025年数学四下期末监测模拟试题(含答案解析)
- 沧州市沧县2025届数学三下期末统考试题含答案
- 沈阳市康平县2025年四年级数学第一学期期中学业质量监测试题含答案
- 2026年消防主题活动策划案
- 寿光小升初贯通班数学试卷
- 2025年大学《计算机科学与技术-操作系统》考试参考题库及答案解析
- 预制舱吊装专项施工方案
- 模具厂模具装配记录办法
- 放射科护理小讲课
- 变电值班员岗位培训课件
- 2025初二地理生物会考试卷及答案
- 皮带配料秤巡检知识培训
- 浙江新化化工股份有限公司扩建6000吨-年新型无卤有机阻燃剂项目环评报告
- 天津市红桥区2024-2025学年七年级下学期期末语文试题(含答案)
- DB15T 1896-2020 单位消防安全评估标准
评论
0/150
提交评论