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

最近在网上看到一篇很不错的文本情感分类的教程,内容详细,而且有可执行的代码和数据,非常适合学习。教程传送门: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

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

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

 

转载于:https://my.oschina.net/qinhui99/blog/902847

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值