抖音技术能力大揭密!钜惠大礼、深度体验,尽在火山引擎增长沙龙,就等你来! 立即报名>> 了解详情
写点什么

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

2017 年 7 月 13 日

本文要点

  • 用自然语言处理(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 的步骤:

  1. 创建一个账户
  2. 阅读文档,选择适合你的任务的方法(analyzeSentiments 方法适合用于电影评论的分析)。
  3. 执行 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()

输出结果如下:

(点击放大图像)

(点击放大图像)

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

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

  1. 一个评论中可能含有多个观点(甚至是对同一个实体有多个观点)。通常而言,句子级别(sentence-level)的方法不能发现关于每个实体和(或)它的切面的观点。基于切面的(aspect-based)方法更适合这种情况,因为它能评估同一个实体的两个观点。
  2. 中立或客观的推文可能改变整个评级。人们认为这种推文“仅仅是事实,不含有任何情感或观点”。
  3. 多义词和同形异义词。举例来说,根据上下文语境,单词“firm” 的意思可以是稳固的、结实的东西或商业企业、公司。
  4. 将名称与描述区别开来。也就是说,一个电影的名字可能包含“战争”或“怪兽”,NLP 方法可能把它理解为负面的,从而使得整个评级有偏差。
  5. 使用指代。NLP 方法在决定某个代词、名词或短语所指的对象时可能会遇到某些特定的困难。譬如,“我吃了午餐,还看了电影。它真棒。”
  6. 俚语是另外一个挑战。评论和推文中有很多俚语。譬如,有人可能说“That’s a bad shirt, man”,而实际上他们是在夸一个朋友。
  7. 讽刺和微妙之处:人们喜欢玩文字游戏,包括讽刺和反语。大数据解决方案并非总是能识别出深藏的含义。而且,还有一些与跨文化差别相关的讽刺。
  8. 特殊字符:有些电影的标题中含有变音符号(特别是外国电影)。这也是为什么那些标题中带省略号的电影可能导致编码问题。
  9. 拼写错误。人们在评论和社交媒体帖子中会写错,NLP 工具可能不能正确地分类这些词。譬如,Google 发现,住在加州的人们往往把“dessert”和“desert”弄混淆,而来自阿拉斯加的人往往拼错“Hawaii”。
  10. 地理上的限制:一个电影可能在一个地区很受欢迎但在其他地区被严厉批评。因为只有小部分推文带有地理位置标签,因此评级可能混在一起。

情感分析的其他应用场景

NLP 工具的作用不仅仅局限于将评论分类为负面的和正面的类别。基于讨论的主题,如剧本、演员或气氛(即电影在观众中间所营造的一种特殊的情绪或感觉。譬如,一个电影可能有一种很神秘的气氛)等等,负面的和正面的评论可以被组合起来。可以更进一步地分析这些评论,从而提取更多的信息,比如评论者喜欢电影的哪些部分,不喜欢哪些部分。

电影评论网站的拥有者们将能够创建一个更灵活的电影评级系统,从而让用户有机会看到其他人对电影各方面的评论,找出为什么该电影有这个评级。譬如,他们将可以知道,其他人喜欢某个主演是因为他们在观看电影时所体会到的情感,但是这些人并不喜欢电影配乐,因为它与主题无关。

有些人已经朝着这个方向迈进了:Subhabrata Mukherjee 和 Pushpak Bhattacharyya探索了如何从评论中识别出与特定特征相关的观点,这些评论描述了不同的特征,夹杂了不同的情绪。

电影评论和体裁分类

目前,主要由审核网站的人来人工识别电影的体裁。这些人可能对电影很有激情,但是他们可能并不能正确地识别电影的体裁。

如前面所述,NLP 工具可以帮助研究者们识别电影体裁,因为同一体裁电影的评论具有一些共同的特征,这就使得NLP 工具能有效地、省时地将它们分组。

然而,这类工具的开发者需要解决一个问题:他们需要选择将要使用的电影体裁模式。如今,电影并不属于某一个体裁,它们代表一组不同的体裁的结合。譬如,IMDb 说2016 年发行的电影“Star Trek Beyond”属于下面这些体裁:动作片、冒险片、科幻片和惊悚片。的确如此,这部电影涵盖了所有这些特征(还有其他一些没有提及的特征)。这篇文章 (从机器学习的角度)更深入地探索了与体裁分类相关的问题。

NLP 和类似的电影

电影可以属于不同的体裁,但对评论人的影响是类似的。举一个例子,你可能因为电影“X-Men”里面所描述的爱情故事而喜欢它(被 IMDb 分类为动作、冒险和科幻电影)。但是,如果你试着在当前的评论网站中寻找类似的电影,它会向你建议另一部科幻电影,而不是你在找的爱情片。

NLP 工具不仅仅用于情感分析和电影的体裁分类。NLP 解决方案,如 Comparator ,能比较评论并设置它们之间的相似度。这篇案例分析描述了NLP 解决方案如何帮助管理媒体内容。

结论

NLP 是一个很强大的解决方案,它能将电影评论系统推向更高层次。网站所有者可以利用这些工具所获取的信息来创建聚焦于特定方面的详尽的电影评论,以及基于体裁和相似度对电影进行分类。这些信息也可被用于更好地定位广告。

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

参考文献

  1. Amolik, A., Jivane, N., Bhandari, M., Venkatesan, M. (2015). Twitter Sentiment Analysis of Movie Reviews using Machine Learning Techniques. International Journal of Engineering and Technology, Volume 7, Issue 6. Retrieved April 26, 2017 链接.
  2. Brennan, M. W. (2016, November). Performance Comparison of 10 Linguistic APIs for Entity Recognition .ProgrammableWeb.
  3. EffectiveSoft, Ltd. (2014) Intellexer Sentiment Analyzer SDK WP [White paper]. Retrieved April 26, 2017, Intellexer .
  4. Kitin, Y. (2016, August). Will Google NL kill the market? Linguistic APIs review. LinkedIn. Retrieved April 26, 2017 链接.
  5. Kitin, Y. (2016, November). Online Summarizers overview. LinkedIn. Retrieved April 26, 2017 链接.
  6. Manning, C.D., Raghavan, P., Schütze, H. (2008). Introduction to Information Retrieval .
  7. Turney, P. D. (2002, July). Thumbs Up or Thumbs Down? Semantic Orientation Applied to Unsupervised Classification of Reviews .

关于作者

Tatsiana Levdikova是 EffectiveSoft 的一名技术记者。她撰写的主题有软件开发、UI 和 UX、自然语言处理、大数据、人工智能以及其他 IT 相关的主题。

查看英文原文: Predicting Movie Ratings: NLP Tools is What Film Studios Need


感谢薛命灯对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017 年 7 月 13 日 17:551783
用户头像

发布了 21 篇内容, 共 76715 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

在线日期计算器

入门小站

工具

python-类,对象--》多态,封装,继承

加哥

Python

【Flutter 专题】66 图解基本约束 Box (一)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 8 月日更

MySQL 系列教程之(四)MySQL 中的数据类型

若尘

MySQL 数据库 八月日更

手撸二叉树之二叉树的堂兄弟节点

HelloWorld杰少

数据结构与算法 8 月日更

Flutter Android 端 FlutterEngine Java 相关流程源码分析

工匠若水

flutter android 面试 8月日更 8 月日更

架构训练营毕业总结

Neil43

架构训练营

「让我们一起Golang」让协程自己kill自己

Regan Yue

go 协程 Go 语言从入门到实践 8月日更 8 月日更

如何设计一个容错的微服务架构

架构精进之路

微服务 架构· 8月日更

QDS04 TensorFlow

耳东

tensorflow 8 月日更 qds

Android开发:使用Android Studio打包APK文件的步骤

三掌柜

8月日更 8 月日更 8月

Seata搭建与分布式事务入门

码农参上

SpringCloud spring cloud alibaba seata 8 月日更

测试基础---LINUX

刘帅强

crudapi增删改查接口零代码产品成功案例之商会联盟卡项目

crudapi

Java Vue 零代码 crudapi qusar

【Dubbo3.0 技术专题】总体技术体系介绍及技术指南(目录)

李浩宇/Alex

dubbo Dubbo服务 8月日更 8 月日更 Dubbo3

架构实战营毕业总结

唐高为

入职新公司后如何快速上手项目

咔咔

php MySQL 数据库

杂谈:电商平台中的图片资源优化实战

云小梦

CSS JavaScript html5 jpeg 图片处理

Python Qt GUI设计简介、环境下载和安装(基础篇—1)

不脱发的程序猿

Python qt GUI设计 Qt Company

实战架构训练营总结

小荷才露尖尖角

#架构实战营

毕业设计:电商秒杀系统

唐高为

Python开发篇——基于React-Dropzone开发上传组件

DisonTangor

Python flask React

JavaScript 中如何比较变量的相等

devpoint

JavaScript ES6 8 月日更

模块五作业

Mr.He

架构实战营

【设计模式】中介者模式

Andy阿辉

C# 后端 设计模式 8 月日更

架构实战营 | 毕业总结

架构实战营

Vue进阶(三十七):created、mounted等钩子函数整理

No Silver Bullet

Vue 八月日更

docker介绍与安装

Rubble

Docker 8 月日更

LeetCode题解:208. 实现 Trie (前缀树),对象,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

Vue进阶(三十六):created() 详解

No Silver Bullet

Vue 八月日更

【Spring 入门教程】2、创建 Spring 项目的 3 种方式

村雨遥

Java spring 8 月日更

Study Go: From Zero to Hero

Study Go: From Zero to Hero

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