






















相关性召回+点击率排序
根本任务: 匹配
匹配过程步骤:
可能感兴趣的高质量的物品;
分层明确的逻辑架构, 有利于项目整体的并行化和效果调优的并行化;
匹配的常用计算路径:
相关性, 由算法计算出的相关性, 认为是一种复杂相关性或静态相关性;
行为权重, 根据用户与物品之间产生的行为关系计算出的一种时效性较短的相关性, 认为是一种简单相关性或动态相关性;
基于矩阵分解的算法, 隐语义模型(Latent Factor Model, LFM), 将用户与物品之间的关系, 建模为 "用户到隐特征 + 隐特征到物品" 的链条, 然后通过求解隐特征信息来求解整个链条;
矩阵 \(R\) 表示用户对物品行为的原始矩阵
\[R = \left\{ \begin{matrix} r_{1,1} & r_{1,2} & \cdots & r_{1,I} \\ r_{2,1} & r_{2,2} & \cdots & r_{2,I} \\ \vdots & \vdots & \ddots & \vdots \\ r_{U,1} & r_{U,2} & \cdots & r_{U,I} \\ \end{matrix} \right\} \]
每一行表示一个用户, 每一列表示一个物品, 每个元素 \(R_{u,i}\) 表示用户 \(u\) 对物品 \(i\) 的行为;
矩阵分解则是分解为:
\[R \approx X^T×Y \\ X =\left\{ \begin{matrix} x_{1,1} & x_{1,2} & \cdots & x_{1,U} \\ x_{2,1} & x_{2,2} & \cdots & x_{2,U} \\ \vdots & \vdots & \ddots & \vdots \\ x_{K,1} & x_{K,2} & \cdots & x_{K,U} \end{matrix} \right\}, Y =\left\{ \begin{matrix} y_{1,1} & y_{1,2} & \cdots & y_{1,I} \\ y_{2,1} & y_{2,2} & \cdots & y_{2,I} \\ \vdots & \vdots & \ddots & \vdots \\ y_{K,1} & y_{K,2} & \cdots & y_{K,I} \end{matrix} \right\} \]
X 矩阵每一列表示一个用户, Y 矩阵每一列表示一个物品; 每一行均表示一个隐类别;
优点:
缺点: 隐特征缺乏直接的解释, 导致隐变量这个中间数据难易复用, 有效数据只有最终的用户和物品的数据;
LFM 思路: 先得到用户和物品的原始行为矩阵, 然后借助矩阵中有值(有行为)的元素来计算求解两个隐变量矩阵的值, 再用隐变量反过来求解缺失值元素的值, 从而得到推荐结果;
衍生出的相关模型: pLSA, LDA, 词嵌入, 句嵌入, 文档嵌入等;
LFM 求解 X, Y 转化为以下式子的优化问题(损失函数):
\[L = || R_{sample} - (X^T×Y)_{sample} ||_F^2 \]
\(||M||_F^2\) 是矩阵 \(M\) 的 Frobenius 范数(F-范数)的平方, 表示矩阵中每个元素的平方和;
\[M = [a_{i,j}]_{m×n}\\ ||M||_F = \sqrt{\sum_{i,j}{a_{i,j}^2}} \]
sample 下标代表矩阵中的样本集;
目标: 损失函数 L 取得最小值的 \(x_{u,k}\), \(y_{i,k}\):
\[L = \sum_{u,i \in sample }(r_{u,i} - \sum_{k}(x_{u,k} × y_{i,k}))^2 \]
单纯优化上式可能会出现过拟合现象, 所以加入正则化项:
\[L = \sum_{u,i \in sample }(r_{u,i} - \sum_{k}(x_{u,k} × y_{i,k}))^2 + \lambda(\sum{x_{i,j}^2}+\sum{y_{i,j}^2}) \]
其中, \(\lambda\) 是正则化参数, 代表正则化力度;
求解方法有两种:
随机梯度下降法(Stochastic Gradient Descent, SGD), 每次随机找一条训练样本, 求得其梯度, 然后将参数向梯度的反方向前进一步, 不断重复该过程, 求得一组结果稳定的参数值;
求两组参数 \(x_{u,k}\) 和 \(y_{i,k}\) 的偏导数:
\[\frac{\Delta L}{\Delta x_{u,k}} = -2(r_{u,i}-\sum(x_{u,k} \times y_{i,k}))y_{i,k} + 2\lambda x_{u,k} \\ \frac{\Delta L}{\Delta y_{i,k}} = -2(r_{u,i}-\sum(x_{u,k} \times y_{i,k}))x_{u,k} + 2\lambda y_{i,k} \]
根据上面的梯度求得参数的前进方向:
\[x_{u,k} = x_{u,k} + \alpha((r_{u,i} - \sum(x_{u,k} \times y_{i,k}))y_{i,k} - \lambda x_{u,k}) \\ y_{i,k} = y_{i,k} + \alpha((r_{u,i} - \sum(x_{u,k} \times y_{i,k}))x_{u,k} - \lambda y_{i,k}) \]
可以先将 \(x_{u,k}\) 和 \(y_{i,k}\) 随机初始化, 然后按上面公式不断迭代;
其中三个参数 \(\lambda\)(正则化系数) , \(\alpha\)(学习率) , \(K\)(隐特征) 都需要反复试验来确定最优值;
交替最小二乘法(ALS), 将两组参数交替保持一组固定不变, 来优化另外一组;
引入新变量: \(c_{u,i} = 1+\alpha r_{u,i}\)
优化目标变更为:
\[L = \sum_{u,i} c_{u,i} (r_{u,i} - \sum(x_{u,k} \times y_{i,k}))^2 + \lambda(\sum{x_{i,j}^2}+\sum{y_{i,j}^2}) \]
改写向量形式:
\[L = \sum_{u,i}c_{u,i}(r_{u,i} - x_u^Ty_i)^2 + \lambda(\sum_u{||x_u||^2 + \sum_i{||y_i||^2}}) \\ L = \sum_{u=0,i=0}^{u=m,i=n}(c_{u,i}(r_{u,i} - x_u^Ty_i)^2 + \lambda({||x_u||^2 + {||y_i||^2}})) \]
通过微积分运算求得解析解:
\[x_u = (YC^uY^T + \lambda I)^{-1}YC^uR_u \\ y_i = (XC^iX^T + \lambda I)^{-1}XC^iR_i \]
从根本逻辑上划分算法:
关联规则算法是对数据做了严格限制, 比如限制分析一次购物涉及的物品之间的关系, 计算出的数据相关性会更强, 由于使用了更少的数据而导致覆盖率较差;
相似度算法则是分析一段时间内购买行为数据, 相关性上有所牺牲, 但会有更好的多样性和覆盖率;
可以说相似度算法是一种广义的关联规则算法;
两个 N 维向量 X (\(X=(x_1, x_2, \dots, x_N)^T\))和 Y (\(Y=(y_1, y_2, \dots, y_N)^T\)) 的余弦相似度:
\[consine(X, Y) = \frac{XY}{||X||||Y||} = \frac{\sum_{i=1}^NX_iY_i}{\sqrt{\sum_{i=1}^N X_i^2}\sqrt{\sum_{i=1}^N Y_i^2}} \]
大数据稀疏情况下会造成两个层面的浪费:
采用剪枝优化,
优化后的计算流程:
同物品与物品的相关性计算方法, 将用户和物品位置互换即可;
一般网站, 用户数的量级要比物品数的量级大, 增加了用户之间相关性计算的复杂度; 所以要考虑业务特点和规模;
以上介绍的方法都是基于用户行为的召回算法, 存在如下问题:
基于记忆的算法, 对于新物品或长尾物品不利;以下介绍基于用户画像(标签)的算法;
用户标签来源:
将用户与物品的关系拆解为多个中间相关性的组合;
解决方法: 基于内容的推荐算法, 或直接推荐畅销热品或新品;
冷启动时期推荐系统的责任:
解决冷启动问题, 在推荐系统中称为 Exploration & Exploitation 问题(EE问题), 即探索与利用问题;
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。