专栏名称: 数盟
数盟(数据科学家联盟)隶属于北京数盟科技有限公司,数盟致力于成为培养与发现“数据科学家”的黄埔军校。 数盟服务包括:线下活动、大数据培训。 官网:http://dataunion.org,合作:[email protected]
目录
相关文章推荐
数据派THU  ·  成功率可达100%,药物开发公司Cellar ... ·  3 天前  
数据派THU  ·  AAAI2025|只根据题目和摘要就能预测论 ... ·  3 天前  
CDA数据分析师  ·  【干货】画用户画像与找相亲对象一样简单 ·  2 天前  
大数据文摘  ·  谢谢Deepseek,o3-mini发布即免 ... ·  6 天前  
51好读  ›  专栏  ›  数盟

预测电影评级:NLP正是电影公司所需要的

数盟  · 公众号  · 大数据  · 2017-07-17 22:05

正文

不要把研究所需要的数据来源局限于专门提供电影评论的网站。像Twitter和YouTube之类的社交媒体在提供数据方面与这些网站不相上下。

作者 Tatsiana Levdikova

译者 CarolGuo

本文要点

用自然语言处理(NLP)技术来预测一个新电影的成功和票房情况

用电影观众的评论来预测电影的评级

电影评论的来源,包括提供电影相关数据的社交媒体

对社交媒体平台上所分享的电影评论和观点进行情感分析,有助于市场营销人员预测电影评级

电影评论的分析也可用于电影体裁的分类以及电影推荐系统的改进

电影评论和评级

众所周知,电影行业的利润很大。PwC的一份统计数据表明,2015年全球票房收入达到近380亿美元。如今人们被太多的选择弄得有些不知所措:2015年,仅北美就发行了690多部电影。然而,只有很少一部分电影能有很长的生命期。大部分电影很快上了Top排行榜,但是随着新作品不断涌现,这些电影很快又下榜了。

电影公司都知道市场竞争很激烈,他们的电影不一定能达到票房期望(譬如,2006年发行的“Superman Returns”)。他们很努力地提高成功的可能性,电影行业人士对成败的预测越来越感兴趣。有一些研究表明,电影的评级与后续的销售之间是有联系的。譬如,Gilad Mishne和Natalie Glance曾证明,在博客文章中引用电影与这些电影在经济上的成功之间是有很强的相关性的。

在选择观看什么样的电影时,人们倾向于依赖其他人的观点。事实上,除了电影评论家们,普通人也会在网络上分享他们的评论,这些评论可以作为丰富的数据来源用以预测电影的评级和票房。在进行电影评论分析时,可以使用自然语言处理(NLP)技术。这篇文章主要介绍如何将这些工具应用于分析中,并列出了开发人员所面临的挑战。

电影评论数据

有很多网站专门对电影和电视节目作出评论。烂番茄(Rotten Tomatoes)和IMDb跻身于最受欢迎的评论中心之列。电影评论不仅仅局限于这些网站,人们还将他们的观点发到电影论坛,发表到在线杂志和期刊。因此,研究者们可以免费提取到海量的数据。

人们也应该考虑社交媒体(如Twitter)上的帖子,因为Twitter上每秒大约有6000条推文发出。很多推文消息是关于电影的。Bernard J. Jansen等人对推文在网络口碑方面的威力进行了研究,他们在研究中演示了将Twitter作为分析数据的来源。

人们用标签来让自己的帖子可被搜索到,因此不难找到谈论电影的推文。然而研究者们不用手动地搜索推文。他们可以利用Twitter的Search API和Streaming API自动搜索。获取理想数据的另外一个选择是从中间商那里购买。YouTube也很有可能成为研究者们的一个丰富的数据银行。用户很积极地在电影预告片(官方的或非官方的)下面的评论中表达他们的观点。下图给出了对电影“La La Land”的官方预告片的部分评论。

一旦电影在电影院上映,Youtube自媒体和其他Youtube用户会向频道中发表自己的评论。研究者们也可以使用这些评论。可以先用语音识别软件将语音转换为文字,然后用语言学工具来分析这些文字。当然,专家们也可以利用人们对这些评论的点评。

为什么要用NLP

很显然,离开了电脑就无法分析电影评论。但是机器一般用于处理高度结构化的语言。这也是为什么它们自己不能理解自然语言(人类所说的语言)的上下文语境。

技术上的进步改变了这个状况,新的方法和算法使得计算机有机会理解自然语音。譬如,机器学习和自然语言处理借用不同的技术(如,基于贝叶斯和隐马尔科夫模型的技术)来识别语音和“理解”自然语音 。

应用NLP的目的是什么呢?譬如,NLP被用于各种问答系统,如Cortana和Siri。基于NLP的Summarizer能处理文本并创建简短的摘要。Text Summarizer就是解决方案之一,用户可以输入他们想获取摘要的文章,或者直接将文本解析到文本框里。NLP工具可用于识别语言、识别指定的实体和搜索相关事实。

情感分析是NLP的重要领域之一。它帮助机器发现文本信息中的整体倾向。在分析视频或录音时,技术工具可以轻松地发现其中的情绪。当涉及到文本分析时,任务就变得有些难度了。市场营销人员经常将NLP工具用于意见挖掘,来了解人们对一个产品或服务的想法。毫无疑问,电影制片公司可以用情感分析找出人们对某个电影的看法。

情感分析的精度

就电影评论的自动分类而言,研究者们可能选择一种现有的方法或者将几种方法组合在一起。每一个方法都非常准确,有些专家声称他们可以达到约65%的情感分类精度。他们也展示了将基于统计的、基于bag-of-words的、基于内容的和基于词典的方法组合在一起可以达到更高的精度(67.931%)。

将Intellexer SDK的三个组件(即:Categorizer、Comparator和Sentiment Analyzer)组合在一起用于分析酒店和餐馆评论时,也达到了类似的结果(75-83%的精度)。你可以在这里看到这些分析。

Intellexer Sentiment Analyzer是一个语言学工具,它利用语言学和统计学信息以及一组语义规则。

Sentiment Analyzer是如何工作的

我们来看看如何用Intellexer Sentiment Analyzer从烂番茄上对电影“Fifty Shades Darker”的评论中提取情感。例子程序可以从这里找到。如果自己运行该程序,你需要能访问Intellexer cloud API并已安装Python解释器。

下面是开始使用API的步骤:

创建一个账户。
阅读文档,选择适合你的任务的方法(analyzeSentiments方法适合用于电影评论的分析)。
执行GET/POST HTTP请求并解析响应结果。

电影评论被转换为JSON数组存放在POST消息体中,其中数组中的每一个元素包含有id(评论ID)和text(评论文本)。

有两种类型的权重(w):

观点的情感权重(如果是观点词,该值为负数或正数;如果是对象或ontology类别,该值为零);
评论的情感权重。这个参数用于对评论的整个文本进行分类,看是表达了正面的、中立的或负面的意见。

下面的代码说明了Sentiment Analyzer是如何工作的。

import json
import urllib
import urllib2
# JSON格式的评论列表
reviews = “””[
{
\”id\”: \”snt1\”,
\”text\”: \”I know that “Fifty Shades Darker” isn’t supposed to be good
— it’s supposed to be bad, in need of a spanking. This sequel is almost so bad that it’s
good, and if only the filmmakers would submit to making campy comedy of E.L. James’ naughty novels,
this just might be quality trash cinema.\”
},
{
\”id\”: \”snt2\”,
\”text\”: \”Fifty Shades Darker opens with a smack. Not the erotic sound of palm hitting rump,
but of junkies brawling as their 4-year-old son, BDSM-billionaire-to-be Christian Grey, cowers under a table.
Months later, his birth mother dies of a heroin overdose. Doing the math, she could have been shooting up with
fellow Seattle addict Kurt Cobain. The orphaned boy will be adopted by tycoons and upgrade from grunge to glam.
His childhood pain will mutate into a fetish for whips, slaps, and sad-eyed brunettes who look like his mommy —
a pathology diagnosed by a college kid who skipped most of Psychology 101. And so, in the film’s first five
minutes, Fifty Shades author E.L. James sets up the series’s strange sanctimony: You’re screwed up
if you think this sex-torture stuff is hot. But hey, isn’t it kinda hot?\”
}
]”””
# 设置POST请求的URL,指定用于信息处理的url和参数以及用于权限的API密钥(将YourAPIKey换成Intellexer API key)
api_url = “http://api.intellexer.com/analyzeSentiments?apikey=YourAPIKey&loadSentences=true”
# 输出已分类的观点
def print_tree(node, height):
for i in range(0, height):
print “\t”,
print node.get(“t”),
if node.get(‘w’) != 0:
print “\t”, node.get(‘w’)
else:
print “\t”
children = node.get(‘children’)
height += 1
for child in children:
print_tree(child, height)
# 输出响应结果
def print_response(response):
print “Sentences with sentiment objects and phrases:”;
sentences = response.get(‘sentences’)
for sent in sentences:
print “Sentence Weight = “, sent.get(‘w’), “\t”, sent.get(‘text’).encode(‘utf-8’)
# 输出已分类的观点
print “\nCategorized Opinions with sentiment polarity (positive/negative)”
print_tree(response.get(‘opinions’), 0)
# 创建一个Sentiment Analyzer API服务请求
def request_api(url, data):
header = { ‘Content-Type’ : “application/json” }
req = urllib2.Request(url, data, header)
conn = urllib2.urlopen(req)
try:
json_response = json.loads(conn.read())
finally:
conn.close()
print_response(json_response)
# 执行请求
try:
request_api(api_url, reviews)
except urllib2.HTTPError as error:
print ‘HTTP error – %s’ % error.read()

输出结果如下:

电影评论分析所面临的挑战

商业智能应用的提供商们必须解决一些挑战。下面列出了其中最常见的一些挑战:

一个评论中可能含有多个观点(甚至是对同一个实体有多个观点)。通常而言,句子级别(sentence-level)的方法不能发现关于每个实体和(或)它的切面的观点。基于切面的(aspect-based)方法更适合这种情况,因为它能评估同一个实体的两个观点。

中立或客观的推文可能改变整个评级。人们认为这种推文“仅仅是事实,不含有任何情感或观点”。

多义词和同形异义词。举例来说,根据上下文语境,单词“firm” 的意思可以是稳固的、结实的东西或商业企业、公司。

将名称与描述区别开来。也就是说,一个电影的名字可能包含“战争”或“怪兽”,NLP方法可能把它理解为负面的,从而使得整个评级有偏差。

使用指代。NLP方法在决定某个代词、名词或短语所指的对象时可能会遇到某些特定的困难。譬如,“我吃了午餐,还看了电影。它真棒。”

俚语是另外一个挑战。评论和推文中有很多俚语。譬如,有人可能说“That’s a bad shirt, man”,而实际上他们是在夸一个朋友。

讽刺和微妙之处:人们喜欢玩文字游戏,包括讽刺和反语。大数据解决方案并非总是能识别出深藏的含义。而且,还有一些与跨文化差别相关的讽刺。







请到「今天看啥」查看全文