深度学习应用13电影评论情感分析
文章目录
- 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电影评论情感分析相关推荐
- MOOC网深度学习应用开发3——Deep Dream、电影评论情感分析
Deep Dream:随机噪点图向目标图转换的过程 经典卷积神经网络 电影评论情感分析 自然语言处理基础知识1 自然语言处理基础知识2--分词 自然语言处理基础知识3--词的数字化表示方法和词嵌入 电 ...
- 【自然语言处理(NLP)】基于FNN网络的电影评论情感分析
[自然语言处理(NLP)]基于FNN网络的电影评论情感分析 作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践资源建 ...
- 【Python自然语言处理】使用逻辑回归(logistic)对电影评论情感分析实战(超详细 附源码)
需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 一.舆情分析 舆情分析很多情况下涉及到用户的情感分析,或者亦称为观点挖掘,是指用自然语言处理技术.文本挖掘以及计算机语言学等方法来正确识别和提取文 ...
- Pytorch+Text-CNN+Word2vec+电影评论情感分析实战
文章目录 0.前言 1.电影评论数据集 2.数据读取 3.数据预处理 4.准备训练和测试集 5.加载词向量模型Word2vec 6.定义网络 7.训练网络 8.测试网络和可视化 9.总结 0.前言 很 ...
- 从爬取豆瓣影评到基于朴素贝叶斯的电影评论情感分析(下)
基于朴素贝叶斯的电影评论情感分析 用到的包:pandas.jieba(分词工具) file=open(r"review.txt",'r',encoding='utf-8') rev ...
- python电影评论情感分析_20行Tensorflow代码实现电影评论情感分析
原标题:20行Tensorflow代码实现电影评论情感分析 背景 情感分析有很多的应用场景,比如做一个电商网站,卖家需要时刻关心用户对于商品的评论是否是正面的.再比如做一个电影的宣传和策划,电影在键盘 ...
- Tensorflow 笔记 Ⅺ——NLP 实现电影评论情感分析
文章目录 特别说明 数据集 IMDB 简介 IMDB 数据集 下载地址 目录结构 示例文本 自然语言处理基础 分词 词的数字化表示方法与词嵌入 循环神经网络 RNN与LSTM 数据的时序与含义 RNN ...
- 电影评论情感分析-直播案例
情感分析是机器学习中的一个有挑战性的任务.数据集包含50,000个IMDB电影评论,训练集的25,000个评论标注了二元的情感倾向,IMDB评级<5的情绪评分为0,评级> = 7的情绪评分 ...
- 新手体验 kaggle上的电影评论情感分析
数据集查看 ## 任务描述: "可爱的老式和愚蠢的人之间有一条细线,而基督山伯爵--从未在两边安定下来." Rotten Tomatoes电影评论数据集是用于情感分析的电影评论语料 ...
最新文章
- 总结403到504的常用问题
- 中国学者用人工光感受器助失明小鼠复明
- Spring的jdbcTemplate 与原始jdbc 整合c3p0的DBUtils 及Hibernate 对比 Spring配置文件生成约束的菜单方法...
- 方丹丹(1981-),女,就职于宁波市智慧城市规划标准发展研究院。
- struts2校验框架之Visitor校验器
- 养成10个优秀的习惯
- python类型提示模块包_Python checktypes包_程序模块 - PyPI - Python中文网
- 打印的几种方法(lodop、window.print)
- wincc系统冗余服务器系统专用授权,wincc冗余问题
- 寒江独钓学习笔记 -- 第四章 Hook分发函数 过滤键盘输入
- 远程桌面 vs 虚拟桌面 vs 虚拟机区别
- 线性代数行列式计算方法之三角法
- 管理学定律--墨菲定律
- 编译型语言和解释型语言的区别总结
- 【i.MX6ULL】驱动开发3——GPIO寄存器配置原理
- Rabbit 5大模式
- C语言入门:根据三角形边长确定三角形为何种三角形
- 安装Ubuntu遇到的问题及解决方案
- 医疗器械管理系统-医疗器械进销存管理系统-盘谷医疗
- WindowsServer2019下Php(php-7.4.3-Win32-vc15-x64) 调用C# .dll文件
热门文章
- C#编写的Word操作类,有换页,添加表格,文本功能
- 智能路由器VS传统路由器:未来由谁主宰?
- Linux+conda+R+Rstudio下载安装环境全方面配置
- 20200213ubuntu20.04下的笔记本USB摄像头的相关资料
- 寒从足下起 冬季防病先护足
- 任意多边形的面积(C语言)
- latex 表格紧跟指定的文字后面
- C++: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
- Java Http连接中使用代理(Proxy)及其验证(Authentication)
- Duang一夏,安码企业流程化管控软件优惠季来了! 活动介绍