音乐推荐算法:
核心点
1、找到口味相似的用户,把他们爱听的歌曲推荐给你;
2、找到你喜欢的歌曲类似的歌曲,把这个歌曲推荐给你。
1、第一个问题:
如何找到口味相似的用户?
通过大量的用户数据,对用户爱听的歌曲设置不同的权重,
单曲循环 | 分享 | 收藏 | 搜索 | 听完 | 没听过 | 跳过 |
---|---|---|---|---|---|---|
5分 | 4分 | 3分 | 2分 | 1分 | 0分 | -1分 |
以每个用户对所有歌曲作行为记录并打分,这个时候就存在一个问题,改用什么样的算法找出2个用户的口味近似呢?欧几里得距离(Euclidean distance)。欧几里得距离是用来计算2个向量之间的距离的。这里面有两个关键词,向量和距离。
阴天 | 十年 | 完 | 后来 | 平凡之路 | 夜空中的星 | 我们 | |
---|---|---|---|---|---|---|---|
小明 | 4 | 0 | -1 | 1 | 0 | 3 | 5 |
小李 | 5 | 3 | 2 | 0 | 4 | -1 | 0 |
小红 | 4 | 3 | 0 | 1 | 5 | 1 | 0 |
小海 | 2 | 3 | 1 | 5 | 5 | -1 | 0 |
一维空间是一条线,我们用 1,2,3……这样单个的数,来表示一维空间中的某个位置;二维空间是一个面,我们用(1,3)(4,2)(2,2)……这样的两个数,来表示二维空间中的某个位置;三维空间是一个立体空间,我们用(1,3,5)(3,1,7)(2,4,3)……这样的三个数,来表示三维空间中的某个位置。一维、二维、三维应该都不难理解,那更高维中的某个位置该如何表示呢?
类比一维、二维、三维的表示方法,K 维空间中的某个位置,我们可以写作(X1, X2, X3,... XK)。)。这种表示方法就是向量(vector)。我们知道,二维、三维空间中,两个位置之间有距离的概念,类比到高纬空间,同样也有距离的概念,这就是我们说的两个向量之间的距离。
我们把每个用户对所有歌曲的喜爱程度,都用一个向量表示。我们计算出两个向量之间的欧几里得距离,作为两个用户的口味相似程度的度量。
2 、两外一个考量标准是基于相似歌曲的推荐
上面是相似用户的歌曲推荐,但是如果是一个新用户,我们还没有足够多的用户行为数据,这个时候该如何推荐呢?这个时候就可以根据相似歌曲作推荐,如果某首歌曲跟你喜爱的歌曲类似,我们就把它推荐给你。
那么问题来了,如何定义2首歌是类似的?
第一种思考,我们从歌曲的类型,伤感的、欢快的、摇滚的、乡村的、爱情的来分别打分,以这种方式来计算每首歌的欧几里得距离,这样可以判断出那些歌曲比较类似。
这种方式 对于有海量曲库的平台来说,计算量会非常大,而且人工分类的方式,有很多主观性在里面,会影响到推荐的准确性。
第二种,换一种思考模式,就是以用户对歌曲的评价来判定2首歌是否类似,对于2首歌,假如喜欢的用户都差不多,可以说明这2首歌比较类似。
小明 | 小李 | 晓红 | 小C | KK | 小王 | 阿哲 | |
---|---|---|---|---|---|---|---|
十年 | 4 | 0 | -1 | 1 | 0 | 3 | 5 |
喜欢你 | 5 | 3 | 2 | 0 | 4 | -1 | 0 |
平凡之路 | 4 | 3 | 0 | 1 | 5 | 1 | 0 |
国王与乞丐 | 2 | 3 | 1 | 5 | 5 | -1 | 0 |
这个其实就是上面打分的倒置,只是从歌曲出发,以用户的评分为向量,通过向量来计算2首歌的欧几里距离,距离越小,说明这2首歌越类似。然后在用户喜欢的歌曲中,找出离这些歌欧几里得距离最小的歌曲(最类似)推荐给他。