前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >文本挖掘(四)python电影评论情感分类模型 -- 基于keras的全连接神经网络

文本挖掘(四)python电影评论情感分类模型 -- 基于keras的全连接神经网络

作者头像
forxtz
发布于 2021-04-01 01:54:37
发布于 2021-04-01 01:54:37
1.2K00
代码可运行
举报
文章被收录于专栏:源懒由码源懒由码
运行总次数:0
代码可运行

  简介:以keras书中案例,讲述构建电影评论情感分类模型。

  1.定义问题,收集数据

  使用消极、积极两类电影评论集,构建对情感分类模型,并后续用于预测。由于只有两类,因此是一个二分类模型。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from keras.datasets import imdb

# 为什么限定为使用常见的前10000个词汇呢
# 防止词向量过大
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)

  通过内置字典,还原回评论。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# word_index is a dictionary mapping words to an integer index
word_index = imdb.get_word_index()
# We reverse it, mapping integer indices to words
reverse_word_index = dict([(value, key) for (key, value) in word_index.items()])
# We decode the review; note that our indices were offset by 3
# because 0, 1 and 2 are reserved indices for "padding", "start of sequence", and "unknown".
decoded_review = ' '.join([reverse_word_index.get(i-3, '?') for i in train_data[0]])

  原始数据集为整数序列,需要将列表转换为张量。将整数序列进行One-hot编码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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))
    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_sequences(test_data)
x_test.shape  #(25000, 10000)

  转换标签数据类型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Our vectorized labels
y_train = np.asarray(train_labels).astype('float32')
y_test = np.asarray(test_labels).astype('float32')

  2.构建网络

  使用全连接神经网络,中间层一般使用relu作为激活函数,二元分类末端使用sigmoid激活函数,最终输出为一个概率值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from keras import models
from keras import layers

model = models.Sequential()
model.add(layers.Dense(16, activation='relu', input_shape=(10000,)))
model.add(layers.Dense(16, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))

  3.定义优化器和损失函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['binary_accuracy'])

  4.构建训练集和验证集

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
x_val = x_train[:10000]
partial_x_train = x_train[10000:]

y_val = y_train[:10000]
partial_y_train = y_train[10000:]

  5.开始训练,设置提前中断。在第8个回合停止了训练。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
path_checkpoint = "model_checkpoint.h5"
es_callback = keras.callbacks.EarlyStopping(monitor="val_loss", min_delta=0, patience=5)

# 使用ModelCheckpoint回调EarlyStopping函数定期保存检查点,并使用该回调函数在验证损失不再改善时中断训练。
modelckpt_callback = keras.callbacks.ModelCheckpoint(
    monitor="val_loss",
    filepath=path_checkpoint,
    verbose=1,
    save_weights_only=True,
    save_best_only=True,
)

history = model.fit(partial_x_train,
                    partial_y_train,
                    epochs=20,
                    batch_size=512,
                    validation_data=(x_val, y_val),
                   callbacks=[es_callback, modelckpt_callback])

  6.可视化输出模型训练效果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
history_dict = history.history
history_dict.keys()

import matplotlib.pyplot as plt

acc = history.history['binary_accuracy']
val_acc = history.history['val_binary_accuracy']
loss = history.history['loss']
val_loss = history.history['val_loss']

epochs = range(1, len(acc) + 1)

# "bo" is for "blue dot"
plt.plot(epochs, loss, 'bo', label='Training loss')
# b is for "solid blue line"
plt.plot(epochs, val_loss, 'b', label='Validation loss')
plt.title('Training and validation loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()

plt.show()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
plt.clf()   # clear figure
acc_values = history_dict['binary_accuracy']
val_acc_values = history_dict['val_binary_accuracy']

plt.plot(epochs, acc, 'bo', label='Training acc')
plt.plot(epochs, val_acc, 'b', label='Validation acc')
plt.title('Training and validation accuracy')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()

plt.show()

  7.对测试集进行测试,最终效果精确度约为86%。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 评分 [0.38946253061294556, 0.8613200187683105]
results = model.evaluate(x_test, y_test)

小结:

  使用keras构建了简单的全连接神经网络情感分论模型。

下一步,构建更复杂的网络使模型更复杂已找到恰到拟合的界限。如,增加网络节点,层数(开头增加embedding层,中间增加隐藏层)。如用其他网络模型如LSTM适合处理序列问题。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-03-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于Keras的imdb数据集电影评论情感二分类
二分类可能是机器学习最常解决的问题。我们将基于评论的内容将电影评论分类:正类和父类。
用户1631856
2018/08/01
4.2K1
基于Keras的imdb数据集电影评论情感二分类
从零开始学Keras(二)
 【导读】Keras是一个由Python编写的开源人工神经网络库,可以作为Tensorflow、和Theano的高阶应用程序接口,进行深度学习模型的设计、调试、评估、应用和可视化。本系列将教你如何从零开始学Keras,从搭建神经网络到项目实战,手把手教你精通Keras。相关内容参考《Python深度学习》这本书。                   
墨明棋妙27
2022/08/24
5650
从零开始学Keras(二)
第一个深度学习实战案例:电影评论分类
这是一个典型的二分类问题。使用的是IMDB数据集,训练集是25000条,测试也是25000条
皮大大
2022/04/02
5090
第一个深度学习实战案例:电影评论分类
深度学习-IMBD二分类问题
IMBD自互联网电影数据库(IMDB)的50 000条评论数据。 分为训练集25000和测试25000 测试集合训练集的好评和差评按照1:1分配
火星娃统计
2020/09/15
6690
深度学习-IMBD二分类问题
深度学习项目实践,使用神经网络分析电影评论的正能量与负能量
在前面章节中,我们花费大量精力详细解析了神经网络的内在原理。神经网络由如下4个部分组成: 1,神经层,每层由多个神经元组合而成。 2,输入训练数据,已经数据对应的结果标签 3,设计损失函数,也就是用数
望月从良
2018/07/19
6520
从零开始学Keras(三)
【导读】Keras是一个由Python编写的开源人工神经网络库,可以作为Tensorflow、和Theano的高阶应用程序接口,进行深度学习模型的设计、调试、评估、应用和可视化。本系列将教你如何从零开始学Keras,从搭建神经网络到项目实战,手把手教你精通Keras。相关内容参考《Python深度学习》这本书。
墨明棋妙27
2022/08/24
3530
从零开始学Keras(三)
关于深度学习系列笔记七(优化参数)
本文的主要目的是尝试不同的隐藏层、隐藏单元、激活函数、损失函数,看其训练精度和验证精度。
python与大数据分析
2022/03/11
2870
关于深度学习系列笔记七(优化参数)
关于深度学习系列笔记六(激活函数、损失函数、优化器)
关于激活函数、损失函数、优化器也是深度学习重要的构建,不同的激活函数、损失函数、优化器适用于不同的应用场景,目前只对损失函数的场景有一定了解,其他待探索。
python与大数据分析
2022/03/11
4740
关于深度学习系列笔记六(激活函数、损失函数、优化器)
Deep learning with Python 学习笔记(1)
Python 的 Keras 库来学习手写数字分类,将手写数字的灰度图像(28 像素 ×28 像素)划分到 10 个类别 中(0~9) 神经网络的核心组件是层(layer),它是一种数据处理模块,它从输入数据中提取表示,紧接着的一个例子中,将含有两个Dense 层,它们是密集连接(也叫全连接)的神经层,最后是一个10路的softmax层,它将返回一个由 10 个概率值(总和为 1)组成的数组。每个概率值表示当前数字图像属于 10 个数字类别中某一个的概率 损失函数(loss function):网络如何衡量在训练数据上的性能,即网络如何朝着正确的方向前进 优化器(optimizer):基于训练数据和损失函数来更新网络的机制
范中豪
2019/09/10
1.5K0
Deep learning with Python 学习笔记(1)
[Keras深度学习浅尝]实战四· Embedding实现 IMDB数据集影评文本分类
网络模型的介绍: 1,输入网络的形状为(-1,256) 2,Embedding后为(-1,256,16)网络参数为(10000,16) 3,GlobalAveragePooling1D后为(-1,16)详细介绍见此 4,Dense1后(-1,16)网络参数为w:1616 + b:116 共计272 4,Dense2后(-1,1)网络参数为w:161 + b:11 共计17个参数
小宋是呢
2019/06/27
1.2K0
[Keras深度学习浅尝]实战四· Embedding实现 IMDB数据集影评文本分类
深度学习之二分类问题
IMDB 数据集包含来自互联网电影数据库(IMDB)的 50 000 条严重两极分化的评论。
李小白是一只喵
2020/04/23
1.5K0
深度学习之二分类问题
关于深度学习系列笔记十五(循环神经网络)
‰ 提取单词或字符的 n-gram,并将每个 n-gram 转换为一个向量。n-gram 是多个连续单词或字符的集合(n-gram 之间可重叠)。
python与大数据分析
2022/03/11
6270
关于深度学习系列笔记十五(循环神经网络)
深度学习实战-新闻文本多分类
广泛使用的文本分类数据集:46个不同的主题,即输出有46个类别。某些样本的主题更多,但是训练集中的每个主题至少有10个样本
皮大大
2023/08/23
3190
Python深度学习精华笔记2:基于keras建模解决深度学习二分类问题
本文是第二篇:基于keras建模解决Python深度学习的二分类问题,使用keras内置的IMDB数据集
皮大大
2023/08/29
4650
深度学习-多分类问题
数据来自路透社数据集,为kersa库自带的数据,包含不同的主题,每个主题最少有10个样本
火星娃统计
2020/09/15
7440
深度学习-多分类问题
深度学习多分类案例:新闻文本分类
之前介绍过一个单分类的问题。当每个数据点可以划分到多个类别、多个标签下,这就是属于多分类问题了。
皮大大
2022/04/02
1.6K0
深度学习多分类案例:新闻文本分类
从零开始学keras(五)
【导读】Keras是一个由Python编写的开源人工神经网络库,可以作为Tensorflow、和Theano的高阶应用程序接口,进行深度学习模型的设计、调试、评估、应用和可视化。本系列将教你如何从零开始学Keras,从搭建神经网络到项目实战,手把手教你精通Keras。相关内容参考《Python深度学习》这本书。
墨明棋妙27
2022/08/24
3100
从零开始学keras(五)
关于深度学习系列笔记九(多分类问题)
1、如果要对 N 个类别的数据点进行分类,网络的最后一层应该是大小为 N 的 Dense 层。
python与大数据分析
2022/03/11
7710
关于深度学习系列笔记九(多分类问题)
Keras文本数据预处理范例——IMDB影评情感分类
本文将以IMDB电影评论数据集为范例,介绍Keras对文本数据预处理并喂入神经网络模型的方法。
lyhue1991
2020/07/20
1.3K0
Deep learning with Python 学习笔记(6)
本节介绍循环神经网络及其优化 循环神经网络(RNN,recurrent neural network)处理序列的方式是,遍历所有序列元素,并保存一个状态(state),其中包含与已查看内容相关的信息。在处理两个不同的独立序列(比如两条不同的 IMDB 评论)之间,RNN 状态会被重置,因此,你仍可以将一个序列看作单个数据点,即网络的单个输入。真正改变的是,数据点不再是在单个步骤中进行处理,相反,网络内部会对序列元素进行遍历,RNN 的特征在于其时间步函数
范中豪
2019/09/10
7110
Deep learning with Python 学习笔记(6)
推荐阅读
相关推荐
基于Keras的imdb数据集电影评论情感二分类
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文