引言git
好友们在聊你不认识的明星八卦,想参与讨论又不知所措?github
产品刚投入市场,想了解用户最真实的反馈而不仅是抽样调查?正则表达式
平台上运营着数万家电商,想从中挑出口碑好、潜力大的客户针对性重点扶持?算法
……数据库
互联网时代,用户产生了海量的评论信息。电商、美食、酒店、旅游、购物……面对这些海量的评论数据,若是没有优质的天然语言处理(NLP)技术,它们就只能静静地躺在数据库里,没法创造价值。那么如何从这些海量的文本数据中提取有价值的信息?api
以分析明星口碑为例,开发人员能够经过爬虫获取大量关于这个明星的网友评论和媒体报道,而后运用情感分类模型,就能直接获得用户对明星的情感倾向。网络
更进一步,若是对这些数据按照时间排序,分别统计天天的口碑数值,咱们就能获得该明星的舆情走势图,甚至预测其将来趋势。框架
一样,对于刚投入市场的新品、拥有大量用户评论的电商,咱们均可以分析它们的舆情及其趋势。分布式
百度在2018年7月开源了其基于语义和大数据的情感分类系统——Senta,将模型和源码经过Github进行免费技术开放。若是以为拿模型跑太麻烦,百度AI开放平台上也免费开放了评论观点抽取服务,直接调用其api就可以实现情感分类,可以实现最快速的原型开发。学习
那若是想更进一步,获得用户对产品或商家的具体观点呢?就涉及到了情感分析的高阶技术:评论观点抽取。
该技术能够大体理解成两个过程:首先是抽取出评论中的一些涉及观点的名词形容词短语,而后经过情感分类技术肯定其观点的情感倾向。如观点是“味道不错”仍是“味道很差”,是“上菜速度快”仍是“上菜速度慢”。百度AI开放平台上免费开放的评论观点抽取api,就能够支持电商、美食、酒店、旅游、购物等13个场景的评论观点抽取。
以此为基础,就能够基于海量的评论数据,创建精细的用户画像和商户画像,进而改善营销和服务策略,丰富个性化推荐场景,最终创造更大的商业价值。
目前的人工智能技术都是基于大量的数据训练复杂的模型,以此来支持不一样场景的应用。所以其核心困难包括模型和数据两个方面。
首先,情感是人类的一种高级智能行为,须要模型可以在语义层面理解文本的情感倾向。这不是靠写几个正则表达式就能完成的。
另外一方面,不一样领域(如餐饮、体育)的情感表达方式各不相同,即使是同一场景的表达也极其复杂。因此须要有大规模覆盖各个领域的优质数据支撑模型训练。而这些数据又不是通常的开发者所能具有的。
那百度Senta是怎么解决这些问题并造成核心技术的?
百度Senta系统采用的是近年取得重大突破的深度学习技术。深度学习的特色是能够不依赖繁复的人工特征工程,而直接从最原始的文本数据中获取语义层面的信息,进而进行情感倾向的判断。
图3 基于bi-LSTM的情感分类模型
图3展现了基于bi-LSTM的情感分类模型。它是在大规模语料上有显著效果的经典深度学习模型。它的特色是可以提取语句中词语顺序相关的信息,考虑词与词之间较长上下文的依赖。
可是光有好的模型设计还不够,还须要好的深度学习框架来实现。百度Senta情感分析系统基于一样由百度开源的深度学习框架PaddlePaddle Fluid所实现。PaddlePaddle Fluid具备一些特别适合于天然语言处理的特性,好比在深度学习模型的训练过程当中,为了充分利用硬件的计算资源,通常须要进行批量(batch)计算,即一次同时输入多个句子进行计算。可是情感分类这类场景所处理的大量文本的长度都是不固定的,通常的深度学习框架须要将一个batch内的句子补长(padding)成一样的长度再输入到神经网络中进行处理。这种padding方式带来了额外的存储和计算开销。而PaddlePaddle Fluid框架用独有的LoDTensor原生支持多层级的不等长序列,使得变长文本不须要通过padding便可馈入深度学习模型进行训练或预测,从而能够显著地节省储存空间和计算时间。而对常见的padding数据的支持,PaddlePaddle Fluid 也在不断地完善中。
另外PaddlePaddle Fluid对单机多设备及多机分布式训练的支持也很是友好。对于单机训练,框架提供的并行执行器ParallelExecutor会自动处理参数的分发与聚合,相对于单设备训练,用户几乎不用对模型进行任何修改,使得用户能够低成本地实现单机多CPU/GPU训练;而对于多机分布式训练,也只须要简单的配置便可实现,这使得用户可以方便地从模型构建快速过渡到多种环境下的模型运行。
另外一方面,现实的NLP应用场景每每十分复杂。可能单独一个情感倾向分析模型很难解决全部问题,须要多种NLP技术综合运用。而不少现成的NLP应用,好比文本分类、神经机器翻译、阅读理解、自动问答等,在PaddlePaddleFluid中都很容易找到相关的网络接口和文档。预训练词向量也集成在其中,方便模型热启动。百度Senta系统甚至直接把情感倾向分析模型的网络结构及其参数都开源,方便对其调用与再开发;而且集成了百度词法分析系统(LAC),方便用户直接处理未分词的语料。这使得开发者的精力可以放在构建深度学习模型的高层部分而没必要过多关注底层细节上,所以很适合于工业应用,尤为是须要快速开发的场景。
固然,百度还实验了各类其余的情感分类模型,包括CNN、hierarchical-LSTM、self-attention等。它们都在百度Senta系统的开源代码中,以知足用户不一样的选择。而且百度开源了训练数据,用户能够直接在此基础上训练本身的模型,以适应本身的场景。
在AI界有一句话,“数据决定了你模型的上限,而模型只是在逼近这个上限”。可见大数据的重要性。然而数据标注是一件十分耗费人力的事。为了提升标注效率,百度基于强大的NLP技术积累,可以基于有限的种子数据大量扩充标注数据。
简单地说,就是先得到一部分标注好的数据,再找到与这些数据类似评论,进而扩充优质的标注数据。
那么第一批种子数据从哪里来?其实,互联网上自然有大量的弱标记评论数据,好比用户会对某个商品给予评论,同时给予评分。根据评分的高低就能肯定评论的正负倾向。
接下来就是计算那些没有被标注情感倾向的评论数据与这些种子数据的类似度。这涉及到另外一个模型——语义类似度模型。这个模型也是百度的核心技术(百度AI开放平台也开放了相关api)。它是经过百度积累的庞大的搜索引擎标注数据训练获得的。所以模型准确度很是高。
更进一步,能够将这些评论数据根据类似度链接成图结构,最后经过标记传播算法,将原来未标记数据转化为标注数据。经实验发现,这种方法获取的数据质量很高。
图4 基于标记传播的情感标记数据挖掘
所以,百度Senta系统在各类垂类准确率很是高,总体效果业界领先。而开源项目Senta中,既包含了简单高效的情感分类语义模型,也包含了百度基于独有大数据语料训练好的高精准模型,能够适应不一样场景的需求。另外,用户甚至能够将本身场景的数据加入到训练集中,使得模型更符合自身的应用场景。即使本身没有训练机器,也能够上传自身的数据到百度AI开放平台进行定制化,而后调用定制化好的api便可。
关于PaddlePaddle Fluid 的实战,能够参考[另外一篇文章],使用百度Senta 系统的开源代码进行情感分析任务。[陳1]
百度在情感分析领域开展了漫长而深刻的技术研发。而在将来,百度将继续深刻研发更加普遍通用的NLP技术和深度学习框架,以适应丰富多样的业务场景,创造更多价值。同时,百度将及时开源基于PaddlePaddle的最前沿的NLP技术,共同推动AI产业的发展。
附:
百度AI开放平台(http://ai.baidu.com/)
情感倾向分析(http://ai.baidu.com/tech/nlp/sentiment_classify)
评论观点抽取(http://ai.baidu.com/tech/nlp/comment_tag)
Senta系统(https://github.com/baidu/Senta)
[陳1]连接下一篇文章。