文章目录

  • 1IMDB数据集的获取与处理
    • 1.1下载数据集
    • 1.2IMDB数据文件读取
    • 1.3数据处理
    • 1.4构建模型
    • 1.5训练模型
    • 1.6可视化
    • 1.7评估准确率
    • 1.8执行预测

具体代码见github

1IMDB数据集的获取与处理

在tf2.0里面装在了imdb数据集直接下载就可以

若是第一次下载,会在本地建立.kears文件夹下datasets并存储文件

1.1下载数据集

# 导入需要用的库
import os
import tarfile
# 软件包的解压
import urllib.request
#网络下载的请求
import tensorflow as tf
import numpy as npimport re
# 正则化
import stringfrom random import randint
# 数据地址
url='http://ai.stanford.edu/~amaas/data/sentiment/aclImdb_v1.tar.gz'
filepath='data/aclImdb_v1.tar.gz'
# 如果当前目录下不存在data文件夹,则建立
if not os.path.exists('data'):os.makedirs('data')
# 下载数据,80兆左右
if not os.path.isfile(filepath):print('downloading...')result=urllib.request.urlretrieve(url,filepath)print('downloaded:',result)
else:print(filepath,'is existed')

# 解压数据
if not os.path.exists('data/aclImdb'):tfile=tarfile.open(filepath,'r:gz')print('extracting...')result=tfile.extractall('data/')print('extraction completed')
else:print('data/aclImdb is existed!')

1.2IMDB数据文件读取

有一些不太应该出现的词

<br>

文件由html转换所以有些问题

最好做些预处理去掉这些词
采用正则方式去除

# 将文本中不需要的字符清除,如html中的标签<br />
def remove_tags(text):re_tag=re.compile(r'<[^>]+>')return re_tag.sub('',text)

把文本文件转换为数据列表

def read_files(filetype):path='data/aclImdb/'file_list=[]# 读取正面评价的文件路径,存到file_list列表里positive_path=path+filetype+'/pos/'for f in os.listdir(positive_path):file_list+=[positive_path+f]pos_files_num=len(file_list)# 读取负面评价的文件的路径,存到file_list列表里negative_path=path+filetype+'/neg/'for  f in os.listdir(negative_path):file_list+=[negative_path+f]neg_files_num=len(file_list)-pos_files_numprint('read',filetype,'files:',len(file_list))print(pos_files_num,'pos files in',filetype,'files')print(neg_files_num,'neg files in',filetype,'files')#得到所有标签。标签用one——hot编码,正面{1,0}负面[0,1]all_labels=([[1,0]]*pos_files_num+[[0,1]]*neg_files_num)# 得到所有文本all_texts=[]for fi in file_list:with open(fi,encoding='utf8') as file_input:#文本中有<br />这类html标签,将文本传入remove_tags函数#函数里用正则表达式将标签去除all_texts+=[remove_tags(''.join(file_input.readlines()))]return all_labels,all_texts
train_labels,train_texts=read_files("train")
test_labels,test_labels=read_files('test')


1.3数据处理

建立词汇词典

token=tf.keras.preprocessing.text.Tokenizer(num_words=4000)
# 分词器,把出现率最高的4000个词纳入分词器
token.fit_on_texts(train_texts)
# 查看token读取了多少文档
token.document_count

print(token.word_index)# 出现频率的排名

token.word_docs
# 将单词映射为他们在训练器出现的文档或文本的数量


查看每个词汇频次排名

文字转为数字列表

train_sequences=token.texts_to_sequences(train_texts)
test_sequences=token.texts_to_sequences(test_texts)


文字转为数字列表

让转换后数字列表长度相同

x_train=tf.keras.preprocessing.sequence.pad_sequences(train_sequences,padding='post',truncating='post',maxlen=400)
x_test=tf.keras.preprocessing.sequence.pad_sequences(test_sequences,padding='post',truncating='post',maxlen=400)
y_train=np.array(train_labels)
#要把标签改为ndarray格式
y_test=np.array(test_labels)
x_train.shape

要求输入大小都统一,维度相同,要去规范化评论长度,pad_sequece有截长补短的作用,不满足400填充0,填充截断有2种选择,截前面还是后400个,post是截后面的。post填后面的。

pad_sequece用法

1.4构建模型

model=tf.keras.models.Sequential()
model.add(tf.keras.layers.Embedding(output_dim=32,input_dim=4000,input_length=400))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(units=256,activation='relu'))
model.add(tf.keras.layers.Dropout(0.3))
model.add(tf.keras.layers.Dense(units=2,activation='softmax'))
model.summary()

1.5训练模型

model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])
history=model.fit(x_train,y_train,validation_split=0.2,epochs=10,batch_size=128,verbose=1)

1.6可视化

import matplotlib.pyplot as plt
acc=history.history['accuracy']
val_acc=history.history['val_accuracy']
loss=history.history['loss']
val_loss=history.history['val_loss']
epochs=range(1,len(acc)+1)
plt.plot(epochs,loss,'r',label='Training loss')
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()
plt.clf()# clear figure
acc_values=history.history['accuracy']
val_acc_values=history.history['val_accuracy']
plt.plot(epochs,acc,'r',label='Training acc')
plt.plot(epochs,val_acc,'b',label='Validation acc')
plt.title('Training and validation accutacy')
plt.xlabel('Epochs')
plt.ylabel('Accuracy')
plt.legend()
plt.show()

1.7评估准确率

test_loss,test_acc=model.evaluate(x_test,y_test,verbose=1)
print('Test Accuracy',test_acc)

1.8执行预测

predictions=model.predict(x_test)
predictions[0]

sentiment_dict={0:'pos',1:'neg'}
def display_test_sentiment(i):print(test_texts[i])print('label values:',sentiment_dict[np.argmax(y_test[i])],'predict value:',sentiment_dict[np.argmax(predictions[i])
display_test_sentiment(0)




将过程封装函数就不用了上面的了结果如下


深度学习应用13电影评论情感分析相关推荐

  1. MOOC网深度学习应用开发3——Deep Dream、电影评论情感分析

    Deep Dream:随机噪点图向目标图转换的过程 经典卷积神经网络 电影评论情感分析 自然语言处理基础知识1 自然语言处理基础知识2--分词 自然语言处理基础知识3--词的数字化表示方法和词嵌入 电 ...

  2. 【自然语言处理(NLP)】基于FNN网络的电影评论情感分析

    [自然语言处理(NLP)]基于FNN网络的电影评论情感分析 作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践资源建 ...

  3. 【Python自然语言处理】使用逻辑回归(logistic)对电影评论情感分析实战(超详细 附源码)

    需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 一.舆情分析 舆情分析很多情况下涉及到用户的情感分析,或者亦称为观点挖掘,是指用自然语言处理技术.文本挖掘以及计算机语言学等方法来正确识别和提取文 ...

  4. Pytorch+Text-CNN+Word2vec+电影评论情感分析实战

    文章目录 0.前言 1.电影评论数据集 2.数据读取 3.数据预处理 4.准备训练和测试集 5.加载词向量模型Word2vec 6.定义网络 7.训练网络 8.测试网络和可视化 9.总结 0.前言 很 ...

  5. 从爬取豆瓣影评到基于朴素贝叶斯的电影评论情感分析(下)

    基于朴素贝叶斯的电影评论情感分析 用到的包:pandas.jieba(分词工具) file=open(r"review.txt",'r',encoding='utf-8') rev ...

  6. python电影评论情感分析_20行Tensorflow代码实现电影评论情感分析

    原标题:20行Tensorflow代码实现电影评论情感分析 背景 情感分析有很多的应用场景,比如做一个电商网站,卖家需要时刻关心用户对于商品的评论是否是正面的.再比如做一个电影的宣传和策划,电影在键盘 ...

  7. Tensorflow 笔记 Ⅺ——NLP 实现电影评论情感分析

    文章目录 特别说明 数据集 IMDB 简介 IMDB 数据集 下载地址 目录结构 示例文本 自然语言处理基础 分词 词的数字化表示方法与词嵌入 循环神经网络 RNN与LSTM 数据的时序与含义 RNN ...

  8. 电影评论情感分析-直播案例

    情感分析是机器学习中的一个有挑战性的任务.数据集包含50,000个IMDB电影评论,训练集的25,000个评论标注了二元的情感倾向,IMDB评级<5的情绪评分为0,评级> = 7的情绪评分 ...

  9. 新手体验 kaggle上的电影评论情感分析

    数据集查看 ## 任务描述: "可爱的老式和愚蠢的人之间有一条细线,而基督山伯爵--从未在两边安定下来." Rotten Tomatoes电影评论数据集是用于情感分析的电影评论语料 ...

最新文章

  1. 总结403到504的常用问题
  2. 中国学者用人工光感受器助失明小鼠复明
  3. Spring的jdbcTemplate 与原始jdbc 整合c3p0的DBUtils 及Hibernate 对比 Spring配置文件生成约束的菜单方法...
  4. 方丹丹(1981-),女,就职于宁波市智慧城市规划标准发展研究院。
  5. struts2校验框架之Visitor校验器
  6. 养成10个优秀的习惯
  7. python类型提示模块包_Python checktypes包_程序模块 - PyPI - Python中文网
  8. 打印的几种方法(lodop、window.print)
  9. wincc系统冗余服务器系统专用授权,wincc冗余问题
  10. 寒江独钓学习笔记 -- 第四章 Hook分发函数 过滤键盘输入
  11. 远程桌面 vs 虚拟桌面 vs 虚拟机区别
  12. 线性代数行列式计算方法之三角法
  13. 管理学定律--墨菲定律
  14. 编译型语言和解释型语言的区别总结
  15. 【i.MX6ULL】驱动开发3——GPIO寄存器配置原理
  16. Rabbit 5大模式
  17. C语言入门:根据三角形边长确定三角形为何种三角形
  18. 安装Ubuntu遇到的问题及解决方案
  19. 医疗器械管理系统-医疗器械进销存管理系统-盘谷医疗
  20. WindowsServer2019下Php(php-7.4.3-Win32-vc15-x64) 调用C# .dll文件

热门文章

  1. C#编写的Word操作类,有换页,添加表格,文本功能
  2. 智能路由器VS传统路由器:未来由谁主宰?
  3. Linux+conda+R+Rstudio下载安装环境全方面配置
  4. 20200213ubuntu20.04下的笔记本USB摄像头的相关资料
  5. 寒从足下起 冬季防病先护足
  6. 任意多边形的面积(C语言)
  7. latex 表格紧跟指定的文字后面
  8. C++: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
  9. Java Http连接中使用代理(Proxy)及其验证(Authentication)
  10. Duang一夏,安码企业流程化管控软件优惠季来了! 活动介绍