【深度学习】AI如何用文字表达情绪——使用人工神经网络进行带情感识别的文本分类

本文将带你尝试,不使用文本复杂的矩阵转换将文本分类。本文是对3种方法的综合描述和比较,这些方法被用来对下面这些数据的文本进行分类。完整的代码可以在下面链接找到。

代码:https://github.com/Ankushr785/Emotion-recognition-from-tweets 数据集下载:http://imgcdn.atyun.com/2017/09/text_emotion.csv

自然语言处理

所谓自然语言处理,这就是让机器像人类一样理解人类语言。这包括辨别不同句子之间的感情联系,理解说话者的本意,最终产生与之相关意思一致的新句子,并汇总到一起等等。这听起来没什么难以理解的地方,所以我认为即使是初学者不必害怕它会过于复杂。

现在我们知道机器(和大数据)可以比文本字符串更好地处理数字模式,所以处理NLP问题的第一步是将单词转换为矢量,即矢量化。一旦完成,所有需要完成的都是使用矢量作为特征,并将文本处理问题转换为机器学习问题。在我们即将见证的特殊情况下,SVM(支持向量机),朴素贝叶斯分类器 (NBC)和Sigmoid层已经被用来解决同样的问题。我们比较所有这些算法。希望你能够了解上述算法以帮助了解本文另外,我也不太愿意解释SVM和朴素贝叶斯方法。不过你可以在任何地方找到,所以无需担心。

数据预处理

之前的推文

1.删除网址:URL不会帮助你确定句子的特征。他们只是一些该死的链接,跟着他们不会让你根据刚刚阅读的句子做一个很好的描述。在re包中提供了删除网址的方法。

2.删除正则表达式:URL带来了很多符号,如[‘@’,’#’,’%’]称为正则表达式。有很多方法可以让这些符号在文本文档中被找到。比如在re包中提供了一个正则表达式查找表来解决这个问题。

3.词形还原:需要将同一页上类似(picking, pick), (motivation, motivate)等的所有单词列出。该NLTK库(Natural Language Toolkit)包含了单词词形还原的包(WordLemmatizer),通过提供全面的查找表解决这个问题。

4.删除重复字母:我希望我的机器能把“I loooove you!”转换为“I love you!”使用itertools包提供的去重函数可以解决这个问题。

矢量化SVM和NBC

SVM是关于在n维空间(n指向特征)创建不同类之间的最优超平面以支持矢量。对于我们的问题陈述,利用SVM的一个好方法是利用Tf-Idf(Term frequency, inverse document frequency)矢量化。

Tf-idf矢量化

如果你认为一个词袋的表示法只是计算每个文档中唯一单词的实例。那么你还是没有抓住重点。在分类过程中,整个语料库中的每个特定的词语(包括在我们的文本数据中的所有句子的组合)都会被给予相等的权重。我们的机器是还是个婴儿,它不会区分词语的重要性。

这个问题的解决方案是减少所有句子相当常见的单词的权重,并且在评估过程中增加不常见单词的权重。Scikit Learn的特征提取库提供了Tf-Idf函数来完成这个任务,对某个句子中的所有单词进行二次加权,并创建一个修改后的词袋。

ANN的矢量化

简单的词袋就足够了,复杂性会进一步下降。

简而言之:SVM和NBC方法

1.SVM指向Scikit Learn的SVM软件包提供内置函数,将Tf-idf矢量直接提供给SVM内核。在这种情况下,选择了线性核函数是为了让结果更好。

Fed向量

SVM的模型

2. NBC指向朴素贝叶斯分类器需要直接输入文本和相应的标签。它假设样本句子的单词之间没有相互关系。因此,这个任务可以归结为简单地将一个情绪与一个基于单词数量和频率的句子联系起来。textblob库提供了一个全面的朴素贝叶斯分类器实现此功能。

ANN

我们已经建立了一个3层神经网络来解决这个问题。深度学习解决方案的原理是加深对句子的理解,也就是加强我们从句子中创建的向量和映射的情感之间的联系。我们希望机器排列单词理解并引导句子传达有意义的情感。在这里,建立了一个非常基础的神经网络,以更好地利用SVM和NBC提供的分类。我们来看看构建神经网络的不同的层。

1.输入层包含句子的词袋表示。让我们称之为“l0”。

Logistic分类器

2.数据被馈送到转换为逻辑分类器(WX + b)的隐藏层。然而,偏置的向量“b”未被添加到该层中的矩阵点积“WX”。损失函数和(W,B)参数矩阵以矩阵形式储存在“突触”中,毕竟,这是我们正在谈论的是人工神经网络,我们应该打个比方!

3.然后,logistic分类器矩阵被缩放为sigmoid非线性(应对缩放问题)。这完成了我们的第二层-隐藏层“l1 = sigmoid_matrix_multiplication(l0,weight_parameters)”。

4. 损失函数通过在训练数据上迭代一特定次数并使用SGD(随机梯度下降)优化,得到最佳参数矩阵“W”和“b”。

参数优化

5.第三层—输出层用于将SGD优化偏置项“b”添加到矩阵点积“WX”。你可以查看下面链接,了解为什么在这里进行分类是必要的。

https://stackoverflow.com/questions/7175099/why-the-bias-is-necessary-in-ann-should-we-have-separate-bias-for-each-layer

6.最后使用softmax函数将逻辑分数(logits)转换为概率。这些概率将给我们最接近特定情绪的感觉。

优化在完整数据上迭代指定的次数。如果本地迭代次数对错误减少没有任何影响,则迭代停止。

结果

以下是培训后获得的全部数据的15%。

虽然非常规的ANN方法似乎并不优于传统的NBC和SVM方法,但是当你有大量数据需要处理时,它很有用,因为它能保持所有样本的强大记忆能力。

原文发布于微信公众号 - ATYUN订阅号(atyun_com)

原文发表时间:2017-10-09

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ml

数据挖掘学习笔记--AdaBoost算法(一)

声明: 这篇笔记是自己对AdaBoost原理的一些理解,如果有错,还望指正,俯谢~ 背景: AdaBoost算法,这个算法思路简单. 正文: AdaBoost...

3487
来自专栏杨熹的专栏

Sklearn 快速入门

学习资料:大家可以去莫烦的学习网站学到更多的知识。 本文结构: Sklearn 简介 选择模型流程 应用模型 ---- Sklearn 简介 Scikit...

3398
来自专栏华章科技

你是合格的机器学习数据科学家吗?来挑战这40题吧!(附解答)

目前机器学习是最抢手的技能之一。如果你是一名数据科学家,那就需要对机器学习很擅长,而不只是三脚猫的功夫。作为 DataFest 2017 的一部分,Analyt...

592
来自专栏程序员Gank

神经网络和深度学习(吴恩达-Andrew-Ng):一二周学习笔记

机器学习: 机器学习研究的是计算机怎样模拟人类的学习行为,以获取新的知识或技能,并重新组织已有的知识结构使之不断改善自身。简单的说,就是计算机从数据中学习规律和...

2141
来自专栏机器学习算法全栈工程师

15分钟入门NLP神器—Gensim

作为自然语言处理爱好者,大家都应该听说过或使用过大名鼎鼎的Gensim吧,这是一款具备多种功能的神器。 Gensim是一款开源的第三方Python工具包,用于...

1105
来自专栏机器之心

读懂概率图模型:你需要从基本概念和参数估计开始

选自statsbot 作者:Prasoon Goyal 机器之心编译 参与:Panda 概率图模型是人工智能领域内一大主要研究方向。近日,Statsbot 团...

34211
来自专栏机器之心

你是合格的机器学习数据科学家吗?来挑战这40题吧!(附解答)

选自 Analytics Vidhya 作者:ANKIT GUPTA 机器之心编译 参与:机器之心编辑部 目前机器学习是最抢手的技能之一。如果你是一名数据科学...

3549
来自专栏深度学习自然语言处理

基于汉语短文本对话的立场检测系统理论与实践

汉语短文本对话立场检测的主要任务就是通过以对话的一个人的立场为主要立场,而判断另一个人针对该人的回话的立场。立场包括支持,反对,中立三种立场。基于对话的立场检测...

891
来自专栏机器学习算法全栈工程师

机器学习之——自动求导

作者:叶虎 小编:张欢 随机梯度下降法(SGD)是训练深度学习模型最常用的优化方法。在前期文章中我们讲了梯度是如何计算的,主要采用BP算法,或者说利用链式法则...

3068
来自专栏海天一树

某公司自然语言处理算法笔试题

1 请列出几种文本特征提取算法 答:文档频率、信息增益、互信息、X^2统计、TF-IDF 2 简述几种自然语言处理开源工具包 答:LingPipe、FudanN...

2627

扫码关注云+社区