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

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, labels

train_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`,它下载数据集、读取数据、分词、建立词汇表、处理文本为固定长度的序列,并返回训练和测试的数据迭代器以及词汇表供后续的神经网络模型使用。
在这个代码示例中,输入数据(评论)被转换成词索引序列,这些词索引将用于训练情感分析模型。这是构建基于文本的深度学习模型的一个典型步骤,包括预处理、建立词汇表、制作成批的数据等。 

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

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

相关文章

【Altium Designer】安装教程

一、软件下载 二、软件安装 三、授权文件激活 一、软件下载 Altium Designer官网下载 二、软件安装 1.解压完下载好的软件&#xff0c;鼠标右击【OfflineSetup_Altium_Designer_Public_24_5_1】安装程序&#xff0c;选择【以管理员身份运行】。 2.语言选择【Chinese】&#…

如何向《大众日报》理论稿投稿?

《大众日报》是山东省委机关报&#xff0c;其理论版是该报的重要版面之一&#xff0c;主要刊登关于政治、经济、文化、社会等方面的理论文章和研究成果。 - 投稿方式&#xff1a;通常可以通过电子邮件或在线投稿系统向《大众日报》理论版投稿。 - 选题范围&#xff1a;理论版…

回收站删掉的照片还能找回来吗?掌握这5个方法,很简单!

“我一不小心在回收站中误删了一些照片&#xff0c;这些照片对我来说是比较重要的&#xff0c;不知道这些还有机会将它们找回来吗&#xff1f;” 当我们不小心将珍贵的照片从计算机的回收站中误删时&#xff0c;那种瞬间的心痛和焦虑难以言表。这些照片可能记录了我们生活中的重…

kafka-生产者发送消息消费者消费消息

文章目录 1、生产者发送消息&消费者消费消息1.1、获取 kafka-console-producer.sh 的帮助信息1.2、生产者发送消息到某个主题1.3、消费主题数据 1、生产者发送消息&消费者消费消息 1.1、获取 kafka-console-producer.sh 的帮助信息 [rootlocalhost ~]# kafka-console…

解决mybatis/mybatis plus报错:Invalid bound statement (not found) 的方法汇总

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题&#xff0c;即在mybatis中dao接口与mapper配置文件在做映射绑定的时候接口与xml不匹配&#xff0c;要么是找不到&#xff0c;要么是找到了却匹配不到。 我的问题是项目没有把最新的方法x…

上海冠珠旗舰总店盛装开业暨冠珠瓷砖中国美学设计巡回圆满举办

上海&#xff0c;这座融合了东西方文化的国际化大都市&#xff0c;不仅是中国的时尚中心&#xff0c;也是全球潮流的汇聚地。在这里&#xff0c;古典与现代交织&#xff0c;传统与前卫并存&#xff0c;为传统色彩与现代设计的融合提供了得天独厚的条件。 5月25日&#xff0c;上…

svix - webhooks

文章目录 一、关于 SvixClient Library Overview与 Svix 托管服务的区别 二、运行服务器1、部署1.1 Docker1) 使用 Docker Compose2) 独立容器 1.2 预编译的二进制文件1.3 从源代码构建 2、运行时依赖项3、Redis/Valkey 注意事项持久性 Eviction 政策4、服务器配置4.1 配置文件…

红队技巧:仿冒Windows登录

Metasploit框架&#xff1a;phish_windows_credentials Metasploit带有内置的后期漏洞利用功能&#xff0c;可帮助我们完成任务。由于它是后渗透的模块&#xff0c;因此只需要输入会话即可&#xff1a; use post/windows/gather/phish_windows_credentials set session 1 …

WebGL学习(一)渲染关系

学习webgl 开发理解渲染关系是必须的&#xff0c;也非常重要&#xff0c;很多人忽视了这个过程。 我这里先简单写一下&#xff0c;后面尽量用通俗易懂的方式&#xff0c;举例讲解。 WebGL&#xff0c;全称Web Graphics Library&#xff0c;是一种在网页上渲染3D图形的技术。它…

【链表】Leetcode 61. 旋转链表【中等】

旋转链表 给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], k 2 输出&#xff1a;[4,5,1,2,3] 解题思路 要将链表每个节点向右移动 k 个位置&#xff1a; 计算链表…

Leetcode3161. 物块放置查询(Go语言的红黑树 + 线段树)

题目截图 题目分析 每次1操作将会分裂成两块区间长度&#xff0c;以最近右端点记录左侧区间的长度即可 因此涉及到单点更新和区间查询 然后左右侧最近端点则使用redBlackTree&#xff0c;也就是python中的sortedlist ac code type seg []int// 把 i 处的值改成 val func (t …

Spark-RDD-常用算子(方法)详解

Spark概述 Spark-RDD概述 Spark RDD 提供了丰富的方法来对数据进行转换和操作。 对 RDD&#xff08;Resilient Distributed Dataset&#xff09;的操作可以分为两大类&#xff1a;转换算子&#xff08;Transformations&#xff09;和行动算子&#xff08;Actions&#xff09;…

无线领夹麦克风哪个品牌好?本期文章揭秘无线麦克风哪个品牌好用

​在当下这个全民皆为媒体的时代大潮中&#xff0c;视频分享已然成为了引领风尚的指向标。在自媒体领域竞争愈发激烈的态势下&#xff0c;若要在这片广阔海洋中扬帆远航&#xff0c;优秀的作品毫无疑问是吸引观众的关键所在。而想要塑造出这样的卓越之作&#xff0c;除了需要创…

java —— 异常处理

一、认识异常 java 中的异常大致分为三类&#xff1a;编译错误、逻辑错误、运行异常。其中编译错误和逻辑错误通常手动更改即可&#xff0c;运行异常是异常处理的主要内容。 java 中的异常全部继承自 Exception 类&#xff0c;其常见的子类如下&#xff1a; 查看异常&#xf…

vscode常用操作

1 vscode跳转node_modules下文件&#xff0c;没有切换定位到左侧菜单目录的问题 2&#xff0c;搜索node-modules 3&#xff0c;设置选中字体颜色 {"workbench.colorTheme": "Default Light Modern","editor.mouseWheelZoom": true,"termin…

clocking wizard IP核通过AXI4-Lite接口实现动态重新配置应用实例

在最近的FPGA应用中&#xff0c;应用到了基于Zynq 7000的Uart串口设计&#xff0c;为了让串口的时钟更精确&#xff0c;采用了外部时钟模式&#xff0c;如下图所示。外部时钟连接到了Clocking Wizard IP核的输出端。 在串口通信时&#xff0c;发现串口有错码出现。例如&#xf…

Secure Operation

文章目录 Secure Summation OperationSecure Set Union Operation Secure Summation Operation 让我们通过一个具体的例子来说明这个算法。 假设有三个数据拥有者 S1, S2 和 S3&#xff0c;他们分别持有以下值&#xff1a; S1 持有 value1 10S2 持有 value2 20S3 持有 val…

React 微信扫码登陆网页

微信扫码登陆网页 第一步&#xff1a;微信开放平台申请应用第二步&#xff1a;前端生成二维码第三步&#xff1a;微信扫码授权 微信官方开发说明文档 第一步&#xff1a;微信开放平台申请应用 微信开放平台注册开发者账号&#xff0c;并拥有一个已审核通过的网站应用&#xff…

用了那么久的可道云teamOS,居然才发现这个隐藏的功能:一键存图,无需下载

在日常的工作或学习中&#xff0c;我们在遇到喜欢的图片时&#xff0c;总会想要保存下来以备后用。 然而&#xff0c;传统的图片保存方式通常需要我们右键另存为&#xff0c;或者复制链接、打开下载工具&#xff0c;甚至可能需要跳转到其他应用或网页才能完成下载。 存在电脑本…

jmeter之MD5加密接口请求教程

前言&#xff1a; 有时候在项目中&#xff0c;需要使用MD5加密的方法才可以登录&#xff0c;或者在某一个接口中遇到 登录获取token后才可以进行关联&#xff0c;下面介绍下遇到的常见使用 一、第一种方法&#xff1a;使用jmeter自带的函数助手digest 选择工具&#xff0c;选…