一文教你挖掘用户评论典型意见 - JSong - 博客园

标签: | 发表时间:2017-11-03 23:40 | 作者:
出处:http://www.cnblogs.com

 

2017-11-01  宋老师  JSong

原文: JSong公众号

 

 

 

用户体验的工作可以说是用户需求和用户认知的分析。而消费者的声音是其中很重要的一环,它包含了用户对产品的评论,不管是好的坏的,都将对我们产品的改进和迭代有帮助。另外任何事情都要考虑金钱成本和人力成本,因此我希望能通过机器学习的算法来辅助分析,对用户的评论数据进行提炼和洞察。

 

现在爬虫泛滥,网络公开数据的获取并不再是一个难题。简单点可以利用一些互联网的爬虫服务(如神箭手、八爪鱼等),复杂点也可以自己写爬虫。这里我们用爬虫来获取京东的评论数据。相对于亚马逊而言,京东比较坑。第一个坑是京东的反爬虫还不错,通过正常产品网址进去的那个评论列表是几乎爬不出数据来的,所有大部分网络爬虫服务都止步于此。第二个坑是一款产品的评论数只要超过一万条,那么京东就只会显示前一千条,没有公开的数据,那你爬虫技术再厉害也没办法,除非开着爬虫定时增量更新数据。

 

自己写爬虫的好处就是可以避免掉进第一个坑,但是第二个坑没办法。这里我爬取了  小米MIX 和  小米MIX2 的评论数据(最新的几款手机我都爬取了,需要的请戳后台),其中 小米MIX 共1578条,小米MIX2 共3292条。

 

本文通过分析这些数据预期完成如下几个目标

 

  • 1、数据清洗后的好评率

  • 2、好/中/差评的概览

  • 3、典型意见分析

     

首先来看看MIX2的大致情况:

 

一共有3497条评论,其中有些评论内容还是完全相同的。用户大概在购买9天后后评论(可能与到货日期有关),平均打分为4.87分,评论里面有些完全相同的,小米MIX2只有一种颜色等等。

 

接下来我们先做第一件事情

京东采用的是5分制,其中4-5分为好评,2-4分为中评,1分为差评。MIX2的好评率为96.63%,与京东官网的一致。

 

粗略的浏览以下评论,我们发现有这么几种无效评论。

 

第一种全是标点符号或者就一两个字:

这种情况可以利用正则表达式来去除,第二种比较麻烦,如:

这种评论中它纯属凑字数和灌水,不含任何产品的特征。一种想法是看看评论中涉及的名词是否是手机领域中的词语,但是实际情况会非常复杂,比如

 

“用的很不错”、“太差了”...

 

它并没有主语,并不知道它评价的是啥。这里我们反过来,假设每一类无效评论都有类似的关键词,一个评论中的词语只要有一些垃圾评论关键词,我们就把它判定为无效评论。当然并也不需要给定所有的无效评论词,利用tfidf可以通过一个词语顺藤摸瓜找到其他类似的词语。(还可以利用文本相似性算法寻找)

 

另外还有一种情况,虽然不属于无效评论,但是影响好评占比。

这种情况在追评中出现的较多,还有就是京东默认的好评。虽然内容是差评,但是标记的分值是5分。理论上也可以通过算法找出大部分。在NLP领域中,有一个课题叫做情感分析(sentiment analysis), 它可以判断一句话的情感方向是正面的还是负面的(以概率大小给出,数值在0-1之间)。如果一段评论的情感方向与对应的评分差异过大,则我们有理由相信它的评分是有误的。当然这里有一个条件,那就是这个情感分析算法是非常准确的。

 

有大神专门用电商评论训练了一个开源的情感分析包snownlp, 我们来看看这个包效果怎样。

嗯嗯,准确率为92.63%,看上去很高,但。。。因为我把所有评论都判定为好评,那正确率也有96.54%。再看上图中的ROC曲线,嗯,惨不忍睹。曲线跟x轴之间的面积(记作AUC)越大,说明模型的判别能力越好。一般情况曲线会在对角线之上(对角线相当于随机预测的结果),可以此时AUC=0.157,比随机结果差多啦。

更好的情感分析估计需要利用大量手机领域的语料重新训练才行,本文就暂不讨论这个啦。

 

 

语义理解是一个非常难的课题,本文不追求绝对精准,仅希望能对产品的评论有一个快速的理解。本文将从三个方面来阐述同类型评论语料的语义:

 

  • 1、 词云。它会统计一段文本中各个词语出现的次数(频数),频数越大,在词云中对应的字体也越大。通过观察词云,可以知道一段文本主要在讲哪些东西

  • 2、 TextRank。 TextRank 算法是一种用于文本的基于图的排序算法,可以给出一段文本的关键词。其基本思想来源于谷歌的PageRank算法, 通过把文本分割成若干组成单元(单词、句子)并建立图模型, 利用投票机制对文本中的重要成分进行排序, 仅利用单篇文档本身的信息即可实现关键词提取、文摘。和 LDA、HMM 等模型不同, TextRank不需要事先对多篇文档进行学习训练, 因其简洁有效而得到广泛应用。

  • 3、 主题分解。 假设每一段文本都是有主题的,比如新闻里的体育类、时事类、八卦类等。通过对一系列的语料库进行主题分解(本文采用的是LDA),可以了解语料库涉及了哪些主题。(本文用的LDA实际效果不怎么好,暂且仅供娱乐。更好的方法后续或许会更新)

 

分析词云、关键词和主题容易发现

  1、好评集中在:屏幕、惊讶、手感、全面屏、边框,大致就是讲小米手机不错;手感很好;全面屏很惊艳之类的;

 

  2、中评集中在:屏幕、还好、失望、边框等

 

  3、差评集中在:客服、失灵、售后、失望、模式、微信等,大致就是手机失灵;微信电话时的屏幕?因为版本等出现了一些售后客服问题?

 

只能说还凑合,模模糊糊、断断续续能理解一些。因为它只给出了词语,并没有配套的情感。

 

 

 

电商评论不同于一般的网络文本,它主要的特点在于语料都是在针对产品的某些特征作出评价。这一节我们希望能通过算法找到这些特征。

 

细想下,语料主要在对特征做出评价,而特征一般是名词,评价一般是形容词。相对来讲产品的形容词不会很多,如“不错”、“流畅”、“很好”之类的,所以可以通过关联分析来发现初始的特征-形容词对,如("手机"-"不错")、("手机"-"流畅")等。

 

通过关联分析找打的特征-形容词对需要筛选,主要表现在两点。

 

1、里面不只名词-形容词对,两个名词,形容词-动词等都有可能;

 

2、没有考虑两个词语在文本之间的距离。比如名词是第一句话中的,形容词则是最后一句话中的;

 

筛选好后其实还不够,关联分析只会挖掘支持度大于一定数值的特征,我们称这种特征为 " 常见特征"。那不常见特征怎么办?怎么才能挖出来?注意到上面已经挖掘出很多形容词啦,这些就是产品的最常用评价词语啦,我们可以通过它们反向挖掘出 " 不常见特征"。

 

可以看到与手机有关的大部分特征都找出来啦,另外有一些是关于京东的,如"速度"、"京东"、"快递"。还一些不是特征的,比如:"有点","想象"

在语料中搜索与"外观"有关的语句,先看看大家在讲"外观"时,都在聊些啥?

 

看来小米MIX2的外观还是很不错的,有很多人都是冲着外观买的。接下来我们来量化各个特征的好评占比和差评占比。

 

本来这里是想利用snownlp情感分析包来完成的,因为它能给出评价是否是正面的具体概率大小。考虑到情感分析目前的准确率,这里我们还是用原始的评分来量化。以刚刚的关键词 "外观|质感" 为例,我们有

 

利用这种方法,扩大到上述所有的特征可以得到:

 

可以看到提及最多的特征依次为:感觉、屏幕、速度、手感、系统、边框、摄像头、全面屏、拍照、体验、256g、外观、质量、性价比

 

其中 比较好的依次为: 性价比、质量、手感、速度、外观、感觉

 

其中 稍差些的依次为: 256g、屏幕、边框、拍照、摄像头、系统、体验、全面屏

 

最后的最后我们来看下这些特征对应的语料。

 

总结一下差评主要表现在:

No1. 256g版本发货问题

 

No2. 窄边框问题

 

No3. 拍照问题,MIX2的拍照效果有待提升

 

No4. 前置摄像头在下面不方便

 

No5. 系统,MIUI广告多

 

 

这里安利一个自己造的轮子: reportgen ,结合DataFrame 格式可以自动化生成PPTX报告。目前Github关注量已经有20+啦。

在reportgen中,每一页幻灯片被简化成四部分:标题、副标题、主体(数据图、表格、文本框或图片)、脚注。只要给定每一页的这些数据,reportgen就能帮您自动生成pptx,一般四行代码就完成啦。如:

当然本文的pptx要复杂一些,相应的代码和生成的报告如下:

时隔两年,宋老师的公众号又推文啦,希望大家多多关注,多多阅读(想要开通评论功能~~~)。文中提到的两个包近期会公布,欢迎关注我的GitHub:

https://github.com/gasongjian/

另外文中用到的数据后台回复: 小米MIX,即可获得。

在挖地兔看到一张好玩的图,拿来改造了以下。嘿嘿,在世博园那里最常见的场景。

相关 [文教 用户 典型] 推荐:

一文教你挖掘用户评论典型意见 - JSong - 博客园

- -
2017-11-01  宋老师  JSong. 用户体验的工作可以说是用户需求和用户认知的分析. 而消费者的声音是其中很重要的一环,它包含了用户对产品的评论,不管是好的坏的,都将对我们产品的改进和迭代有帮助. 另外任何事情都要考虑金钱成本和人力成本,因此我希望能通过机器学习的算法来辅助分析,对用户的评论数据进行提炼和洞察.

致互联网创业者:请别把自己当作典型用户

- - PingWest
今天在看Vision Mobile最新一期的移动开发者报告时,一个数据挺令我惊讶的——只有24%的开发者会进行市场调研,越来越多的开发者选择相信自己的判断,“远离用户”似乎正在成为这个快时代下产品决策的主旋律. 2009年3月,Google首席视觉设计师Doug Bowman宣布从Google离职,并撰写了 Goodbye,Google一文抨击了Google数据主导产品设计的流程,其中谈到了一个案例——Google对41种蓝色进行了 测试,最后根据反馈数据选择了其中的一种,而不允许设计师根据自己的判断去做选择,Doug Bowman认为这种方法十分的僵化.

快乐周末:典型的 Android 用户是穿T恤和牛仔裤的书呆子?

- guoan - 谷安——谷奥Android专题站
有没有想过典型的 Android 用户是什么样子. 特定操作系统的追随者都有一定的固定形式,毫无疑问,Android 也不例外. 来自 BlueStacks 的老兄对 Nielsen 和 Facebook 上的投票进行了研究并做了一个汇编. Android 2011(Android 2011 先生).

hbase两个典型应用实例

- - CSDN博客推荐文章
本文介绍hbase的两个典型应用实例OpenTSDB和地理信息系统. 学习一种技术最好的办法就是了解一个正在使用的应用系统是如何应用这种技术来解决问题的. 其中开源的OPenTSDB数据监控系统就是应用hbase解决数据存储的. 同时hbase还能很好的应对地理信息系统(GIS)中的两个挑战:大规模数据处理的延迟和空间位置建模.

典型的大数据架构

- - 数据库 - ITeye博客
“任何数据架构由主要的四个逻辑组件组成:”. “我不认为这是一个大数据架构的蓝图. 但这样一个图能给你一个关于可能包含的组件的大致的想法. 然后对工程师让事情变得简单,你开始在每个等级上添加需求,约束,和服务等级协议(SLAS Service-level agreement). 一旦你有了关于事情该怎么看的某种想法,你开始建立它并发现你将用到的一些组件不能很好的在一起工作,或者根本没有办法达到这些服务等级协议.

keepalived配置及典型应用案例

- - ITeye博客
keepalived配置及典型应用案例. 使用源码先安装keepalived 1.2.6. 所设keepalived安装到/usr/local/keepalived, 则所有配置文件均位于此目录之下. 我一直没搞明白一个问题,Linux默认总是将程序安装到/usr/local目录下,所有程序共享了/usr/local/sbin目录.

高级数据库典型技术

- - CSDN博客推荐文章
            数据库作为计算机学科中一个比较重要的分支,也是一个对于程序员来说非常好的学习方向. 平时我们用的最多的,同时也是接触最多的一定是增删改查语句,select,. update,delete等,当然,我不会拿这些再说一遍,这些都是老的掉渣的东西了. 所以我们可以学习高级数据库中所以涉及的技术.

[转]ZooKeeper典型应用场景一览

- - 企业架构 - ITeye博客
转载自:http://www.coder4.com/archives/3856. ZooKeeper是一个高可用的分布式数据管理与系统协调框架. 基于对Paxos算法的实现,使该框架保证了分布式环境中数据的强一致性,也正是 基于这样的特性,使得ZooKeeper解决很多分布式问题. 网上对ZK的应用场景也有不少介绍,本文将结合作者身边的项目例子,系统地对ZK的应用场景 进行一个分门归类的介绍.

ZooKeeper 典型的应用场景

- - CSDN博客推荐文章
下面详细介绍这些典型的应用场景,也就是 Zookeeper 到底能帮我们解决那些问题. 统一命名服务(Name Service). 分布式应用中,通常需要有一套完整的命名规则,既能够产生唯一的名称又便于人识别和记住,通常情况下用树形的名称结构是一个理想的选择,树形的名称结构是一个有层次的目录结构,既对人友好又不会重复.

flyway中文教程

- - 研发管理 - ITeye博客
前言:最近工作上遇到个问题,项目开发过程中,开发代码可以通过svn来版本控制,但数据库又该如何来管理呢. 多个人接触数据库,当对表、字段或数据修改后,又怎么来同步呢. 经过苦寻,发现了个叫flyway的开源项目:http://flywaydb.org/,java编写,官方的介绍就是我的初衷,岂能不心动.