0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PyTorch教程-16.1. 情绪分析和数据集

jf_pJlTbmA9 来源:PyTorch 作者:PyTorch 2023-06-05 15:44 次阅读

随着在线社交媒体和评论平台的激增,大量的意见数据被记录下来,具有支持决策过程的巨大潜力。情感分析研究人们在其生成的文本中的情感,例如产品评论、博客评论和论坛讨论。它在政治(例如,公众对政策的情绪分析)、金融(例如,市场情绪分析)和市场营销(例如,产品研究和品牌管理)等领域有着广泛的应用。

由于情绪可以被分类为离散的极性或尺度(例如,积极和消极),我们可以将情绪分析视为文本分类任务,它将可变长度的文本序列转换为固定长度的文本类别。在本章中,我们将使用斯坦福的大型电影评论数据集进行情感分析。它由一个训练集和一个测试集组成,其中包含从 IMDb 下载的 25000 条电影评论。在这两个数据集中,“正面”和“负面”标签的数量相等,表明不同的情绪极性。

import os
import torch
from torch import nn
from d2l import torch as d2l

import os
from mxnet import np, npx
from d2l import mxnet as d2l

npx.set_np()

16.1.1。读取数据集

首先,在路径中下载并解压这个 IMDb 评论数据集 ../data/aclImdb。

#@save
d2l.DATA_HUB['aclImdb'] = (d2l.DATA_URL + 'aclImdb_v1.tar.gz',
             '01ada507287d82875905620988597833ad4e0903')

data_dir = d2l.download_extract('aclImdb', 'aclImdb')

Downloading ../data/aclImdb_v1.tar.gz from http://d2l-data.s3-accelerate.amazonaws.com/aclImdb_v1.tar.gz...

#@save
d2l.DATA_HUB['aclImdb'] = (d2l.DATA_URL + 'aclImdb_v1.tar.gz',
             '01ada507287d82875905620988597833ad4e0903')

data_dir = d2l.download_extract('aclImdb', 'aclImdb')

Downloading ../data/aclImdb_v1.tar.gz from http://d2l-data.s3-accelerate.amazonaws.com/aclImdb_v1.tar.gz...

接下来,阅读训练和测试数据集。每个示例都是评论及其标签:1 表示“正面”,0 表示“负面”。

#@save
def read_imdb(data_dir, is_train):
  """Read the IMDb review dataset text sequences and labels."""
  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('# trainings:', len(train_data[0]))
for x, y in zip(train_data[0][:3], train_data[1][:3]):
  print('label:', y, 'review:', x[:60])

# trainings: 25000
label: 1 review: Henry Hathaway was daring, as well as enthusiastic, for his
label: 1 review: An unassuming, subtle and lean film, "The Man in the White S
label: 1 review: Eddie Murphy really made me laugh my ass off on this HBO sta

#@save
def read_imdb(data_dir, is_train):
  """Read the IMDb review dataset text sequences and labels."""
  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('# trainings:', len(train_data[0]))
for x, y in zip(train_data[0][:3], train_data[1][:3]):
  print('label:', y, 'review:', x[:60])

# trainings: 25000
label: 1 review: Henry Hathaway was daring, as well as enthusiastic, for his
label: 1 review: An unassuming, subtle and lean film, "The Man in the White S
label: 1 review: Eddie Murphy really made me laugh my ass off on this HBO sta

16.1.2。预处理数据集

将每个单词视为一个标记并过滤掉出现次数少于 5 次的单词,我们从训练数据集中创建了一个词汇表。

train_tokens = d2l.tokenize(train_data[0], token='word')
vocab = d2l.Vocab(train_tokens, min_freq=5, reserved_tokens=[''])

train_tokens = d2l.tokenize(train_data[0], token='word')
vocab = d2l.Vocab(train_tokens, min_freq=5, reserved_tokens=[''])

标记化后,让我们绘制以标记为单位的评论长度直方图。

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));

pYYBAGR9PJGAVpMAAADxspcG71s604.svg

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));

pYYBAGR9PJGAVpMAAADxspcG71s604.svg

正如我们所料,评论的长度各不相同。为了每次处理一小批此类评论,我们将每个评论的长度设置为 500,并进行截断和填充,这类似于第 10.5 节中机器翻译数据集的预处理 步骤。

num_steps = 500 # sequence length
train_features = torch.tensor([d2l.truncate_pad(
  vocab[line], num_steps, vocab['']) for line in train_tokens])
print(train_features.shape)

torch.Size([25000, 500])

num_steps = 500 # sequence length
train_features = np.array([d2l.truncate_pad(
  vocab[line], num_steps, vocab['']) for line in train_tokens])
print(train_features.shape)

(25000, 500)

16.1.3。创建数据迭代器

现在我们可以创建数据迭代器。在每次迭代中,返回一小批示例。

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('# batches:', len(train_iter))

X: torch.Size([64, 500]) , y: torch.Size([64])
# batches: 391

train_iter = d2l.load_array((train_features, train_data[1]), 64)

for X, y in train_iter:
  print('X:', X.shape, ', y:', y.shape)
  break
print('# batches:', len(train_iter))

X: (64, 500) , y: (64,)
# batches: 391

16.1.4。把它们放在一起

最后,我们将上述步骤包装到函数中load_data_imdb。它返回训练和测试数据迭代器以及 IMDb 评论数据集的词汇表。

#@save
def load_data_imdb(batch_size, num_steps=500):
  """Return data iterators and the vocabulary of the IMDb review dataset."""
  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['']) for line in train_tokens])
  test_features = torch.tensor([d2l.truncate_pad(
    vocab[line], num_steps, vocab['']) 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

#@save
def load_data_imdb(batch_size, num_steps=500):
  """Return data iterators and the vocabulary of the IMDb review dataset."""
  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 = np.array([d2l.truncate_pad(
    vocab[line], num_steps, vocab['']) for line in train_tokens])
  test_features = np.array([d2l.truncate_pad(
    vocab[line], num_steps, vocab['']) for line in test_tokens])
  train_iter = d2l.load_array((train_features, train_data[1]), batch_size)
  test_iter = d2l.load_array((test_features, test_data[1]), batch_size,
                is_train=False)
  return train_iter, test_iter, vocab

16.1.5。概括

情感分析研究人们在其生成的文本中的情感,这被认为是将变长文本序列转换为固定长度文本类别的文本分类问题。

预处理后,我们可以将斯坦福的大型电影评论数据集(IMDb 评论数据集)加载到带有词汇表的数据迭代器中。

16.1.6。练习

我们可以修改本节中的哪些超参数来加速训练情绪分析模型?

你能实现一个函数来将亚马逊评论的数据集加载到数据迭代器和标签中以进行情感分析吗?

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据集
    +关注

    关注

    4

    文章

    1179

    浏览量

    24353
  • pytorch
    +关注

    关注

    2

    文章

    762

    浏览量

    12835
收藏 人收藏

    评论

    相关推荐

    Pytorch模型训练实用PDF教程【中文】

    及优化器,从而给大家带来清晰的机器学习结构。通过本教程,希望能够给大家带来一个清晰的模型训练结构。当模型训练遇到问题时,需要通过可视化工具对数据、模型、损失等内容进行观察,分析并定位问题出在数据部分
    发表于 12-21 09:18

    怎么删除分析中的“Ghost”数据

    Genesys 2007.03我添加了一个分析,例如“分析1”。然后我删除了这个分析。现在,其数据“Analysis 1_Data”的名称
    发表于 02-20 09:12

    将来可以通过可穿戴设备分析阅读和情绪

    由于麻省理工学院和杜比实验室的研究人员和其他同仁的努力,不久的将来可以通过可穿戴设备分析阅读和情绪
    发表于 08-04 07:13

    高阶API构建模型和数据使用

    了TensorFlow2.0Beta版本,同pytorch一样支持动态执行(TensorFlow2.0默认eager模式,无需启动会话执行计算图),同时删除了杂乱低阶API,使用高阶API简单地构建复杂神经网络模型,本文主要分享用高阶API构建模型和数据
    发表于 11-04 07:49

    在机智云上创建项目和数据

    一、基于STM32+ESP8266+机智云的物联网demo1、在机智云上创建项目和数据2、WIFI模块烧写固件3、移植到MCU上①、在STM32上移植②、在IMX6ULL上移植1、在机智云上创建
    发表于 08-03 07:45

    怎样使用PyTorch Hub去加载YOLOv5模型

    在Python>=3.7.0环境中安装requirements.txt,包括PyTorch>=1.7。模型和数据从最新的 YOLOv5版本自动下载。简单示例此示例从
    发表于 07-22 16:02

    基于统计数据的微博表情符分析及其在情绪分析中的应用

    表情符作为一种新兴的网络语言,受到了越来越多的微博用户的青睐。微博中出现的表情符形象直观地表达了博主的情绪,对情绪分析起着至关重要的作用。首先对大量中文微博中表情符的使用特点、分布情况和情绪
    发表于 12-04 11:04 8次下载

    基于情绪激励度的情绪词加权方法

    在不同的上下文中,情绪词对情绪的激励程度会发生变化。现有情绪词典中大多数只标注了情绪词的情绪类别而未涉及
    发表于 12-05 14:15 0次下载

    基于PLSA模型的群体情绪演进分析

    针对群体情绪演进分析中话题内容挖掘及其对应群体情绪分析两个层面的难题,提出了一种基于概率潜在语义分析(PLSA)模型的群体
    发表于 12-30 17:16 0次下载
    基于PLSA模型的群体<b class='flag-5'>情绪</b>演进<b class='flag-5'>分析</b>

    基于区块链情绪分析平台Senno介绍

    Senno是一个去中心化的,基于区块链的情绪分析平台,具有使用分布式硬件的开放式软件开发工具包。Senno允许第三方将群众智慧和数据结论工具整合到自己的平台中(例如,像Alexa和Sir这样的数字
    发表于 11-14 11:04 1332次阅读

    LabVIEW用于测量和数据分析

    LabVIEW用于测量和数据分析说明。
    发表于 04-19 14:27 46次下载

    PyTorch教程10.5之机器翻译和数据

    电子发烧友网站提供《PyTorch教程10.5之机器翻译和数据集.pdf》资料免费下载
    发表于 06-05 15:14 0次下载
    <b class='flag-5'>PyTorch</b>教程10.5之机器翻译<b class='flag-5'>和数据</b>集

    PyTorch教程14.9之语义分割和数据

    电子发烧友网站提供《PyTorch教程14.9之语义分割和数据集.pdf》资料免费下载
    发表于 06-05 11:10 0次下载
    <b class='flag-5'>PyTorch</b>教程14.9之语义分割<b class='flag-5'>和数据</b>集

    PyTorch教程16.1情绪分析和数据

    电子发烧友网站提供《PyTorch教程16.1情绪分析和数据集.pdf》资料免费下载
    发表于 06-05 10:54 0次下载
    <b class='flag-5'>PyTorch</b>教程<b class='flag-5'>16.1</b>之<b class='flag-5'>情绪</b><b class='flag-5'>分析</b><b class='flag-5'>和数据</b>集

    PyTorch教程16.4之自然语言推理和数据

    电子发烧友网站提供《PyTorch教程16.4之自然语言推理和数据集.pdf》资料免费下载
    发表于 06-05 10:57 0次下载
    <b class='flag-5'>PyTorch</b>教程16.4之自然语言推理<b class='flag-5'>和数据</b>集