• 推荐系统算法


    方法:

    1.强化学习

    用户是否点击一系列广告可以看成是一个序列过程,那么推荐广告就是一个序列决策过程。那么是否可以用强化学习来实现广告推荐。基本模型为:Deep Q-learning和LSTM的组合

    强化学习的好处是:

    a、在线学习。对于新用户,我们不知道他的喜好,通过不断的推荐后,我们能大概摸索出用户的喜好,也就是说,我们对于用户的embedding是根据用户的使用情况不断变换和适应的,避免了固定用户feature只能有固定embedding的问题。

    b、利于探索。如果我们每次只推荐自认为用户感兴趣的广告,那么这些广告将被加强,没被推荐的广告由于被冷漠而被削弱。这也是所谓的马太效应,两极分化。由于rl的训练过程有探索的策略,刚好可以向用户推荐新鲜的广告,减少马太效应。

    强化学习存在的挑战:

    a、广告过多的问题,Q-learning能否handle这么广告,或者有什么降低输出维度的办法(maybe hierachical Q-learing)

    b、那只用LSTM,不用rl, 做个用户的时序embedding是否可行。

    2.DSSM

    http://www.cnblogs.com/huangshiyu13/p/7009359.html

    微软提出的一个算法,也是目前最先进的算法

    各大公司目前的推荐算法基本都是DSSM的变体,比如一些网络结构不同,以及一些自身推荐需求不同的定制化结构

    3.协同过滤

    通过矩阵分解:http://www.cnblogs.com/huangshiyu13/p/6208999.html

    似乎有点难加入用户feature,以及处理新用户

    4.有监督学习

    把有标记的(用户feature, 确实点击的某一广告)作为正例,(用户feature,未点击的某一广告)作为负例,进行有监督分类

    这里有监督的方法就很多了,可以用logistic regression ,高斯混合模型(GMM, Gaussian Mixed Model), SVM决策树等等

    5.用户无监督聚类

    这个当然是最蠢的方法

    可用的技术有LDAk近邻法(KNN)和KMeans算法

    问题;

    1.正负例问题

    一般训练数据里面的正负例是不均的,需要处理。

    2.未展示和未点击的问题

    如何构造负例,a、一种情况是广告展示给了用户,但是用户没有点击(当然一种可能是用户不感兴趣,二种情况可能是用户忙于其他事情漏了),所以这种负例是有噪声的(当然大部分情形是用户不感兴趣)。 b、广告还未展示给用户(这些未广告可能包含用户感兴趣的)。所以可以看出,只要是负例,总是有很多噪声。那么其实信息比较准确的是正例。所以,一般构造负例也就随机配对就行了。

    3.利用graph structure

    基本上各个公司的用户都有社交网络,或者关系网络。比如好友网络,粉丝网络,用户-商店关系网络,用户-公众号网络,如何在用户embedding的时候加入graph信息?

    比如一批粉丝关注了同一个明星,那么他们在看到该明星代言的产品后,点击的概率可能会趋同。

    比如一群人在一个相同的购车群中,那么他们可能都对购车广告更有偏爱。

    所以,加入一些graph信息,也可能帮助推荐准确率。

  • 相关阅读:
    简单地通过Python库使用python的socket编程
    js 实现继承的几种方式
    JAVA中获取当前系统时间
    IntelliJ Idea 常用快捷键列表
    关于报错:There is already 'xxxController' bean method的解决方法
    mysql 使用 GROUP BY 时报错 ERROR 1055 (42000)
    安装系统,用cmd进行分区
    Bootstrap关闭当前页
    bootstrap的日期选择器
    Bootstrap如何关闭弹窗
  • 原文地址:https://www.cnblogs.com/huangshiyu13/p/8859192.html
Copyright © 2020-2023  润新知