情感分析及数据集代码解析

news/2024/7/20 17:27:04/文章来源:https://blog.csdn.net/eidolon_foot/article/details/138997063

15.1. 情感分析及数据集 — 动手学深度学习 2.0.0 documentation (d2l.ai)

代码

import os
import torch
from torch import nn
from d2l import torch as d2l#@save
d2l.DATA_HUB['aclImdb'] = ('http://ai.stanford.edu/~amaas/data/sentiment/aclImdb_v1.tar.gz','01ada507287d82875905620988597833ad4e0903')data_dir = d2l.download_extract('aclImdb', 'aclImdb')#@save
def read_imdb(data_dir, is_train):"""读取IMDb评论数据集文本序列和标签"""data, labels = [], []for label in ('pos', 'neg'):folder_name = os.path.join(data_dir, 'train' if is_train else 'test',label)for file in os.listdir(folder_name):with open(os.path.join(folder_name, file), 'rb') as f:review = f.read().decode('utf-8').replace('\n', '')data.append(review)labels.append(1 if label == 'pos' else 0)return data, labelstrain_data = read_imdb(data_dir, is_train=True)
print('训练集数目:', len(train_data[0]))
for x, y in zip(train_data[0][:3], train_data[1][:3]):print('标签:', y, 'review:', x[0:60])train_tokens = d2l.tokenize(train_data[0], token='word')
vocab = d2l.Vocab(train_tokens, min_freq=5, reserved_tokens=['<pad>'])d2l.set_figsize()
d2l.plt.xlabel('# tokens per review')
d2l.plt.ylabel('count')
d2l.plt.hist([len(line) for line in train_tokens], bins=range(0, 1000, 50));num_steps = 500  # 序列长度
train_features = torch.tensor([d2l.truncate_pad(vocab[line], num_steps, vocab['<pad>']) for line in train_tokens])
print(train_features.shape)train_iter = d2l.load_array((train_features,torch.tensor(train_data[1])), 64)for X, y in train_iter:print('X:', X.shape, ', y:', y.shape)break
print('小批量数目:', len(train_iter))#@save
def load_data_imdb(batch_size, num_steps=500):"""返回数据迭代器和IMDb评论数据集的词表"""data_dir = d2l.download_extract('aclImdb', 'aclImdb')train_data = read_imdb(data_dir, True)test_data = read_imdb(data_dir, False)train_tokens = d2l.tokenize(train_data[0], token='word')test_tokens = d2l.tokenize(test_data[0], token='word')vocab = d2l.Vocab(train_tokens, min_freq=5)train_features = torch.tensor([d2l.truncate_pad(vocab[line], num_steps, vocab['<pad>']) for line in train_tokens])test_features = torch.tensor([d2l.truncate_pad(vocab[line], num_steps, vocab['<pad>']) for line in test_tokens])train_iter = d2l.load_array((train_features, torch.tensor(train_data[1])),batch_size)test_iter = d2l.load_array((test_features, torch.tensor(test_data[1])),batch_size,is_train=False)return train_iter, test_iter, vocab

代码解析

这段代码使用PyTorch框架和d2l(Dive into Deep Learning)库,加载并处理IMDb影评数据集——一组用于情感分析的文本数据集。代码执行的主要步骤如下:
1. 下载并提取IMDb评论数据集:`d2l.DATA_HUB`字典用来存放数据集以及它们的URL和SHA-1哈希,以确保下载文件的完整性。`d2l.download_extract`函数接收数据集的名称(这里是`'aclImdb'`)和一个子目录标识符,并下载并解压数据。
2. 读取IMDb评论数据集:`read_imdb`函数被定义来读取IMDb评论和它们的标签。标签为'pos'表示积极的评论,使用1表示;标签为'neg'表示消极的评论,使用0表示。
3. 解析训练集:读取训练集数据并打印标签和前60个字符的评论片段来展示数据是如何被加载的。
4. 分词:使用`d2l.tokenize`函数在训练数据上进行分词操作,切分出每个单词。
5. 建立词汇表:`d2l.Vocab`用来根据分词结果建立词汇表,至少出现5次的词会被加入词汇表。
6. 绘制评论长度直方图:这部分代码绘制了一个直方图,用于展示数据集中评论的词汇数量分布。
7. 准备数据迭代器:数据被截断或填充至指定的序列长度(这里是500个单词),然后使用`d2l.load_array`函数将处理后的数据和标签封装成小批量的数据迭代器。
8. 定义数据加载函数:最后,`load_data_imdb`函数被定义来加载训练和测试数据集、建立词汇表并返回小批量数据迭代器。这个函数可以在后续进行情感分析模型训练时被调用。
整体来看,该代码段主要聚焦于数据预处理的环节,包括下载、读取、分词、建立词汇表和创建数据迭代器等,以便于模型在随后的步骤中使用处理好的数据进行训练和评估。

这段代码是用于情感分析的,它使用了IMDb的电影评论数据集。情感分析是自然语言处理领域的一个任务,目的是判断文本(如评论、推文等)所表达的情绪倾向(正面或负面)。请看以下对代码的中文解析:
1. 导入所需的包和模块,如`os`、`torch`、`nn`以及一个定制的深度学习库`d2l`。
2. d2l.DATA_HUB是一个字典,用于存储数据集的URL及其校验码。这里存储了IMDb评论数据集的信息。
3. data_dir变量用于存储下载并解压后的数据集目录。
4. 另外定义了`read_imdb`函数,用于读取特定的数据集子集(训练集或测试集),并根据分类(politive'或'negative')读取正面或负面评论。
5. 然后,代码读取了训练集数据,并打印了数据的数量以及前三条评论和其标签。
6. 接着使用`d2l.tokenize`函数对评论进行分词处理,并利用`d2l.Vocab`建立词汇表,忽略出现频率低于5的词语。
7. 之后,使用直方图可视化评论中的词语数量分布。
8. 定义了序列长度`num_steps`为500,长序列将被截短,短序列将被填充。
9. 将处理后的文本转换为张量`train_features`,形状表示(样本数量, 序列长度)。
10. 创建一个小批量数据迭代器`train_iter`,其批量大小为64,并打印一个批次的X和y的形状。
11. 最后定义了一个函数`load_data_imdb`,它下载数据集、读取数据、分词、建立词汇表、处理文本为固定长度的序列,并返回训练和测试的数据迭代器以及词汇表供后续的神经网络模型使用。
在这个代码示例中,输入数据(评论)被转换成词索引序列,这些词索引将用于训练情感分析模型。这是构建基于文本的深度学习模型的一个典型步骤,包括预处理、建立词汇表、制作成批的数据等。 

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

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

相关文章

音视频学习规划

文章目录 概述闲聊点 小结 概述 最近在学习音视频&#xff0c;觉得还是要先写个提纲&#xff0c;给自己制定下学习路线及目标。先写下我的个人流程及思路。 ffmpeg的命令ffmpeg api播放器流媒体RTMP&#xff0c;HLS 闲聊点 先说下学习命令行吧&#xff0c;学习命令行是为了…

【Spring Cloud】API网关

目录 什么是API网关为什么需要API网关前言问题列表 API网关解决了什么问题常见的网关解决方案NginxLuaSpring Cloud Netflix ZuulSpringCloud Zuul的IO模型弊端 Spring Cloud Gateway 第二代网关——GatewayGateway的特征Spring Cloud Gateway的处理流程Spring Cloud Gateway的…

基于trunk、yew构建web开发脚手架

trunk 构建、打包 rust wasm 程序&#xff1b;yewweb 前端开发库&#xff1b; 项目仓库yew-web trunk 之前已经简单介绍了trunk,全局安装&#xff1a; $> cargo install --locked trunk常用命令&#xff1a; trunk build 基于wasm-bindgen构建 wasm 程序。trunk watch …

企企通入选第一新声《2024年中国CIO数字化产品选型白皮书》供应链数字产品可信名录

近日&#xff0c;第一新声研究院根据多年产业数字化研究&#xff0c;历经近半年时间&#xff0c;并综合近200位CIO调研与推荐意见&#xff0c;发布《2024年中国CIO数字化产品选型白皮书》&#xff0c;并推出企业CIO选型指南及可信产品名录。企企通凭借其优秀的采购数字化与供应…

【小米手环7】表盘修改/制作指南

2024年了还有人用小米手环7么&#xff1f; 5月10号得到我的小米手环7nfc&#xff0c;随之开启了我对表盘制作的探索之旅。~历时18天&#xff0c;终于让我成功修改了官方表盘——荧光电子&#xff01;表盘&#xff1a;羽球人的荧光电子已上传至表盘自定义工具app。 接下来&…

Android软件渲染流程

Android软件渲染流程 一.渲染流程1.VSync信号的监听2.VSync信号触发绘制 二.渲染原理1.画布的获取1.1 渲染缓存的初始化1.2 graphics::Canvas的创建1.3 graphics::Canvas与渲染缓存的绑定1.3.1 SkBitmap的初始化1.3.2 SkiaCanvas与SkBitmap的绑定1.3.3 SkCanvas的创建 2.矩形的…

Window Linux 权限提升

#基础点&#xff1a; 0、为什么我们要学习权限提升转移技术&#xff1a; 简单来说就是达到目的过程中需要用到它 心里要想着我是谁 我在哪 我要去哪里 1、具体有哪些权限需要我们了解掌握的&#xff1a; 后台权限&#xff0c;数据库权限&#xff0c;Web权限&#xff0c;用户权…

红外成像人员检测数据集VOC+YOLO格式5838张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;5838 标注数量(xml文件个数)&#xff1a;5838 标注数量(txt文件个数)&#xff1a;5838 标注…

FTP协议——Pure-Ftpd安装(Linux)

1、简介 Pure-FTPd是一个高效、免费且开源的FTP服务器软件&#xff0c;广泛应用于各种Unix/Linux系统。它以其易用性、高安全性和功能丰富而闻名&#xff0c;适用于个人和企业的文件传输需求。 2、步骤 环境&#xff1a;Ubuntu 22.04.4 下载地址&#xff1a;Index of /pub/p…

文盘Rust -- 生命周期问题引发的 static hashmap 锁

100编程书屋_孔夫子旧书网 2021年上半年,撸了个rust cli开发的框架,基本上把交互模式,子命令提示这些cli该有的常用功能做进去了。项目地址:https://github.com/jiashiwen/interactcli-rs。 春节以前看到axum已经0.4.x了,于是想看看能不能用rust做个服务端的框架。 春节…

【Java】Java中类的初始化顺序(静态方法,静态块,非静态块,最后有流程图)

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 一、无继承关系类的初始化 1、静态变量k被初始化 2、静态变量t1初始化 3、静态变量 t2初始化 4、静态变量i初始化 5、静态变量n初始化 6、静态块初始化 7、非静态块初始化 8、非静态属性初始化 9、执行构造…

triton之paged attention

一 原理 图解大模型计算加速系列之&#xff1a;vLLM核心技术PagedAttention原理 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/691038809 二 源码分析 1 测试参数设置 test_paged_attention(num_seqs32,num_heads(64, 64),head_size64,block_size16,dtypetorch.float16,…

八股文(C#篇)

C#中的数值类型 堆和栈 值类型的数据被保存在栈&#xff08;stack)上&#xff0c;而引用类型的数据被保存在堆&#xff08;heap&#xff09;上&#xff0c;当值类型作为参数传递给函数时&#xff0c;会将其复制到新的内存空间中&#xff0c;因此在函数中对该值类型的修改不会影…

Elasticsearch集群许可证过期问题解决方法汇总

最近在使用elasticsearch的过程中,使用elastic-head进行可视化展示集群的状态和信息,从2024年5月18日突然elastic-head无法现在集群的状态界面啦,elasticsearch集群状态是正常,命令如下: curl -X GET "localhost:9200/_cluster/health?pretty" 在google页面上通过…

给pdf加水印,python实现

from PyPDF2 import PdfReader, PdfWriterdef add_watermark(pdf_file_in, pdf_file_mark, pdf_file_out):"""把水印添加到pdf中"""pdf_output PdfWriter()input_stream open(pdf_file_in, rb)pdf_input PdfReader(input_stream, strictFalse…

for循环绑定id,更新html页面的文字内容

需求&#xff1a;将方法中内容对齐 实现方式 给for循环中每个方法添加一个动态的id在DOM结果渲染完后&#xff0c;更新页面数据&#xff0c;否则会报错&#xff0c;找不到对应节点或对应节点为空 <view v-for"(item, index) in itemList" :key"index"…

DSP开发入门

视频&#xff1a; 创龙TI 最新DSP CPU核心架构 C66x 以及 KeyStone I 架构 DSP TMS320C6655/57以及TMS320C6678视频教程全集_哔哩哔哩_bilibili 2024年硬汉科技手把手教您学DSP28335视频教程持续更新中_哔哩哔哩_bilibili DSP芯片介绍 DSP选型 TI的DSP 分为三大系列&#…

如何连接SharePoint?

知行之桥EDI系统支持连接SharePoint&#xff0c;通过在成熟的SharePoint端口&#xff08;知行之桥EDI系统中的端口是指功能模块&#xff09;的可视化界面中进行简单配置&#xff0c;即可创建连接。 创建一个SharePoint 端口 本操作指南基于知行之桥EDI系统2024版&#xff0c;…

java配置文件解析yml/xml/properties文件

XML 以mybatis.xml:获取所有Environment中的数据库并连接session为例 import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException;import javax.xml.parsers.DocumentBuilder; impo…

23ai中的True Cache到底能做啥?

最近&#xff0c;Oracle的产品管理总监在Oracle数据库内幕中介绍了True Cache。 原文链接如下&#xff1a; https://blogs.oracle.com/database/post/introducing-oracle-true-cache 由于这篇文章比较火爆&#xff0c;我们国内已经有很多的数据库爱好者完整的翻译这篇文章&am…