• 推荐系统初探


    推荐系统初探

    首先推荐系统是什么?
    推荐系统简单来说就是找出用户当前最感兴趣/想购买的物品/服务。那么如何来找呢?可以根据用户历史行为、社交关系、用户兴趣点、当前上下文环境等方面来进行。
    为什么要有推荐系统?
    基本上稍微大一点的公司都会有自己的推荐系统,电商推荐用户需要的商品,视频和音乐网站推荐给用户感兴趣的商品,还有像头条这种,如何给用户推送及时的、个性化的、真正感兴趣的新闻消息几乎是头条的核心竞争力了。反正只要是信息/商品的量很多,那么就需要推荐系统来帮助用户进行筛选,展示给用户他们最想要的东西。归根到底,推荐系统为商家增加营收,增加用户粘度;为用户发现新的有趣的东西,帮助用户决策。总结一句话:商家用户都需要推荐系统。

    推荐的评价标准

    1. 计算预测打分和实际评分的RMSE(均方根误差),MAE(平均绝对值误差)。
    2. 对评分进行top-K选择然后计算预测集合的准确率和召回率。
    3. 覆盖率(推荐热门商品的同时尽量覆盖到冷门商品)
    4. 多样性(考虑推荐差异不同种类的商品的差异性)
      当然在不同的推荐场景中,还会考虑到新颖度、信任度、惊喜度、实时性等不同要求。

    经典推荐算法

    基于内容的推荐:

    • 直接针对已知的用户感兴趣内容进行推荐,不需要关心其他用户的行为。
    • 需要计算和已知内容相似度。
    • 需要对推荐的东西进行建模
    • 通常用在文本相关领域。

    协同过滤:
    根据user-item评分矩阵,根据矩阵中已有的一些评分来估计未知的评分。协同过滤分为基于item和基于user的。
    基于item的是先在找一些和当前item最相似的item,然后用当前用户已打分的item评分加权平均作为当前用户当前item的评分。例如:

    和movies1最相似的是movies3和movies6,于是计算(v_{1,6})的评分为:(v_{1,6}=frac{2 imes 0.41+3 imes 0.59}{0.41+0.59}=2.59)
    基于user的是先找到和你兴趣相似的其他用户,然后向你推荐其他用户感兴趣的item。
    两种协同过滤的对比:

    协同过滤的优点:

    • 只需要user-item矩阵,不需要对item进行建模
    • 当用户行为丰富时(矩阵不稀疏),效果较好

    协同过滤缺点:

    • 只取决于历史行为,与当前上下文无关。
    • 需要大量的用户行为。
    • 矩阵稀疏时效果不好。(此时可以考虑二度关联对矩阵进行填充)

    隐语义模型
    隐语义模型最早应用在文本中,是为了解决文本数据特征维度高,但样本稀疏的问题的。同样隐语义模型也可以使用在推荐系统中。
    直接将user-item矩阵进行矩阵分解(widehat{R}=P imes Q^T),R中的每一个值(widehat{r_{ij}}=p_{i}q_{j}^T=sum_{k=1}^{K}p_{ik}q_{kj})
    为了求解(P,Q),损失函数(e_{ij}=(r_{ij}-widehat{r_{ij}})^2=(r_{ij}-sum_{k=1}^{K}p_{ik}q_{kj})^2)。当然还需要加上正则项控制模型的复杂度,排除掉user和item的bias。于是需要优化的损失函数为:$$C=sum_{i,j}(r_{ij}-(mu+b_{i}+b_{j}+p_{i}q_{j}T))2+lambda_1sum_i{||b_i||2}+lambda_2sum_j{||b_j||2}+lambda_3sum_i{||p_i||2}+lambda_4sum_j{||q_j||2}$$
    然后使用梯度下降,求偏导,写出迭代更新公式,求出(P,Q)

    FM(Factorization Machine)
    FM和隐语义模型的做法差不多,都是矩阵分解,但是FM主要用在特征组合问题,由于经过One-Hot编码后的特征维度很高,用FM使用隐变量来降低进行特征组合时的复杂度。$$y(mathbf{x}) = w_0+ sum_{i=1}^n w_i x_i + sum_{i=1}^n sum_{j=i+1}^n w_{ij} x_i x_j $$
    转换为:

    [y(mathbf{x}) = w_0+ sum_{i=1}^n w_i x_i + sum_{i=1}^n sum_{j=i+1}^n langle mathbf{v}_i, mathbf{v}_j angle x_i x_j ]

    其中(W=V^TV)(v_i)(k)维向量。
    关于FM,这篇博客写的很详细。还有FM的论文FM在KDD2012中的使用

    FFM(Field-aware Factorization Machine)
    FFM是FM的改进版,将特征归为不同的field,同一个特征在对不同field特征进行组合时使用不同的隐向量,因此,FFM的二次参数从FM的(kn)个增加到(kfn)个。可以说FM是FFM的简化版或特例。
    FFM的论文LIBFFM项目主页

    参考:
    https://zhuanlan.zhihu.com/p/24202220
    http://blog.csdn.net/harryhuang1990/article/details/9924377
    http://tech.meituan.com/deep-understanding-of-ffm-principles-and-practices.html
    https://tracholar.github.io/machine-learning/2017/03/10/factorization-machine.html
    http://www.meihua.info/a/65329

    延伸阅读:
    深度学习在推荐系统中的应用
    DNN在CTR预估上的应用

  • 相关阅读:
    ActiveMQ的学习(四)(消息投递方式+死信队列+重发策略)
    ActiveMQ的学习(三)(ActiveMQ的消息事务和消息的确认机制)
    ActiveMQ的学习(二)(ActiveMQ的持久化)
    ActiveMQ的学习(一)(ActiveMQ和JMS的介绍)
    redis总结(持续更新)
    easyUI--搜索条件控件的处理
    bootstrap的下载和引用
    springMVC总结
    easyUi--datagrid的一些处理
    测试工作一
  • 原文地址:https://www.cnblogs.com/sandy-t/p/6819027.html
Copyright © 2020-2023  润新知