Mining and Summarizing Customer Reviews 总结

前言:本文是针对2004年发表的Mining and Summarizing Customer Reviews(Minqing Hu and Bing Liu, 2004)论文进行总结。本文将分为三个部分对原文进行解读。第一个部分是对论文进行简单的介绍并且介绍其衍生由来,主要关联原文的Abstract,Introduction以及Related work部分;第二部分则是对核心算法的详细介绍,主要针对原文第三部分;最后一部分则是对本文的结果进行总结探讨并提出自己的看法。

————————————————————————————————————————————————

一、文章简介

本文是于2004年提出的针对用户评论挖掘总结的算法。这种挖掘主要针对用户对产品的某一个功能特点发表的正面或者负面的意见。在Abstract部分,作者说明该算法和传统的总结任务不同,作者提出的算法模型并不打算针对用户评论进行一个全面的精炼总结,而仅仅是针对那些可能涉及产品功能的句子进行总结。作者在此便抛出了该算法的三大步骤,分别是:1.首先挖掘评论里面用户提及的产品功能特点;2. 找出用户对该特点表达的意见,并且分析该意见到底是正面还是负面;3.对整体结果进行总结。

来到原文的introduction部分,作者再次对任务进行了详细的定义,我就不再重复说明了。这里给出原文里作者给出的一个例子来说明他想表达的意思(见下图)。

上图是该模型预想的输出总结。该例子的假想商品是一个数码相机,并且模型挖掘出了评论里面提到的两个功能特点,一个是画质一个是大小。针对每个特点,再分布归类出两类不同的评价,分别是正面的和负面的。

接着作者再次说明了下为什么这种总结和传统的总结任务不尽相同:首先,这里的总结是已经结构化的,而不是对文本进行自由形式的总结;再者,这里的总结只对该产品的特点和针对该特点的评价感兴趣,其它都不会加入到总结里面。所以自然而然地,该模型也不会对原来的评论进行任何改写或者缩写,这在传统总结任务中则是很常见的。

作者又对前面提到的三大步骤进行了详细的说明:第一步,挖掘评论里面提到的产品功能特点。在这一步作者会使用一些常见的数据挖掘和自然语言处理的算法;第二步,决定每个针对功能特点的评论的正负性。作者又把这一任务细分成了三小步:1.通过自然语言模型提取出语句中的所有意见词,所谓意见词在本文里就是指那些用来表达意见的形容词;2.对每个意见词,试图决定其正负性,这一步会牵涉到使用WordNet模型,作者将会在后文详细介绍;3.最后,用一个作者提出的算法对整个语句的正负性进行判断。以上就是对意见评论分类的步骤;第三步,总结上面的结果并且输出前面提到的那种形式的总结。

作者接下来又介绍了自己的工作和以前的一些类似工作的异同,并重申了这种总结形式的独特性。这里我就不再赘述,感兴趣的读者可以直接去阅读论文第二部分的相关工作。

二、论文核心算法解读

在论文的第三部分,作者终于对其核心算法进行了讲解,首先他给出了自己算法的结构图如下。

上图是整个任务模型的一个结构流程图。我们来自上而下的进行一个大体解读。首先在该图左上角是对用户评论进行爬取并且存入数据库,然后通过箭头指向的部分便是第一步对用户提到的产品功能进行挖掘。这里首先会优先挖掘那些被用户频繁提到的常见功能。接下来,在找到了这些功能特点之后,便对其周边的意见词进行提取并进一步决定其正负性。使用提取出来的意见词,我们再进一步找到那些比较‘冷门’的功能特点。最终我们决定每一个意见句的正负性并生成总结。

接下来我们就根据这个脉络来对每一个细节来进行逐步说明。

1.POS-Part of Speech Tagging

词性标注是一个常见的任务,作者之所以在这里进行标注操作,是因为更好的提取出产品功能。作者提出一个先验的经验判断,任务大多数的产品功能都会以一个名词的形式出现,所以一个句子进行词性标注很重要。这些标注好的语句是一个XML文件,又会存入到关系数据库里面。并且为了下一步做准备,生成一个文件,该文件每一行针对原评论的一个句子,并且只保留句子里面的名词和名词短语成分。在这一步,作者同样进行了去停词和stemming操作。作者还用了一个预处理方式叫做fuzzy matching,这个主要是为了处理用户评论里面单词的错误拼写问题。

2. Frequent Features Identification

接下来便进入了对产品功能特点进行提取的步骤,这里首先要提取的是一些常被提及的功能特点。首先作者申明,一个产品功能的提及通常有直接和间接两种方式。比如,“这个相机的画质十分清晰”,这里便显然是一个对画质特点的直接提及。再比如,“这个相机很适合揣在兜里”,这个地方便是一个对尺寸特点的间接体积,因为句中并没有说出尺寸二字。作者表示,该模型只会处理任何直接提及的特点。

作者使用了协同挖掘(association mining)的方法来提取常见的特点。

//TODO

使用该算法的原因主要是以下几点:首先,一个用户的评论里面可能会出现一些和产品功能不怎么相关的名词和句子;其次,不同的用户会有不同的说法,但是不论怎样,当他们提及到某一个功能的时候往往还是要使用相同的词语。所以,优先找到大家都在提及的常见词语组合有利于找到重要的产品功能;

在本文里,作者定义的“常见词语集合”指的是那些出现次数超过全文1%的词语组合。所以这些词语集合都被看作是候选的常见功能。同时,正因为不是没一个候选集和都是功能,所以还要使用一些剪枝的办法。比如Compactness pruning检测那些含有两个词以上的集合,并且删除一些明显没有意义的组合。因为协同挖掘不考虑词语之间的顺序,所以使用这种pruning可以排除那些不按照某种顺序出现的词语集合。另一个pruning办法叫做重复性剪枝,主要是针对那些只有一个词的词语集合。首先引入一个概率叫做pure support(p-support):一个功能(feature)的p-support指的是其作为名词或者名词短语出现在的句子的数量,但这些句子里面必须不包含其他的是该功能词语集合母集的功能短语集合。作者将p-support值设定为3,换句话说,任何一个名词词语如果没能独立的出现在三个不同的句子里面就会被筛掉。一个简单的例子是,寿命这个词可能不会独立地作为一个功能词出现,但是电池寿命就是一个功能特点。

3.3 Opnion Words Extraction

接下来就到了意见词提取的部分。意见词的提取主要基于一个重要的假设,那就是主观意见的表达往往是通过形容词来完成的。作者援引之前的工作,表示已经有证据显示形容词的使用和主观意见表达有着很强的相关性。所以,之后的工作都将基于这一假设,提取重要的形容词。

作者接下来重申,在这篇论文里面,表达意见的意见词,就是形容词。但是,我们并不需要提取所有句子的形容词,我们只需要关注那些出现了至少一个功能特点的句子。接下来作者给出了意见句的明确定义:如果一个句子同时包含一个以上的功能特点词,以及一个以上的意见词(形容词)我们则将其称作一个意见句。我们的任务就是从这些意见句里面提取意见词。提取的算法如下图:

从这个算法不难看出,我们首先要提取出一个意见句里面所有的形容词,然后针对句子里的每一个功能特点,我们寻找离他最近或是相邻的形容词并将其设定为有效意见词(effective opinion)。我们通过一个句子来说明。比如,“这个相机的带子真糟糕,它挡住了那些你需要使用的部分。”这个地方,真糟糕就是一个有效意见词。

4.Orientation Identification for Opinion Words.

这个地方就是对意见词进行正负性判断。作者首先介绍了一下我们要使用到的一个工具,WordNet,这个模型就是一个巨大的词语图。在这个模型里面,形容词被划分为两极的聚类(bipolar cluster)如下图:

从图中不难看出这个聚类的意思。首先左右两边分别是代表快和慢两种意思的形容词,中间用一个虚线箭头隔开代表反义关系,而每个半边周围的那些词就是卫星词,这些词和中心词的关系用实线箭头表示,代表相似语义。

首先,我们并没有每一个形容词的正负性标注,所以我们要依靠它的同义词来进行推断,我们可以假设同义词之间正负性相同,反义词则相反。那么对于每一个形容词,如果我们能在它的同义词或者是反义词集里面找到已知的正负性,我们也就能简单的推断该形容词的正负性。我们事先人工标注一批形容词作为种子词汇,然后来逐步迭代的推及所有形容词。在这里,作者仅选择了三十个不同的形容词来进行标注并作为种子词汇使用,并把它们和WordNet结合在一起使用。另外,如果我们通过同/反义词确定了一个词的正负性,那么我们就将这个词也加入我们的种子词汇列表当中进行迭代。具体算法如下。

第一个函数OrientationPredicition接收一个种子词汇列表还有一个需要判断正负性的意见词集合通过迭代的调用第二个函数OrientationSearch知道没有新增的种子词汇。

第二个函数OrientationSearch则负责判断意见词的正负性,首先它检测这个词在wordNet里面的近义词集(line5-7),看是否有近义词在已知的种子词汇里面。如果有则让该意见词的正负性,等同于那个种子词汇并加入到种子词汇列表里面;如果没有遍判断其反义词集(line8-10),只不过反义词的正负性和该词是相反的。如果近、反义词里面都没能找到种子词,则我们跳过并判断下一个词。

5 infrequent Feature Identification

之前我们提到了用意见词寻找不常见功能词的办法,这里做一个详细介绍,算法如下:

原理十分简单,当我们通过前面两个步骤找到了所有的opinion words之后,我们再去寻找那些没有出现常见功能特点但是有意见词的句子。我们可以通过记录离意见词最近的名词或名词短语,来找出不常见的功能特点。作者也指出,这种简单的启发式搜索,可能带来一些错误。比如人们经常在评论区对不同的食物表达看法,不一定是想要寻找的商品功能。但是作者通过自己的实验,说明这并不是一个太过严重的问题。

6. Predicting the Orientations of Opinion Sentences

最后,我们需要来决定每一个意见句子的正负性。在这里作者采用的是一个简单多数的办法,一个句子里面,正面的意见词多,则这个句子也算是一个正面评价,反之则是反面评价。当一个句子里正面意见词和负面意见词数量一样的时候,我们则通过有效意见词的平均值来决定句子的正负性或者直接采用前一个句子的正负性。算法伪代码如下:

首先SentenceOrientation函数用来处理刚才提到的三种情况来最终决定句子的正负性。第一种情形,正面或者负面的形容词占多数的情况下,我们可以轻松的决定这个句子是正面还是负面的(Line5-10)。当正、负意见词数量相等的时候,我们则对句子中的每一个功能特点词的有效意见词的平均正负性来决定这个句子的正负性(line12-18)。当以上两种情况都不满足的时候,我们就延用上一句的正负性,这是因为我们假设一个评论里面上下句之间的语义情感不会有太大的转折。在函数wordOrientation里面,我们要注意一个问题,如果一个意见词附近(在论文里面,邻近词范围设定为5个词以内)有but,not这类的转折词则我们要取这个词的正负性的反值。(line 4-6)

7. Summary Generation

最后一步则是生成一个总结,这个总结的格式之前已经展示过了。这一步可以说总体上没有什么复杂的,可以简单的分为两个大步骤。第一个步骤是对于每一个我们找到的功能特点,我们把所有的评论句子分为正负两类并统计一下每一类有多少。第二步,则是对所有提取出的功能特点按照它被提及的次数,进行一个排序,把最频繁提到的放在最前面。当然你也可以按照别的方式进行排序。

三、总结

在最后,作者爬取了五个不同的商品的评论来进行比对实验,得出了平均0.693的召回率,以及平均0.642的精确度。而对句子情感分析的准确度更是高达0.842,算是一个比较不错的结果了。但可能是因为这个系统提出的时间较早,在当时算是开创性的成果,所以作者没有办法去和其它的baseline进行一个比对。不过0.7左右的召回率和精确度算是一个比较不错的挖掘模型了。而0.8以上的准确度在句子情感分析上面也算是一个很不错的结果了。

接下来就说一下本人对这篇论文的工作的一些浅薄见解。首先,由于这篇文章发表的时间较早,那个时候NLP工作可以说是还在语义学,语言学,语法结构等早期阶段。连著名word2vec这种分布式词向量表达都还有十年左右的时间才能够问世。作者便可以通过一个精巧但完全不复杂的结构将评论提取这个工作完成,可以说是很具有开拓性的工作了。纵览本文的每一个小算法,其实可以看出并没有什么特别复杂精巧的设计,但是却用到了很多先验的经验知识。比如说,意见词往往是形容词,近义词的词语感情一般相同,以及人们谈及某个功能时往往都倾向于使用相同的词语组合等。这些常识性经验性的设计,虽然不是完善的,但却足够给我们提供有效的一个启发式搜索的框架。作者大量的运用这些先验知识,使得算法变得简单,也同时易于完成。当然,这种主要依靠与先验知识的算法,在今天来看可能不够强大,并且几乎完全没有利用每一个文本里面后验的信息。时间来到2019,文本总结仍然不能算是一个已经解决的问题,甚至还是处于有待突破的阶段。那么这篇文章能不能给我们现在的工作带来一点启发呢?我的感觉是,这篇文章有非常多值得学习的地方。一个是针对关键词进行提取的方法,它节省了大量运算,并且还为我们避免了干扰信息。另外一个,则是整体框架的设计。这个算法目标明确,只是针对产品特征进行识别,并且总结对它的评价。然后再把这个大的任务细分为寻找特征词,寻找意见词等一个个子任务。虽然我们现在提倡端到端的模型,但是在一个任务尚未攻克的阶段,把大任务拆解为子任务来解决也不失为一个折衷策略。随着今天,POS,语义情感分析等子任务技术的进步,我们分别在每个任务上都取得了更高的得分更好的模型。那如果我们把现在这些新模型作为子任务带入到这个框架当中,是不是能取得更好的成绩呢? 另一个个人比较在意的地方是关于放弃间接提到的特征功能词这个地方。局限于当时的NLU技术的发展水平,作者显然只能够把这个问题搁置起来。但是我们人类的表达是非常多样的,搁置了间接表达的部分势必会影响到这个模型在更多场景的引用。那么在NLP技术得到长足进步的今天,我们又是否能把这个搁置的问题捡起来,进一步改进这个模型呢?总而言之,从这篇文章中,我学习到的不仅仅是算法和技术。而是一个好的框架,怎样能够把复杂问题简单化,以及合理的利用先验知识,其实能有效地提升模型的底线。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值