淘宝的评论归纳是用什么方法做到的?
文章目录
越来越多的人选择在网上消费,并且越来越的证据表明商品的评论信息会影响到消费者的消费决定。评论挖掘的主要任务是从评论中了解到用户对产品的哪些功能、属性进行了怎样的评论,并抽取成简短有效的信息。
评论挖掘主要有以下几个子任务:
识别、抽取产品特征
产品特征分为显示特征和隐含特征。
- 显示特征 显示特征是直接出现在产品的评论中,描述产品的性能或功能的名词或名词短语。
- 隐含特征 隐含特征没有在语句中直接进行描述,需要对句子进行语义理解才能得到,提取隐含特征需要自然语言的完全理解技术 。 特征词满足以下三个条件之一: (1) 给定评论对象的一部分 (2) 给的评论对象的一个属性 (3) 给定评论对象的一个部分的一个属性 特征提取分为人工标记和自动提取两种方法。人工标记一般由领域专家来完成。 自动提取过程:对语料进行词性标注,提取其中的名词短语,利用关联规则挖掘出频繁项,在频繁项候选集上做密实度修剪和冗余修剪,去掉无用的短语和合并相似的短语。
特征语意去重
首先介绍一下什么是词向量和语言模型。 (1) 词向量就是用来将语言中的词进行数学化的一种方式。有了词向量之后就可以对词进行聚类、分类、计算相似度等等。 (2) 语言模型就是用来计算一个句子的概率的模型,简单来说就是判断一句话是不是正常人说出来的。常见的应用场景:机器翻译、语音识别得到若干候选之后,可以利用语言模型挑一个尽量靠谱的结果。
特征词去重采用聚类的方法对特征词进行聚类,归属于同一类的即为同义词。其中判断词语的相似度,采用计算特征词的词向量,然后计算向量间的相似度(例如计算向量夹角)的方法。
关于同义词聚类,Google推出的Word2Vec是一个不错的工具,关于Word2Vec的介绍请参考之前的博文:自然语言处理之Word2Vec
http://blog.163.com/xh_ding/blog/static/1939032892014312102457581
识别产品特征对应的观点词
对评论语料进行词法和依存句法分析生成三元组:
<Attribute, Subject, Value>
Subject:产品
Attribute:特征
Value:特征观点
分析评论的情感及强度
把用户评论句子切分为只包含一个特征词的短句并将评论抽象概括为<Holder, Topic, Sentimentl>
。
采用基于情感词典的方式计算短句的情感得分:
$$Score=sum_{ w_i in V} frac{S_w}{dis(w_i, f)}$$
$w_i$ 代表句子中的情感词
V代表情感词典中情感词集合
$S_{w_i}$代表$w_i$在情感词典中的极性值
$f$代表该句子中的特征词
$dis(w_i, f)$代表在句子中情感词$w_i$与特征词f之间的距离,距离越远情感词$w_i$对特征词f的影响越小,因此赋予的权重也越小。
在此基础之上应用否定词、转折词规则以及基于上下文情感的连词规则和蕴含连词规则。最终计算得到短句的情感倾向得分。
后记
以上是针对中文的用户评论挖掘的一个大致粗略的过程。
在去年暑假的时候我们实验室为一家公司做了一个导购网站,其中用户评论挖掘这部分是一个特点,当时淘宝、京东等各大电商网站还没有或者刚刚开始注意到用户评论的这个点。我做的就是用户评论挖掘这一部分,主要是对每一件商品的每一条评论进行处理,最后得到每件商品的优缺点(以标签的方式呈现,算是短摘要)以及关于该商品的优缺点长摘要(摘要是根据每件商品下的评论得到的,较客观)。主要步骤是: 1、得到每件商品的所有评论。 2、对每条评论进行分词 3、对分词后的词语配合本地的词库进行聚类,形成语料库。这一步说的简单点就是将所有的同义词归为一类。比方说,价格 价位 价钱 售价归为价格这一类。 4、建立情感词,主要是形容词和副词的情感语料库。 5、根据情感词以及情感词位置判断分句的情感取向。 6、标记属性词和情感词的位置,为以后高亮显示做准备。
另外,我们还做了商品推荐、评论质量排序等功能。由于我们只是做了手机、平板电脑两种商品,所以较简单一些,其中一些可能还不够准确,如有不对的地方请指正,谢谢。
- Nginx性能优化
- linux 如何正确的关闭mongodb
- 运用Aggregator模式实现MapReduce
- vue 2 使用Bus.js进行兄弟(非父子)组件通信 简单案例
- spring boot项目在外部tomcat环境下部署
- 利用Actor实现管道过滤器模式
- SpringBoot整合Quartz定时任务 的简单实例
- 从机器学习学python(一) ——numpy中的shape、tile、argsort
- 剖析响应式编程的本质
- 从机器学习学python(二) ——iteritems、itemgetter、sorted、sort
- 基于MVC理解React+Redux
- JavaScript的IIFE(即时执行方法)
- 从机器学习学python(三) ——数组冒号取值与extend
- 从机器学习学python(四) ——numpy矩阵基础
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 剑指Offer第4题详解(附Java、Python源码)
- 帅地问我:Dubbo服务调用过程
- 用两个栈实现队列详解(附Java、Python源码)——《剑指Offer》
- PS2020制作电子签名
- 原创 | 险些翻车,差一点没做出来的基础算法题
- 原创 | 你追我,如果你追到我……那就算你赢了
- 原创 | 详解gitignore的使用方法,让你尽情使用git add .
- 第31天:面试比 KMP 还容易被问到的匹配算法!
- 原创 | 深度学习开篇,来聊聊感知机的原理
- 算法题:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
- 使用Java和Python解题:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
- R语言中%||%是什么意思?
- 原创 | 你会用缓存吗?详解LRU缓存淘汰算法
- 用Java实现:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。
- Hacking with iOS: SwiftUI Edition - Hot Prospects项目(一)