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

从代码学习深度学习 - 情感分析及数据集 PyTorch版

文章目录

  • 前言
  • 1. 认识数据集:aclImdb
    • 🔹 基本信息
    • 🔹 数据结构
    • 🔹 特点
  • 2. 解压与读取数据
    • 2.1 解压文件
    • 2.2 读取评论与标签
  • 3. 预处理数据集
    • 3.1 词元化与构建词汇表
    • 3.2 分析评论长度
    • 3.3 截断与填充
  • 4. 创建数据迭代器
  • 5. 整合所有步骤
  • 总结


前言

欢迎来到“从代码学习深度学习”系列!今天,我们将深入探讨自然语言处理(NLP)中的一个核心任务:情感分析

随着互联网的普及,从产品评论、社交媒体到论坛讨论,我们每天都在产生海量的文本数据。这些数据背后隐藏着人们丰富的情感和观点,具有巨大的商业和研究价值。情感分析(Sentiment Analysis)正是研究如何从文本中自动识别和提取这些“隐藏”情绪的技术。它能帮助我们理解公众对政策的看法、分析市场的恐慌或乐观情绪,或是评估消费者对新产品的反馈。

我们可以将情感分析看作一项文本分类任务,即将一段可变长度的文本(如一条电影评论)映射到一个固定的类别(如“积极”或“消级”)。

为了学习这个任务,我们将使用一个非常经典的数据集——斯坦福大学的大型电影评论数据集(aclImdb)。本篇博客将带领你从零开始,详细解析每一行代码,学习如何使用 PyTorch 完成从原始数据文件到可供模型训练的数据迭代器的完整流程。

让我们开始吧!

完整代码:下载链接

1. 认识数据集:aclImdb

在动手编码之前,我们首先需要了解将要处理的数据。aclImdb_v1 数据集是情感分析领域的“Hello, World!”,几乎所有新的文本分类模型都会在这个数据集上进行性能测试。

🔹 基本信息

  • 名称aclImdb_v1
  • 任务类型:二分类情感分析(Positive / Negative)
  • 语言:英语
  • 规模:共 50,000 条影评文本
    • 训练集:25,000 条(12,500 正面 + 12,500 负面)
    • 测试集:25,000 条(12,500 正面 + 12,500 负面)

🔹 数据结构

下载并解压后,数据集的目录结构非常清晰,这为我们编写代码读取数据提供了便利:

aclImdb/
│
├── train/
│   ├── pos/      # 正面影评,每篇为一个 .txt 文件
│   ├── neg/      # 负面影评,每篇为一个 .txt 文件
│   └── unsup/    # 无标签数据(我们本次任务不会使用)
│
├── test/
│   ├── pos/      # 正面测试影评
│   └── neg/      # 负面测试影评
│
└── README

🔹 特点

  1. 平衡的正负样本:训练集和测试集中,正负样本数量完全相等,这有助于模型避免偏向某一类别。
  2. 文本长度不一:评论有长有短,非常贴近真实场景,对模型的长文本处理能力提出了挑战。
  3. 真实数据:所有评论均采自 IMDb 网站,语言风格多样,具有很好的代表性。

2. 解压与读取数据

现在,我们开始编写代码。第一步是解压我们下载的数据集,并将其从一个个独立的 .txt 文件读取到内存中。

2.1 解压文件

我们先定义一个辅助函数 extract,用于自动解压 .tar.gz.zip 格式的文件。

import os
import zipfile
import tarfiledef extract(name, folder=None):"""下载并解压zip/tar文件参数:name (str): 要解压的文件名/路径,维度: [字符串]folder (str, optional): 指定的文件夹名称,维度: [字符串] 或 None返回:str: 解压后的目录路径,维度: [字符串]"""# 获取文件所在的基础目录路径# fname应该是全局变量,表示文件的完整路径,维度: [字符串]base_dir = os.path.dirname(name)  # base_dir维度: [字符串]# 分离文件名和扩展名# data_dir: 不含扩展名的文件路径,维度: [字符串]# ext: 文件扩展名(如'.zip', '.tar'等),维度: [字符串]data_dir, ext = os.path.splitext(name)# 根据文件扩展名选择相应的解压方式if ext == '.zip':# 处理ZIP文件# fp: ZipFile对象,用于操作ZIP文件,维度: [ZipFile对象]fp = zipfile.ZipFile(name, 'r')elif ext in ('.tar', '.gz'):# 处理TAR文件(包括.tar和.gz格式)# fp: TarFile对象,用于操作TAR文件,维度: [TarFile对象]fp = tarfile.open(name, 'r')else:# 不支持的文件格式,抛出断言错误assert False, '只有zip/tar文件可以被解压缩'# 将文件内容解压到基础目录中# base_dir: 解压的目标目录,维度: [字符串]fp.extractall(base_dir)# 关闭文件对象,释放资源fp.close()# 返回最终的目录路径# 如果指定了folder参数,则返回base_dir/folder的路径# 否则返回默认的data_dir路径# 返回值维度: [字符串]return os.path.join(base_dir, folder) if folder else data_dirextract(name="aclImdb_v1.tar.gz")

2.2 读取评论与标签

接下来,我们定义 rea

相关文章:

  • LLMs之MCP:excel-mcp-server的简介、安装和使用方法、案例应用之详细攻略
  • Rust智能指针演进:从堆分配到零复制的内存管理艺术
  • 飞轮储能VSG控制策略辅助双馈风机一次调频的仿真模型研究
  • 2025中科院2区SCI-状态优化算法Status-based Optimization-附Matlab免费代码
  • ms-swift 部分命令行参数说明
  • skywalking介绍和专栏目录
  • Kafka Streams入门与实战:从概念解析到程序开发
  • Elasticsearch、Faiss、Milvus在向量索引实现上的核心差
  • 【NLP项目设计】自定义风格歌词生成app
  • AI驱动的B端页面智能布局:动态适配用户行为的技术突破
  • Linux内核中安全创建套接字:为何inet_create未导出及正确替代方案
  • 深入解析C#数组协变与克隆机制
  • Mybatis-Plus支持多种数据库
  • Netty内存池核心:PoolChunk深度解析
  • 给同一个wordpress网站绑定多个域名的实现方法
  • C#Halcon从零开发_Day11_圆拟合
  • vim学习流程,以及快捷键总结
  • Docker 运行RAGFlow 搭建RAG知识库
  • Linux下QGIS二次开发环境搭建
  • 【投稿与写作】overleaf 文章转投arxiv流程经验分享
  • 京东的网站建设介绍/做网站哪个公司最好
  • 网站建设硬件设备/网络营销经典案例
  • 做任务用手机号登录网站/品牌推广
  • 广州工程招标投标信息网/厦门网站搜索引擎优化
  • 自建购物网站/沈阳百度快照优化公司
  • 新品发布会方案/优化教程网