zoukankan      html  css  js  c++  java
  • 推荐系统算法

    方法:

    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信息,也可能帮助推荐准确率。

  • 相关阅读:
    mac/unix系统:C++实现一个端口扫描器
    C++:通过gethostbyname函数,根据服务器的域名,获取服务器IP
    PostMan Setting Proxy 设置 代理
    企业架构 Red Hat Drools KIE Project 三大核心产品
    IDS,IPS,IPD
    Vehicle routing with Optaplanner graph-theory
    SonarQube Detection of Injection Flaws in Java, C#, PHP
    Spring AOP Log
    Code Quality and Security | SonarQube
    Gradle vs. Maven: Performance, Compatibility, Speed, & Builds
  • 原文地址:https://www.cnblogs.com/huangshiyu13/p/8859192.html
Copyright © 2011-2022 走看看