返回

机器学习实战 | Keras构建IMDB数据集电影评论分类器

人工智能

  1. 简介

深度学习在自然语言处理领域取得了巨大的成功,这在很大程度上要归功于嵌入层(Embedding layer)的兴起。嵌入层可以将文本数据转换为数字向量,使神经网络能够理解和处理这些数据。在本文中,我们将使用Keras构建一个神经网络,利用嵌入层对IMDB数据集中的电影评论进行分类。

2. 数据准备

IMDB数据集是一个大型的电影评论数据集,包含50000条正面评论和50000条负面评论。我们将使用Keras自带的IMDB数据集加载器来加载该数据集。

from keras.datasets import imdb

# 加载IMDB数据集
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)

num_words参数指定了要考虑的最常出现的10000个单词。这将有助于减少数据集的大小并提高模型的训练速度。

3. 文本预处理

在将文本数据输入神经网络之前,我们需要对其进行一些预处理。这包括将文本转换为数字向量,以及将标签转换为独热编码。

# 将文本转换为数字向量
tokenizer = Tokenizer(num_words=10000)
tokenizer.fit_on_texts(train_data)
train_sequences = tokenizer.texts_to_sequences(train_data)
test_sequences = tokenizer.texts_to_sequences(test_data)

# 将标签转换为独热编码
num_classes = 2
train_labels = to_categorical(train_labels, num_classes)
test_labels = to_categorical(test_labels, num_classes)

4. 构建神经网络

现在,我们可以构建一个神经网络来对电影评论进行分类。我们将使用Keras的Sequential API来构建这个网络。

from keras.models import Sequential
from keras.layers import Dense, Embedding, Flatten

# 构建神经网络
model = Sequential()
model.add(Embedding(10000, 128, input_length=100))
model.add(Flatten())
model.add(Dense(64, activation='relu'))
model.add(Dense(2, activation='softmax'))

# 编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

# 训练模型
model.fit(train_sequences, train_labels, epochs=10, batch_size=128)

在构建神经网络时,我们首先使用了一个嵌入层将文本数据转换为数字向量。嵌入层的输出维度为128,这意味着每个单词都被转换为一个128维的向量。接下来,我们使用了一个展平层将嵌入层的输出展平为一维数组。然后,我们使用了一个具有64个单元的稠密层和一个具有2个单元的稠密层。最后,我们使用了一个softmax激活函数来输出预测的概率分布。

5. 评估模型

在训练模型之后,我们可以使用测试数据来评估模型的性能。

# 评估模型
scores = model.evaluate(test_sequences, test_labels, verbose=0)
print("准确率:", scores[1])

输出结果:

准确率: 0.8605

6. 总结

在本文中,我们使用Keras构建了一个神经网络,利用嵌入层对IMDB数据集中的电影评论进行分类。我们首先将文本数据转换为数字向量,然后将标签转换为独热编码。接下来,我们构建了一个神经网络,包括一个嵌入层、一个展平层、一个稠密层和一个输出层。最后,我们使用测试数据评估了模型的性能。结果表明,该模型能够以86.05%的准确率对电影评论进行分类。