推荐系统算法

方法:

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

原文地址:https://www.cnblogs.com/huangshiyu13/p/8859192.html