基于yelp数据的虚假评论信息识别与情感分析

发布时间:2019-01-18 浏览次数:1147

                                                                                            作者:伍三友、魏静纯、雷骏峰


目录

ž  数据介绍

ž  虚假评论信息识别

ž  评论数据情感分析

 

Yelp是美国最大的点评网站,类似中国的大众点评。随着社交媒体的快速发展,来自网络的评论观点,越来越多地影响团体和个人,对用户而言,正面的评论观点常常意味着更好的口碑。

有研究表明:在Yelp.com网站上,商家评分每增加半颗星,能帮餐馆提高约19%的销量;若每增加一颗星,将带来5-9%的利润增长。

 

 

         Yelp公布了一份数据集,涵盖了商户、点评和用户数据。该数据集由用户信息、评论信息、商家信息三个部分组成。其中真实与虚假评论数量分别为206926205条,对应用户数量16661人,商家数量121家。

1 Yelp.com评论信息数据示意图

用户信息:包括用户名称、所在城市、朋友数目、发表过的评论数、注册时间、所获得的有帮助反馈数等数据。

商家信息:包括商家名称、所在城市、获得的评论数、所获评论的平均分等数据。

评论信息:包括评论用户名称、评论商家名称、评论文本内容、评论时间、相应评分等数据。

 

         由于对利润和市场的追逐,网络中出现了越来越多的虚假评论,BBC曾报道Yelp.com网站上存在近25%的垃圾评论,因此我们首先将针对虚假评论识别问题进行研究。

 

基于文本数据的虚假评论检测方法

 

TF-IDF(词频-逆文本频率)算法

在拿到数据集后,我们第一反应是这个问题好像有点熟悉

Emmm对了,这个是不是和“垃圾邮件识别问题”有点类似,那么真实评论和虚假评论当中高频词汇应该是不同的。所以我们采用TF-IDF(词频-逆文本频率)算法,这种统计方法认为,一个单词的重要性随着它在一句话中出现的次数成正比增加,但同时会随语料库中包含该单词的句子数量成反比下降。说得通俗一点就是如果某个词或短语在一篇文章中出现的频率高,而在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。于是我们需要计算以下两个值:

词频(termfrequency, TF)

逆文件频率(inverse document frequency, IDF)

那么,词频-逆文本频率(TF-IDF)可以表示为


但我们将该算法运用在数据集上时表现效果并不理想,准确度只能够达到63%


2 基于TF-IDF算法在测试集上的表现结果

 

这样的结果不经让我们开始怀疑之前的设想是不是有问题,因此根据虚假评论与真实评论数据画出相应的词云图,发现两张虚假评论与真实评论的词云图竟然惊人的相似!!!!

3 虚假评论与真实评论词云图

 

垃圾评论的类型

通过查看官方文档,发现对于垃圾评论,主要包括两种类型:

类型1(虚假评论):指用户没有基于真实产品或服务实际使用经历和体验的非真实评论。这类用户蕴含着隐藏的动机,他们通常针对目标实体(产品或服务)发表不应得的正面评价,以促销实体;或用不公正的虚假负面评论来诋毁目标实体的声誉。

类型2(无关评论):指评论内容没有反映用户对于产品或服务意见和评论。这类评论可以分为两种子类型:(1)广告;(2)不含观点的不相关文本(例如,问题,答案和随机文本)。

1真实评论、虚假评论及无关评论实例


这下,我们恍然大悟,由于要研究的对象是虚假评论,这类评论的用词与真实评论十分接近,因此,单纯只考虑文本数据进行建模,并不能较好的区分出虚假评论与真实评论,还应当加入用户与商家信息。

 

基于图特征的虚假评论检测方法

 

何为张量


张量(tensor)是一个多维的数据存储形式,数据的维度被称为张量的阶。它可以看成是向量和矩阵在多维空间中的推广,向量可以看成是一维张量,矩阵可以看成是两维的张量。图4为一至三阶张量:


4 一至三阶张量示意图


构建张量

我们之前提到过的用户与用户、用户与商家、商家与商家之间,以评论本文为桥梁能够形成一张关系图谱。为了能够尽可能的保留关系图谱中主体(用户与商家)之间的信息,我们在未做出任何先验假设的前提下,分别从时间、空间、社交等维度记录两个主体之间的12个维度关系信息,并将相关信息储存在三阶张量当中。


5 用户与商家构成的图结构图6 用户与商家之间构建的12维关系

      

基于上述12种关系,我们能够得到维数为 的三阶张量 ,其中 为数据集中用户与商家的数量之和, 为构建关系的数量。

 

RESCAL张量分解

为了能够得到用户与商家的特征,需要对得到的张量  进行分解,这里采用RESCAL张量分解方法,得到因子矩阵 ,这里因子矩阵中每一行的行向量代表对应位置用户或者商家的特征。

RESCAL张量分解的是通过将求解 ,得到因子矩阵A


图6RESCAL张量分解

 

算法流程及结果


在获得每个用户以及商家的特征后,将其与之前文本特征合并,即可以得到每一条评论的用户、商家、文本三个方面的特征,最后采用支持向量机(SVM)作为分类器进行训练,整个算法流程与测试集结果如图8


图7图特征方法算法流程

 

图8 测试集表现结果

可以看出基于图特征的方法在准确度上与单纯文本的方法相比有不少提升,但仍然存在一定的过检问题,因此对于该问题还存在一定的提升空间,读者若有兴趣的话可以跟进最新的NLP相关论文进行研究。

 

想象一个普通的生活场景,你正要和你的另一半找一家餐厅吃饭,你熟练地打开点评APP,熟练地点开餐厅评论,熟练地点击只看差评,你通过其他顾客的评论特别是负面评论判断这家餐厅值不值得成为今晚的选择,这一系列操作连贯又自然。当今社会,消费者通过其他顾客的评论对产品做出预判断已经成为常态,评论中的极端情绪会充分影响消费者的消费行为,而其实站在餐厅经理的角度思考,找到这些带有极端情绪的评论将会对产品的改进有很大的帮助,可以根据顾客的意见有针对性地做出改正。

我们将这种对文本做情感倾向的分析称为情感分析,简单来说就是分析一句话正面还是负面,以及情绪有多极端。情感分析至少有两种途径:基于词典的方法和基于机器学习的方法。

 

基于词典的方法

 

基本做法是对文本分词、去停用词,在情感词典中查找每个词汇粒和程度副词的情感值,进行综合运算。


举个栗子,“这家店的寿司特别美味!就是鳗鱼饭有点一般。”

Step1 匹配情感词用词典匹配出句子里面的情感词,正面的情感词有“美味“,情感分值为0.9,负面的情感词有”一般“,情感分值为-0.6,负值表示情绪是负面的;

Step 2 匹配程度词“美味“,”一般“前面都有一个程度修饰词,”特别“和”有点“,它们表示不同的强度,分别对”美味“和”一般“有不同程度的权值,比如“特别”的权重为2,“一般”的权重为1.5

Step3 检查否定词一些否定词会让词语的极性反转,比如“不是”,“不会”;Step 4 计算对情感词做加权求和再平均,就得到这句话的情感分数了:(0.9x2+-0.6x1.5/2=0.45


可以看到,情感词、程度词、否定词的查找都完全依赖词典,基于词典的方法很大程度上依赖着词典的全面性。另外,例子中的情感分析算法是一种很简单的计算方式,还有很多值得改进的地方,比如可以考虑句子间的差异和不同段落对文档的重要性,还可以考虑词语不同的语义规则等等。

 

基于机器学习的方法


Word2Vecgoogle2013年提出的一个NLP方法,它的作用是将所有的词向量化,这样词与词之间就可以定量的去度量他们之间的关系,挖掘词之间的联系。这种词向量化的思想在实际中是非常有效的,可以用于许多应用,尤其在单词的预测和翻译表现非常好。在这里,我们将尝试将它们应用于情感分析。


基于Word2Vec的思想,我们采用一种名为ULMFit的方法,这种方法的思想是预训练完成后去具体任务上进行finetune,属于一种迁移学习的思想,其中预训练模型采用的是AWD-LSTM方法。

ULMFit的预训练和finetune过程主要可以分为三个阶段:

ž   大规模语料集上预训练(这里我们采用的是Wikitext 103,有103,000,000个词)Amazing!!! 感叹下自己从头去训练太耗费精力与时间了,幸好有迁移学习

ž   将预训练好的模型在具体任务的数据上重新利用语言模型finetune(这是第一次finetune,称为LM finetune),

ž   根据具体任务设计的一个模型上,将预训练好的模型当做这个任务模型的多层,再一次finetune(这是第二次finetune,如果是分类问题的话可以叫做Classifier finetune),整个过程如下所示:

 


Positive&Negative分类

这里我们Yelp.com官方提供数据[3]中评分为45的评论数据作为Positive,评分为12的评论数据作为Negative,这样利用上述迁移学习的思想,先在Wikitext进行预训练,然后将其迁移到Yelp数据集上,在没有Fine-tuning情况下准确率为90.7%Fine-tuning之后达到97%

2 各种方法效果对比

 

极性情感识别

机智的读者可能会有这样的想法:咦,为什么要做二分类呢?语言情感细分的粒度不止Positve or negative吧! 您说对咯!最理想的情况下,情感分析给出的判定应该是一个连续的分值,而这里做二分类其实是对该问题的一个简化。若要做到连续,则需要大量的人工标注,且为了保证标注的质量,标注结果最好是要反复讨论

..(不然打标签的时候,你认为某句话很正常,另外一同学看了说,哎他怎么能骂人呢)

针对实际情况,我们这里考虑继续寻找PositiveNegative中的狠人(postive和最negative的评论)。因为评论中对用户影响最大的往往是那些言语激烈、带有极端情感的。类似于正负向情感分析的二分类方法,我们将极端情感加入分类目标中,迁移为五分类问题。

首先观察Yelp.com官方给我们的真实评论数据集评分的分布情况

利用TextBlob(一个基于词典的方法的工具包,很方便,推荐给大家!)对每一条评论计算情感分数,并根据分位数将[-1,1]的区间划分为五段,分别对应Most Negative(1)Negative(2)Neural(3)Positive(4)Most Positive(5)

同样是基于迁移学习的方法,得到最终结果的混淆矩阵如下,模型整体效果为79.55%


T-sne降维方法将网络的五分类输出映射到二维坐标上,发现五个类别之间并没有明显的重叠区域,说明识别效果是不错的。


在得到结果之后,最后我们挑选了部分过检及漏检的样本进行观察。


label为极端正面,却被分类成极端负面的评论有:

ž   Our dining experience was great andeverything was delicious. However, I think the food and drinks were overpriced.$100 for 3 people with a drink each. Yikes!.(吃饭体验很棒,一切都很美味,但我认为食物和饮料太贵了,三个人一人一杯饮料就要100刀!)

ž   Beautiful campus but don't bring any drinksinto the conference rooms(地方很漂亮但会议室不让带任何饮料)

 

label为极端负面,却被分类成极端正面的评论有:

ž   This place should just stick to beer andwings. Both are great here with great service. Nothing and I mean nothing elseon the menu is prepared well at all.(这个地方应该只坚持做啤酒和鸡翅,都很棒而且服务好,但菜单上的其他东西我觉得都没有好好准备)

ž   Beer and chicken wings, how can you go wrong- and the signature dill dipping sauce is delish!(怎么能把啤酒和鸡翅搞错呢!但莳萝蘸酱很好吃!)

        

不难发现,这些分错的评论中都包含两方面的情绪,不能单纯认为属于极端正面或极端负面,也就是用textblob打标签的时候就存在一定误差,而令人欣喜的是模型能挖掘出其中的其他情绪,因此如果有条件能够提高标签的真实性,模型的表现能力可能可以等到提升。

 

 

 

[1] Xuepeng Wang, Kang Liu, Shizhu He and Jun Zhao,Learning to Represent Review with Tensor Decomposition for Spam Detection, inProceedings of EMNLP 2016, Austin, USA, November, 1-5.

[2] Nickel M, Tresp V, Kriegel H P. A Three-Way Modelfor Collective Learning on Multi-Relational Data[C]// International Conferenceon International Conference on Machine Learning. Omnipress, 2011.

[3]Yelp dataset challenge.https://www.yelp.com/dataset/challenge