18 January 2016

本文以豆瓣电影评分为例,提出一种考虑每个用户品味的评分计算方法。

豆瓣简单地把一部电影收到的所有用户打分的均值作为这部电影的评分。这虽然客观,但由于打分的用户鱼龙混杂, 这样得出的评分可能并不符合我对这部电影的评价。有时候就会产生让我非常失望的豆瓣电影评分。 我希望能看到一个根据我的品味为我量身定制的评分。如果这个定制分比较高,那么这就是我爱看的电影。 你可以用它来做推荐系统,但我只是单纯想看到这样一个评分。

下面就讨论这个定制评分的计算方法。

对一部电影m,假设为它打过分的所有用户的集合为U。U中有些用户与我的品味相似,他们对这部电影的打分才是对我有参考价值的。 还有一些与我品味不同的用户(或者没品味的用户),我不希望他们的打分影响到定制分。 基于这个想法,我就从U中选出与我品味最相似的100个用户(这部分用户的集合记为R),把他们打分的均值作为我的定制分。

接下来要解决的就是怎么选择U的子集R,也就是确定哪些用户与我的品味相似。很显然,这要根据之前的打分历史来判断。 对于U中的一个用户,假设我跟他之前共同打过分的电影有c部。如果c小于50,说明这个用户与我看的电影没什么交集,就将其排除。 对于剩下的每个用户,从我跟他之前共同打过分的电影中随机选出50部来。他对这50部电影的打分构成50维向量x,我对这50部电影的打分构成50维向量y。 x与y之间的欧氏距离z越小,就说明我们俩的品味越相似。把这些用户按z从小到大排个序,取其前100个构成R即可。

上面出现的50、100只是个示例,具体数值可以根据实际情况确定,但方法都是一样的。这样计算出来的电影评分是为我量身定制的,应该不会再让我失望了。 我曾去看了豆瓣电影API,想计算出这个评分来作为我决定是否看一部电影的参考。但遗憾的是, 我发现通过公共API并无法获取到所需的数据。

希望这个简单可操作的想法有一天能成为现实。