目录
摘 要: 本研究旨在探索基于Transformer的情感分类方法,以提高自然语言处理中情感分析任务的准确性和鲁棒性。情感分类在社交媒体分析、产品改进、舆情监测等领域具有广泛应用,而Transformer模型由于其出色的自然语言理解能力而备受瞩目。在研究中,我们深入研究了Transfomer的策略,还进行了大规模搜索和模型选择,以优化性能。
关键词:情感分析,卷积神经网络,自然语言处理
-
引言
1.1研究背景与目的
近年来,随着社交媒体、电子商务和在线评论等互联网应用的广泛普及,大量的文本数据源源不断地涌现出来。这些文本数据包含了丰富的情感信息,如用户对产品的评价、政治演讲中的态度、社交媒体上的情感表达等。因此,情感分类成为自然语言处理领域中一个备受关注的问题。随着大数据时代的来临,越来越多的线上虚拟平台开始 关注文本中包含的情感内容,因为这些内容对当今的消费者、企业和其他方面起着至关重要的作用 [1-2]。有研究表明,人的 情感表现可以根据当时的面部特征进行分类,包括:幸福、恐 惧、愤怒、悲伤、惊讶和厌恶,这些主要的情感特征同样可以从文本数据中提取出来。
Liu[3]将情感分析定义为“人们对实体、个人、问题、事件、主题及它们属性的意见、评价、态度和情感 的计算研究。”消费者们所表达的意见、评价、态度和情感是分析其意图和决策的基础[4-5]。文本情感分类作为自然语言处理的研究热点,在舆情分析、用户画像和推荐系统中有较广泛的应用。
情感分类的目标是自动地将文本数据分为不同的情感类别,如积极、消极、中性等,以便进一步分析用户情感倾向、产品评价以及社交舆情等信息。这不仅有助于企业改进产品和服务,还有助于政府了解公众的情感态度,以制定更加贴近民心的政策。
1.2研究现状
在情感分类领域,深度学习技术已经取得了令人瞩目的成就。其中,基于Transformer架构的模型,如BERT(Bidirectional Encoder Representations from Transformers)、GPT(Generative Pre-trained Transformer)等,由于其强大的自然语言理解和表示能力,成为了主要的研究方向。这些模型可以学习到文本数据的高级抽象表示,从而在情感分类任务中取得了极高的性能。然而,尽管Transformer模型在情感分类任务中表现出色,但仍然存在一些挑战和问题,例如样本不平衡、跨域情感分类等。
模型/方法
Transformer由论文《Attention is All You Need》提出,现在是谷歌云TPU推荐的参考模型。论文相关的Tensorflow的代码可以从GitHub获取,其作为Tensor2Tensor包的一部分。哈佛的NLP团队也实现了一个基于PyTorch的版本,并注释该论文。
2.1基本结构
下图是 Transformer 用于中英文翻译的整体结构:
图1 Transformer 的整体结构,左为Encoder和右为Decoder
Transformer 由 Encoder 和 Decoder 两个部分组成,Encoder 和 Decoder 都包含 6个 block。
2.2 Transformer的输入
上图 Decoder 接收了 Encoder 的编码矩阵 C,然后首先输入一个翻译开始符 "<Begin>",预测第一个单词 "I";然后输入翻译开始符 "<Begin>" 和单词 "I",预测单词 "have",以此类推。这是 Transformer 使用时候的大致流程,接下来是里面各个部分的细节。
图2 Transformer 的输入表示
2.3自注意力机制
图3 Transformer Encoder 和 Decoder
上图是论文中 Transformer 的内部结构图,左侧为 Encoder block,右侧为 Decoder block。红色圈中的部分为 Multi-Head Attention,是由多个 Self-Attention组成的,可以看到 Encoder block 包含一个 Multi-Head Attention,而 Decoder block 包含两个 Multi-Head Attention (其中有一个用到 Masked)。Multi-Head Attention 上方还包括一个 Add & Norm 层,Add 表示残差连接 (Residual Connection) 用于防止网络退化,Norm 表示 Layer Normalization,用于对每一层的激活值进行归一化。
因为 Self-Attention是 Transformer 的重点,所以我们重点关注 Multi-Head Attention 以及 Self-Attention,首先详细了解一下 Self-Attention 的内部逻辑。
图4 Self-Attention 结构
上图是 Self-Attention 的结构,在计算的时候需要用到矩阵Q(查询),K(键值),V(值)。在实际中,Self-Attention 接收的是输入(单词的表示向量x组成的矩阵X) 或者上一个 Encoder block 的输出。而Q,K,V正是通过 Self-Attention 的输入进行线性变换得到的。
Self-Attention 的输入用矩阵X进行表示,则可以使用线性变阵矩阵WQ,WK,WV计算得到Q,K,V。计算如下图所示,注意 X, Q, K, V 的每一行都表示一个单词。
图5 Q, K, V 的计算
2.4 Self-Attention 的输出
得到矩阵 Q, K, V之后就可以计算出 Self-Attention 的输出了,计算的公式如下:
图6 Self-Attention 的输出
公式中计算矩阵Q和K每一行向量的内积,为了防止内积过大,因此除以dk的平方根。Q乘以K的转置后,得到的矩阵行列数都为 n,n 为句子单词数,这个矩阵可以表示单词之间的 attention 强度。下图为Q乘以KT,1234 表示的是句子中的单词。
图7 Q乘以K的转置的计算
得到QKT之后,使用 Softmax 计算每一个单词对于其他单词的 attention 系数,公式中的 Softmax 是对矩阵的每一行进行 Softmax,即每一行的和都变为 1.
图8 对矩阵的每一行进行 Softmax
得到 Softmax 矩阵之后可以和V相乘,得到最终的输出Z。
图9 Self-Attention 输出
上图Softmax矩阵的第 1 行表示单词1与其他所有单词的 attention 系数,最终单词1的输出Z1等于所有单词i的值Vi根据 attention 系数的比例加在一起得到,如下图所示:
图10 Zi 的计算方法
2.5 Transformer 总结
Transformer 与 RNN 不同,可以比较好地并行训练。
Transformer 本身是不能利用单词的顺序信息的,因此需要在输入中添加位置 Embedding,否则 Transformer 就是一个词袋模型了。
Transformer 的重点是 Self-Attention 结构,其中用到的 Q, K, V矩阵通过输出进行线性变换得到。
Transformer 中 Multi-Head Attention 中有多个 Self-Attention,可以捕获单词之间多种维度上的相关系数 attention score。
实验
3.1 实验环境
实验环境: Python: 3.8.5;PyTorch: 1.8.0;Transformers: 4.9.0; NLTK: 3.5; LTP: 4.0
3.2 实验过程与结果
1.创建虚拟环境:conda create -n luoxinnlp python=3.8.5
图11 创建虚拟环境执行结果
2.激活虚拟环境luoxinnlp输入: conda activate luoxinnlp
图12 激活虚拟环境
3.在所创建的pytorch环境下安装pytorch, 执行命令:
conda install pytorch=1.8.0 torchvision cudatoolkit -c pytorch
图13 安装pytorch的执行情况
4.缺乏镜像,执行安装命令
Pip install transformers==4.9.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
图14 安装 transformers
pip install nltk==3.5 -i Simple Index
图15 安装nltk
5.训练并测试数据
加载情感数据集sentence_polarity,然后分割数据集
图16 进入transfomer文件目录
6.输入数据集,进行训练 python transformer_sent_polarity.py
图17 训练结果
图18 训练结果2
3.3机器翻译模块
1.将项目相应的代码保存在一个文件夹中,后级命名为py为后续使用,进入刚创建的虛拟环境中,输入 pip install spacy 下载 spacy,如图 19所示
图19 安装结果图
2.下载好 spacy 后再分别输入 python -m spacy download en core web_sm 和 python -m spacy download de_core_news_sm 语言模型,如图20,图21所示。
图20下载en_core_web_sm
图21 下载de_core_news_sm
3.输入 python transtormer_ translation.py运行项目,出现 no module named torchtext 报错,那么我们先通过输入spacy.load()将刚下载下来的语言模型导入到python 中,然后输入 pip install torchtext,下载torchtext 库,如图22,图23所示。
图22 语言模型导入到python
图23 下载torchtext 库
4.继续输入 python transformer translation.py 运行项目,出现没有 tensorboard 报错,于是输入 pip install tensorboard 进行下载,如图24所示。
图24 下载tensorboard
5. 继续输入 python transformer translation py 运行项目,出现库版本不匹配,于是输入pip install torch--1.9.0 torchtext-0.6.0下载匹配的版本,如图25所示
图25 下载相应的torch和torchtext
6.继续输入 python transformer translation py, 运行项目,出现 setuprtools 新老版本不匹配,于是输入 pip uninstall setuptools 卸载新版本,后输入 conda install setuptools--58.0.4 老版本,如图26所示
图26 卸载setuptools版本
7. 再输入 python transformet_translation px运行项目,出现设有相关训练的数据集,于是我去网上下载了一个相关的机器翻译训练的数据集,放到报错的子目录下,再次运行成功了,如图 27,图28 所示。
图27 无训练集报错
图28 机器翻译结果
3.4 实验结果与分析
我们的实验结果表明,基于Transformer的情感分类方法在情感分析任务中表现出色,并且具有适应不同领域、可解释性等优势。这些结果为深度学习在情感分类领域的应用提供了重要的实证支持,并为未来的研究和应用提供了有益的指导。
结束语
4.1遇到的问题与解决方法
1.数据不平衡问题:在情感分类任务中,各个情感类别的样本数量可能差异很大,导致模型对较少出现的类别性能较差。解决方法包括采用过采样或欠采样技术来平衡类别分布,或者使用加权损失函数来给予少数类别更高的权重。
2.情感表达多样性问题:文本中的情感表达方式多种多样,包括了许多细微的情感差异,这可能使情感分类任务变得复杂。解决方法包括构建更细粒度的情感类别,使用多标签分类方法,或者通过数据增强技术引入多样性的情感表达。
4.2心得体会
在进行基于Transformer的情感分类研究过程中,我们得认识到数据是研究的基石。我们深刻认识到了数据的质量和多样性对于模型性能的决定性影响。在实验过程总。我坚持记录实验过程和环境配置,以确保关键步骤不出错。同时,积极分享实验结果成果,使得其他人也能受益。同时深度学习研究往往需要耐心和坚持。调整超参数、优化模型、解决问题都可能需要花费大量时间。不放弃并不断尝试是取得进展的关键。
总的来说,基于Transformer的情感分类研究让我更加深入地理解了深度学习和自然语言处理领域的挑战和机遇。
参考文献
[1]常吉亮. 基于深度卷积神经网络的船舶轨迹分类研究[J]. 武汉理工大学学报,2021.
[2]成也. 量表大数据的深度神经网络抑郁分类模型[J].北京 师范大学学报,2021
[3] LIU B,ZHANG L. A survey of opinion mining and sentiment analysis[M]/ /MGGA WAL C C,ZHAI C X. Mining text data. Boston: Springer,2012: 415-463.
[4]CHEVALIERJA,MAYZLIND. The effect of word of mouth on sales: online book review[J]. Journal of Marketing Research ( JMR) ,2006,43( 03) : 345-354.
[5] PARK E,KANGJ,CHOID,etal. Understanding customers hotel revisiting behaviour: a sentiment analysis of online feed-back reviews[J]. Current Issues in Tourism,2018: 1-7