一个 tflearn 情感分析小例子

学习资料: https://www.youtube.com/watch?v=si8zZHkufRY&list=PL2-dafEMk2A7YdKv4XfKpfbTH5z6rEEj3&index=5


情感分析, 就是要识别出用户对一件事一个物或一个人的看法、态度,比如一个电影的评论,一个商品的评价,一次体验的感想等等。根据对带有情感色彩的主观性文本进行分析,识别出用户的态度,是喜欢,讨厌,还是中立。

关于情感分析,之前有一篇 cs224d 的小项目: 里面用 skipgram 学习出 word vector,然后用 softmax regression 进行识别: 怎样做情感分析

今天的方法是用 20 行代码实现这个过程: 用 tflearn.data_utils 的 pad_sequences 将 strings 转化成向量,用 tflearn.embedding 得到 word vector,再传递给 LSTM 得到 feature vector,经过全联接层后,再用一个分类器,loss 为 categorical_crossentropy


  • 数据用 tflearn 里面预先处理好的 imdb,IMDB 是一个电影评论的数据库。
from __future__ import division, print_function, absolute_import
import tflearn
from tflearn.data_utils import to_categorical, pad_sequences
from tflearn.datasets import imdb
  • path 是存储的路经,pkl 是 byte stream 格式,用这个格式在后面比较容易转换成 list 或者 tuple。 n_words 为从数据库中取出来的词个数。
# IMDB Dataset loading
train, test, _ = imdb.load_data(path='imdb.pkl', n_words=10000,
                                valid_portion=0.1)
trainX, trainY = train
testX, testY = test
  • pad sequence 将 inputs 转化成矩阵形式,并用 0 补齐到最大维度,这样可以保持维度的一致性。
# Data preprocessing
# Sequence padding
trainX = pad_sequences(trainX, maxlen=100, value=0.)
testX = pad_sequences(testX, maxlen=100, value=0.)
  • to_categorical 将 labels 转化为 01 向量
# Converting labels to binary vectors
trainY = to_categorical(trainY, nb_classes=2)
testY = to_categorical(testY, nb_classes=2)
  • 输入层,batch size 设为 None,length=100=前面的max sequence length
# Network building
net = tflearn.input_data([None, 100])
  • 上一层的输出作为下一层的输入,input_dim 是前面设定的从数据库中取了多少个单词,output_dim 就是得到 embedding 向量的维度
net = tflearn.embedding(net, input_dim=10000, output_dim=128)
  • 模型用的 LSTM,可以保持记忆,dropout 为了减小过拟合
net = tflearn.lstm(net, 128, dropout=0.8)
  • fully_connected 是指前一层的每一个神经元都和后一层的所有神经元相连, 将前面 LSTM 学习到的 feature vectors 传到全网络中,可以很轻松地学习它们的非线性组合关系 激活函数用 softmax 来得到概率值
net = tflearn.fully_connected(net, 2, activation='softmax')
  • 最后应用一个分类器,定义优化器,学习率,损失函数
net = tflearn.regression(net, optimizer='adam', learning_rate=0.001,
                         loss='categorical_crossentropy')

# Training
# 模型初始化
model = tflearn.DNN(net, tensorboard_verbose=0)

# show_metric=True 可以看到过程中的准确率
model.fit(trainX, trainY, validation_set=(testX, testY), show_metric=True,
          batch_size=32)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏解飞的专栏

实习生的监控算法: 利用机器学习方法进行曲线分类

本篇文章主要采用机器学习的方法来实现曲线分类,基本思路是对训练集先用聚类方法(如Kmeans和Birch等进行聚类,对数据打上标签),然后在对测试集采用分类方法...

1.3K1
来自专栏GAN&CV

全面解读Group Normbalization-(吴育昕-何凯明)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25737169/article/d...

1193
来自专栏人工智能

机器学习实战之朴素贝叶斯

机器学习实战之朴素贝叶斯 1.1、简介 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。已知某条件概率,如何得到两个事件交换后...

1977
来自专栏深度学习入门与实践

【原】文本挖掘——特征选择

特征选择有很多方法,看了很多资料后,我总结了以下几种,以后有新内容会随时修改 1.DF——基于文档频率的特征提取方法 概念:DF(document freque...

2315
来自专栏ATYUN订阅号

一文简述如何为自己的项目选择合适的神经网络

你的预测建模问题适合选择何种神经网络?对于初学者而言,深度学习领域很难知道要使用什么类型的网络。因为有许多类型的网络可供选择,每天都会有新的方法被发布和讨论。

602
来自专栏小樱的经验随笔

神经网络算法

我们在设计机器学习系统时,特别希望能够建立类似人脑的一种机制。神经网络就是其中一种。但是考虑到实际情况,一般的神经网络(BP网络)不需要设计的那么复杂,不需要包...

3564
来自专栏人工智能

具有张量流的混合密度网络

不久之前,Google开源了TensorFlow,这是一个旨在简化图表计算的库。 主要的应用程序是针对深度学习,将神经网络以图形形式显示。 我花了几天的时间阅读...

6476
来自专栏瓜大三哥

视频压缩编码技术(H.264) 之帧间预测

H.264 帧间预测是利用已编码视频帧/场和基于块的运动补偿的预测模式。与以往标准帧间预测的区别在于块尺寸范围更广(从16×16 到4×4)、亚像素运动矢量的使...

8764
来自专栏大数据挖掘DT机器学习

基于贝叶斯算法的文本分类算法

1、基本定义: 分类是把一个事物分到某个类别中。一个事物具有很多属性,把它的众多属性看作一个向量,即x=(x1,x2,x3,…,xn),用x这个向量来代表这个...

3184
来自专栏机器之心

学界 | 新型池化层sort_pool2d实现更快更好的收敛:表现优于最大池化层(附代码实现)

选自Hackernoon 作者:Sahil Singla 机器之心编译 参与:黄小天、路雪 近日,Sahil Singla 在 Medium 上发表了一篇题为《...

37112

扫码关注云+社区

领取腾讯云代金券