IMDB数据集——文本情绪二分类

本文介绍了如何使用Keras库处理IMDB数据集,该数据集包含50000条电影评论,分为训练集和测试集。数据经过预处理,每个评论由单词索引表示。通过限制前10000个最常出现的单词,构建了神经网络模型。网络由relu激活的Dense层堆叠而成,最后通过sigmoid层输出概率值。模型使用二元交叉熵损失函数,使用RMSprop优化器进行训练,并在验证集上监控性能。经过训练,模型在测试集上达到了约88%的精度。
摘要由CSDN通过智能技术生成

1.数据集及问题简介

IMDB 数据集,它包含来自互联网电影数据库(IMDB)的50000 条严重两极分化的评论。数据集被分为用于训练的25000 条评论与用于测试的25000 条评论,训练集和测试集都包含50% 的正面评论和50% 的负面评论。

与MNIST 数据集一样,IMDB 数据集也内置于Keras 库。它已经过预处理:评论(单词序列)已经被转换为整数序列,其中每个整数代表字典中的某个单词。

我们需要学习根据电影评论的文字内容将其划分为正面或负面

2.加载数据集并探索数据

(1)加载数据

仅保留训练数据中前 10000 个最常出现的单词,低频单词将被舍弃(评论数量没有变,只是每条评论的单词减少了)。

from keras.datasets import imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)

(2)查看数据大小及格式


>>> train_data[0]
[1, 14, 22, 16, ... 178, 32]
>>> train_labels[0]
1
>>> max([max(sequence) for sequence in train_data])
9999

train_data 和test_data 这两个变量都是评论组成的列表,每条评论又是单词索引组成的列表(表示一系列单词)。train_labels 和test_labels 都是0 和1 组成的列表,其中0代表负面(negative),1 代表正面(positive)。由于限定为前10 000 个最常见的单词,单词索引都不会超过10 000。

(3)把索引转为单词

word_index = imdb.get_word_index()
reverse_word_index = dict(
	[(value, key) for (key, value) in word_index.items()])
decoded_review = ' '.join(
	[reverse_word_index.get(i - 3, '?') for i in train_data[0]])

0、1、2是为“padding”(填充)、“start of sequence”(序列开始)、“unknown”(未知词)分别保留的索引。

3.准备输入的数据

我们需要将列表转换为张量。转换方法有以下两种。

  • 填充列表,使其具有相同的长度,再将列表转换成形状为 (samples, word_indices)的整数张量,然后网络第一层使用能处理这种整数张量的层(即Embedding 层)。
  • 对列表进行 one-hot 编码,将其转换为 0 和 1 组成的向量。举个例子,序列[3, 5]将会被转换为10 000 维向量,只有索引为3 和5 的元素是1,其余元素都是0。然后网络第一层可以用Dense 层,它能够处理浮点数向量数据。

下面我们采用后一种方法将数据向量化。

import numpy as np

def vectorize_sequences(sequences, dimension=10000):
    # Create an all-zero matrix of shape (len(sequences), dimension)
    results = np.zeros((len(sequences), dimension))#10000 x 10000
    for i, sequence in enumerate(sequences):
        results[i, sequence] = 1.  # set specific indices of results[i] to 1s
    return results

# Our vectorized training data
x_train = vectorize_sequences(train_data)
# Our vectorized test data
x_test = vectorize_
  • 2
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是使用Keras框架生成深度学习IMDB数据集上的文本分类实验代码: ```python from keras.datasets import imdb from keras.preprocessing import sequence from keras.models import Sequential from keras.layers import Dense, Embedding, LSTM # 加载数据集 max_features = 20000 maxlen = 80 batch_size = 32 print('Loading data...') (x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features) print(len(x_train), 'train sequences') print(len(x_test), 'test sequences') # 填充序列,使其长度一致 print('Pad sequences (samples x time)') x_train = sequence.pad_sequences(x_train, maxlen=maxlen) x_test = sequence.pad_sequences(x_test, maxlen=maxlen) print('x_train shape:', x_train.shape) print('x_test shape:', x_test.shape) # 构建模型 model = Sequential() model.add(Embedding(max_features, 128, input_length=maxlen)) model.add(LSTM(128, dropout=0.2, recurrent_dropout=0.2)) model.add(Dense(1, activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) # 训练模型 print('Train...') model.fit(x_train, y_train, batch_size=batch_size, epochs=15, validation_data=(x_test, y_test)) # 评估模型 score, acc = model.evaluate(x_test, y_test, batch_size=batch_size) print('Test score:', score) print('Test accuracy:', acc) ``` 这段代码中,我们使用了IMDB数据集中的前20000个最常见的单词作为特征,并设置了每条评论的最大长度为80。然后我们使用Embedding层将每个单词映射为128维的向量,再使用LSTM层进行序列分类,最后使用Sigmoid激活函数输出二分类结果。我们使用binary_crossentropy作为损失函数,Adam作为优化器,并在训练过程中记录了模型的准确率。最终,我们在测试集上评估了模型的性能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值