引言
好友们在聊你不认识的明星八卦,想参与讨论又不知所措?
产品刚投入市场,想了解用户最真实的反馈而不只是抽样调查?
平台上运营着数万家电商,想从中挑出口碑好、潜力大的客户针对性重点扶持?
……
互联网时代,用户产生了海量的评论信息。电商、美食、酒店、旅游、购物……面对这些海量的评论数据,如果没有优质的自然语言处理(NLP)技术,它们就只能静静地躺在数据库里,无法创造价值。那么如何从这些海量的文本数据中提取有价值的信息?
以分析明星口碑为例,开发人员可以通过爬虫获取大量关于这个明星的网友评论和媒体报道,然后运用情感分类模型,就能直接得到用户对明星的情感倾向。
更进一步,如果对这些数据按照时间排序,分别统计每天的口碑数值,我们就能得到该明星的舆情走势图,甚至预测其未来趋势。
同样,对于刚投入市场的新品、拥有大量用户评论的电商,我们都可以分析它们的舆情及其趋势。
百度在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]链接下一篇文章。