如何用FM模型做召回模型

  1. FM怎么用在召回中?

    1. 极简的模式

      1. 第一,离线训练。这个过程跟在排序阶段采用FM模型的离线训练过程是一样的,比如可以使用线上收集到的用户点击数据来作为训练数据,线下训练一个完整的FM模型。在召回阶段,我们想要的其实是:每个特征和这个特征对应的训练好的embedding向量。这个可以存好待用。

      2. 如果将推荐系统做个很高层级的抽象的话,可以表达成学习如下形式的映射函数: y = F ( U s e r , I t e m , C o n t e x t ) y=F(User,Item,Context) y=F(User,Item,Context)

      3. 意思是,我们利用用户(User)相关的特征,物品(Item)相关的特征,以及上下文特征(Context,比如何时何地用的什么牌子手机登陆等等)学习一个映射函数F。学好这个函数后,当以后新碰到一个Item,我们把用户特征,物品特征以及用户碰到这个物品时的上下文特征输入F函数,F函数会告诉我们用户是否对这个物品感兴趣。如果他感兴趣,就可以把这个Item作为推荐结果推送给用户。

        说了这么多,第二个我们需要做的事情是:把特征划分为三个子集合,用户相关特征集合,物品相关特征集合以及上下文相关的特征集合。而用户历史行为类特征,比如用户过去点击物品的特征,可以当作描述用户兴趣的特征,放入用户相关特征集合内。至于为何要这么划分,后面会讲。做完上述两项基础工作,我们可以试着用FM模型来做召回了。

      4. 第一步,对于某个用户,我们可以把属于这个用户子集合的特征,查询离线训练好的FM模型对应的特征embedding向量,然后将n个用户子集合的特征embedding向量累加,形成用户兴趣向量U,这个向量维度和每个特征的维度是相同的。

        类似的,我们也可以把每个物品,其对应的物品子集合的特征,查询离线训练好的FM模型对应的特征embedding向量,然后将m个物品子集合的特征embedding向量累加,形成物品向量I,这个向量维度和每个特征的维度也是是相同的。

        对于极简版FM召回模型来说,用户兴趣向量U可以离线算好,然后更新线上的对应内容;物品兴趣向量I可以类似离线计算或者近在线计算,问题都不大。

      5. 第二步,对于每个用户以及每个物品,我们可以利用步骤一中的方法,将每个用户的兴趣向量离线算好,存入在线数据库中比如Redis(用户ID及其对应的embedding),把物品的向量逐一离线算好,存入Faiss(Facebook开源的embedding高效匹配库)数据库中。

        当用户登陆或者刷新页面时,可以根据用户ID取出其对应的兴趣向量embedding,然后和Faiss中存储的物料embedding做内积计算,按照得分由高到低返回得分Top K的物料作为召回结果。提交给第二阶段的排序模型进行进一步的排序。这里Faiss的查询速度至关重要,至于这点,后面我们会单独说明。

      6. 问题:首先我们需要问自己,这种累加用户embedding特征向量以及累加物品embedding特征向量,之后做向量内积。这种算法符合FM模型的原则吗?和常规的FM模型是否等价?

公式推导

下面i代表用户特征域的索引,一共有a-b个特征

下面j代表商品特征域的索引,一共有p-q个特征

a-b与p-q特征之间是没有交集的
∑ i = a b ∑ j = p q < v i , v j > x i x j = ∑ i = a b ∑ j = p q ∑ f = 1 k v i , f v j , f x i x j = ∑ f = 1 k ( ∑ i = a b ∑ j = p q v i , f v j , f x i x j ) = ∑ f = 1 k ( v a , f v p , f x a x p + v a , f v p + 1 , f x a x p + 1 . . . . . . + v a , f v q , f x a x q + v a + 1 , f v p , f x a + 1 x p + v a + 1 , f v p + 1 , f x a + 1 x p + 1 . . . . . . + v a + 1 , f v q , f x a + 1 x q + . . . . . . + v b , f v p , f x b x p + v b , f v p + 1 , f x b x p + 1 . . . . . . + v b , f v q , f x b x q ) = ∑ f = 1 k ( v a , f x a ∑ j = p q v j , f x j + v a + 1 , f x a + 1 ∑ j = p q v j , f x j + . . . . . . + v b , f x b ∑ j = p q v j , f x j ) = ∑ f = 1 k ( ∑ i = a b v i , f x i ∑ j = p q v j , f x j ) \sum_{i=a}^b\sum_{j=p}^q<v_i,v_j>x_ix_j\\ =\sum_{i=a}^b\sum_{j=p}^q\sum_{f=1}^kv_{i,f}v_{j,f}x_ix_j\\ =\sum_{f=1}^k(\sum_{i=a}^b\sum_{j=p}^qv_{i,f}v_{j,f}x_ix_j)\\ =\sum_{f=1}^k(v_{a,f}v_{p,f}x_ax_p+v_{a,f}v_{p+1,f}x_ax_{p+1}......+v_{a,f}v_{q,f}x_ax_{q}\\ +v_{{a+1},f}v_{p,f}x_{a+1}x_p+v_{{a+1},f}v_{p+1,f}x_{a+1}x_{p+1}......+v_{{a+1},f}v_{q,f}x_{a+1}x_{q}\\ +......\\ +v_{b,f}v_{p,f}x_bx_p+v_{b,f}v_{p+1,f}x_bx_{p+1}......+v_{b,f}v_{q,f}x_bx_{q} )\\ =\sum_{f=1}^k(v_{a,f}x_a\sum_{j=p}^q v_{j,f}x_j \\ +v_{a+1,f}x_{a+1}\sum_{j=p}^q v_{j,f}x_j\\ +......\\ +v_{b,f}x_b\sum_{j=p}^q v_{j,f}x_j )\\ =\sum_{f=1}^k(\sum_{i=a}^b v_{i,f}x_i\sum_{j=p}^q v_{j,f}x_j)\\ i=abj=pq<vi,vj>xixj=i=abj=pqf=1kvi,fvj,fxixj=f=1k(i=abj=pqvi,fvj,fxixj)=f=1k(va,fvp,fxaxp+va,fvp+1,fxaxp+1......+va,fvq,fxaxq+va+1,fvp,fxa+1xp+va+1,fvp+1,fxa+1xp+1......+va+1,fvq,fxa+1xq+......+vb,fvp,fxbxp+vb,fvp+1,fxbxp+1......+vb,fvq,fxbxq)=f=1k(va,fxaj=pqvj,fxj+va+1,fxa+1j=pqvj,fxj+......+vb,fxbj=pqvj,fxj)=f=1k(i=abvi,fxij=pqvj,fxj)
当f=1时,表示用户相关的特征域i第一个维度进行累加,item相关特征域j第一个维度进行累加,两者相乘
当f=2时,表示用户相关的特征域i第2个维度进行累加,item相关特征域j第2个维度进行累加,两者相乘

当f=k时,表示用户相关的特征域i第k个维度进行累加,item相关特征域j第k个维度进行累加,两者相乘
实际等于,用户相关的特征域下的特征向量累加成为维度为k的向量与item相关的特征域下的特征向量累加成为维度为k的向量进行内积,就表示最后用户对这个item的得分。

正常FM公式
y ^ ( x ) = w 0 + ∑ i = a b w i x i + ∑ j = p q w j x j + ∑ i = a b ∑ j = p q < v i , v j > x i x j \hat{y}(x)=w_0+\sum_{i=a}^bw_ix_i+\sum_{j=p}^qw_jx_j+\sum_{i=a}^b\sum_{j=p}^q<v_i,v_j>x_ix_j y^(x)=w0+i=abwixi+j=pqwjxj+i=abj=pq<vi,vj>xixj
实际相同的用户不同的item, w 0 + ∑ i = a b w i x i w_0+\sum_{i=a}^bw_ix_i w0+i=abwixi是相同的,当然可以在计算 ∑ j = p q w j x j \sum_{j=p}^qw_jx_j j=pqwjxj,先计算top300,然后加上item自身的向量内积,然后再求top100,不加的话,会有一部分精度损失,不加速度更快。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值