绿山咖啡,听名字好像有借势营销的嫌疑。不过,绿山咖啡并不是咖啡产地,咖啡品种。而是创始人罗伯特·斯蒂勒(Robert Stiller)1981年在美国创建的咖啡品牌。绿山咖啡挑选了世界上最优质的10%的咖啡。在环境责任和咖啡农业上,也有更深刻的想法。1986年,绿山咖啡公司就开始尝试绿色环保的资源回收计划。2002年,还加入了公平咖啡贸易。公平贸易就意味着,咖啡商要用高出市场的价格,购买咖啡农的咖啡原豆。还要帮助咖啡农提升种植技术,教授生态永续的种植方式。解决水资源问题,让他们的家庭有蔬菜吃,孩子有学上,……农民不必为市场忽低忽高的股价担心,只须一心一意,做好咖啡种植的每个环节。这不仅是为咖啡产地的现在,也是为了他们的未来着想。
2,不开实体店的咖啡,只卖这几样。
然而绿山咖啡在很早就关闭了自己的实体店。他们说服埃克森美孚,将自己的咖啡引进美孚的超市,给超市带来更多营业额。还将自己的咖啡直接进驻到北美各大公司。其中,绿山做了最了不起的两样东西——Keurig咖啡机和K cup。Keurig是专门和K杯配套使用的咖啡机。K杯就是我们熟知的胶囊咖啡。绿山咖啡除了安迪喝的袋装咖啡豆,在办公室最常见的就是它家的咖啡机和K杯了。当时Keurig咖啡机的售价非常便宜,只要100美元左右(范主查看了一下最新款已经是369.99美元啦)。配套的K杯胶囊,24个组合装也只要12美元,相当于0.5美元一杯的价格。(如今售价还是在12.99-14.99美元不等)。绿山咖啡的创始人曾经有一句这样的名言:“为什么一次要冲一壶咖啡呢? 我每次只喝一杯而已。”低廉的咖啡机,加上快捷的K杯胶囊,让爱咖啡的美国人再也不用担心洗杯子、煮咖啡、换滤纸这样麻烦。
而且相对于星巴克,绿山咖啡走的是低价销售路线,K杯的咖啡品质也一直有标准。北美的很多办公室都换上Keurig咖啡机,这样员工就再也没有理由抱怨办公室的咖啡难喝,要溜出去喝咖啡了。2010年,绿山咖啡被《财富》周刊杂志评选为全球发展速度最快的公司TOP2,这个名字略山寨,但是低调的巨头 。K cup一年可以卖出10亿杯,杯子连起来,可以绕地球……(不对,范主说的这个广告词好想不是绿山咖啡的)反正,绿山咖啡的K杯是非常有效而永续的消费产品。
拥有K杯多项专利的绿山咖啡,还非常明智的选择开放自己的K杯专利给其他饮料商使用。所以,除了绿山自身的咖啡产品,你还可以喝到立顿的茶、星巴克的咖啡、可口可乐的产品,等等。Keurig咖啡机的普及度让其他饮料商也来分了一杯羹。绿山也赚到了每杯饮料,大约6到7美分的K杯使用费。
2015年12月,这个拥有“咖啡界利乐包”K杯产品的绿山咖啡,被德国财团以139亿美元的价格收购。
我在 《爬取百万页面 分析用户画像》 中分析了用户的书籍喜好,这里继续尝试通过影评文章的抓取、内容清洗、影评句子提取,建立机器学习情绪预测模型,挖掘分析用户对流行电影的喜好。
涉及的NLP(自然语言处理)知识点:
涉及的ML(机器学习)知识点:
电影的拍摄成本高、票价也不低,消费者投入的关注度和观看成本高(最终的投入成本是包括注意力投入、金钱投入、时间投入和感情投入)。
简单算下观看一部电影的成本(步骤):先看下预告内容,做下同期上映电影的比较,觉得导演、演员阵容都不错,下定决心要看了,跟男/女友/老婆 /老公/基友/闺密做推荐,推荐成功后去选座买票,观影当天说不定还得先吃个饭,饭后乖乖的在影院呆上90分钟(关键时刻还得憋尿),观影结束后指不定还得来个夜宵、开个房间探讨下人生什么的。。。
读一本书的成本(步骤):1.打开书/电子阅读器/手机;2. 读!
这样对比看一部电影比读一本书的投入成本高多了!
因此观众给出的反馈自然也比书籍会强烈一些,特别是满怀期待看完却发现是一部烂片,有种上当受骗的感觉。
因此对电影光是通过词频作为喜好度是不够的,用户可能反复的在骂呢。
所以需要引入多一个分析的因子:情绪。用户提及某个电影时的情绪是怎么样的,是积极愉悦、还是负面愤怒,加上这个才能有效判定用户对电影或者某个事物的喜好。
在豆瓣上,用户的评分就是最直接的情绪数值:5力荐,4推荐,3还行,2较差,1很差。
但在这类写作平台上,发布文章时是没有一个选项来填写分数,也没提供选择心情的选项。
“所言即其所思”,这是普遍人性。每个用户写下的文字表达想法,在字里行间都会不经意的使用一些情绪用词来表达,这些便是我可以获取的“原始数据”。
精准推荐!用户谈论得多的东西未必是TA所喜爱的,也许是TA痛恨的(比如说前任)。如果用户在自己大力差评某部电影的文章底部看到另一部相似烂片的推荐,推荐文案还写着“亲,我猜你还喜欢看这些”,估计这用户会有种吃了苍蝇刚吐出来发现迎面又飞来几只的感觉。
通过用户在讨论某事物时上下文的情绪分析,来判断对该事物的喜恶,将预测结果加入对事物的打分计算中,最后得出一个可量化、可计算的分数值,便是一个精准推荐系统的需要解决的问题。
理论上只需要一句话:要识别出文章中提及的电影,以及作者对该电影的评论,是好评还是差评,作为文章作者对该电影的喜恶,并根据评论的情绪强烈程度转化为喜恶程度即可。
那实际上,就要解决以下问题:
下面逐一细说。
我采集了上几个比较受欢迎的电影专题以及一个大V帐号文章(数据截止至采集数据时):
但由于对专题页面加了访问限制,每个专题只能访问到最新的200个列表页面,因而每个专题可获取2~3000篇文章,以此作为抽样数据样本。
要分析对电影的评价,首先就要获取到文章中提到电影名称有哪些,最简单的匹配规则便是提取书名号 《》 内的内容。
而实际获取到的电影名称真可谓“脏乱差”,有电影名、书籍名、文章名等,有些电影名称会用缩写引用(如《变1》、《复联》、《生化危机4/5/6》),或者中英文混合在一起(如《机器人总动员(wall-e)》),甚至还有错漏别字(如《那些年,我们一起追过的女孩》,多了个“过”字),以及包含中英文特殊标点空白符号等,例如:
因此需要进行一轮“数据大清洗”,我使用如下清洗策略:
其中“电影专用词典”,是通过采集了 「猫眼 影片总票房排行榜」 2000~2017年间上榜的所有电影,约有3000+部,如图:
再根据文章中所收集到的电影名称的候选文本,抓取「豆瓣网」的官方电影名字(遭遇了豆瓣业内闻名的反爬策略就不多说了),合并去重后约有8400多部。看一眼才发现好多电影连听都没听过,有些电影名称还挺有趣,以后有时间还可以做下电影名称的分析。
为了解决错别字,我通过文本相似性算法,在电影专用词典里找出与之最相似名称。
知名的相似算法有不少,如:
经过简单比较,我选择了其中表现最好的 jaro_winkler_distance
运用到文章内容上,可得到相似电影名称,感觉效果还可以:
构建一个Pipeline用于提取页面中电影名称,对单个页面测试效果如下:
运用到所有页面上:
至此完成了电影名称的提取、清洗,得出每篇文章提及的电影名称,如图:
判断一篇文章的情绪,最简单的做法是通过提取所有情绪词来统计下词频及其权重可得到一个粗糙的结果,但这样的结果对“影评”类文章不是很准确。
根据观察,一篇电影评论文章中,往往会有大段的电影情节描述,然后夹杂一两句评论。而有些电影本身剧情就是比较负面、阴暗的(如灾难片类的),但影片本身质量很高(如《釜山行》,豆瓣评分8.2),如果文章内容包含大量的剧情描述,那么得到关键词会偏向于负面情绪,并不能用于表达出作者对电影的喜好情绪。
因此我使用了这样的提取策略:
评论句子提取的结果示例如下:
这样的策略对有些内容不是很适用,例如这样的标题:《同样是豆瓣9.2分,它或许比《摔跤吧!爸爸》更深》,这是典型的“借势营销”型文案,文章内容中推介的是另外一部韩国电影《熔炉》,而时下《摔跤吧!爸爸》正热,标题中带上这个会更吸引用户点击。
另外一个思路是对文章进行摘要提取,然后对摘要进行情绪识别。而对于文章的主题提取,可以使用在ML算法中的用于解决 主题模型 问题的算法(如LDA),但不确定是否适合影评这种混合了大量剧情描述的文章内容。
得到相关评论文本后,便可对文本进行分词及情绪识别,这里有两种做法,一是使用带有情绪情感度的专业词典,配合专有算法;另外一种是使用机器学习算法。
一开始我使用了大连理工大学的《大连理工情感词汇本体库》,是目前最权威的中文情绪词典,共含有情感词共计27466个,包含了词语的词性种类、情感类别、情感强度及极性等信息,例如:
中文情感词汇本体的情感分类体系是在国外比较有影响的Ekman的6大类情感分类体系的基础上构建的。在Ekman的基础上,词汇本体加入情感类别“好”对褒义情感进行了更细致的划分。最终词汇本体中的情感共分为7大类21小类,如图:
把情感词典加入分词词典,对候选每个句子进行分词,得出情感词组,并累加每个情感词的强度值作为句子的情感值。
但经过测试后,发现预测效果并不理想,究其原因发现是情感词典中命中的词语太少,在句子中得不到相关词语,也就无法判断情感极性和强度。
使用情感词典的测试结果:
而专业词典的扩展需要专业领域知识,扩展起来很困难,我目前没找到更新的专业词典,国内这块的资料相当匮乏,而国外有个知名的SentiWordNet库,中文NLP研究的难度系数可想而知。
鉴于情感词典的资源限制,决定尝试使用机器学习来对文本做正、负面情绪预测。
1). 构建分词词典:
分词需要构建专用领域的词典,这样得到的分词结果才会更精确。
因为只需要有正负情感类别、不需要有情感强度及极性等信息,我使用了网络上公开的一些情感词典,:
合并、清洗和去重后,最终构建出了 14000+ 个词的积极情绪词典, 18000+ 个词的消极情绪词典。
积极词典:
消极词典:
2). 准备训练语料
从网上搜集到几个带有积极、消极的标注的评论语料数据集,分别包含了书籍、DVD、音乐、购物领域的各有4000条评论,如下图:
可惜没找到中文影评相关的语料,但找到 国外英文的影评语料 ,对,英文资料很丰富。。。
3). 训练模型
由于是文本型特征,分类算法上选择了 朴素贝叶斯 ,把数据分为2份,一半训练,另一半做测试。
使用 jieba 分词工具,对文本进行分词得到候选词组,把得到的词组作为特征输入来训练情绪预测模型。
训练后的模型测试结果如下:
训练后的模型在书籍、音乐、影碟及购物评论的语料上都有不错的效果。
在提取出的影评短句上测试:
又是“无聊”、“又俗又傻”而一个“但”字就反转了情绪,真是难为分类器了:
经过反复对比实验,发现语料的质量决定了模型的精度,而语料的扩展对比扩展专业词典却容易多了。例如几年前都没有“ 因吹斯汀 ”这些网络流行词,更不知道它代表是正面情绪,以后只要不断更新相关领域的语料库来重新训练则可得到更精确的模型。
俗话说“是骡子是马拉出来遛遛”。
得到一个预测情绪的模型后,便可对影评文章进行预测,但预测的结果是否准确?准确率又有多高?这又是个问题。
每当事情陷入停滞,我就会想起日本漫画大师安达充说过“当故事情节发展不下去的时候,加入一个新角色,是最简单的做法”。
这时需要祭出一个“旁证”了。这所谓的“旁证”,也就是目前大家比较认可的电影评分网站——豆瓣网。
大家都知道豆瓣网上的电影用户通过打星(5力荐,4推荐,3还行,2较差,1很差),转换得出的10分制的评分,我们可简单把1 4.9分视作负面评价、5 10分视作正面评价,没有分数的视作中性评价。再把豆瓣的评价结果视作大部分人认同的结果,当然这样肯定是有偏差的。
大胆假设,小心求证,先试试看吧。
根据电影名词典再次去抓取豆瓣网上的电影信息,这次包含了电影分数::
使用获取到的电影专题『电影院』文章内容测试,结果如下:
1048篇中,豆瓣评分结果与模型预测符合的有974篇,准确率是92.9%,WOW!真的这么准吗?
看下详细结果,豆瓣评分是正面的有1022条,预测对了973篇,例如:
而豆瓣评分是负面的有28条记录,而模型只预测出1篇是负面的:
真的是模型预测错了吗?
从负面例子中抽样看看模型分解的结果:
评论《麻烦家族》(豆瓣评分4.8)的:
从自动摘要出来的句子来看,实际上文章作者表现出正面情绪,模型预测为正面,预测正确
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)