算法工程师如何改进豆瓣电影 TOP250

标签: 技术和产品 算法 豆瓣电影 | 发表时间:2013-07-04 11:34 | 作者:豆瓣电影
出处:http://blog.douban.com

影迷们经常关注的电影排行榜里,一部由100人评出9.0分的电影,和一部由10000人评出8.0分的电影,谁应该排在前面呢?

这是我们算法工程师时常会面对的问题。

一些深度影迷可能会想到 imdb.com (互联网电影数据库) 所采用的贝叶斯公式[见附注],这个公式的思路就是通过每部影片的[评分人数]作为调节排序的杠杆:如果这部影片的评分人数低于一个预设值,则影片的最终得分会向全部影片的平均分拉低。

由此可见,平衡评分人数和得分,避免小众高分影片排前,是这个计算方法的出发点。可问题在于:调节整个榜单的排序主要依赖于这个[评分人数预设值]。如果它设置的很低,那么最终的排序结果,就是每部影片自身评分从高到低在排序;如果它被设置得过高,那么只适用高曝光率的影片。据说 imdb.com 的这个预设值从500一路调整到了25000,遗憾的是这个算法仍然无法很好的解决他们的问题。

我们看看国内电影市场的现状。2013年上映的 《疯狂原始人》两个月内在豆瓣电影得到了13万人次的评分,而1974年上映的 《教父2》,到目前为止的评分总人数还不到10万人。近几年观影方式的多样化以及影院观影的持续火爆,使得新近上映的影片很轻松地就能获得大量的评分,相较之下,老片子的曝光机会少了很多。显然,继续调节 [评分人数的预设值] 已无法满足当前国内电影排行榜的实际需求。

如何解决这个问题呢?对算法工程师而言,我们通常会先用最基本的算法模型来应对,然后针对该算法带来的问题再修改并衍生出新的算法。比如针对这里的[评分人数预设值],我们可以分出老片和新片两个排行分别对待,也可以把时间因素考虑在内,如此等等。

不过这次我们决定换个做法。

在重新审视过 [豆瓣电影TOP250] 这一产品之后,我们提炼出两个关键指标:

1 它应该具备人群的广泛适应性。

例如一些动漫作品,因为拥有大量的粉丝,容易得到高分。如果采用 imdb.com 的榜单公式计算,这些影片的排名就会很靠前,但它们显然不适合被推荐给非动漫迷。

我们的解决办法,是将电影划分为若干分类,每一分类对应着喜欢此类有显著代表性的人群。如此一来,排序问题就变成了推荐问题,即把某部影片分别向所有类人群做推荐,能被推荐给越多人群的电影也就越具备广泛性。

实际上,实验的结果也证明了 《肖申克的救赎》这类电影的人群广泛度远远超越了 《EVA》这样的动漫作品。

2 它还需要具备持续关注度,不能昙花一现。

1957年的 《十二怒汉》时至今日仍然被人津津乐道,而一些票房大片上映时非常红,过后就乏人问津。如何解决他们的排序关系?

我们取得每部影片在不同时间周期内的收藏人数和评分,将其汇成一条收藏曲线,再分析不同的曲线及其间关系,计算相应的分数。

这样,更新后的算法便初步形成了。算法更新后,榜单产生了一些变化,具体哪些变化? 这就去看看吧!

再说两句题外话,其实依靠简单的维度去做排序的榜单,我们平时也见的很多。这也许能解决一时的问题。对比简单排序甚至人工编辑的方式,一个算法模型在结果展示上可能没有优势,但面对环境因素的应变和扩展性上,算法有能力自我学习和进化,相信这也是产品生命力的一种体现吧。

附录: imdb.com 的top榜单公开公式
The formula for calculating the Top Rated 250 Titles gives a true Bayesian estimate:

weighted rating (WR) = (v ÷ (v+m)) × R + (m ÷ (v+m)) × C

where:

R = average for the movie (mean) = (Rating) -单部电影的得分
v = number of votes for the movie = (votes) -单部电影的有效评分人数
m = minimum votes required to be listed in the Top 250 (currently 25000)  -入选top250榜单所需最低的有效评分人数
C = the mean vote across the whole report (currently 7.0)  -所有影片的平均分

相关 [算法 工程师 豆瓣] 推荐:

算法工程师如何改进豆瓣电影 TOP250

- - 豆瓣blog
影迷们经常关注的电影排行榜里,一部由100人评出9.0分的电影,和一部由10000人评出8.0分的电影,谁应该排在前面呢. 这是我们算法工程师时常会面对的问题. 一些深度影迷可能会想到 imdb.com (互联网电影数据库) 所采用的贝叶斯公式[见附注],这个公式的思路就是通过每部影片的[评分人数]作为调节排序的杠杆:如果这部影片的评分人数低于一个预设值,则影片的最终得分会向全部影片的平均分拉低.

[酷工作] [爱奇艺-成都] 招聘:技术总监(算法方向)/算法工程师

- - V2EX
爱奇艺目前 D 轮啦,研发中心在北京以及上海,目前在成都搭建新的研发中心,欢迎有兴趣的小伙伴来联系我哈. 1.负责 AI 算法团队的管理,研发和建立工作,方向包括计算机视觉、音视频编解码、自然语言处理、机器学习、深度学习、搜索、推荐等方面;. 2.基于产品需求和用户场景设计技术方案、包括算法选型、稳定可靠的工程架构,实用性调优等,并根据业务发展做好系统整体容量规划;.

豆瓣显示

- frank - 读库情报站

豆瓣的初衷

- Alex Yu - 豆瓣blog
六年前,我开始写豆瓣第一行代码的时候,是想做一个关于生活发现的服务. 也就是说,豆瓣想帮人发现真实生活里的好东西. 今天豆瓣有一百多人的团队了,我们依然在做一个关于生活发现的服务. 这个想法可以在2005年以来一直没有改动过的一个页面里看到,就是”关于豆瓣“. “豆瓣的发起者发现,对多数人做选择最有效的帮助其实来自亲友和同事.

遭遇工程师

- Chrisoul - 槽边往事
谢谢大家的关心,几个小时前Google Plus恢复了我的帐号,看来暂时我还不用离开. 因为前一篇Blog的缘故,有些网友猜测是因为博文而使得我获释. 虚荣心让我想立即承认这一点,但是对不起,真的不是这样的,我的Blog并没有那么大影响力,尤其是在英文世界里. 而且,因为我上次张贴了一张人类进化谱系的漫画,我在国外驻京记者圈里成功赢得了“种族主义者”这一臭名昭著的称号,大概没有什么人愿意帮助一个黄种人中的“种族主义者”.

工程师效率

- - 后端技术 by Tim Yang
很好奇程序员这个群体这些年效率是变低了还高了,在社交媒体中,各个阶层的兴趣圈都有自己的段子手及内容帐号,段子手发的内容会让你笑cry,内容帐号发的内容可让你享受阅读的快感,这些快感会比写代码见效快. 写完一个模块的代码通常要一整天或者几天时间,代码调通运行没有问题才会体验到愉悦,而社交媒体只需要一些碎片时间就可以达到高潮.

OSD Lyrics + 豆瓣电台

- 培培 - 画猫不成反类虎
现在已经可以试用了,参见wiki页面安装0.5版,然后按照README文件的说明使用浏览器扩展. OSD Lyrics 0.5计划中的一项新特性就是提供一个HTTP Player接口,使得可以方便地实现网络播放器支持. 作为其副产品之一,豆瓣电台的支持已经初步实现了. 代码库在 https://github.com/osdlyrics/osdlyrics-doubanfm.

豆瓣的基础架构

- - 博客园_知识库
  本文根据InfoQ中文站对豆瓣洪强宁(@hongqn)的沟通交流整理而成. 洪强宁介绍了豆瓣的架构和组件,并分享了豆瓣基础平台部的一些团队经验. 文中截图来自洪强宁在2013年CTO俱乐部中的分享.   豆瓣整个基础架构可以粗略的分为在线和离线两大块.   BeansDB项目可以说是一个简化版的AWS DynamoDB,该项目在2008年启动,2009年开源,第⼀版使⽤tokyo cabinet作为存储引擎,2010年使⽤bitcask存储格式重写了存储引擎,性能更好.

2015年豆瓣高分榜

- - 豆瓣blog
在过去的一年里,豆瓣用户有了更丰富的生活,标记了更多项目,包括图书、电影、音乐、东西、小组等. 我们根据这些标记,整理了2015年口碑最好的兴趣榜单. 在这里,你也许会发现:今年最爱的书 《你今天真好看》也受到了大家的欢迎;你和友邻一直都在共同关注着 “我不知道该如何像正常人那样生活”专栏;原来电影 《心迷宫》有那么多人看过并给了高分;那张被友邻们念叨了好久的 《敷衍》你一直没来得及听…….