文档章节

Keras实现的文本情感分类例子

q
 qinhui99
发布于 2017/05/17 14:51
字数 821
阅读 691
收藏 0

最近在网上看到一篇很不错的文本情感分类的教程,内容详细,而且有可执行的代码和数据,非常适合学习。教程传送门:http://kexue.fm/archives/3863/

原作者从网上搜集了一些客户购物的评价信息(大概2万多条数据),然后分成两类标签:正面的情感(用1表示)和负面的情感(用0表示)。此外,原作者作者还用Keras编写了3种情感分类模型,并做了相互对比分析。

我跑了一下相关的代码,结果遇到了性能问题。程序跑了17分钟,还在做2万多条数据的预处理,性能很糟糕。修改程序,做了一些跟踪,终于发现了造成性能差的代码。

def doc2num(s, maxlen): 
    s = [i for i in s if i in abc.index]
    s = s[:maxlen]
    return list(abc[s])

这段函数把一条用户评价信息转成对应的词编号,每次执行大概0.2秒左右,2万多条数据处理完需要4000多秒,也就是66分钟以上。性能糟糕的原因是这句:

if i in abc.index

其中,i是一串文字,abc.index是一大串文字。因为abc.index不是字典dict类型,所以,使用in去比较会非常的慢。加速性能的办法,就是为abc.index另外创建一个字典dict类型对象words_dict。然后使用这个字典dict类型对象words_dict进行对比。对应python2,代码改成

[i for i in s if words_dict.has_key(i)]

对应python3,代码改成

[i for i in s if i in words_dict]

这样处理过后,原来要4000多秒的数据预处理过程,只要60秒左右就完成了。

运行后面的代码,都很顺利。

对于word embedding模型,我尝试修改了模型中的Dense属性,给这里增加了L2正则化。

model.add(Dense(1,
        kernel_regularizer=regularizers.l2(0.01)))

训练的结果很不错。训练准确率:99.44%,测试准确率90.33%。比原作者的结果要略高些。

最后,我编了一些数据去测试训练生成的模型。下面是客户评价信息和预测的情感分类(1代表正情感,0代表负面情感)

---------------------------------------------------------------------------------------------------------------

东东不重,一个人就拉回家了,找人来安装,费用也不高,热水器很精致,哈哈,物有所值,很满意,当晚就使用上了。 好评,全5分。
情感分类:1

买完降价了,店家服务还不错,但安装售后太黑了安装费竟然漫天要价,一开口要378,我不肯买单,打了400的服务电话投诉后降价到260,真心黑,太恶心了。
情感分类:0

服务很差。再不买XX的东西了。卖家服务还不错。
情感分类:1

服务很差。再不买XX的东西了。
情感分类:0

客服骗人 不是恒温又说是恒温 噪音大 燃气的味道浓 10号开始使用 17号马上没有热水出 差差差差
情感分类:0

-------------------------------------------------------------------------------------------------------------

看看分类结果, 还是不太准确, 还有很多改进的空间。以后有时间继续改进。

 

© 著作权归作者所有

q
粉丝 66
博文 73
码字总数 34091
作品 0
深圳
程序员
私信 提问
一文搞懂word embeddding和keras中的embedding

写这篇文章的初衷: 最近带一个本科生做毕设,毕设内容是用lstm做情感分析。文章思路其实就是一个文本三分类的问题(正、中、负)。 首先: 该文章用到了word embedding,可以使用gensim里面...

Babyzpj
2018/05/03
0
0
使用Keras进行深度学习:(三)使用text-CNN处理自然语言(上)

欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习、深度学习的知识! 上一篇文章中一直围绕着CNN处理图像数据进行讲解,而CNN除了处理图像数据之外,...

磐石001
2018/04/06
0
0
为什么Keras之中NLP使用的都是浅层神经网络?

之前在看Keras Example的时候, 发现对于NLP相关的任务使用的NN都非常浅。 没有很严谨的去数, 但是基本上都是一两层网路就结束了。 具体可以参考Keras Example 之中IMDB相关的代码。 当然,...

小数点
2017/11/29
0
0
教你使用Keras一步步构建深度神经网络:以情感分析任务为例

用Keras构建神经网络 Keras是目前最受欢迎的深度学习库之一,对人工智能的商品化做出了巨大贡献。它使用起来非常简单,允许你用几行代码构建强大的神经网络。在这篇文章中,你将了解如何通过...

zhuweideng
2018/04/18
0
0
Keras情感分析(Sentiment Analysis)实战---自然语言处理技术(2)

情感分析(Sentiment Analysis)是自然语言处理里面比较高阶的任务之一。仔细思考一下,这个任务的究极目标其实是想让计算机理解人类的情感世界。我们自己都不一定能完全控制和了解自己的情感...

王鹏你妹
01/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
今天
4
0
Django的ChoiceField和MultipleChoiceField错误提示,选择一个有效的选项

在表单验证时提示错误:选择一个有效的选项 例如有这样一个表单: class ProductForm(Form): category = fields.MultipleChoiceField( widget=widgets.SelectMultiple(), ...

编程老陆
今天
5
0
Vue核心概念及特性 (一)

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。 > 特点: 易用,灵活,高效,渐进式框架。 > 可以随意组合需要用到的模块 vue + components + vue-router + vuex + v...

前端优选
今天
11
0
Kylin 精确去重在用户行为分析中的妙用

作者:史少锋,Apache Kylin committer & PMC,2019/10/11 在上次文章《如何在 1 秒内做到大数据精准去重》中,我们介绍了 Apache Kylin 为什么要支持大数据集上的精确去重,以及基于 Bitmap...

ApacheKylin
今天
11
0
学习记录(二) es6基本语法(rest参数,模板化,axios模块,拦截器)

日常学习记录 模块化:把一个大文件分成多个小文件,按照一定规范进行拼接 es5写法: 导出:module.exports = 数据 导入:require("路径") /路径未添加后缀名时 //默认添加.js //把路径作为文件名...

Pole丶逐
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部