当前位置: 首页 > news >正文

【自然语言处理】实验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 模型经过大规模训练,具备了对语言表示更全面的学习能力。它能够理解和捕捉到文本中更深层次、更复杂的语义关系,因此在处理这次情感分析实验时具有更好的表现。

相关文章:

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

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

2.12日学习打卡----初学RocketMQ(三)

2.12日学习打卡 目录: 2.12日学习打卡一. RocketMQ高级特性(续)消息重试延迟消息消息查询 二.RocketMQ应用实战生产端发送同步消息发送异步消息单向发送消息顺序发送消息消费顺序消息全局顺序消息延迟消息事务消息消息查询 一. RocketMQ高级特…...

<网络安全>《35 网络攻防专业课<第一课 - 网络攻防准备>》

1 主要内容 认识黑客 认识端口 常见术语与命令 网络攻击流程 VMWare虚拟环境靶机搭建 2 认识黑客 2.1 白帽、灰帽和黑帽黑客 白帽黑客是指有能力破坏电脑安全但不具恶意目的黑客。 灰帽黑客是指对于伦理和法律态度不明的黑客。 黑帽黑客经常用于区别于一般(正面…...

【实战】一、Jest 前端自动化测试框架基础入门(一) —— 前端要学的测试课 从Jest入门到TDD BDD双实战(一)

文章目录 一、前端要学的测试课1.前端要学的测试2.前端工程化的一部分3.前端自动化测试的例子4.前端为什么需要自动化测试?5.课程涵盖内容6.前置技能7.学习收获 二、Jest 前端自动化测试框架基础入门1. 自动化测试背景及原理前端自动化测试产生的背景及原理 2.前端自…...

蓝桥杯Java组备赛(二)

题目1 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int max Integer.MIN_VALUE;int min Integer.MAX_VALUE;double sum 0;for(int i0;i<n;i) {int x sc.nextInt()…...

人力资源智能化管理项目(day10:首页开发以及上线部署)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/humanResourceIntelligentManagementProject 首页-基本结构和数字滚动 安装插件 npm i vue-count-to <template><div class"dashboard"><div class"container"><!-- 左侧内…...

Conda管理Python不同版本教程

Conda管理Python不同版本教程 目录 0.前提 1.conda常用命令 2.conda设置国内源&#xff08;以添加清华源为例&#xff0c;阿里云源同样&#xff09; 3.conda管理python库 4.其它 不太推荐 pyenv管理Python不同版本教程&#xff08;本人另一篇博客&#xff0c;姊妹篇&…...

free pascal:fpwebview 组件通过 JSBridge 调用本机TTS

从 https://github.com/PierceNg/fpwebview 下载 fpwebview-master.zip 简单易用。 先请看 \fpwebview-master\README.md cd \lazarus\projects\fpwebview-master\demo\js_bidir 学习 js_bidir.lpr &#xff0c;编写 js_bind_speak.lpr 如下&#xff0c;通过 JSBridge 调用本…...

数据结构——单链表专题

目录 1. 链表的概念及结构2. 实现单链表初始化尾插头插尾删头删查找在指定位置之前插入数据在指定位置之后插入数据删除指定位之前的节点删除指定位置之后pos节点销毁链表 3. 完整代码test.cSList.h 4. 链表的分类 1. 链表的概念及结构 在顺序表中存在一定的问题&#xff1a; …...

Linux:开源世界的王者

在科技世界中&#xff0c;Linux犹如一位低调的王者&#xff0c;统治着开源世界的半壁江山。对于许多技术爱好者、系统管理员和开发者来说&#xff0c;Linux不仅仅是一个操作系统&#xff0c;更是一种信仰、一种哲学。 一、开源的魅力 Linux的最大魅力在于其开源性质。与封闭的…...

⭐北邮复试刷题103. 二叉树的锯齿形层序遍历 (力扣每日一题)

103. 二叉树的锯齿形层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xff09;。 示例 1&#xff1a;输入&#xff1a…...

文件上传漏洞--Upload-labs--Pass07--点绕过

一、什么是点绕过 在Windows系统中&#xff0c;Windows特性会将文件后缀名后多余的点自动删除&#xff0c;在网页源码中&#xff0c;通常使用 deldot()函数 对点进行去除&#xff0c;若发现网页源代码中没有 deldot() 函数&#xff0c;则可能存在 点绕过漏洞。通过点绕过漏洞&…...

MySQL高级特性篇(1)-JSON数据类型的应用

MySQL是一种常用的关系型数据库管理系统&#xff0c;它提供了多种数据类型&#xff0c;其中包括JSON数据类型。JSON&#xff08;JavaScript Object Notation&#xff09;是一种常用的数据交换格式&#xff0c;它以键值对的形式组织数据&#xff0c;并支持嵌套和数组结构。MySQL…...

如何用Qt实现一个无标题栏、半透明、置顶(悬浮)的窗口

在Qt框架中&#xff0c;要实现一个无标题栏、半透明、置顶&#xff08;悬浮&#xff09;的窗口&#xff0c;需要一些特定的设置和技巧。废话不多说&#xff0c;下面我将以DrawClient软件为例&#xff0c;介绍一下实现这种效果的四个要点。 要点一&#xff1a;移除标题栏&#…...

ViT: transformer在图像领域的应用

文章目录 1. 概要2. 方法3. 实验3.1 Compare with SOTA3.2 PRE-TRAINING DATA REQUIREMENTS3.3 SCALING STUDY3.4 自监督学习 4. 总结参考 论文&#xff1a; An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale 代码&#xff1a;https://github.com…...

Sora 的工作原理(及其意义)

原文&#xff1a;How Sora Works (And What It Means) 作者&#xff1a; DAN SHIPPER OpenAI 的新型文本到视频模型为电影制作开启了新篇章 DALL-E 提供的插图。 让我们先明确一点&#xff0c;我们不会急急忙忙慌乱。我们不会预测乌托邦或预言灾难。我们要保持冷静并... 你…...

Java学习笔记2024/2/16

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

XLNet做文本分类

import torch from transformers import XLNetTokenizer, XLNetForSequenceClassification from torch.utils.data import DataLoader, TensorDataset # 示例文本数据 texts ["This is a positive example.", "This is a negative example.", "Anot…...

Swift 5.9 新 @Observable 对象在 SwiftUI 使用中的陷阱与解决

概览 在 Swift 5.9 中&#xff0c;苹果为我们带来了全新的可观察框架 Observation&#xff0c;它是观察者开发模式在 Swift 中的一个全新实现。 除了自身本领过硬以外&#xff0c;Observation 框架和 SwiftUI 搭配起来也能相得益彰&#xff0c;事倍功半。不过 Observable 对象…...

分享一个学英语的网站

名字叫&#xff1a;公益大米网​​​​​​​ Freerice 这个网站是以做题的形式来记忆单词&#xff0c;题干是一个单词&#xff0c;给出4个选项&#xff0c;需要选出其中最接近题干单词的选项。 答对可以获得10粒大米&#xff0c;网站的创办者负责捐赠。如图 触发某些条件&a…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

Python竞赛环境搭建全攻略

Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型&#xff08;算法、数据分析、机器学习等&#xff09;不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...

沙箱虚拟化技术虚拟机容器之间的关系详解

问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西&#xff0c;但是如果把三者放在一起&#xff0c;它们之间到底什么关系&#xff1f;又有什么联系呢&#xff1f;我不是很明白&#xff01;&#xff01;&#xff01; 就比如说&#xff1a; 沙箱&#…...

WEB3全栈开发——面试专业技能点P7前端与链上集成

一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染&#xff08;SSR&#xff09;与静态网站生成&#xff08;SSG&#xff09; 框架&#xff0c;由 Vercel 开发。它简化了构建生产级 React 应用的过程&#xff0c;并内置了很多特性&#xff1a; ✅ 文件系…...

【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)

旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据&#xff01;该数据集源自2025年4月发表于《地理学报》的论文成果…...

window 显示驱动开发-如何查询视频处理功能(三)

​D3DDDICAPS_GETPROCAMPRANGE请求类型 UMD 返回指向 DXVADDI_VALUERANGE 结构的指针&#xff0c;该结构包含特定视频流上特定 ProcAmp 控件属性允许的值范围。 Direct3D 运行时在D3DDDIARG_GETCAPS的 pInfo 成员指向的变量中为特定视频流的 ProcAmp 控件属性指定DXVADDI_QUER…...