推荐系统中的矩阵分解(MF,FM,FFM)

MF

在推荐场景中, 我们可以把useritem的行为, 用评分矩阵 R ∈ R ∣ U ∣ × ∣ P ∣ R\in \mathbb R^{|U|\times|P|} RRU×P表示.
U = { u s e r } U=\{user\} U={user},为用户集合, P = { i t e m } P=\{item\} P={item}, 为item集合.
以商品为例,比如说用户u1对商品p1加购物车, 那就令 R u 1 , p 1 = 3 R_{u1,p1}=3 Ru1,p1=3, 用户u1对商品p2做出购买行为, 那就令 R u 1 , p 2 = 5 R_{u1,p2}=5 Ru1,p2=5.

问题描述

在真实场景中, 用户只会对部分item做出反馈, 所以矩阵是非常稀疏的.
推荐的task就是预测出用户可能感兴趣的未见商品.
我们假设用户喜欢某个商品是因为用户的特征偏好与该商品的特征能够吻合起来.
那这些特征是什么呢? 以音乐推荐为例, 见图1
这里写图片描述
figure 1 音乐推荐中, latent space 的一种假设

这些特征我们不必人为定义, 可以引入latent space的假定, 有 k k k个潜在的特征.
用户对每个特征都有一个偏好程度, 用矩阵 Q Q Q表示, 每个物品都有一个特征的吻合程度, 用 P P P表示,所以我们的任务就是求出这两个矩阵, 然后对 R R R进行补全, 找出得分高的未见商品推荐给用户.

问题定义

R ^ = Q W T s . t . Q ∈ R ∣ U ∣ × k , W ∈ R ∣ P ∣ × k \hat R=QW^T \\ s.t. Q\in \mathbb R^{|U|\times k}, W\in \mathbb R^{|P|\times k} R^=QWTs.t.QRU×k,WRP×k


figure 矩阵分解示意, 网络盗图,符号跟上面公式不一样

ALS求解方法

min ⁡ Q , P ∑ u , i ( R u , i − Q u P i T ) 2 + λ ∣ ∣ Q u ∣ ∣ 2 + λ ∣ ∣ P i ∣ ∣ 2 (1) \min _{Q,P}\sum_{u,i}(R_{u,i}-Q_uP_i^T)^2+\lambda ||Q_u||^2+\lambda||P_i||^2 \tag 1 Q,Pminu,i(Ru,iQuPiT)2+λQu2+λPi2(1)
式1 为目标函数. 求解方法通常为 alternating least squares (ALS), 交替最小二乘法.

FM

FM, Factorization Machines, 因子机.
在这里插入图片描述

tf.api实现

改写提效.

import tensorflow as tf
class FM(tf.keras.layers.Layer):
    """Factorization Machine models pairwise (order-2) feature interactions
     without linear term and bias.

      Input shape
        - 3D tensor with shape: ``(batch_size,field_size,embedding_size)``.

      Output shape
        - 2D tensor with shape: ``(batch_size, 1)``.

      References
        - [Factorization Machines](https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf)
    """

    def call(self, inputs, **kwargs):
        concated_embeds_value = inputs  # [N,T,d]
        square_of_sum = tf.square(tf.reduce_sum(
            concated_embeds_value, axis=1, keep_dims=True))  # [N,1,d], T个特征逐位求和
        sum_of_square = tf.reduce_sum(
            concated_embeds_value * concated_embeds_value, axis=1, keep_dims=True)  # [N,1,d]
        cross_term = square_of_sum - sum_of_square
        cross_term = 0.5 * tf.reduce_sum(cross_term, axis=2, keep_dims=False)   # [N,1]
        return cross_term

推倒过程见参考[5].

召回中使用.

放弃U与I特征组内部的二阶交互, 即没有了user_ageuser_gender, item_iditem_ctr 这样的交互.
在这里插入图片描述

参考

  1. 网易云音乐的歌单推荐算法是怎样的? - nick lee的回答 - 知乎
  2. cnblog,初识交替最小二乘ALS
  3. FM paper, Rendle2010FM
  4. 他人blog,因子机深入解析
  5. 知乎FM文章
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值