1. # coding: utf-8
  2.  
  3. # In[1]:
  4.  
  5. import urllib.request
  6. import os
  7. import tarfile
  8.  
  9. # In[2]:
  10.  
  11. url="http://ai.stanford.edu/~amaas/data/sentiment/aclImdb_v1.tar.gz"
  12. filepath="example/data/aclImdb_v1.tar.gz"
  13. if not os.path.isfile(filepath):
  14. result=urllib.request.urlretrieve(url,filepath)
  15. print('downloaded:',result)
  16. if not os.path.exists("example/data/aclImdb_v1/aclImdb"):
  17. tfile = tarfile.open("data/aclImdb_v1.tar.gz", 'r:gz')
  18. result=tfile.extractall('data/')
  19.  
  20. # In[3]:
  21.  
  22. from keras.datasets import imdb
  23. from keras.preprocessing import sequence
  24. from keras.preprocessing.text import Tokenizer
  25.  
  26. # In[4]:
  27.  
  28. import re
  29. def rm_tags(text):
  30. re_tag = re.compile(r'<[^>]+>')
  31. return re_tag.sub('', text)
  32.  
  33. # In[5]:
  34.  
  35. import os
  36. def read_files(filetype):
  37. path = "example/data/aclImdb_v1/aclImdb/"
  38. file_list=[]
  39.  
  40. positive_path=path + filetype+"/pos/"
  41. for f in os.listdir(positive_path):
  42. file_list+=[positive_path+f]
  43.  
  44. negative_path=path + filetype+"/neg/"
  45. for f in os.listdir(negative_path):
  46. file_list+=[negative_path+f]
  47.  
  48. print('read',filetype, 'files:',len(file_list))
  49. all_labels = ([1] * 12500 + [0] * 12500)
  50.  
  51. all_texts = []
  52. for fi in file_list:
  53. with open(fi,encoding='utf8') as file_input:
  54. all_texts += [rm_tags(" ".join(file_input.readlines()))]
  55.  
  56. return all_labels,all_texts
  57.  
  58. # In[6]:
  59.  
  60. y_train,train_text=read_files("train")
  61.  
  62. # In[7]:
  63.  
  64. y_test,test_text=read_files("test")
  65.  
  66. # In[8]:
  67.  
  68. train_text[0]
  69.  
  70. # In[9]:
  71.  
  72. y_train[0]
  73.  
  74. # In[10]:
  75.  
  76. train_text[12500]
  77.  
  78. # In[11]:
  79.  
  80. y_train[12500]
  81.  
  82. # In[12]:
  83.  
  84. token = Tokenizer(num_words=2000)
  85. token.fit_on_texts(train_text)
  86.  
  87. # In[13]:
  88.  
  89. print(token.document_count)
  90. print(token.word_index)
  91.  
  92. # In[14]:
  93.  
  94. x_train_seq = token.texts_to_sequences(train_text)
  95. x_test_seq = token.texts_to_sequences(test_text)
  96.  
  97. # In[15]:
  98.  
  99. print(x_train_seq[0])
  100.  
  101. # In[16]:
  102.  
  103. x_train = sequence.pad_sequences(x_train_seq, maxlen=100)
  104. x_test = sequence.pad_sequences(x_test_seq, maxlen=100)
  105.  
  106. # In[17]:
  107.  
  108. x_train[0]
  109.  
  110. # In[18]:
  111.  
  112. from keras.models import Sequential
  113. from keras.layers.core import Dense, Dropout, Activation,Flatten
  114. from keras.layers.embeddings import Embedding
  115. model = Sequential()
  116. model.add(Embedding(output_dim=32,
  117. input_dim=2000,
  118. input_length=100))
  119. model.add(Dropout(0.2))
  120. model.add(Flatten())
  121. model.add(Dense(units=256,
  122. activation='relu' ))
  123. model.add(Dropout(0.2))
  124. model.add(Dense(units=1,
  125. activation='sigmoid' ))
  126. model.summary()
  127.  
  128. # In[19]:
  129.  
  130. model.compile(loss='binary_crossentropy',
  131. optimizer='adam',
  132. metrics=['accuracy'])
  133. train_history =model.fit(x_train, y_train,batch_size=100,
  134. epochs=10,verbose=2,
  135. validation_split=0.2)
  136.  
  137. # In[20]:
  138.  
  139. get_ipython().magic('pylab inline')
  140. import matplotlib.pyplot as plt
  141. def show_train_history(train_history,train,validation):
  142. plt.plot(train_history.history[train])
  143. plt.plot(train_history.history[validation])
  144. plt.title('Train History')
  145. plt.ylabel(train)
  146. plt.xlabel('Epoch')
  147. plt.legend(['train', 'validation'], loc='upper left')
  148. plt.show()
  149.  
  150. # In[21]:
  151.  
  152. show_train_history(train_history,'acc','val_acc')
  153. show_train_history(train_history,'loss','val_loss')
  154.  
  155. # In[22]:
  156.  
  157. scores = model.evaluate(x_test, y_test, verbose=1)
  158. scores[1]
  159.  
  160. # In[23]:
  161.  
  162. probility=model.predict(x_test)
  163.  
  164. # In[24]:
  165.  
  166. probility[:10]
  167.  
  168. # In[25]:
  169.  
  170. probility[12500:12510]
  171.  
  172. # In[26]:
  173.  
  174. predict=model.predict_classes(x_test)
  175.  
  176. # In[27]:
  177.  
  178. predict_classes=predict.reshape(-1)
  179.  
  180. # In[28]:
  181.  
  182. SentimentDict={1:'正面的',0:'负面的'}
  183. def display_test_Sentiment(i):
  184. print(test_text[i])
  185. print('标签label:',SentimentDict[y_test[i]],
  186. '预测结果:',SentimentDict[predict_classes[i]])
  187.  
  188. # In[29]:
  189.  
  190. display_test_Sentiment(2)
  191.  
  192. # In[30]:
  193.  
  194. display_test_Sentiment(12505)
  195.  
  196. # In[31]:
  197.  
  198. from keras.models import Sequential
  199. from keras.layers.core import Dense, Dropout, Activation
  200. from keras.layers.embeddings import Embedding
  201. from keras.layers.recurrent import SimpleRNN
  202. model = Sequential()
  203. model.add(Embedding(output_dim=32,
  204. input_dim=2000,
  205. input_length=100))
  206. model.add(Dropout(0.35))
  207. model.add(SimpleRNN(units=16))
  208. model.add(Dense(units=256,activation='relu' ))
  209. model.add(Dropout(0.35))
  210. model.add(Dense(units=1,activation='sigmoid' ))
  211. model.summary()
  212.  
  213. # In[32]:
  214.  
  215. model.compile(loss='binary_crossentropy',
  216. optimizer='adam',
  217. metrics=['accuracy'])
  218. train_history =model.fit(x_train, y_train,batch_size=100,
  219. epochs=10,verbose=2,
  220. validation_split=0.2)
  221.  
  222. # In[33]:
  223.  
  224. scores = model.evaluate(x_test, y_test, verbose=1)
  225. scores[1]
  226.  
  227. # In[34]:
  228.  
  229. from keras.models import Sequential
  230. from keras.layers.core import Dense, Dropout, Activation,Flatten
  231. from keras.layers.embeddings import Embedding
  232. from keras.layers.recurrent import LSTM
  233. model = Sequential()
  234. model.add(Embedding(output_dim=32,
  235. input_dim=2000,
  236. input_length=100))
  237. model.add(Dropout(0.2))
  238. model.add(LSTM(32))
  239. model.add(Dense(units=256,
  240. activation='relu' ))
  241. model.add(Dropout(0.2))
  242. model.add(Dense(units=1,
  243. activation='sigmoid' ))
  244. model.summary()
  245.  
  246. # In[35]:
  247.  
  248. model.compile(loss='binary_crossentropy',
  249. #optimizer='rmsprop',
  250. optimizer='adam',
  251. metrics=['accuracy'])
  252. train_history =model.fit(x_train, y_train,batch_size=100,
  253. epochs=10,verbose=2,
  254. validation_split=0.2)
  255.  
  256. # In[36]:
  257.  
  258. show_train_history(train_history,'acc','val_acc')
  259. show_train_history(train_history,'loss','val_loss')
  260. scores = model.evaluate(x_test, y_test, verbose=1)
  261. scores[1]
  262.  
  263. # 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模型下的文本情感测试的更多相关文章

  1. Python爬虫和情感分析简介

    摘要 这篇短文的目的是分享我这几天里从头开始学习Python爬虫技术的经验,并展示对爬取的文本进行情感分析(文本分类)的一些挖掘结果. 不同于其他专注爬虫技术的介绍,这里首先阐述爬取网络数据动机,接着 ...

  2. 文本分类实战(七)—— Adversarial LSTM模型

    1 大纲概述 文本分类这个系列将会有十篇左右,包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMo,BERT等)的文本分类.总共有以下系列: word2vec预训练词向量 te ...

  3. NLP入门(十)使用LSTM进行文本情感分析

    情感分析简介   文本情感分析(Sentiment Analysis)是自然语言处理(NLP)方法中常见的应用,也是一个有趣的基本任务,尤其是以提炼文本情绪内容为目的的分类.它是对带有情感色彩的主观性 ...

  4. 朴素贝叶斯算法下的情感分析——C#编程实现

    这篇文章做了什么 朴素贝叶斯算法是机器学习中非常重要的分类算法,用途十分广泛,如垃圾邮件处理等.而情感分析(Sentiment Analysis)是自然语言处理(Natural Language Pr ...

  5. C#编程实现朴素贝叶斯算法下的情感分析

    C#编程实现 这篇文章做了什么 朴素贝叶斯算法是机器学习中非常重要的分类算法,用途十分广泛,如垃圾邮件处理等.而情感分析(Sentiment Analysis)是自然语言处理(Natural Lang ...

  6. R语言︱词典型情感分析文本操作技巧汇总(打标签、词典与数据匹配等)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:情感分析中对文本处理的数据的小技巧要 ...

  7. 【转】用python实现简单的文本情感分析

    import jieba import numpy as np # 打开词典文件,返回列表 def open_dict(Dict='hahah',path = r'/Users/zhangzhengh ...

  8. Spark 的情感分析

    Spark 的情感分析 本文描述了基于 Spark 如何构建一个文本情感分析系统.文章首先介绍文本情感分析基本概念和应用场景,其次描述采用 Spark 作为分析的基础技术平台的原因和本文使用到技术组件 ...

  9. 如何使用百度EasyDL进行情感分析

    使用百度EasyDL定制化训练和服务平台有一段时间了,越来越能体会到EasyDL的易用性.在此之前我也接触过不少的深度学习平台,如类脑平台.Google的GCP深度学习平台.AWS深度学习平台,但我觉 ...

随机推荐

  1. 关于 jenkins-cli.jar

    1.页面 jenkins-cli.jar 位置 首页-系统管理-Jenkins CLI 2.点击下载jenkins-cli.jar 或者 wget http://IP:8080/jenkins/jnl ...

  2. unity3d休闲篮球类游戏《Flick Basketball 》上线项目完整源码

    下载地址: https://item.taobao.com/item.htm?id=576135964241

  3. elasticsearch查询语句总结

    query 和  filter 的区别请看:https://www.cnblogs.com/bainianminguo/articles/10396956.html Filter DSL term 过 ...

  4. 使用HttpClient 传送form 表单的请求

    在项目中用到了,需要使用HttpClient 进行模拟表单传送form 表单的需求,在平常的项目中,大概都是传送json串的样式需求,但是如何才能给对应的服务器传送一个form 表单呢? 这就需要了N ...

  5. html 导出pdf

    地址: https://developers.itextpdf.com/examples/xml-worker/html-lists 主方法: public string Generate(strin ...

  6. Composer 安装以及使用方法

    Composer 是 PHP 的一个依赖管理工具.它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们. Linux 下安装 curl -sS https://getcomposer.org/ ...

  7. 在Struts2框架中使用Servlet的API

    1. 在Action类中也可以获取到Servlet一些常用的API * 需求:提供JSP的表单页面的数据,在Action中使用Servlet的API接收到,然后保存到三个域对象中,最后再显示到JSP的 ...

  8. vue 自定义组件directives

    自定义指令:以v开头,如:v-mybind. 代码示例: <input v-mybind /> directives:{ mybind:{ bind:function (el) { el. ...

  9. js去除字符串空格(空白符)

    使用js去除字符串内所带有空格,有以下三种方法: ( 1 ) replace正则匹配方法 去除字符串内所有的空格:str = str.replace(/\s*/g,""); 去除字 ...

  10. 7.Mysql存储引擎

    7.表类型(存储引擎)的选择7.1 Mysql存储引擎概述 mysql支持插件式存储引擎,即存储引擎以插件形式存在于mysql库中. mysql支持的存储引擎包括:MyISAM.InnoDB.BDB. ...