“网易云音乐”里有一项类似于淘宝“我的喜好”的“日推”功能,根据你经常听的歌曲类型,每日推送给你类似的音乐,几乎次次惊艳,而且大多都没听过,或者好久以前听过早就忘记了名字,或者之前不知道在哪听过 只是知道其中一部分旋律,根本不知道名字,等等。

参考了在北京实习时一个同事的分享以及在“知乎”上大神们的介绍,本文暂不考虑算法实现,仅仅从算法本身来学习一番,对IT世界里一些脑洞大开的想法做以分享。

如图,是日推算法的两种实现思路:

一、“潜在因子”算法

这种算法是在NetFlix(没错,就是用大数据捧火《纸牌屋》的那家公司)的推荐算法竞赛中获奖的算法,具体用在日推上的套路是这样:

1、思路

每个用户(user)都有自己的偏好,比如A喜欢带有小清新的、吉他伴奏的、李健等元素(其实就是标签),如果一首歌(item)带有这些元素,那么就将这首歌推荐给该用户,也就是用元素去连接用户和音乐。

2、实现:
    每个人对不同的元素偏好不同,而每首歌包含的元素也不一样。模拟这样两个矩阵:
   (1)用户-潜在因子矩阵Q:
    表示不同的用户对于不用元素的偏好程度,1代表很喜欢,0代表不喜欢。比如下面这样:

(2)潜在因子-音乐矩阵P
    表示每种音乐含有各种元素的成分,比如下表中,音乐A是一个偏小清新的音乐,含有小清新这个Latent Factor的成分是0.9,重口味的成分是0.1,优雅的成分是0.2……

利用这两个矩阵,我们能得出张三对音乐A的喜欢程度是:张三对小清新的偏好*音乐A含有小清新的成分+对重口味的偏好*音乐A含有重口味的成分+对优雅的偏好*音乐A含有优雅的成分+……

即:0.6*0.9+0.8*0.1+0.1*0.2+0.1*0.4+0.7*0=0.69
    每个用户对每首歌都这样计算可以得到不同用户对不同歌曲的评分矩阵\tilde{R} 。(注,这里的破浪线表示的是估计的评分,接下来我们还会用到不带波浪线的R表示实际的评分):

因此我们队张三推荐四首歌中得分最高的B,对李四推荐得分最高的C,王五推荐B。
    如果用矩阵表示即为:
    {R} =QP^{T}

下面问题来了,这个潜在因子(latent factor)是怎么得到的呢?
    由于面对海量的让用户自己给音乐分类并告诉我们自己的偏好系数显然是不现实的,事实上我们能获得的数据只有用户行为数据。我们沿用 @邰原朗的量化标准:单曲循环=5, 分享=4, 收藏=3, 主动播放=2 , 听完=1, 跳过=-2 , 拉黑=-5,在分析时能获得的实际评分矩阵R,也就是输入矩阵大概是这个样子:

事实上这是个非常非常稀疏的矩阵,因为大部分用户只听过全部音乐中很少一部分。如何利用这个矩阵去找潜在因子呢?这里主要应用到的是矩阵的UV分解。也就是将上面的评分矩阵分解为两个低维度的矩阵,用Q和P两个矩阵的乘积去估计实际的评分矩阵,而且我们希望估计的评分矩阵{R}

和实际的评分矩阵不要相差太多,也就是求解下面的目标函数:
    min_{P,Q} \Sigma (r_{ui}-q_{i}p_{u}^{T})^2


这里涉及到最优化理论,在实际应用中,往往还要在后面加上2范数的罚项,然后利用梯度下降法就可以求得这P,Q两个矩阵的估计值。这里我们就不展开说了。例如我们上面给出的那个例子可以分解成为这样两个矩阵:

这两个矩阵相乘就可以得到估计的得分矩阵:

将用户已经听过的音乐剔除后,选择分数最高音乐的推荐给用户即可(红体字)。

添加标签的思想在我们写CSDN博客的时候,其实就有了,通过分类,细化查询。

二、“喜欢这个商品的人,也喜欢某某”算法

1、发明
   amazon发明的“喜欢这个商品的人,也喜欢某某”算法。其核心是数学中的“多维空间中两个向量夹角的余弦公式”。

“商品推荐”系统的算法( Collaborative filtering )分两大类,
第一类,以人为本,先找到与你相似的人,然后看看他们买了什么你没有买的东西。这类算法最经典的实现就是“多维空间中两个向量夹角的余弦公式”;
第二类, 以物为本直接建立各商品之间的相似度关系矩阵。这类算法中最经典是'斜率=1' (Slope One)。amazon发明了暴力简化的第二类算法,‘买了这个商品的人,也买了xxx’。

我们先来看看第一类,最大的问题如何判断并量化两人的相似性,思路是这样 --
    例子:
    有3首歌放在那里,《最炫民族风》,《晴天》,《Hero》。
    A君,收藏了《最炫民族风》,而遇到《晴天》,《Hero》则总是跳过;
    B君,经常单曲循环《最炫民族风》,《晴天》会播放完,《Hero》则拉黑了
    C君,拉黑了《最炫民族风》,而《晴天》《Hero》都收藏了。

我们都看出来了,A,B二位品味接近,C和他们很不一样。
    那么问题来了,说A,B相似,到底有多相似,如何量化?

我们把三首歌想象成三维空间的三个维度,《最炫民族风》是x轴,《晴天》是y轴,《Hero》是z轴,对每首歌的喜欢程度即该维度上的坐标,并且对喜欢程度做量化(比如: 单曲循环=5, 分享=4, 收藏=3, 主动播放=2 , 听完=1, 跳过=-1 , 拉黑=-5 )。那么每个人的总体口味就是一个向量,A君是 (3,-1,-1),B君是(5,1,-5),C君是(-5,3,3)。 我们可以用向量夹角的余弦值来表示两个向量的相似程度, 0度角(表示两人完全一致)的余弦是1, 180%角(表示两人截然相反)的余弦是-1。
    根据余弦公式, 夹角余弦 = 向量点积/ (向量长度的叉积) = ( x1x2 + y1y2 + z1z2) / ( 跟号(x1平方+y1平方+z1平方 ) x 跟号(x2平方+y2平方+z2平方 ) )
    可见A君B君夹角的余弦是0.81 ,A君C君夹角的余弦是 -0.97 ,公式诚不欺我也。
    以上是三维(三首歌)的情况,如法炮制N维N首歌的情况都是一样的。
    假设我们选取一百首种子歌曲,算出了各君之间的相似值,那么当我们发现A君还喜欢听的《小苹果》B君居然没听过,相信大家都知道该怎么和B君推荐了吧。

第一类以人为本推荐算法的好处我想已经很清楚了,那就是精准!代价是运算量很大,而且对于新来的人(听得少,动作少),也不太好使,所以人们又发明了第二类算法。假设我们对新来的D君,只知道她喜欢最炫民族风,那么问题来了,给她推荐啥好咯?

如图,推荐《晴天》!
    第二类算法的好处大家也看出来了,简单粗暴好操作,可精度差了点。
    所以,各家网站真正的推荐算法,是他们在综合上述两类算法的基础上,各自研制并且不断地改进调节的,外人不得而知!

由此可见,通过类似amazon以及纸牌屋中的算法分析,网友们预测了网易云音乐的日推算法,也让小菜的我领略到了算法世界的神奇,只有想不到,一旦想到了就能做到。

附注:(知乎中的讨论帖)。

【算法】网易云音乐日推算法浅析相关推荐

  1. 仿网易云音乐日推界面(监听AppBarLayout滑动+动态高斯模糊)

    首先来看下日推界面的效果: 网易云音乐日推界面的亮点就是在上拉的时候,banner页面逐渐模糊.字体透明度下降,最后左上角显示出"每日推荐"的字体. 这个界面用户会觉得很清晰.便捷 ...

  2. 网易云音乐社交玩法的背后,听说有一只神秘部队保驾护航?

    作为一款国民级音乐App,网易云音乐引领着音乐产品,从播放器工具时代走入了全新的在线音乐社区时代. 音乐社交,体验永远是第一位 网易云音乐作为一个音乐产品,在选择音视频底层技术的时候,对于网络稳定性. ...

  3. 网易云信技术创新,助力网易云音乐社交玩法升级

    作为一款国民级音乐App,网易云音乐引领着音乐产品,从播放器工具时代走入了全新的在线音乐社区时代. 音乐社交,体验永远是第一位 网易云音乐作为一个音乐产品,在选择音视频底层技术的时候,对于网络稳定性. ...

  4. 网易云音乐的“红与黑”

    如果可以给网易云音乐自己定位一个"主导色",那它应该是红色的.红色代表着热烈.鲜活与向上,与网易云音乐奔跑冲刺"全球音乐社区第一股"的形象不谋而合. 在与拥有雄 ...

  5. “音乐社区第一股”网易云音乐开启招股,索尼音乐任基石投资人

    今年全球资本市场持续波动,不少互联网公司决定暂缓IPO进程.但近期,随着市场回稳,港交所也释放了多个迎接积极信号,包括优化并拓宽第二次上市机制,将网易.京东.华润啤酒.新奥能源等股票纳入恒生指数等,以 ...

  6. 网易云音乐在港交所上市:市值达到425.9亿港元,不知何日能扭亏

    12月2日,网易云音乐(简称"云音乐",HK:09899)在港交所挂牌上市,成为"全球音乐社区第一股".据了解,网易云音乐的发行价为205.0港元/股,预计募资 ...

  7. 「网易云音乐」歌单推荐算法

    推荐算法可以通过APP表现进行反推,不会100%准确,但应该也八九不离十. 推荐依据 推荐算法不是无根之水,它必须借助用户的数据才可以进行推荐.即使是冷启动,也需要获得你的微博.微信(你的登录方式)或 ...

  8. 揭秘网易云音乐的个性化推荐算法【黑科技】

    在"精准推荐者得民心"的今天,推荐系统已成为各大互联网公司的标配.但由于现实中很多数据是非欧氏空间生成的(例如,社交网络.信息网络等),一些复杂场景下的业务需求很难通过协同过滤等基 ...

  9. 算法推歌20年:从Pandora、Spotify到QQ音乐、网易云音乐

    作者 | 鲁修修 ,编辑 | 范志辉,音乐先声(ID:nakedmusic) 从杂志.报纸上的乐评专栏,到音乐流媒体上的用户评论.算法推荐,人们听歌的选择方式一直处于私人化和公开化之间. 近期,音乐软 ...

最新文章

  1. 无法启动此程序因为计算机中丢失msvcr110,无法启动此程序因为计算机中丢失msvcr110,教您无法运行程序提示计算机中丢失...
  2. sim卡无线上网公用服务器,有人推出内置SIM卡GPRS模块!GM3S开启无线数传模块新时代!...
  3. Scala基于Akka模拟Spark Master Worker进程间通信(二):Worker定时向Master心跳
  4. 输入数字自动找规律的软件_WPS2019 填充柄的顺序式填充、复制式填充、规律填充、自定义填充...
  5. 版本对应关系python TensorFlow+Keras
  6. Spring框架----Spring的依赖注入
  7. 拓端tecdat|R语言基于ARMA-GARCH过程的VaR拟合和预测
  8. 工程项目管理工作流程图大全(打包带走)
  9. 百度自动php推送蜘蛛怎么不来访问,使用代码向百度蜘蛛主动推送链接
  10. python md5解密方法与技巧_python ---- 爬取 md5解密结果 的小脚本
  11. 在linux基础上开发内核,科学院在Linux内核基础上,开发出中文操作系统是()。A.中科LinuxB.熊猫LinuxC.红旗Linux...
  12. 手机端网页设计尺寸大小
  13. 日常英语精彩短句集锦
  14. 行锁、间隙锁、next-key锁
  15. ps切片 html作用,ps切片有什么用,PS切片是什么
  16. 汇编工具DOSBOX安装使用
  17. vue3+ts+amap/amap-jsapi-loader实现高德地图搜索选取地点
  18. 使用eclipse和JavaFX Scene Builder进行快速构建JavaFX应用程序
  19. 惊天阴谋-陈晓如何窃取国美电器的
  20. 体验全功能:Win 8激活方式详解

热门文章

  1. notempty注解报红_@NotNull、@NotEmpty、@NotBlank注解使用
  2. php(tp框架)使用阿里云OSS存储
  3. PLSQL Developer12 破解注册码
  4. 【翻译】2021年LFX秋季项目。一个成功的季节,有37名实习生毕业!
  5. tof摄像头手势识别_解决方案| USB 3D视觉TOF飞行时间深度摄像头Depth Eye
  6. Python更换索引(Index)
  7. STL之容器、迭代器、算法、仿函数
  8. android oppo 相机权限,oppo手机相机故障以及权限设置【图文教程】
  9. Android Studio与蓝叠模拟器bluestacks连接
  10. VUE 返回上一页 不刷新页面、重复进入同一页面created重复执行、每次进入页面时都执行created、vue单页面多路由,前进刷新,返回不刷新