11 | Facebook是怎么为十亿人互相推荐好友的
刑无刀
该思维导图由 AI 生成,仅供参考
上一篇中,我和你专门聊到了矩阵分解,在这篇文章的开始,我再为你回顾一下矩阵分解。
回顾矩阵分解
矩阵分解要将用户物品评分矩阵分解成两个小矩阵,一个矩阵是代表用户偏好的用户隐因子向量组成,另一个矩阵是代表物品语义主题的隐因子向量组成。
这两个小矩阵相乘后得到的矩阵,维度和原来的用户物品评分矩阵一模一样。比如原来矩阵维度是 m x n,其中 m 是用户数量,n 是物品数量,再假如分解后的隐因子向量是 k 个,那么用户隐因子向量组成的矩阵就是 m x k,物品隐因子向量组成的矩阵就是 n x k。
得到的这两个矩阵有这么几个特点:
每个用户对应一个 k 维向量,每个物品也对应一个 k 维向量,就是所谓的隐因子向量,因为是无中生有变出来的,所以叫做“隐因子”;
两个矩阵相乘后,就得到了任何一个用户对任何一个物品的预测评分,具体这个评分靠不靠谱,那就是看功夫了。
所以矩阵分解,所做的事就是矩阵填充。那到底怎么填充呢,换句话也就是说两个小矩阵怎么得到呢?
按照机器学习的套路,就是使用优化算法求解下面这个损失函数:
这个公式依然由两部分构成:加号左边是误差平方和,加号右边是分解后参数的平方。
这种模式可以套在几乎所有的机器学习训练中:就是一个负责衡量模型准不准,另一个负责衡量模型稳不稳定。行话是这样说的:一个衡量模型的偏差,一个衡量模型的方差。偏差大的模型欠拟合,方差大的模型过拟合。
有了这个目标函数后,就要用到优化算法找到能使它最小的参数。优化方法常用的选择有两个,一个是随机梯度下降(SGD),另一个是交替最小二乘(ALS)。
在实际应用中,交替最小二乘更常用一些,这也是社交巨头 Facebook 在他们的推荐系统中选择的主要矩阵分解方法,今天,我就专门聊一聊交替最小二乘求矩阵分解。
交替最小二乘原理 (ALS)
交替最小二乘的核心是交替,什么意思呢?你的任务是找到两个矩阵 P 和 Q,让它们相乘后约等于原矩阵 R:
难就难在,P 和 Q 两个都是未知的,如果知道其中一个的话,就可以按照线性代数标准解法求得,比如如果知道了 Q,那么 P 就可以这样算:
也就是 R 矩阵乘以 Q 矩阵的逆矩阵就得到了结果。
反之知道了 P 再求 Q 也一样。交替最小二乘通过迭代的方式解决了这个鸡生蛋蛋生鸡的难题:
初始化随机矩阵 Q 里面的元素值;
把 Q 矩阵当做已知的,直接用线性代数的方法求得矩阵 P;
得到了矩阵 P 后,把 P 当做已知的,故技重施,回去求解矩阵 Q;
上面两个过程交替进行,一直到误差可以接受为止。
你看吧,机器就是这么单纯善良,先用一个假的结果让算法先运转起来,然后不断迭代最终得到想要的结果。这和做互联网 C2C 平台的思路也一样,告诉买家说:快来这里,我们是万能的,什么都能买到!
买家来了后又去告诉卖家们说:快来这里开店,我这里掌握了最多的剁手党。嗯,雪球就这样滚出来了。
交替最小二乘有这么几个好处:
在交替的其中一步,也就是假设已知其中一个矩阵求解另一个时,要优化的参数是很容易并行化的;
在不那么稀疏的数据集合上,交替最小二乘通常比随机梯度下降要更快地得到结果,事实上这一点就是我马上要说的,也就是关于隐式反馈的内容。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
Facebook的推荐系统利用矩阵分解技术为十亿用户互相推荐好友。矩阵分解将用户物品评分矩阵分解成用户偏好和物品语义主题的隐因子向量组成的小矩阵。通过优化算法求解损失函数,利用交替最小二乘(ALS)方法找到能使损失函数最小的参数。ALS核心在于交替求解两个未知矩阵,通过迭代方式不断优化参数,最终得到用户对物品的预测评分。加权交替最小二乘算法针对隐式反馈的矩阵分解,考虑了用户对物品的隐式反馈次数作为评分的置信度,提高了预测准确性。在得到分解后的矩阵后,Facebook提出了两种方法得到真正的推荐结果:一种是利用专门设计的数据结构存储所有物品的隐因子向量,另一种是先对物品的隐因子向量做聚类,再计算用户和每个聚类中心的推荐分数。总体而言,针对实际应用中的数据稀疏性和评分预测问题,加权交替最小二乘算法和推荐计算方法为Facebook的推荐系统提供了更准确和高效的解决方案。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《推荐系统三十六式》,新⼈⾸单¥59
《推荐系统三十六式》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(27)
- 最新
- 精选
- 王掌柜家的小二有个问题没想明白的,上网找了下也没明白的:在交替最小二乘法的原理中,既然已经是随机初始化了矩阵P,求得Q就是一个确定的结果了,那么这时候用Q反过来求P的意义何在呢?得到不也是同一个P吗?既然两个值是确定的,又何来迭代一说? 知道自己理解的肯定有问题,忘老师回复。
作者回复: 交替最小二乘,“最小二乘”就不是确定解,而是数值优化解,所以不存在你说的这种情况。
2018-12-0933 - 无隅无反馈的样本评分是0,然后被采样到的负样本评分,设为-1吗?
作者回复: 并不是。你这昵称是故意的吗?
2019-03-112 - 瑞雪你好,请问如果选取一部分为负样本,其他的缺失值在矩阵分解时是直接使用NaN吗,有点对正负样本分不太清:D2018-03-28310
- 林彦1. 既然可以根据物品的热门程度选择负样本,是不是类似也可以根据用户的活跃程度选择负样本? 2. 是不是可以借鉴之前基于内容推荐的方法,先找出和当前用户或场景类似内容的用户或场景中的热门物品的交互作为负样本?这里用户或场景可以用各种距离度量的方式选出k个最相邻的。基于内容相似度找和正样本最相邻的物品作为负样本可能也可以。 3. 负样本从概率分布中采样,概率分布的参数让整体的期望值和真实值尽可能接近。这样交互次数多的有更大概率被选中,或者可以看成赋予了更大权重。 4. 引入一个概率参数变量,有交互的概率为p(i, j),预测交互值为1;无交互的概率为p(i, j),预测交互值为0。除了计算用户和物品隐变量外,把用户和物品隐变量固定后再估算这个概率参数。2018-03-285
- neohope负样本构建方法: 1、通过页面或APP曝光,用户没有反应的 2、告知用户有优惠活动或优惠券,用户无动于衷的 3、根据用户画像,以及物品标签,用户不需要的物品 4、用户明确标记不感兴趣的物品或不认识的人 5、普遍有差评的人或物品2019-12-043
- yalei通常用户需要一个“入口”才能浏览商品详情,这个入口可大部分情况下是搜索结果和算法推荐。可以设置曝光埋点,再结合点击埋点来找到真正的负样本(有曝光而无点击的样本)2018-04-103
- Drxan大神,如果要对负样本进行采样的话,是不是就无法用矩阵分解了2018-03-282
- shangqiu86负样本采样最最精准的应该是曝光而无行为的那些用户sku对,即对该用户来说该sku曝光了,但是用户对该sku没有行为,但是这个量会很大,可以从中抽样得到负样本2019-04-291
- cl还是没有明白,矩阵分解前提是需要分数矩阵,针对没有评分体系的应用从隐式反馈数据中构建这个分数矩阵,就是上一章遗留的问题,能否结合实例说一下??2019-01-1911
- 森林目标函数里置信度C是1+aC,如果我们挑负样本的话,负样本的次数是啥?2018-04-021
收起评论