网站调用接口怎么做,手机制作游戏的软件,wordpress 短地址,做垂直类网站http://geek.csdn.net/news/detail/139152 本文主要为大家介绍深度学习算法在自然语言处理任务中的应用——包括算法的原理是什么#xff0c;相比于其他算法它具有什么优势#xff0c;以及如何使用深度学习算法进行情感分析。 原理解析 在讲算法之前#xff0c;我们需要先剖…http://geek.csdn.net/news/detail/139152 本文主要为大家介绍深度学习算法在自然语言处理任务中的应用——包括算法的原理是什么相比于其他算法它具有什么优势以及如何使用深度学习算法进行情感分析。 原理解析 在讲算法之前我们需要先剖析一下我们要完成的任务我们希望算法能够最大程度模拟大脑对于人类语言的处理逻辑对文本进行褒义、贬义、中性的判断。在大多应用场景下只分为两类。比说如对于“喜爱”和“厌恶”这两个词就属于不同的情感倾向。有一点需要特别注意这里面所说的褒义、贬义并不是绝对的分类的类别是根据我们的目标自由定义的并且严格以人的判断为基准比如我们可以把句子分类为陈述句、疑问句、祈使句和感叹句。 我们的第一个模型——基于情感词典的情感分类模型。 传统的基于情感词典的文本情感分类是对人的记忆和判断思维的最简单的模拟如图所示。我们首先通过学习来记忆一些基本词汇如否定词语有“不”积极词语有“喜欢”、“爱”消极词语有“讨厌”、“恨”等从而在大脑中形成一个基本的语料库。然后我们再对输入的句子进行分词看看我们所记忆的词汇表中是否存在相应的词语然后根据这个词语的类别来判断情感比如“我喜欢数学”“喜欢”这个词在我们所记忆的积极词汇表中所以我们判断它具有积极的情感。 基于上述思路我们可以通过以下几个步骤实现基于情感词典的情感分类包括预处理、分词、训练情感词典、判断整个过程可以如下图表示。 1.文本的预处理 由网络爬虫爬取到的原始语料通常都会带有我们不需要的信息比如额外的Html标签所以需要对语料进行预处理。这里的预处理工作主要是为了提取完整的句子去掉一些多余的标记符号。处理之后我们需要对原始语料进行情感标注我们可以用-1标记消极情感评论1标记积极情感评论。 2.分词 为了判断句子中是否存在情感词典中相应的词语我们需要把句子准确切割为一个个词语即分词。现有可选择的分词工具有很多我们可以研读各分词工具的测试报告根据自己的需求选择合适的分词工具。 3.构建情感词典 情感词典可分为四个部分积极情感词典、消极情感词典、否定词典以及程度副词词典。为了得到更加完整的情感词典我们可以收集多个情感词典对它们进行整合去重同时需要对部分词语进行调整以达到尽可能高的准确率。 此外我们需要根据需求加入某些行业词汇以增加分类中的命中率。不同行业某些词语的词频会有比较大的差别而这些词有可能是情感分类的关键词之一。比如手机行业“耐摔”和“防水”就是在这个领域有积极情绪的词。因此有必要将这些因素考虑进模型之中。 4.分类 为了简单起见我们将每个积极情感词语赋予权重1将每个消极情感词语赋予权重-1并且假设情感值满足线性叠加原理我们已经将句子进行分词如果分词后的词语向量包含相应的词语就加上其对应的权值其中否定词和程度副词会有特殊的判别规则否定词会导致权值取反而程度副词则让权值加倍。最后根据总权值的正负性来判断句子的情感。基本的规则如图所示。 最后我们需要对模型的效果进行检验。通过在我们爬取的微博语料上进行测试基于情感词典的模型准确率只有76%这个结果有点差强人意。 那么为什么这个模型的效果不那么好这是由于这个任务本身的复杂性所致的。 文本情感分类的困难在于 语言系统是相当复杂的人的语言是一个相当复杂的文化产物一个句子并不是词语的简单线性组合它有相当复杂的非线性在里面。我们在描述一个句子时都是将句子作为一个整体而不是词语的集合看待的词语的不同组合、不同顺序、不同数目都能够带来不同的含义和情感这导致了分类工作的困难。因此这个任务实际上是对人脑思维的模拟。我们前面的模型实际上已经对此进行了最简单的模拟。然而我们模拟的不过是一些简单的思维定式真正的情感判断并不是只靠一些简单的规则。 大脑做的事情比情感分类要多事实上我们在判断一个句子的情感时我们不仅仅在想这个句子是什么情感而且还会判断这个句子的类型祈使句、疑问句还是陈述句当我们在考虑句子中的每个词语时我们不仅仅关注其中的积极词语、消极词语、否定词或者程度副词我们会关注每一个词语主语、谓语、宾语等等从而形成对整个句子整体的认识我们甚至还会联系上下文对句子进行判断。这些判断我们可能是无意识的但我们大脑确实做了这些事情以形成对句子的完整认识才能对句子的情感倾向做出准确的判断。也就是说我们的大脑是一个非常高速而复杂的处理器我们做情感判断其实同时做了很多事情。 通过上面的分析我们不难发现传统的方法存在着两个难以克服的局限性 精度问题传统的模型无法模拟语言中复杂的非线性关系故难以进一步提高精度背景知识依赖问题传统思路需要事先提取好情感词典而这一步骤往往需要专业人员的大量人工操作才能保证准确率。下面我给大家解释深度学习是如何做到的。 自然语言处理任务中有一个非常核心的问题就是如何把一个句子用数字的形式有效地表达出来如果能够完成这一步句子的分类就不成问题了。 那么一个初步的思路是给每个词语赋予唯一的编号然后把句子看成是编号的集合比如假设1,2,3,4分别代表“我”、“数学”、“喜欢”、“讨厌”那么“我喜欢数学”就是[1, 3, 2]“我讨厌数学”就是[1, 4, 2]。这种思路看起来有效实际上非常有问题比如一个稳定的模型会认为3跟4是很接近的因此[1, 3, 2]和[1, 4, 2]应当给出接近的分类结果但是按照我们的编号3跟4所代表的词语意思完全相反分类结果不可能相同。因此这种编码方式并不可取。 有人可能会想到把意思相近的词语的编号凑在一堆不就行了确实如果把相近的词语编号放在一起会大大提高模型的准确率。可是如果给每个词语唯一的编号并且将语义相近的词语编号设为相近实际上是假设了语义的单一性。然而事实并非如此语义应该是高维的一个词语在不同的语境下总是有着不同的语义。 语义既然是高维的那么在计算机中词语就应该表示成高维的向量。为什么高维向量可行首先高维向量解决了词语的多方向发散问题。其次高维向量允许我们用变化较小的数字来表征词语。怎么说我们知道就中文而言词语的数量就多达数十万如果给每个词语唯一的编号那么编号就是从1到几十万变化变化幅度如此之大模型的稳定性是很难保证的。如果是高维向量比如说20维那么仅需要0和1就可以表达220 1048576100万个词语了。变化较小则能够保证模型的稳定性。 现在有了这个思路新的问题是如何把词语放到正确的高维向量中Google有一个著名的开源工具——Word2Vec它完成了的我们想要做的事情。 Word2Vec使用高维向量词向量Word Embedding表示词语并把语义相近的词语放在相近的位置。我们只需要有大量的某语言的语料就可以用它来训练模型获得词向量。对于词向量我们可以使用欧氏距离或余弦相似度找出具有相近语义的词语。有了Word2Vec我们就可以用词向量来表示词语那么句子就对应着词向量的集合也就是矩阵类似于图像处理图像数字化后对应着一个像素矩阵。 对于图像处理来说已经有一套成熟的方法了那就是卷积神经网络CNNs它是能够将矩阵形式的输入编码为较低维度的一维向量而保留大多数有用信息。事实上卷积神经网络在图像处理的那一套方法也可以直接用到自然语言处理任务中。 下面我给出一个基于CNN的文本分类模型的结构图非常直观 这个CNN模型共分四层 第一层是词向量层文本中的每个词都将其映射到词向量空间假设词向量为k维则n个词映射后相当于生成一张n*k维的图像第二层是卷积层多个滤波器作用于词向量层不同滤波器生成不同的feature map第三层是池化层取每个feature map的最大值第四层是一个全连接 softmax层输出是每个类别的概率。我们使用这种基于词向量 CNN的方法做文本分类不需要人工提取特征不需要领域知识整个训练过程高度自动化。在我们的任务中这个模型的准确度可以达到90%以上远远超过传统模型。 自然语言处理任务中另一个常用到的方法是循环神经网络RNNs。它的作用跟卷积神经网络是一样的将矩阵形式的输入编码为较低维度的一维向量而保留大多数有用信息。跟卷积神经网络的区别在于卷积神经网络更注重全局的模糊感知就好像我们看一幅照片事实上并没有看清楚某个像素而只是整体地把握图片内容而RNNs则是注重邻近位置的重构由此可见对于语言任务RNN似乎更具有说服力。因为语言总是由相邻的字构成词相邻的词构成短语相邻的短语构成句子因此语言任务需要把邻近位置的信息进行有效的整合。 基于词向量 LSTMLong-Short Term Memory的模型结构和基于CNN的模型结构是类似的只需要把卷积层和池化层换成一个LSTM层即可。 不难发现不管是CNN的模型还是RNN的模型都使用词向量Word Embedding来进行语义表示事实上基于神经网络的自然语言处理方法大都是在词向量的基础上进行的。所以理解Word Embedding对于我们理解和使用深度学习的自然语言处理方法至关重要。 海航舆情云平台实践 下面我会讲上面介绍的深度学习算法在海航舆情云平台中的应用。 首先我简单介绍一下海航的舆情云平台舆情云平台项目的初衷是为了加强海航集团及其下属各成员企业的品牌效应并且减少关键信息传播的成本及时洞悉客户评价和舆论走向以及指导舆论引导工作加快对紧急事件的响应速度。目前主要功能如下包括数据爬取、数据存储、微博舆情、新闻舆情、热词统计、情感分析、舆情监测、数据接口服务、热点事件梳理 数据爬取每天定时计划爬取指定微博新闻媒体最新发布信息存储以供分析数据存储存储微博、新闻内容、图片等以及中间分析结果、计算结果微博舆情统计分析、信息监测、信息检索新闻舆情统计分析、信息监测、信息检索热词统计高频度热词统计情感分析文本分析、根据文字内容定位情感倾向舆情监测根据指定敏感词进行信息过滤并提供通知功能数据接口服务提供对外的Rest的API数据服务热点事件梳理提供检索优先列出热度高的新闻、微博记录图像识别和内容分析(这部分正在做)部分展示效果图 在舆情云平台开发过程中我们训练了多个基于词向量 CNN模型来实现情感分析的相关功能。 我们的机器学习工作流如下图 1.定义预测目标 我们的客户比较关注用户对其服务的评价和反馈情况微博平台就是一个很好的信息收集渠道新浪微博中有大量对于其服务的肯定或者吐槽的信息类似于商品评论我们很容易就能判断出某条微博的情感倾向。 此外客户常会关注一些敏感的新闻信息和微博不同新闻大多数都是在客观地陈述某件事情并没有主观的情绪在里面那该如何定义『负面新闻』呢通过进一步的沟通和梳理我将『负面新闻』定义为对于一个企业/组织/个人不利的、有消极影响的新闻就可以被认为是『负面新闻』。 2.数据收集 收集数据的方式有很多我们使用定向爬虫从网上爬取需要的数据。数据源包括微博、主流媒体网站、大型论坛、指定行业网站等。 3.数据预处理 这里的主要工作是对上一步收集的数据进行情感标注规则是负面的标记0中性及以上标记为1。我们的模型是监督训练的所以这一步必不可少。 4.构建并训练模型 不同行业的常用词汇和表述是不一样的为了简化模型结构同时保证准确率我对不同行业的语料分开建模这里以财经新闻为例具体步骤是 取10W条越多越好财经类新闻对每条新闻进行分词统计每个词出现的频次并将词按频次从高到低进行排序形成一个序数——词语的关系映射表。构建基于词向量 CNN的网络。将数据划分为训练集和测试集。将训练集数据进行分词通过查找映射表将文本转化为模型所需要的输入形式然后把处理后的数据喂给模型进行训练密切关注训练过程以防止过拟合。在测试集上进行预测计算得到准确率、召回率等指标。交叉验证。保证从多个方向学习样本避免陷入局部极小值。5.评估模型 我认为评估模型可以从以下方面考虑 精度方面包括准确度Accuracy、精确度Precision、召回率Recall、ROC曲线等评价指标。性能方面在数据量有限、任务不复杂的情况下尽量设计浅层的模型它们计算开销小并且易于扩展。6.使用模型 对于训练好的模型我们使用标准的API接口进行封装新爬取的数据无需经过任何加工直接批量地送入模型就可以批量地返回分类结果。 一般认为准确率达80%以上的模型具有生产价值。我们使用微博语料、财经新闻语料、科技新闻语料训练的情感分类模型平均准确率达到了90%以上并且随着数据量的逐步增长我们的模型还可以进一步优化。 答疑 Q1情感的强度如何量化 杨欣伟其实这对人来说也是一个难题比如我们很容易判断一段评论是积极的还是消极的但是我们难以对评论的情感倾向进行更细粒度的量化机器在学习我们的判断逻辑我们做不到的机器也做不到。 Q2情感分析的情感是指什么 杨欣伟情感是指态度、意见和感情。换句话说它们是主观印象而不是客观事实。我在分享中延伸了它的概念『情感』是可以由我们自由定义的。 Q3能推荐一款比较好的分词工具吗 杨欣伟出于对效率的考虑我选择了Jieba。这里有一个关于中文分词工具的评测您可以参考下http://it.sohu.com/20161201/n474637590.shtml。 Q4咱们平台用了哪些深度学习开源工具 杨欣伟使用了Keras和Tensorflow。Tensorflow是时下最流行的深度学习框架随着版本的更迭它的功能也越来越完善。但是它的API非常的低层使用的时候往往需要编写大量代码即便是构建一个相对简单的模型。Keras则是一个高层的库它的后台可以在Tensorflow和Theano之间自由切换并且Keras代码可以和Tensorflow代码无缝衔接。 转载于:https://www.cnblogs.com/DjangoBlog/p/6430691.html