【自然语言处理】实验3,文本情感分析

清华大学驭风计划课程链接 

学堂在线 - 精品在线课程学习平台 (xuetangx.com)

代码和报告均为本人自己实现(实验满分),只展示主要任务实验结果,如果需要详细的实验报告或者代码可以私聊博主

有任何疑问或者问题,也欢迎私信博主,大家可以相互讨论交流哟~~

案例简介

情感分析旨在挖掘文本中的主观信息,它是自然语言处理中的经典任务。在本次任务中,我们将在影评 文本数据集(Rotten Tomato)上进行情感分析,通过实现课堂讲授的模型方法,深刻体会自然语言处 理技术在生活中的应用。 同学们需要实现自己的情感分析器,包括特征提取器(可以选择词袋模型、词向量模型和预训练模 型)、简单的线性分类器以及梯度下降函数。随后在数据集上进行训练和验证。我们提供了代码框架, 同学们只需补全 model.py 中的两个函数。

数据说明

我们使用来自Rotten Tomato的影评文本数据。其中训练集 data_rt.train 和测试集 data_rt.test 均 包含了3554条影评,每条影评包含了文本和情感标签。示例如下:

其中, +1 表示这条影评蕴涵了正面感情,后面是影评的具体内容。

文本特征提取 

 TODO:补全 featureExtractor 函数 在这个步骤中,同学们需要读取给定的训练和测试数据集,并提取出文本中的特征,输出特征向量。同学们需要实现词袋模型、词向量模型和预训练模型(选做)来生成句子表示,并对比不同方法的表现有何差异。

Bag of Words得到句子的0-1向量(选做:用TFIDF计算句子向量)

Word2Vec词向量求和/取平均(选做:实现Doc2Vec[1])

使用BERT得到[CLS]向量/词的隐状态取平均(选做)

训练分类器 

TODO:补全 learnPredictor 函数 我们提供的训练数据集中,每句话的标签在文本之前,其中 +1 表示这句话蕴涵了正面感情, -1 表示这 句话蕴涵了负面感情。因此情感分析问题就成为一个分类问题。

同学们需要实现一个简单的线性分类器,并推导出相应的梯度下降函数。

实验与结果分析

在训练集上完成训练后,同学们需要在测试集上测试分类器性能。本小节要求同学们画出训练集上的损 失函数下降曲线和测试集的最终结果(损失函数、准确率),并对结果进行分析。 

评分要求

同学们需要提交源代码和实验报告。实验报告中应包含以下内容: 对hinge loss反向传播的理论推导,请写出参数的更新公式。 对实验结果的分析,请描述采用的模型结构、模型在训练集上的损失函数下降曲线和测试集的最终 结果,并对结果进行分析。分析可以从模型的泛化能力、参数对模型性能的影响以及不同特征的影 响等方面进行。 

[1] Distributed Representations of Sentences and Documents. https://arxiv.org/pdf/1405.4053.pdf

实验结果

1,反向传播推导

2,文本特征提取 

2.1 使用 BOW 作为特征

从 loss 图来看训练的 loss 下降比测试的 loss 快很多,但是相同点就是都在下降,虽然中间测试的 loss 随着周期增大突然有个小的升高,但是最终仍然总体趋势是下降的。然后再从训练准确率来看 train 的训练最终几乎饱满了,测试的正确率也是最终达到最高,所以开始我前面对于最佳学习率和迭代次数的精准把控做的很好,才能得出最优结果,最终测试错误值来到了 0.263

2.2 使用 N-gram 作为特征

 从图中可以看出 loss 曲线不管是训练还是训练的 loss 都在下降,跟前面的情况类似,也是训练的 loss 下降很快,而测试的 loss 下降较为平缓。从准确率图来看训练的也几乎饱满,测试也是随着周期变大达到最高,最终 test 的错误值为 0.238,达到新低。可以看出我们调参的方法非常有效,通过对多个学习率的运行,找出了对于每个级别的最佳超参数,并且精准把控训练轮数达到最优结果。

2.3 使用 BERT 得到[CLS]向量作为特征

首先从 loss 图可以看出训练和测试的 loss 的曲线非常接近,没有出现前两个特征提取方法中差别较大的情况,总体趋势也是训练的 loss 下降更快,测试的 loss 紧跟其后。从准确率图来看,训练和测试的准确率曲线几乎是同趋势变化,特别已经很平稳,说明训练基本已经充分了。最终测试的错误率来到了新底,达到了约为 0.197 这个相比于前 面两种方法更好的结果。

3,总结三种方法对比差异

这三种方法使用了不同的特征提取方式,导致最终结果的差异。让我详细解释一下可能的区别和影响。

词袋特征提取(第一个方法)
这个方法简单地对文本进行词级别的计数,每个单词作为一个特征,记录其出现的次数。缺点:忽略了单词之间的顺序和上下文信息。如果两个句子有相似的单词分布,但是顺序不同,这种方法就不能捕捉到它们的相似性。
N-Gram 特征提取(第二个方法)
这个方法根据指定的 N 值(可以是单词级别或字符级别)提取 N-Gram 特征,可以是词级别的 N-Gram 或字符级别的 N-Gram 还可以是混合级别的 N-Gram。
优点 :能够更全面地考虑到文本中的不同信息,从而提高了对文本特征的表示能力。词级别的 N-Gram 能够捕捉单词之间的关系,而字符级别的 N-Gram 则能够捕捉到更细小的特征和局部模式,这样结合起来可以在一定程度上弥补彼此的不足,提高特征提取的效果。因此,混合级别的 N-Gram 特征提取方法可能比单一级别的 N-Gram 提取更有效,能够更全面地表示文本特征
缺点 :对于大量的文本数据,特征空间可能会变得非常大,导致稀疏性增加,同时可能引入一些噪音特征。
BERT 特征提取(第三个方法)
使用预训练的 BERT 模型提取文本的特征向量,提取 [CLS] token 对应的隐藏状态作为整个句子的表示。
优点 :BERT 模型在训练中学习到了大量语言表示,能够捕捉更高级别、更全局的语义和句子系。
缺点 :计算成本较高,即使是对于轻量化版本的 BERT 模型,也需要更多的计算资源,比如在我的实验里运行 20 轮即使使用 GPU 也需要 40 分钟才能跑完,相对于其他两种方法非常耗时。
当综合考虑时 ,BERT 特征提取方法表现更出色,因为它能够捕捉更加丰富和高级别的语义信息。相比之下,传统的词袋模型和 N-Gram 方法有时可能忽视句子的语义和上下文信息,在表现上稍显不足。然而,混合级别的 N-Gram 方法则能够在一定程度上弥补这些传统方法的缺陷。结合了词级别和字符级别的信息,这种方法更全面地考虑了文本的局部模式和全局特征,使得其能够更有效地提取特征。至于为什么 BERT 特征提取方法更为优越,我认为原因在于 BERT 模型经过大规模训练,具备了对语言表示更全面的学习能力。它能够理解和捕捉到文本中更深层次、更复杂的语义关系,因此在处理这次情感分析实验时具有更好的表现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/688098.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Zabbix利用python脚本监控专线状态

需要用python脚本模拟登录交换机或者路由器,去执行ping命令,最终返回结果true和false import paramikodef ssh_ping(host, port, username, password, target_ip):client paramiko.SSHClient()client.set_missing_host_key_policy(paramiko.AutoAddPol…

洛谷P5719 分类平均 题解

#题外话&#xff08;第32篇题解&#xff09; #先看题目 题目链接https://www.luogu.com.cn/problem/P5719 #思路&#xff08;注意一下分类计数、i<n这些问题就行&#xff09; #代码 #include <bits/stdc.h> using namespace std; int main() {int n,k,cnt0;double…

Java学习笔记2024/2/16

知识点 面向对象 题目1&#xff08;完成&#xff09; 定义手机类&#xff0c;手机有品牌(brand),价格(price)和颜色(color)三个属性&#xff0c;有打电话call()和sendMessage()两个功能。 请定义出手机类&#xff0c;类中要有空参、有参构造方法&#xff0c;set/get方法。 …

第13章 网络 Page741~744 asio核心类 ip::tcp::socket

1. ip::tcp::socket liburl库使用"curl*" 代表socket 句柄 asio库使用ip::tcp::socket类代表TCP协议下的socket对象。 将“句柄”换成“对象”,因为asio库是不打折扣的C库 ip::tcp::socket提供一下常用异步操作都以async开头 表13-3 tcp::socket提供的异步操作 …

[嵌入式系统-28]:开源的虚拟机监视器和仿真器:QEMU(Quick EMUlator)与VirtualBox、VMware Workstation的比较

目录 一、QEMU概述 1.1 QEMU架构 1.2 QEMU概述 1.3 什么时候需要QEMU 1.4 QEMU两种操作模式 1.5 QEMU模拟多种CPU架构 二、QEMU与其他虚拟机的比较 2.1 常见的虚拟化技术 2.1 Linux KVM 2.2 Windows VirtualBox 2.3 Windows VMware workstation 三、VirtualBox、VM…

Microsoft SQL Server 2012 CONVERT(VARCHAR(100), GETDATE(), 0); 各个数字的含义

如果是2016以上的&#xff0c;可以直接诶去官网查看&#xff0c;官网链接&#xff1a;CAST 和 CONVERT (Transact-SQL) - SQL Server | Microsoft Learn 这里给的链接是2016的&#xff0c;可以坐上角调整数据库版本&#xff0c;然后搜索convert 这是我的数据库版本&#xff1…

Vue22 Vue监测数据改变的原理_数组

实例 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>Vue监测数据改变的原理_数组</title><!-- 引入Vue --><script type"text/javascript" src"../js/vue.js"></script>&…

fish终端下conda activate失败

【问题】fish终端下激活conda环境报错&#xff1a; >> conda activate base CondaError: Run conda init before conda activate ## 然而运行 conda init fish 仍旧无法解决【解决】 参考&#xff1a;https://github.com/conda/conda/issues/11079 方法一&#xf…

log_error_verbosity参数详解

参数说明 控制每条日志信息的详细程度。 默认: log_error_verbosity = default , terse、default、verbose三选一 terse模式下,返回的消息只包括严重性、主要文本以及位置;这些东西通常放在一个单一行中。 default模式生成的消息包括上面的信息加上任何细节、提示或者…

2024.02.18作业

1. 使用fgets统计给定文件的行数 #include <stdio.h> #include <stdlib.h> #include <string.h>int main(int argc, char const *argv[]) {if (argc ! 2){puts("input file error");puts("usage:./a.out filename");return -1;}FILE* f…

SMT2020:半导体制造流程标准仿真测试数据介绍

文章目录 问题背景SMT2020 涉及的主要功能1. 包含多种仿真模型类型2. 包含非计划性动作3. 区分不同类型设备的加工速率4. 特殊的复杂操作SMT2020 数据概览1. AutoSched 仿真模型数据2. General Data 输入数据问题背景 在半导体的生产制造当中,由于晶元片及设备等的高价值性,…

CSP-201812-1-小明上学

CSP-201812-1-小明上学 解题思路 #include <iostream> using namespace std; int main() {int red, yellow, green, n, timeSum 0;cin >> red >> yellow >> green;cin >> n;for (int i 0; i < n; i){int flag, time;cin >> flag &g…

分享视频二维码如何生成?怎么让其他人扫码查看自己的视频?

现在很多展示性的视频都会通过生成二维码的方式来传播分享&#xff0c;选择二维码的方式来分享能够更加快捷的获取视频内容&#xff0c;让更多人可以同时查看&#xff0c;有效提高视频传播的速度和效率。那么怎么制作视频二维码呢&#xff1f;其实方法很简单&#xff0c;只需要…

lvs DR模式+基于五台服务器部署keepalived + lvs DR模式架构(前端带路由)负载均衡的高可用集群

lvs DR模式基于五台服务器部署keepalived lvs DR模式架构(前端带路由)负载均衡的高可用集群 DR模式一&#xff1a; 客户端&#xff1a;172.20.26.167 LVS服务器&#xff1a;172.20.26.198 后端服务器&#xff1a;172.20.26.218 后端服务器&#xff1a;172.20.26.210 两台…

三勾点餐系统源码,java后台+微信小程序 实现完整的餐厅点餐

三勾点餐系统基于javaspringbootelement-plusuniapp打造的面向开发的小程序商城&#xff0c;方便二次开发或直接使用&#xff0c;可发布到多端&#xff0c;包括微信小程序、微信公众号、QQ小程序、支付宝小程序、字节跳动小程序、百度小程序、android端、ios端。 功能介绍 1.…

【牛客面试必刷TOP101】Day23.BM27 按之字形顺序打印二叉树和BM30 二叉搜索树与双向链表

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;牛客面试必刷TOP101 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01;&…

java中的数据结构及数据类型转换

基本数据类型&#xff08;4类8种&#xff09; 数据类型关键字内存占用取值范围说明字节byte1个字节-128 ~ 127短整型short2个字节-32768 ~ 32767整型int&#xff08;默认&#xff09;4个字节-231 ~ 231-1&#xff08;21个亿&#xff09;长整型long8个字节-263 ~ 263-&#xff…

在字节划水的7年,太真实了。。

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 测试这条路是坎坷的&#xff0c;我自己深有体会。 我们的起点低…

高并发系统:常见的设计思路

高并发的书籍文章其实有很多&#xff0c;我们工作中也或多或少遇到过一些。今天这里总结下常见的思路。 一&#xff0c;分而治之。 这个是最容易想到的办法&#xff0c;这里面包含了几层思路。 1&#xff0c;产品设计。业务上就引导用户分开使用&#xff0c;按需购买&#xff…

力扣题目训练(15)

2024年2月8日力扣题目训练 2024年2月8日力扣题目训练507. 完美数520. 检测大写字母521. 最长特殊序列 Ⅰ221. 最大正方形237. 删除链表中的节点115. 不同的子序列 2024年2月8日力扣题目训练 2024年2月8日第十五天编程训练&#xff0c;今天主要是进行一些题训练&#xff0c;包括…