Keras下的文本情感分析简介。与MLP,RNN,LSTM模型下的文本情感测试
- # coding: utf-8
- # In[1]:
- import urllib.request
- import os
- import tarfile
- # In[2]:
- url="http://ai.stanford.edu/~amaas/data/sentiment/aclImdb_v1.tar.gz"
- filepath="example/data/aclImdb_v1.tar.gz"
- if not os.path.isfile(filepath):
- result=urllib.request.urlretrieve(url,filepath)
- print('downloaded:',result)
- if not os.path.exists("example/data/aclImdb_v1/aclImdb"):
- tfile = tarfile.open("data/aclImdb_v1.tar.gz", 'r:gz')
- result=tfile.extractall('data/')
- # In[3]:
- from keras.datasets import imdb
- from keras.preprocessing import sequence
- from keras.preprocessing.text import Tokenizer
- # In[4]:
- import re
- def rm_tags(text):
- re_tag = re.compile(r'<[^>]+>')
- return re_tag.sub('', text)
- # In[5]:
- import os
- def read_files(filetype):
- path = "example/data/aclImdb_v1/aclImdb/"
- file_list=[]
- positive_path=path + filetype+"/pos/"
- for f in os.listdir(positive_path):
- file_list+=[positive_path+f]
- negative_path=path + filetype+"/neg/"
- for f in os.listdir(negative_path):
- file_list+=[negative_path+f]
- print('read',filetype, 'files:',len(file_list))
- all_labels = ([1] * 12500 + [0] * 12500)
- all_texts = []
- for fi in file_list:
- with open(fi,encoding='utf8') as file_input:
- all_texts += [rm_tags(" ".join(file_input.readlines()))]
- return all_labels,all_texts
- # In[6]:
- y_train,train_text=read_files("train")
- # In[7]:
- y_test,test_text=read_files("test")
- # In[8]:
- train_text[0]
- # In[9]:
- y_train[0]
- # In[10]:
- train_text[12500]
- # In[11]:
- y_train[12500]
- # In[12]:
- token = Tokenizer(num_words=2000)
- token.fit_on_texts(train_text)
- # In[13]:
- print(token.document_count)
- print(token.word_index)
- # In[14]:
- x_train_seq = token.texts_to_sequences(train_text)
- x_test_seq = token.texts_to_sequences(test_text)
- # In[15]:
- print(x_train_seq[0])
- # In[16]:
- x_train = sequence.pad_sequences(x_train_seq, maxlen=100)
- x_test = sequence.pad_sequences(x_test_seq, maxlen=100)
- # In[17]:
- x_train[0]
- # In[18]:
- from keras.models import Sequential
- from keras.layers.core import Dense, Dropout, Activation,Flatten
- from keras.layers.embeddings import Embedding
- model = Sequential()
- model.add(Embedding(output_dim=32,
- input_dim=2000,
- input_length=100))
- model.add(Dropout(0.2))
- model.add(Flatten())
- model.add(Dense(units=256,
- activation='relu' ))
- model.add(Dropout(0.2))
- model.add(Dense(units=1,
- activation='sigmoid' ))
- model.summary()
- # In[19]:
- model.compile(loss='binary_crossentropy',
- optimizer='adam',
- metrics=['accuracy'])
- train_history =model.fit(x_train, y_train,batch_size=100,
- epochs=10,verbose=2,
- validation_split=0.2)
- # In[20]:
- get_ipython().magic('pylab inline')
- import matplotlib.pyplot as plt
- def show_train_history(train_history,train,validation):
- plt.plot(train_history.history[train])
- plt.plot(train_history.history[validation])
- plt.title('Train History')
- plt.ylabel(train)
- plt.xlabel('Epoch')
- plt.legend(['train', 'validation'], loc='upper left')
- plt.show()
- # In[21]:
- show_train_history(train_history,'acc','val_acc')
- show_train_history(train_history,'loss','val_loss')
- # In[22]:
- scores = model.evaluate(x_test, y_test, verbose=1)
- scores[1]
- # In[23]:
- probility=model.predict(x_test)
- # In[24]:
- probility[:10]
- # In[25]:
- probility[12500:12510]
- # In[26]:
- predict=model.predict_classes(x_test)
- # In[27]:
- predict_classes=predict.reshape(-1)
- # In[28]:
- SentimentDict={1:'正面的',0:'负面的'}
- def display_test_Sentiment(i):
- print(test_text[i])
- print('标签label:',SentimentDict[y_test[i]],
- '预测结果:',SentimentDict[predict_classes[i]])
- # In[29]:
- display_test_Sentiment(2)
- # In[30]:
- display_test_Sentiment(12505)
- # In[31]:
- from keras.models import Sequential
- from keras.layers.core import Dense, Dropout, Activation
- from keras.layers.embeddings import Embedding
- from keras.layers.recurrent import SimpleRNN
- model = Sequential()
- model.add(Embedding(output_dim=32,
- input_dim=2000,
- input_length=100))
- model.add(Dropout(0.35))
- model.add(SimpleRNN(units=16))
- model.add(Dense(units=256,activation='relu' ))
- model.add(Dropout(0.35))
- model.add(Dense(units=1,activation='sigmoid' ))
- model.summary()
- # In[32]:
- model.compile(loss='binary_crossentropy',
- optimizer='adam',
- metrics=['accuracy'])
- train_history =model.fit(x_train, y_train,batch_size=100,
- epochs=10,verbose=2,
- validation_split=0.2)
- # In[33]:
- scores = model.evaluate(x_test, y_test, verbose=1)
- scores[1]
- # In[34]:
- from keras.models import Sequential
- from keras.layers.core import Dense, Dropout, Activation,Flatten
- from keras.layers.embeddings import Embedding
- from keras.layers.recurrent import LSTM
- model = Sequential()
- model.add(Embedding(output_dim=32,
- input_dim=2000,
- input_length=100))
- model.add(Dropout(0.2))
- model.add(LSTM(32))
- model.add(Dense(units=256,
- activation='relu' ))
- model.add(Dropout(0.2))
- model.add(Dense(units=1,
- activation='sigmoid' ))
- model.summary()
- # In[35]:
- model.compile(loss='binary_crossentropy',
- #optimizer='rmsprop',
- optimizer='adam',
- metrics=['accuracy'])
- train_history =model.fit(x_train, y_train,batch_size=100,
- epochs=10,verbose=2,
- validation_split=0.2)
- # In[36]:
- show_train_history(train_history,'acc','val_acc')
- show_train_history(train_history,'loss','val_loss')
- scores = model.evaluate(x_test, y_test, verbose=1)
- scores[1]
- # In[ ]:
文本来源于IMDb网络电影数据集。下载,放到合适的路径下,然后,开始。
过滤掉HTML标签。因为数据集中有相关标签。:
之后读取所有数据和目标标签,然后建立字典:
将文本转化为数字串:
格式化数字串长度为100
建立MLP模型,其中嵌入层将每个长度为100的数字串转为100个32维的向量,将文字映射成多维的几何空间向量,让每一个文字有上下的关联性。
编译,训练,绘图,评估后的准确率:
建立RNN模型,有关RNN模型的介绍:https://www.cnblogs.com/bai2018/p/10466418.html
测试评估:
建立LSTM模型,相关介绍:https://www.cnblogs.com/bai2018/p/10466497.html
准确率:
Keras下的文本情感分析简介。与MLP,RNN,LSTM模型下的文本情感测试的更多相关文章
- Python爬虫和情感分析简介
摘要 这篇短文的目的是分享我这几天里从头开始学习Python爬虫技术的经验,并展示对爬取的文本进行情感分析(文本分类)的一些挖掘结果. 不同于其他专注爬虫技术的介绍,这里首先阐述爬取网络数据动机,接着 ...
- 文本分类实战(七)—— Adversarial LSTM模型
1 大纲概述 文本分类这个系列将会有十篇左右,包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMo,BERT等)的文本分类.总共有以下系列: word2vec预训练词向量 te ...
- NLP入门(十)使用LSTM进行文本情感分析
情感分析简介 文本情感分析(Sentiment Analysis)是自然语言处理(NLP)方法中常见的应用,也是一个有趣的基本任务,尤其是以提炼文本情绪内容为目的的分类.它是对带有情感色彩的主观性 ...
- 朴素贝叶斯算法下的情感分析——C#编程实现
这篇文章做了什么 朴素贝叶斯算法是机器学习中非常重要的分类算法,用途十分广泛,如垃圾邮件处理等.而情感分析(Sentiment Analysis)是自然语言处理(Natural Language Pr ...
- C#编程实现朴素贝叶斯算法下的情感分析
C#编程实现 这篇文章做了什么 朴素贝叶斯算法是机器学习中非常重要的分类算法,用途十分广泛,如垃圾邮件处理等.而情感分析(Sentiment Analysis)是自然语言处理(Natural Lang ...
- R语言︱词典型情感分析文本操作技巧汇总(打标签、词典与数据匹配等)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:情感分析中对文本处理的数据的小技巧要 ...
- 【转】用python实现简单的文本情感分析
import jieba import numpy as np # 打开词典文件,返回列表 def open_dict(Dict='hahah',path = r'/Users/zhangzhengh ...
- Spark 的情感分析
Spark 的情感分析 本文描述了基于 Spark 如何构建一个文本情感分析系统.文章首先介绍文本情感分析基本概念和应用场景,其次描述采用 Spark 作为分析的基础技术平台的原因和本文使用到技术组件 ...
- 如何使用百度EasyDL进行情感分析
使用百度EasyDL定制化训练和服务平台有一段时间了,越来越能体会到EasyDL的易用性.在此之前我也接触过不少的深度学习平台,如类脑平台.Google的GCP深度学习平台.AWS深度学习平台,但我觉 ...
随机推荐
- 关于 jenkins-cli.jar
1.页面 jenkins-cli.jar 位置 首页-系统管理-Jenkins CLI 2.点击下载jenkins-cli.jar 或者 wget http://IP:8080/jenkins/jnl ...
- unity3d休闲篮球类游戏《Flick Basketball 》上线项目完整源码
下载地址: https://item.taobao.com/item.htm?id=576135964241
- elasticsearch查询语句总结
query 和 filter 的区别请看:https://www.cnblogs.com/bainianminguo/articles/10396956.html Filter DSL term 过 ...
- 使用HttpClient 传送form 表单的请求
在项目中用到了,需要使用HttpClient 进行模拟表单传送form 表单的需求,在平常的项目中,大概都是传送json串的样式需求,但是如何才能给对应的服务器传送一个form 表单呢? 这就需要了N ...
- html 导出pdf
地址: https://developers.itextpdf.com/examples/xml-worker/html-lists 主方法: public string Generate(strin ...
- Composer 安装以及使用方法
Composer 是 PHP 的一个依赖管理工具.它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们. Linux 下安装 curl -sS https://getcomposer.org/ ...
- 在Struts2框架中使用Servlet的API
1. 在Action类中也可以获取到Servlet一些常用的API * 需求:提供JSP的表单页面的数据,在Action中使用Servlet的API接收到,然后保存到三个域对象中,最后再显示到JSP的 ...
- vue 自定义组件directives
自定义指令:以v开头,如:v-mybind. 代码示例: <input v-mybind /> directives:{ mybind:{ bind:function (el) { el. ...
- js去除字符串空格(空白符)
使用js去除字符串内所带有空格,有以下三种方法: ( 1 ) replace正则匹配方法 去除字符串内所有的空格:str = str.replace(/\s*/g,""); 去除字 ...
- 7.Mysql存储引擎
7.表类型(存储引擎)的选择7.1 Mysql存储引擎概述 mysql支持插件式存储引擎,即存储引擎以插件形式存在于mysql库中. mysql支持的存储引擎包括:MyISAM.InnoDB.BDB. ...