矩阵分解算法的核心思想是将用户行为矩阵分解为两个低秩矩阵的乘积,通过分解,我们分别将用户和标的物嵌入到了同一个 k 维的向量空间( k 一般很小,几十到上百),用户向量和标的物向量的内积代表了用户对标的物的偏好度。所以,矩阵分解算法本质上也是一种嵌入方法。
上面提到的 k 维向量空间的每一个维度是隐因子( latent factor ),之所以叫隐因子,是因为每个维度不具备与现实场景对应的具体的可解释的含义,所以矩阵分解算法也是一类隐因子算法。这 k 个维度代表的是某种行为特性,但是这个行为特性又是无法用具体的特征解释的,从这点也可以看出,矩阵分解算法的可解释性不强,我们比较难以解释矩阵分解算法为什么这么推荐。
用户真正的评分是很稀少的,所以利用隐式行为是更好的选择(其实也是不得已的选择)。当利用了隐式行为,那么用户行为矩阵就不会那么稀疏了,即有非常多的 对是非空的,计算量会更大,这时采用 ALS 算法是更合适的,因为固定 或者 ,让整个计算问题更加简单,容易求目标函数的极值。读者可以阅读参考文献 5,进一步了解隐式反馈利用 ALS 算法实现的原因及细节( Spark MLlib 中的 ALS 算法即是参考该论文来实现的)。
在第二节,用户u对标的物v的评分采用公式 来预测,但是不同的人对标的物的评价可能是不一样的,有的人倾向于给更高的评分,而有的人倾向于给更低的评分。对于同一个标的物,也会受到外界其他信息的干扰,影响人们对它的评价(比如视频,可能由于主演的热点事件导致该视频突然变火),这两种情况是由于用户和标的物引起的偏差。我们可以在这里引入 Bias 项,将评分表中观察到的值分解为 4 个部分:全局均值( global average ),标的物偏差( item bias ),用户偏差( user bias )和用户标的物交叉项( user-item interaction )。这时,我们可以用如下公式来预测用户 u 对标的物 v 的评分:
采用对数函数是有一定的经济学道理在里面的,因为 是自变量 x 的递减函数,即导数(斜率)是单调递减函数,当自变量 x 越大时,函数值增长越慢,因此基于该公式的数学解释可以说明对数函数是满足经济学上的“边际效应递减”这一原则的。针对视频来说,意思就是你在看前面十分钟代表的兴趣程度是大于在最后看十分钟的,这就像你在很饿的时候,吃前面一个馒头的满足感是远大于吃了 4 个馒头之后再吃一个馒头的满足感的。
用户u对视频v的偏好 为二元变量,=1 表示用户喜欢视频 v (用户播放、收藏、评论等隐式行为),=0 表示不喜欢(视频曝光给用户而用户未产生行为或者视频根本没有曝光给用户),具体公式如下:
Input:用户操作行为,(用户 id,视频 id,具体隐式操作行为)三元组(1) 计算 ,(2) if =1 then(3) if u is new, then(4) Initialize (5) end(6) if v is new, then(7)Initialize (8)end(9)Compute by (10)Compute by(11)(12)(13)(14) (15) end
AI ProCon 2019 邀请到了亚马逊首席科学家@李沐,在大会的前一天(9.5)亲授「深度学习实训营」,通过动手实操,帮助开发者全面了解深度学习的基础知识和开发技巧。还有 9大技术论坛、60+主题分享,百余家企业、千余名开发者共同相约 2019 AI ProCon!距离5折优惠票结束还有 3 天!