“这书都挺厚的啊”,老王看了看,又掂了掂桌上新买的《推荐系统 技术、评估及高效算法》《推荐系统实战》,不禁叹了一口气...
“先来个简单的,总比没有强吧。我看看哪个我能看的懂。”
老王翻书中...
“嗯...基于内容的推荐,好像就是用户喜欢什么类型的内容,就给他推荐相似的。这个很简单啊,就这个吧。”
老王继续翻书中...
“ 给用户推荐与他上次评分很高的内容的相似内容,怎么这么拗口,嗨,不就是小李上次看了《色戒》,觉得不错,那就给他推荐李安导演的,或者梁朝伟、汤唯演的其他电影嘛,或者就给他推荐其他的情色爱情电影。怎么后面还有些计算啊,看不懂,你给我讲讲吧。 ”
对于一个电影, 可以问下面括号里的几个问题, [ 是李安导演的吗,是徐峥导演的吗,是梁朝伟主演的吗,是王宝强主演的吗,是爱情电影的吗,是喜剧电影的吗] ,那对于《色戒》就可以得到结果 [ 1,0, 1,0,1,0],1 代表是,0 代表不是,对于 《泰囧》可以得到结果是 [ 0,1, 0,1,0,1] 对吧。
对于一部电影来说,刚才的这些问题的结果就可以作为这个电影的特征。
“特征?”
嗯,特征,就比如一个水果是梨还是苹果,是甜还是酸,一个人是高还是矮,是胖还是瘦。
“哦,就是说明这是个什么样的东西,懂了。”
好,如果一个用户看了 《色戒》 《泰囧》《人在囧途》这三个电影,每个电影的都有一个上面这些问题的结果对吧,色戒是 [ 1,0, 1,0,1,0] ,《泰囧》是 [ 0,1, 0,1,0,1], 《人在囧途》 也是 [ 0,1, 0,1,0,1] ,那么可以把这三个结果加起来,[ 1,2, 1,2,1,2],再除以总数 3,[ 1/3,2/3, 1/3,2/3,1/3,2/3 ],这个结果就反映了这个用户的喜好。里面数字越大就说明这个特征对他来说越重要。
“嗯,他看徐峥导演的作品多,代表徐峥的这个数就会比较大,说明他喜欢看徐峥的作品。哎,不对吧,他不是还打分了的吗?他看过《泰囧》不代表他喜欢啊?”
那我们可以把分数也考虑进来啊,如果《色戒》打 1 分,《泰囧》打 3 分, 《人在囧途》打 5 分的话,那就 1 * [ 1,0, 1,0,1,0] + 3 * [ 0,1, 0,1,0,1] + 5 * [ 0,1, 0,1,0,1] = [ 1,8, 1,8,1,8] ,再除以总数 3,[ 1/3,8/3, 1/3,8/3,1/3,8/3 ] 。你看,代表徐峥的这个数更大了变成 8/3 了,因为他给《泰囧》和《人在囧途》都打了高分。
“但是有的人比较挑剔怎么办,比如他看了很多电影,看啥都不顺眼,一会说编剧垃圾,一会骂演员不会演戏,平均才给 3 分, 可有的人就没那么挑,看啥都说好,平均给到 4 分。这么算不合适吧。”
确实,那我们可以把他看过所有电影的所打的平均分也考虑进来,比如他看了 100个电影,给这 100 个电影都打了分,平均分是 3 分,那他给 《色戒》打的分是低于他的平均分的,也就是说他应该不太喜欢这个电影,我们可以用 1 - 3 也就是 -2 来作为 《色戒》偏离他平均喜好的程度,同样的,《泰囧》是 0,《人在囧途》是 2。 然后我们再算上面的,就是 -2 * [ 1,0, 1,0,1,0] + 0 * [ 0,1, 0,1,0,1] + 2 * [ 0,1, 0,1,0,1] = [ -2,2, -2,2,-2,2] ,再除以总数 3,得到 [ -2/3,2/3, -2/3,2/3,-2/3,2/3 ] 来作为对这个用户喜好的描述。
我们计算了用户的喜好以后,那我们可以用余弦相似性来计算这个用户对某个电影的喜欢程度。
比如我们算一下上面用户对《色戒》的喜欢程度,-2/3, 而 《人在囧途》的喜欢程度是 2/3。符合他给《人在囧途》打分高而给《色戒》打分低这个事实。
“可是这样算下来,《泰囧》 和《人在囧途》的喜欢程度是一样的啊,可是打分却不一样。”
那是因为他们的特征是一样的,我们要搜集更多的特征来区分这两部电影啊。
我们来看看这种基于内容的推荐系统有什么优势吧。
对每个用户进行推荐时,不需要关心其他用户的数据。因为我们在上面的计算中,并没有用到其他人的数据;
即使这个用户的口味很独特,很小众,我们也可以做出较好的推荐,因为这种推荐不受他人口味的影响;
当一个电影新上架的时候,我们也可以向用户推荐它,而不用等很多人对这个电影进行评价;
推荐结果的解释性较强,也就是说我可以很明确的向用户解释为什么向他推荐一部电影。
“听起来简单又好用啊”
别急,让我们看看它的缺点再做决定。
很难找到合适的特征,多少特征是合适的呢,这个没有一个标准;
推荐太个性化了,会导致推荐的都是用户喜欢的内容,没有惊喜,而且假如新出现了一个电影,很火,大家都爱看,但是我们预测这个用户不喜欢,可是说不定他会喜欢呢,但是我们不会推给他,另外一个用户的口味可能是多样的,而且是随时间变化的,我们这个推荐系统也没办法考虑到这一点;
对新用户不友好,新用户没有看过电影,没有打过分,我们没办法知道他的喜好,也没办法向他推荐了
“嗯,确实有这些问题,不过好在原理简单,就先用这个试试吧,我看还有一些更复杂的推荐系统,等后面学会了再换。”