keras 实现IMDB电影评论情绪分类

数据集来自IMDB的2.5万部电影评论,以情绪(正面/负面)标记。评论已被预处理,并且每个评论被编码为一系列词索引(整数)。为了方便起见,词汇通过数据集中的整体频率进行索引,例如整数“3”对数据中第三个最频繁的词进行编码。这允许快速过滤操作,例如:“只考虑前10000个最常用的词,但是排除前20个最常见的词”。作为惯例,“0”不代表特定的单词,而是用于编码任何未知的单词。

IMDB数据集下载超时,详见本篇博客提供下载和使用:

https://blog.csdn.net/sinat_41144773/article/details/89843688

代码实现(评价指标+画损失图)

from __future__ import print_function
import numpy as np
np.random.seed(1337)
from keras.preprocessing import sequence
from keras.models import Sequential
from keras.layers import Dense,Embedding
from keras.layers import LSTM
from keras.datasets import imdb
from keras.callbacks import Callback
from keras.optimizers import Adam
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix, f1_score, precision_score, recall_score,accuracy_score
# 写一个LossHistory类,保存loss和acc
class LossHistory(Callback):def on_train_begin(self, logs={}):self.losses = {'batch':[], 'epoch':[]}self.accuracy = {'batch':[], 'epoch':[]}self.val_loss = {'batch':[], 'epoch':[]}self.val_acc = {'batch':[], 'epoch':[]}def on_batch_end(self, batch, logs={}):self.losses['batch'].append(logs.get('loss'))self.accuracy['batch'].append(logs.get('acc'))self.val_loss['batch'].append(logs.get('val_loss'))self.val_acc['batch'].append(logs.get('val_acc'))def on_epoch_end(self, batch, logs={}):self.losses['epoch'].append(logs.get('loss'))self.accuracy['epoch'].append(logs.get('acc'))self.val_loss['epoch'].append(logs.get('val_loss'))self.val_acc['epoch'].append(logs.get('val_acc'))def loss_plot(self, loss_type):iters = range(len(self.losses[loss_type]))plt.figure()# accplt.plot(iters, self.accuracy[loss_type], 'r', label='train acc')# lossplt.plot(iters, self.losses[loss_type], 'g', label='train loss')if loss_type == 'epoch':# val_accplt.plot(iters, self.val_acc[loss_type], 'b', label='val acc')# val_lossplt.plot(iters, self.val_loss[loss_type], 'k', label='val loss')plt.grid(True)plt.xlabel(loss_type)plt.ylabel('acc-loss')plt.legend(loc="upper right")plt.savefig("imdb_keras.png")plt.show()# 训练参数
learning_rate = 0.001
epochs = 3
batch_size = 128(x_train,y_train),(x_test,y_test) = imdb.load_data(num_words= 5000)
print(len(x_train),'train sequences')
print(len(x_test),'test sequences')
x_train = sequence .pad_sequences(x_train ,maxlen= 80 )
x_test = sequence .pad_sequences(x_test ,maxlen= 80 )
print('x_train shape:',x_train .shape )
print('x_test shape:',x_test .shape )print('Build model...')
model = Sequential()
model.add(Embedding (8000 ,64))#嵌入层将正整数下标转换为固定大小的向量。只能作为模型的第一层
# model.add(LSTM(units=16,return_sequences=True))
model.add(LSTM(units=16))
model.add(Dense(1,activation= 'sigmoid'))model.summary()
model.compile(loss= 'binary_crossentropy',optimizer=Adam(lr=learning_rate),metrics= ['accuracy'])
history = LossHistory()
model.fit(x_train ,y_train ,batch_size= batch_size ,epochs= epochs,validation_data= (x_test ,y_test ),callbacks=[history])y_predict = model.predict(x_test, batch_size=512, verbose=1)
y_predict = (y_predict > 0.5).astype(int)
y_true = np.reshape(y_test, [-1])
y_pred = np.reshape(y_predict, [-1])# 评价指标
accuracy = accuracy_score(y_true, y_pred)
precision = precision_score(y_true, y_pred)
recall = recall_score(y_true, y_pred, average='binary')
f1score = f1_score(y_true, y_pred, average='binary')print('accuracy:',accuracy)
print('precision:',precision)
print('recall:',recall)
print('f1score:',f1score)#绘制训练的acc-loss曲线
history.loss_plot('epoch')

评价指标

accuracy: 0.83404
precision: 0.865790626368813
recall: 0.79064
f1score: 0.8265105582270541

精度+损失函数图

结束。

keras LSTM实现imdb电影评论文本二分类相关推荐

  1. 使用逻辑回归和词向量进行(英文)电影评论情感(二)分类

    问题描述:对电影评论进行情感分类,类型一共有两种:正面评价 (pos) 和负面评价 (neg). 训练数据集:英文电影评论及对应的分类标签,保存在工作路径下.样本举例如下: 使用的算法:sklearn ...

  2. 基于Keras的IMDB数据集电影评论情感二分类

    原创不易,如果有转载需要的话,请在首行附上本文地址,谢谢. 第一步加载IMDB数据集,如若加载不成功,这里提供一种解决方法:点开IMDB数据下载链接(喜欢的话给个小星星和follow一下),fork到 ...

  3. 自然语言处理-应用场景-文本分类:基于LSTM模型的情感分析【IMDB电影评论数据集】--(重点技术:自定义分词、文本序列化、输入数据批次化、词向量迁移使用)

    文本情感分类 1. 案例介绍 现在我们有一个经典的数据集IMDB数据集,地址:http://ai.stanford.edu/~amaas/data/sentiment/,这是一份包含了5万条流行电影的 ...

  4. 深度学习入门系列21:项目:用LSTM+CNN对电影评论分类

    大家好,我技术人Howzit,这是深度学习入门系列第二十一篇,欢迎大家一起交流! 深度学习入门系列1:多层感知器概述 深度学习入门系列2:用TensorFlow构建你的第一个神经网络 深度学习入门系列 ...

  5. 自然语言处理--Keras 实现LSTM循环神经网络分类 IMDB 电影评论数据集

    LSTM 对于循环网络的每一层都引入了状态(state)的概念,状态作为网络的记忆(memory).但什么是记忆呢?记忆将由一个向量来表示,这个向量与元胞中神经元的元素数量相同.记忆单元将是一个由 n ...

  6. AI:神经网络IMDB电影评论二分类模型训练和评估

    AI:Keras神经网络IMDB电影评论二分类模型训练和评估,python import keras from keras.layers import Dense from keras import ...

  7. 使用google的bert结合哈工大预训练模型进行中文/英文文本二分类,基于pytorch和transformer

    使用bert的哈工大预训练模型进行中文/英文文本二分类,基于pytorch和transformer 前提 简要介绍 开始 导入必要的包和环境 准备并读取数据 导入模型的tokenizer 对数据进行t ...

  8. Keras之DNN::基于Keras(sigmoid+binary_crossentropy+predict_classes)利用DNN实现二分类——DIY二分类数据集预测新数据点

    Keras之DNN::基于Keras(sigmoid+binary_crossentropy+predict_classes)利用DNN实现二分类--DIY二分类数据集&预测新数据点 目录 输 ...

  9. 电商评论文本情感分类(中文文本分类)(第二部分-Bert)

    电商评论文本情感分类(中文文本分类) 第二部分-Bert部分 第一部分:textcnn部分 本项目包含: 1.中文文本处理 2.中文词云图绘制(在第一部分) 3.中文词嵌入 4.基于textcnn的中 ...

  10. 【实战】使用Bert微调完成文本二分类

    使用Bert微调完成文本二分类 1.训练前准备 指定训练和预测的gpu 读取数据.分析数据 构造训练数据 2.模型定义.训练和测试代码 定义模型 测试代码 训练代码 3.微调 4.预测.批量预测 实验 ...

最新文章

  1. 数据结构笔记--二叉查找树概述以及java代码实现
  2. mysql 一键安装 linux_linux下mysql8 shell脚本一键安装
  3. 用JS的正则表达式如何判断输入框内为中文或者是英文
  4. android 能调用gcc_如何在命令行下使用Android NDK交叉编译工具
  5. tensorflow sigmoid 如何计算训练数据的正确率_“来自蒙娜丽莎的凝视”— 结合 TensorFlow.js 和深度学习实现...
  6. 【产品介绍】“弹性裸金属服务器”到底有那些特性?
  7. 基于python的电商评论分析_Python实现爬取并分析电商评论
  8. 捷联惯导系统模型及仿真
  9. 网页如何转pdf并实现下载
  10. 推荐一款可以在浏览器中运行的人脸识别库
  11. 一个浏览器播放5个或者6个flv的视频就不能播放了
  12. Linux安全审计之audit安装与使用
  13. Mysql-SQL查询(水手预订船案例)
  14. React中文文档 7. 条件渲染
  15. ls-dyna基础教程
  16. java 分割字符串(多种方法)
  17. Sagittarius's Trial I - 9 HDU - 1754 I Hate It
  18. 当编程语言都变成女孩子,你会不会喜欢她们!
  19. 【针对产品说测试】之微信红包
  20. 代码学习网站FreeCodeCamp

热门文章

  1. 私有云计算机械硬盘还是固态硬盘,机械硬盘居然也限制写入量,吓得我又买一块固态硬盘...
  2. 两轮电动车高端VS中低端,雅迪、爱玛谁更靠近市场?
  3. php 减号,PHP编码转换减号(连接符)无法转换问题
  4. 什么是BIM,什么是CIM?
  5. cad画直线长度与实际不符_cad测量直线长度(CAD测量长度与实际画线长度不符)...
  6. 2020 Linux系统应用基础教程 期末复习【整理】 第五章 磁盘文件与目录管理
  7. excel换行快捷键_13个excel快捷键,学会他们,让你的1秒钟,抵得上同事的5分钟...
  8. BG2RHE - 树莓派安装官网新版ArduinoIDE
  9. 华为笔试题-圣诞的祝福
  10. Office XP 试用感受