从零开始用 TensorFlow 分析情绪,硅谷网红带你飞

Siraj Raval 作为深度学习领域的自媒体人在欧美可以说是无人不知、无人不晓。

凭借在 Youtube 上的指导视频,Siraj Raval 在全世界吸粉无数,堪称是机器学习界的网红。说他是全球范围内影响力最大的 ML 自媒体人,怕也无异议。

因此,雷锋网 AI 研习社联系到了 Siraj 本人,并获得授权将他最精华的 Youtube 视频进行字幕汉化,免费推送给大家。我们将不定期更新,敬请关注!

雷锋字幕组为大家最新译制了Siraj深度学习系列,从机器学习和神经网络架构类型到数据可视化、小样本学习等从基础到应用的技巧,争取带领希望掌握神经网络的神奇魔力和想成为深度学习工程师的大家伙早日入坑!哦不,走向巅峰!!

今天主要讲的内容是如何用 TensorFlow 分析情绪(文末点击阅读原文可抵达 GitHub 获取代码)。

视频内容

(建议在 Wi-Fi 环境下观看视频,土豪随意~)

为了方便流量不足的小伙伴们在路上看,我们特意整理出了图文版:

只有塔罗牌可以帮你分析感情运势?AI也可以秒变情感分析师!

情商将人类与地球上其他生物区分开来。情绪可以很简单,比如听到凤凰传奇的《最炫民族风》你会变超兴奋。

人类发明了相应的情绪词汇来帮助我们表达,但有时词汇不足以表达感情,有些情绪则没有直接的语言表述。情感如此难以表达的,更别说去理解了,但是AI可以帮助我们,甚至比我们自己分析情绪数据做的更好,并帮助我们作出最优的决策,但它是如何做到的呢?

情感分析通常有两种方法:

  • 基于词典资源分析(Lexicon Based Approach)

我们首先将一些给定的文本拆分成小的单元,可以是单词、短语、或者句子。这个过程被称为标记化(Tokenization),计算出每个词语出现的次数,得到的结果被称为词袋模型(Bag of Words model)。

接下来,我们根据现有的“词典”来确定每个词语的情感值。“词典”是研究人员预先建立的词汇情感值数据库。一旦我们有了这些情感值,我们就能计算出整个文本的情感倾向。

  • 基于机器学习

通过学习被转换成广义向量的单词来进行情感分析。前向神经网络接受固定维度的输入,例如二进制数;但循环神经网络(RNN,recurrent neural nets)可以帮助我们学习序列数据,例如文本。

如果我们有标记了正面或负面情绪的推文(tweets)数据集,我们就可以使用数据集训练一个分类器,当有一个新的推文时,分类器就可以区分它是正面的或是负面的。

那么哪种方法更好呢?

虽然使用词典的方法容易些,但是机器学习的方法会更准确。语言的表达有很多微妙的地方,词典不太擅长处理这类情况,例如“讽刺”。讽刺就是看上去说的是这回事,真正的含义却是另一回事。恩,谢耳朵最懂什么叫“讽刺“了。

深度神经网络能处理这些细微的地方,因为它并不靠字面意思来分析,它们根据所学创建了抽象表示。这些可以称为“向量”(vectors),通过向量对数据进行分类。

接下来Siraj带大家用电影评论数据来建立一个情感分类器,并且在云端运行。唯一依赖的工具是tflearn,因为它是目前搭建深度神经网络最简单的工具。简单粗暴,先上代码:

from __future__ import division, print_function, absolute_import import tflearn from tflearn.data_utils import to_categorical, pad_sequences from tflearn.datasets import imdb # IMDB数据集下载 train, test, _ = imdb.load_data(path='imdb.pkl', n_words=10000,valid_portion=0.1) trainX, trainY = train testX, testY = test # 数据处理 # 序列填充 trainX = pad_sequences(trainX, maxlen=100, value=0.) testX = pad_sequences(testX, maxlen=100, value=0.) # 将labels转换成二进制向量 trainY = to_categorical(trainY, nb_classes=2) testY = to_categorical(testY, nb_classes=2) # 构建网络 net = tflearn.input_data([None, 100]) net = tflearn.embedding(net, input_dim=10000, output_dim=128) net = tflearn.lstm(net, 128, dropout=0.8) net = tflearn.fully_connected(net, 2, activation='softmax') net = tflearn.regression(net, optimizer='adam', learning_rate=0.001,loss='categorical_crossentropy') # 训练模型 model = tflearn.DNN(net, tensorboard_verbose=0) model.fit(trainX, trainY, validation_set=(testX, testY), show_metric=True,batch_size=32)

第一步:收集数据

我们选用IMDB电影评分数据。通过load_data函数将数据导入,设置好保存路径,同时将扩展名设为“pkl”,这样可以更容易的转换成其他的Python对象。在10,000个词汇中,我们只留10%作为验证集(validation)。

导入数据后将被自动分为训练集验证集,可以进一步将这些集合拆分为评论和标签,分别赋值为X和Y。训练集是用来训练模型的,帮助找到合适的权重;验证集则调整结果以防过度拟合,用来将预测值与真实值进行比较, 并最终测试模型准确度。

第二步:数据预处理

需要先对输入进行向量化。使用pad_sequences函数,将每一条评论都填充(pad)到一个矩阵中。“填充”可以让输入的维度保持一致,将每个序列的指定地方填充为零,直到序列的最大长度(这里设为100)。也要通过to_categorical函数将标签转换成向量,将它们转换成二元向量,其中1代表正面,0代表负面。

第三步:构建网络

神经网络的第一层是输入层(input layer),下一层是嵌入层(embedding layer,也做隐层)。第一个参数是上一层的输出向量,类似的对于每一层而言都是以前一层的输出作为该层的输入。这里将维度设为10,000,也就是从数据集中导入词汇的数量。输出维度设为128,即生成嵌入层的维数。

下一步,将这些值输入至LSTM层,它可以让网络从一开始就记住所有的数据,从而提高预测精度。将退出率(dropout)设为0.08,有助于防止神经网络中过度拟合的问题。每个神经元都与上一层的所有神经元连接。用softmax函数作为其激活函数,它的功能在于可以把任何一个向量中的值转换成0和1之间的概率,概率之和等于1。这些值将作为我们最后一层,也就是回归层(regression layer),对输入进行回归。

指定一个优化器(optimizer)使得损失函数(loss function)最小化,以及设置学习速率(learning rate)来决定神经网络的训练速度。我们使用的优化器是adam来执行梯度下降算法(gradient descent)。损失函数设为categorical cross entropy,它将找出预测输出和期望输出间的差异。

第四部:训练模型

建立了神经网络之后,可以通过tflearn的深度神经网络函数对它进行初始化,然后就在给定的训练集和验证集上开始训练模型。将show_metric参数设为“True”,就可以在训练中间通过log查看精确性。

为了演示这个过程,将在AWS(Amazon的云服务器)上运行。我们要做的是使用AMI(Amazon Machine Image,亚马逊系统映像),那上面有我们需要用到的一切工具,包括tensorflow。可以在AWS上通过AMI在云端执行训练模型,而不用考虑环境依赖的问题。进入AWS控制台后开始执行上面的例子。将公共DNS复制粘贴到浏览器中后,在指定端口输入ID和密码。可以通过前面申请的账户构建一个AMI环境,通过Jupyter Notebook在云端(AWS上)运行程序。先创建一个文本文件,然后把代码贴上去,就可以开始执行代码训练神经网络了。

完整代码和数据集请参考 Github 链接(点击文末阅读原文进入)。

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

Siraj Raval 何许人也?

Siraj Raval 是 YouTube 极客网红,曾任职于 Twilio 和 Meetup,客户包括 Elon Mask 和 Google,教大家如何使用机器学习开发聊天机器人、无人驾驶车、AI 艺术家等视频点击量累计数百万。

Siraj Raval 为什么这么火?

首先,当然是这位哥伦比亚大学高材生活儿好技术好,用自己特有的方式三言两语就能抛出一个原本晦涩的 ML、DL 概念,让听众细细咀嚼。再者,这家伙幽默逗比、口才便给。兴之所至常手舞足蹈,瞳仁奇光掩映,口吐智慧莲华。深度学习讲师不少,但这么风趣可亲的却不多。

原文发布于微信公众号 - AI研习社(okweiwu)

原文发表时间:2017-05-26

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据派THU

教你用PyTorch实现“看图说话”(附代码、学习资源)

71960
来自专栏人工智能

从零开始学人工智能-Python·决策树(四)·树

作者:射命丸咲Python 与 机器学习 爱好者 知乎专栏:https://zhuanlan.zhihu.com/carefree0910-pyml 个人网站:...

29090
来自专栏AI科技评论

论文|可用于实时应用的启发式搜索

摘要 现有的启发式搜索算法不能在找到完整的解决方案之前采取行动,所以它们不适用于实时应用。因此我们提出了一种极大极小前向搜索(minimax lookahead...

35370
来自专栏AI科技大本营的专栏

AI 技术讲座精选:数学不好,也可以学好人工智能(五)——深度学习和卷积神经网络

【AI100 导读】欢迎阅读《数学不好,也可以学好人工智能》系列的第五篇文章。如果你错过了之前的四部分,一定记得把它们找出来看一下!本文主要介绍了深度学习架构—...

422100
来自专栏AI研习社

深度学习下的医学图像分析(三)

本文将从卷积神经网络的角度讨论深度学习。在本文中,我们将使用Keras和Theano,重点关注深度学习的基本原理。本文将展示两个例子——其中一个例子使用Kera...

44140
来自专栏机器之心

教程 | 如何使用TensorFlow构建、训练和改进循环神经网络

选自SVDS 作者:Matthew Rubashkin、Matt Mollison 机器之心编译 参与:李泽南、吴攀 来自 Silicon Valley Dat...

34390
来自专栏机器之心

只需十四步:从零开始掌握Python机器学习(附资源)

选自kdnuggets 作者:Matthew Mayo 机器之心编译 参与:黄小天、吴攀、晏奇、蒋思源 Python 可以说是现在最流行的机器学习语言,而且你也...

368110
来自专栏人工智能头条

AI为超级马里奥兄弟创造了游戏新级别——GECCO 2018最佳论文提名

作者 | Vanessa Volz、Jacob Schrum、Jialin Liu、 Simon M. Lucas、Adam Smith、Sebastian R...

9510
来自专栏机器学习算法工程师

强化学习通俗理解系列一:马尔科夫奖赏过程MRP

本文写作目的:尽量通俗讲解强化学习知识,使读者不会被各种概念吓倒!本文是第一篇,但是最关键的一篇是第二篇马尔科夫决策过程(Markov Decision Pro...

13420
来自专栏QQ大数据团队的专栏

在手Q动漫Feeds流推荐实现PRFM算法

28730

扫码关注云+社区

领取腾讯云代金券