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

news2025/3/14 0:56:45

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

学堂在线 - 精品在线课程学习平台 (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.coloradmin.cn/o/1453546.html

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

相关文章

2024/2/17 图论 最短路入门 dijkstra 1

目录 算法思路 Dijkstra求最短路 AcWing 849. Dijkstra求最短路 I - AcWing 850. Dijkstra求最短路 II - AcWing题库 最短路 最短路 - HDU 2544 - Virtual Judge (vjudge.net) 【模板】单源最短路径(弱化版) P3371 【模板】单源最短路径&#xf…

文生视频提示词:故事与主题

内容创意 --故事与主题 Story & Theme 这些词汇覆盖了从基本的故事类型到特定的主题和元素,可用于激发创意和定义视频内容的核心主题。 Adventure 冒险 Romance 浪漫 Mystery 神秘 Fantasy 幻想 Science Fiction 科幻 Horror 恐怖 Thriller 惊悚 Comedy 喜剧 Dr…

EXCEL中不错的xlookup函数

excel中一般要经常用vlookup函数,但其实经常麻烦要正序,从左边到右边,还要数列,挺麻烦的,xlookup的函数还不错,有个不错的一套视频介绍,B站的,地址是:XLOOKUP函数基础用法&#xff0…

Python vars函数

在Python编程中,vars()函数是一个常用的内置函数,用于返回对象的__dict__属性。该属性存储了对象的命名空间,包括对象的所有属性和方法。本文将深入探讨Python中的vars()函数,包括基本用法、适用对象、返回结果、实际应用场景&…

MySQL数据库⑪_C/C++连接MySQL_发送请求

目录 1. 下载库文件 2. 使用库 3. 链接MySQL函数 4. C/C链接示例 5. 发送SQL请求 6. 获取查询结果 本篇完。 1. 下载库文件 要使用C/C连接MySQL,需要使用MySQL官网提供的库。 进入MySQL官网选择适合自己平台的mysql connect库,然后点击下载就行…

线程库接口模拟封装(使用参数包接受参数,2种方法)

目录 引入 模拟实现 思路 传递参数包 代码 thread.hpp main.cpp 示例 引入 之前我们一直使用的都是linux中的原生线程库,但c中其实是有提供封装好的线程库的 -- <thread> 下面我们也来试着封装一下线程接口 模拟实现 思路 首先,明确线程库的核心操作: 创建和销毁…

标签结构比目录结构更易用 | Obsidian实践

当我顿悟了标签结构&#xff08;标签树&#xff09;的构建逻辑&#xff0c;彻底摆脱了目录结构的限制&#xff0c;从此可按任意维度管理和检索笔记。 对于每一个新入坑Obsidian的小白菜来说&#xff0c;通过创建目录结构&#xff0c;对笔记进行管理是最符合直觉的方式。但是&am…

【AIGC】大语言模型

大型语言模型&#xff0c;也叫大语言模型、大模型&#xff08;Large Language Model&#xff0c;LLM&#xff1b;Large Language Models&#xff0c;LLMs&#xff09; 什么是大型语言模型 大型语言模型&#xff08;LLM&#xff09;是指具有数千亿&#xff08;甚至更多&#xf…

php switch、for、foreach、while、do...while

php switch 1. switch2. for循环3. foreach4. while、do...while 1. switch <?php$height 190;switch ($height) {case 160:echo 太矮了;break; //跳出本次循环case 170:echo 还行吧;break; //跳出本次循环case 180:echo 帅哥;break; //跳出本次循环default:echo 迷; }2.…

初始Git及Linux Centos下安装Git

文章目录 前言版本控制器注意Git安装 前言 不知道你⼯作或学习时&#xff0c;有没有遇到这样的情况&#xff1a;我们在编写各种⽂档时&#xff0c;为了防⽌⽂档丢失&#xff0c;更改失误&#xff0c;失误后能恢复到原来的版本&#xff0c;不得不复制出⼀个副本&#xff0c;⽐如…

springboot196高校教师科研管理系统

Spring Boot高校教师科研管理系统设计与实现 摘 要 社会发展日新月异&#xff0c;用计算机应用实现数据管理功能已经算是很完善的了&#xff0c;但是随着移动互联网的到来&#xff0c;处理信息不再受制于地理位置的限制&#xff0c;处理信息及时高效&#xff0c;备受人们的喜…

(八)【Jmeter】线程(Threads(Users))之bzm - Concurrency Thread Group

简述 操作路径如下: 作用:模拟一定时间段内达到指定并发数的用户访问。配置:设置目标并发数、启动时间、持续时间等参数。使用场景:测试应用程序在达到一定并发用户数时的性能表现。优点:能够模拟实际并发访问的增长和稳定过程。缺点:主要关注并发数,可能无法模拟真实…

C高级D5作业

1.#!/bin/bash read -p "请输入一个字符>>" -n 1 c echo case $c in [[:lower:]]) echo "小写" ;; [[:upper:]]) echo "大写" ;; [1-9]) echo "数字" ;; …

如何实现Vuex数据持久化

Vuex是一个非常流行的状态管理工具&#xff0c;它可以帮助我们在Vue.js应用中管理和共享数据。然而&#xff0c;当应用重新加载或刷新时&#xff0c;Vuex的状态会被重置&#xff0c;这就导致了数据的丢失。那么&#xff0c;如何才能实现Vuex的数据持久化呢&#xff1f;让我们一…

【自然语言处理】seq2seq模型—机器翻译

清华大学驭风计划课程链接 学堂在线 - 精品在线课程学习平台 (xuetangx.com) 代码和报告均为本人自己实现&#xff08;实验满分&#xff09;&#xff0c;只展示主要任务实验结果&#xff0c;如果需要详细的实验报告或者代码可以私聊博主 有任何疑问或者问题&#xff0c;也欢…

SECS/GEM的HSMS通讯?金南瓜方案

High Speed SECS Message Service (HSMS) 是一种基于 TCP/IP 的协议&#xff0c;它使得 SECS 消息通信更加快速。这通常用作设备间通信的接口。 HSMS 状态逻辑变化&#xff08;序列&#xff09;&#xff1a; 1.Not Connected&#xff1a;准备初始化 TCP/IP 连接&#xff0c;但尚…

使用Autodl云服务器或其他远程机实现在本地部署知识图谱数据库Neo4j

本篇博客的目的在于提高读者的使用效率 温馨提醒&#xff1a;以下操作均可在无卡开机状态下就可完成 一.安装JDK 和 Neo4j 1.1 ssh至云服务器 打开你的pycharm或者其他IDE工具或者本地终端&#xff0c;ssh连接到autodl的服务器。(这一步很简单如下图) 1.2 安装JDK 由于我…

入门OpenCV:图像阈值处理

基本概念 图像阈值是一种简单、高效的图像分割方法&#xff0c;目的是将图像转换成二值图像。这个过程涉及比较像素值和阈值&#xff0c;根据比较结果来确定每个像素点的状态&#xff08;前景或背景&#xff09;。图像阈值在处理二维码、文本识别、物体跟踪等领域中非常有用。…

PLC_博图系列☞LAD

PLC_博图系列☞LAD 文章目录 PLC_博图系列☞LAD背景介绍LAD优势局限 LAD元素 关键字&#xff1a; PLC、 西门子、 博图、 Siemens 、 LAD 背景介绍 这是一篇关于PLC编程的文章&#xff0c;特别是关于西门子的博图软件。我并不是专业的PLC编程人员&#xff0c;也不懂电路&a…

[0]是数字的最右边

像这一段代码&#xff0c;把控制信号Ctrl的值&#xff0c;根据此时计数器的值&#xff0c;从Ctrl[0]到Ctrl[7]赋值给led。 之前的理解错误 之前脑子昏头了&#xff0c;看下面的这个图一直觉得不对&#xff0c;才发现这个Ctrl的值我应该从最右边读&#xff0c;即控制信号为Ctrl…