【Mining and Summarizing Customer Reviews】

Introduction

电子商务的发展带来的不仅仅是便捷,各种商品充斥在网络之中也需要一个更加有效的方法对于他们进行区分,那么用户所写的Reviews就是最好的评价标准。但是有些Review虽然很长不过在之中其实隐含的观点并不多,也就是很多的废话,这也就使得我们这些潜在的用户很难去分辨,对于生产商来说,也很难在这个基础上进行改进。

本文所提出的方法是为了解决生成 Feature-Based Summaries 的问题,这里的Feature指的是产品的各种特征或者是属性,如果简单的说,这个问题可以被分解成为三个子问题

  1. 识别评论之中的观点是对于哪个Feature而言
  2. 用户的Opinion是Positive还是Negative
  3. 对于这些Feature生成Summary
一个标准的Summary可以看成是下面的这种形式 【Mining and Summarizing Customer Reviews】

其中的Target是相机,第一个Feature是照片的质量,其中253个认为其质量好,6个认为质量不好。而第二个Feature是相机的大小,134个很满意其Size而10个不满意。通过这样的Summary我们就可以直观的看到其各种的特征以及使用者的观点。

在这个任务之中,我们的Summary是结构化的信息,而并非是自然语言。第二,我们并不关心Orgin的Text之中包含了什么样的信息,我们所需要的东西仅仅是Positive或者是Negative。

Approach

我们的任务可以拆成这些子任务,第一是Subjective Genre Classification,就是分类Feature,第二是Sentiment Classification,就是Determine句子的极性是正还是负,第三是Text Summarization,就是摘要的生成,不过这个也确实不算传统的Summary,传统的一般都是抽取式或者是生成式的,这个算个Feature式吧【Mining and Summarizing Customer Reviews】

流程也很明确,首先从数据库之中得到Raw评论信息,然后分句,然后经过POS,也就是给句子之中的信息打标签,看是名词还是形容词还是什么单词。

然后就是Frequent Features Identification环节,这个应该是模型之中最重要的环节了吧 ,因为这里就是要识别不同的Features,首先Feature要有的一个特征必然是频繁的,一个弯弯绕绕的特征肯定不是大众所需要的特征,或者大概率不是大众感兴趣的特征。所以,在本文之中使用了关系挖掘技术来找到那些频繁的Itemsets,所谓的Itemset就是简单的词语集合,或者是短语,总是在句子之中产生。

而为什么使用Association Mining也是因为顾客往往不直接的对于产品本身进行评价,而是讲故事,不同的用户喜欢讲不同的故事,那么在故事之中所出现的多的单词很有可能就是特征,而不频繁的单词那就是各自的用户的人生。

作者使用CBA来挖掘关联,这个软件好像是基于Apriori算法的,这个算法好像是基于频繁项集和非频繁项集的假设而构建的算法,属于很经典的算法,在这里就不赘述了。在文中使用百分之一作为频繁项集的频率,也就是最小支持率(Minimum Support).但是这里会出现很多奇奇怪怪的牛鬼蛇神,所以文中使用了一些修建算法对于生成的特征进行筛选。

第一个算法叫做Compactness Pruning,这个方法保证我们的Feature之中至少有两个单词,称为是Feature Phrases,然后对于其中的很明显的没有意义的单词进行删除。

上面这两段有些抽象,我举个例子

这个 键盘 手感 很好。

假设用Apriori算法可以搞到这几个项集

{键盘,手感 }{手感,很好}{键盘,手感,很好}

那么得到了这些项集之后就要开始组合了,由于上述是无序的项的集合,也就是说 {手感,键盘,很好} 和{键盘,手感,很好 }是没有什么差距的,所以这一步就是为了进一步的处理项集,得到{键盘,手感,很好}并将其作为特征。

还有一种算法叫做是Redundancy Pruning,在这一步之中我们关注丢弃那些仅仅包含Single Words的Features,为了描述Redundancy Features的含义,使用了p-support的概念,假设一个特征的p-support 小于Minimum P-support ,并且特征是另外的一个特征的子集,我们就将它丢掉,比如说Life 这个特征在Battery Life面前就显得没有意义,所以我们将Life这个特征丢弃。比如说Life在文中出现了10次,而Battery Life仅仅出现了4次,这时候的P-Support 就是4.

 

Opinion Words Extraction

有了Features之后就是对于Opinion的挖掘,首先给一个定义,如果句子之中包含了一个或者是多个特征,并且包含了一个或者是多个Opinion Words的情况下,我们就认为这个句子是一个Opinion Sentence,通过下面的算法发掘Opinion Words. 【Mining and Summarizing Customer Reviews】

也就是说,对于一个句子而言,如果之中包含了Features,我们就找到他周围的最接近的那一个形容词,标记为Effective Opinion。

Orientation Identification for Opinion Words

找到了Opinion Words接下来最重要的当然就是看这个词语的极性是正还是负,这个就是非常传统的词典法,不过在这里对于词典进行扩张,扩张的方法是认为词性相近的词语会倾向于在一个聚类之中,那么对于Seed Words周围的词语进行筛选就可以得到扩张之后的词典,这个方法也是非常的常见的方法哈,在18年的ACL还有人使用Word2Vec对于词典进行扩张最后就中了一篇。

Infrequent Feature Identification

之前的假设是有用的特征往往会是重复出现的,但是这个并非是绝对的关系,如何利用出现不那么高频的信息呢?文章使用的方法也是非常的巧妙,其使用Opinion来找特征,在上述流程之后,我们已经获得了Opinion,那么在Opinion之中如果依旧有一些尚未被挖掘到的特征词,我们就将其作为低频特征。

这个思路非常舒服也非常自然,并且这时候我们就可以开始套娃了,将低频特征再加入到上面的Opinion Word识别之中,然后再识别新的Opinion,再重复流程,那么这里经过几轮循环之后就可以得到更合理的Raw Material为下一步做好了充足的准备。

Prediction The Sentence

一切具备之后就是对于观点进行预测了。【Mining and Summarizing Customer Reviews】

对于每一个句子而言,先设置其Orientation也就是极性为0,然后对于之中的Opinion Words,进行简单的计数,如果是正的就加一,如果是负的就是减一,到最后看整体的极性的大小的情况。如果最后的情感是0的话,再进入内部的迭代机制之中,对于每一个特征都计算其情感极性,再相加作为整体极性,实现的方法估计是找最近的Opinion。

这个感觉有点奇怪,怎么是以句子作为基础单位?难道不是以特征作为基础单位吗?自己的一种理解是这样的,特征是包含在句子之中的,那么一个句子之中可能会包含多个特征,这里的拆分是一个很困难的操作,所以使用它的父级(句子)作为子集(特征)的代替。这样的方法在多特征的情况下可能会有一些问题,但是由于这种情况也不多,对于结果的影响并不是特别大,而且这也不是完全不合理的做法,其道理也还是很OK的。

然后就形成摘要了,这个形成的过程很简单我就不在这里赘述了。

 

Comments

这篇文章的思路还是很流畅的,如果在特定的时代背景(2004)下来看,确实是非常有意义的,这里使用Apriori算法来挖掘相关的词语这一点让自己还是感到蛮吃惊的,在自己的印象之中Apriori一般是用来做推荐系统这方面的工作的,而将其使用在自然语言处理领域自己的确也是第一次见到。而扩充种子词这也是自己见过的最早的一篇这样的工作吧(应该还有其他的,只是自己孤陋寡闻),其中的判断情感极性的过程还是蛮传统的,不过在当时似乎也没有什么更好的解决的方式,最后的正确率和Recall其实都是蛮好的结果,Average 的正确率有85而Recall也有69.

现在使用统计的方法来做NLP的确实不多,就算是有,也只是作为Auxiliary信息使得模型进一步的提升,而不会作为主要的方法,但是统计信息的重要性是不言而喻的,因为相比于黑盒而言,这个东西使我们所可以更有掌控感的,也自然是更值得信赖的。从这些经典的文献之中学习NLP不意味过时,相反更是一种积极的研究的态度。自己也要再对于一些经典的算法进行复习吧。

再提一嘴,看很多的工作感觉都可以使用Reinforcement学习的方法进行加强,倒也不知道是真的可以还是自己手里拿着锤子所以看什么都像是钉子。

Reference

Mining and Summarizing Customer Reviews