推荐系统三十六式
刑无刀
“贝壳找房”资深算法专家,8年推荐系统工程师
立即订阅
11436 人已学习
课程目录
已完结 39 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 用知识去对抗技术不平等
免费
第1章 概念篇 (3讲)
【概念篇】你真的需要个性化推荐系统吗?
【概念篇】个性化推荐系统那些绕不开的经典问题
【概念篇】这些你必须应该具备的思维模式
第2章 原理篇 (20讲)
【内容推荐】画鬼容易画人难:用户画像的“能”和“不能”
【内容推荐】从文本到用户画像有多远
【内容推荐】超越标签的内容推荐系统
【近邻推荐】人以群分,你是什么人就看到什么世界
【近邻推荐】解密“看了又看”和“买了又买”
【近邻推荐】协同过滤中的相似度计算方法有哪些
【矩阵分解】那些在Netflix Prize中大放异彩的推荐算法
【矩阵分解】Facebook是怎么为十亿人互相推荐好友的
【矩阵分解】如果关注排序效果,那么这个模型可以帮到你
【模型融合】经典模型融合办法:线性模型和树模型的组合拳
【模型融合】一网打尽协同过滤、矩阵分解和线性模型
【模型融合】深度和宽度兼具的融合模型 Wide and Deep
【MAB问题】简单却有效的Bandit算法
【MAB问题】结合上下文信息的Bandit算法
【MAB问题】如何将Bandit算法与协同过滤结合使用
【深度学习】深度学习在推荐系统中的应用有哪些?
【深度学习】用RNN构建个性化音乐播单
【其他应用算法】构建一个科学的排行榜体系
【其他应用算法】实用的加权采样算法
【其他应用算法】推荐候选池的去重策略
第3章 工程篇 (10讲)
【常见架构】典型的信息流架构是什么样的
【常见架构】Netflix个性化推荐架构
【常见架构】总览推荐架构和搜索、广告的关系
【关键模块】巧妇难为无米之炊:数据采集关键要素
【关键模块】让你的推荐系统反应更快:实时推荐
【关键模块】让数据驱动落地,你需要一个实验平台
【关键模块】 推荐系统服务化、存储选型及API设计
【效果保证】推荐系统的测试方法及常用指标介绍
【效果保证】道高一尺魔高一丈:推荐系统的攻防
【开源工具】和推荐系统有关的开源工具及框架介绍
第4章 产品篇 (3讲)
【产品篇】推荐系统在互联网产品商业链条中的地位
【产品篇】说说信息流的前世今生
【团队篇】组建推荐团队及工程师的学习路径
尾声与参考阅读 (2讲)
推荐系统的参考阅读
【尾声】遇“荐”之后,江湖再见
推荐系统三十六式
登录|注册

【矩阵分解】Facebook是怎么为十亿人互相推荐好友的

刑无刀 2018-03-28
上一篇中,我和你专门聊到了矩阵分解,在这篇文章的开始,我再为你回顾一下矩阵分解。

回顾矩阵分解

矩阵分解要将用户物品评分矩阵分解成两个小矩阵,一个矩阵是代表用户偏好的用户隐因子向量组成,另一个矩阵是代表物品语义主题的隐因子向量组成。
这两个小矩阵相乘后得到的矩阵,维度和原来的用户物品评分矩阵一模一样。比如原来矩阵维度是 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/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《推荐系统三十六式》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(23)

  • 瑞雪
    你好,请问如果选取一部分为负样本,其他的缺失值在矩阵分解时是直接使用NaN吗,有点对正负样本分不太清:D
    2018-03-28
    3
    6
  • 林彦
    1. 既然可以根据物品的热门程度选择负样本,是不是类似也可以根据用户的活跃程度选择负样本?
    2. 是不是可以借鉴之前基于内容推荐的方法,先找出和当前用户或场景类似内容的用户或场景中的热门物品的交互作为负样本?这里用户或场景可以用各种距离度量的方式选出k个最相邻的。基于内容相似度找和正样本最相邻的物品作为负样本可能也可以。
    3. 负样本从概率分布中采样,概率分布的参数让整体的期望值和真实值尽可能接近。这样交互次数多的有更大概率被选中,或者可以看成赋予了更大权重。
    4. 引入一个概率参数变量,有交互的概率为p(i, j),预测交互值为1;无交互的概率为p(i, j),预测交互值为0。除了计算用户和物品隐变量外,把用户和物品隐变量固定后再估算这个概率参数。
    2018-03-28
    5
  • 王掌柜家的小二
    有个问题没想明白的,上网找了下也没明白的:在交替最小二乘法的原理中,既然已经是随机初始化了矩阵P,求得Q就是一个确定的结果了,那么这时候用Q反过来求P的意义何在呢?得到不也是同一个P吗?既然两个值是确定的,又何来迭代一说?
    知道自己理解的肯定有问题,忘老师回复。

    作者回复: 交替最小二乘,“最小二乘”就不是确定解,而是数值优化解,所以不存在你说的这种情况。

    2018-12-09
    1
    2
  • Drxan
    大神,如果要对负样本进行采样的话,是不是就无法用矩阵分解了
    2018-03-28
    2
  • shangqiu86
    负样本采样最最精准的应该是曝光而无行为的那些用户sku对,即对该用户来说该sku曝光了,但是用户对该sku没有行为,但是这个量会很大,可以从中抽样得到负样本
    2019-04-29
    1
  • cl
    还是没有明白,矩阵分解前提是需要分数矩阵,针对没有评分体系的应用从隐式反馈数据中构建这个分数矩阵,就是上一章遗留的问题,能否结合实例说一下??
    2019-01-19
    1
    1
  • yalei
    通常用户需要一个“入口”才能浏览商品详情,这个入口可大部分情况下是搜索结果和算法推荐。可以设置曝光埋点,再结合点击埋点来找到真正的负样本(有曝光而无点击的样本)
    2018-04-10
    1
  • 森林
    目标函数里置信度C是1+aC,如果我们挑负样本的话,负样本的次数是啥?
    2018-04-02
    1
  • 曾阿牛
    在构建点击率预估模型时,仅将正样本附近未点击的样本视为负样本。样本量大时,剔除一段时间内没有转化行为的用户数据(包括正负样本)
    2018-03-28
    1
  • neohope
    负样本构建方法:
    1、通过页面或APP曝光,用户没有反应的
    2、告知用户有优惠活动或优惠券,用户无动于衷的
    3、根据用户画像,以及物品标签,用户不需要的物品
    4、用户明确标记不感兴趣的物品或不认识的人
    5、普遍有差评的人或物品
    2019-12-04
  • 夜雨声烦
    c2c平台的例子太形象了 ..
    2019-11-22
  • 陈朋
    ALS算法没有讲好,连接https://blog.csdn.net/antkillerfarm/article/details/53734658
    2019-11-13
  • 陈思旭
    老师,加权的最小二乘公式中 rui 是不是 pui? 是rui下的二元变量,当rui>0时候,pui=1 ,当rui=0,pui=0.
    2019-08-01
  • 赖春苹
    有个很不明白的地方就是,隐式反馈的代价函数第一项,也是均方误差么?均方误差一般用于评分预测这种回归问题吧?隐式反馈对应的“点击”、“收藏”、“加购物车”这类的操作不是有限个状态么,不应该是分类问题吗?
    2019-07-31
  • real
    这个 根本就不是矩阵分解 好伐。你可以理解为 userid 和itemid的embedding。实现组织为onehot,在embedding到低纬度。两个field的embedding就对应的 p u,然后去采样。
    2019-06-14
    1
  • 戏入蝶衣
    老师,上一堂课讲到的预测评分的svd模型不需要负样本,为什么行为预测套用svd就需要负样本呢?如果我们只在用户有过行为的样本上训练模型,会有什么疏忽呢?
    2019-05-07
    2
  • shangqiu86
    老师,我理解矩阵分解中,应该是我们对于其中好多元素是未知的,这个未知不代表为0,而负样本其实对应的矩阵中的元素应该确认为0或者定义的负数是么?我们矩阵分解的目的是把矩阵中未知的元素计算出来
    2019-04-29
  • shangqiu86
    老师,您好,在您介绍算法的时候是否也推荐下其对应的python或者spark的包,方便我们实践起来
    2019-04-29
  • kijiang
    无反馈的样本评分是0,然后被采样到的负样本评分,设为-1吗?

    作者回复: 并不是。你这昵称是故意的吗?

    2019-03-11
  • 易初
    用户 和 物品 是一个pair , 用dssm 深度语意匹配网络是不是更好
    2018-05-22
收起评论
23
返回
顶部