推荐系统笔记

﹥>﹥吖頭↗ 提交于 2020-01-12 03:09:24

FM与libfm
FM(Factorization Machines)结合了SVM与factorization models的优点;
FM建模了所有特征的交互,因此适用于大型稀疏的场景,比如recommender systems;(SVMs fail)
FM能在线性时间被计算出来,并且能直接优化;(SVM是非线性的,且其中的dual transformation 没有必要)
指出SVD++、PITF、FPMC等模型的缺点,它们不适应于通用的预测任务,且需要特定的输入,FM能模拟它们;
FM参数个数是线性级别的,且不需要存储训练数据,直接把参数保存在内存中,能处理非常大的数据,如100 millions;
FM可用于回归、二分类、排序等预测任务;
FM用SGD训练;2-way FM 可以扩展到d-way FM;

普通的线性模型,各个特征是独立考虑的,并没有考虑到特征之间的相互关系,实际上,大量的特征之间是有关联的;
从公式很容易看出来,FM比一般线性模型多出了wxixj的累加,即特征组合的部分;
由于矩阵的稀疏性,w很难计算,为此引入辅助向量v,使得w=vvT;(v向量的点积,是一个值)
(通过向量v的学习能够更好的挖掘特征间的相互关系,尤其在稀疏条件下,以及在训练样本中没出现的交叉数据)
FM最精彩的部分是,EE<vi,vj>xixj可以在线性时间内计算,为O(kn),推导过程很巧妙;
(这里v向量的长度为k,是一个超参数;)
最后转化得到的结果为类似(x+y+z)2-x2-y2-z2这种形式,可以看到,所有的最高次项都约掉了,剩下部分是线性的;
(原矩阵为上三角矩阵,因此从整个矩阵,减去中间的对角线,再除以2)
(需要指出,这大概就是‘因子分解机’名字的由来;)
可以将2-way FM(二元交叉)扩展到d-way FM(多元交叉),但时间复杂度仍然是线性的;
计算出y对x的函数形式后,然后优化所有的w,(把w看成变量),计算y对w的梯度;
FM可以看做对高维稀疏的离散特征做embedding;(类似词向量)

https://www.cnblogs.com/AndyJee/p/7879765.html (FM算法(一):算法理论 很好!!!)
https://www.jianshu.com/p/152ae633fb00 (推荐系统遇上深度学习(一)–FM模型理论和实践)
https://www.jianshu.com/p/912d32aff9bc (理论:FM理论解析及应用)
https://blog.csdn.net/google19890102/article/details/45532745 (因子分解机(Factorization Machine),含代码)
https://tracholar.github.io/machine-learning/2017/03/10/factorization-machine.html (因子机深入解析,很好!!!)
https://yq.aliyun.com/articles/374170 (一文读懂FM算法优势,并用python实现!)
http://www.libfm.org/ (官网)
https://github.com/srendle/libfm (源码;C++的)

FFM与libffm
FFM(Field-aware Factorization Machines)致力于CTR预测;
FFM思想起源于PITF;PITF考虑三个特殊字段包括user、item、tag,而FFM比它更通用;
和Poly2、FM、PITF比较;
In FMs, every feature has only one latent vector;
In FFMs, each feature has several latent vectors;
利用sgd训练;利用Hogwild!并行训练;Hogwild是一种lock-free的 parallelizing sgd;
开源LIBFFM;和LIBSVM数据格式一样,做了扩展,加入Field Information;(从feat1:val1变为field1:feat1:val1)
单值特征,FFM退化为FM;
在Criteo and Avazu 数据集上测试;

和FM算法一样,FFM主要应用在推荐算法中的CTR点击率预估(排序)问题;
FFM把FM的<vi,vj>改为了<vi,fj, vj,fi>;
FFM将同一个field的特征单独进行one-hot;
(FM可以看作FFM的特例,是把所有特征都归属到一个field时的FFM模型;)
FFM的计算复杂度是 O(n^2),因为它无法使用FM的计算技巧ab = 1/2(a+b)2-a2-b^2;

https://www.jianshu.com/p/965d9d004675 (FFM原理与实践简单理解)
https://blog.csdn.net/baymax_007/article/details/83931698 (推荐系统FM & FFM算法解读与实践,含代码)
https://tech.meituan.com/2016/03/03/deep-understanding-of-ffm-principles-and-practices.html (深入FFM原理与实践 - 美团)
https://www.jianshu.com/p/781cde3d5f3d (推荐系统遇上深度学习(二)–FFM模型理论和实践)
https://www.csie.ntu.edu.tw/~cjlin/libffm/ (官网)
https://github.com/ycjuan/libffm (源码;C++的)

kaggle上的CTR竞赛
https://www.kaggle.com/c/outbrain-click-prediction (数据量很大;文件多;广告点击预测;利用FFM实现;MAP指标)
https://www.kaggle.com/c/avazu-ctr-prediction (只有三个文件;大小为1G;mobile ads点击预测;10天预测1天;Logarithmic Loss指标)
https://www.kaggle.com/c/criteo-display-ad-challenge (只有三个文件;数据未提供;7天预测1天;利用FFM实现;Logarithmic Loss指标;Yuchin Juan和Tianqi Chen的讨论,见https://www.kaggle.com/c/criteo-display-ad-challenge/discussion/10555)
https://www.kaggle.com/c/kddcup2012-track2 (数据量大;广告点击预测;AUC指标)

Netfiix Prize数据集和大赛
Netflix数据集包含了1999.12.31-2005.12.31期间匿名客户提供的超过一亿部电影评级,大约480189个用户和17770部电影;
用于解决电影评分预测问题;评测指标是RMSE;
http://blog.sina.com.cn/s/blog_a10c5cb40102wgih.html
https://www.kaggle.com/netflix-inc/netflix-prize-data

xlearn
xLearn是一款高性能,易用的,可扩展的机器学习算法库,你可以用它来解决大规模机器学习问题,尤其是大规模稀疏数据机器学习问题;
xlearn实现了FM和FFM,比libfm、libffm更快;c++实现,python和R接口;不依赖第三方库;支持分布式训练;
https://xlearn-doc-cn.readthedocs.io/en/latest/python_api/index.html (xlearn python接口)
https://xlearn-doc-cn.readthedocs.io/en/latest/index.html (xlearn文档)
https://github.com/aksnzhy/xlearn (源码)
https://github.com/sladesha/machine_learning/tree/master/FM (一款初级的FM实现)

SVD++ 2008年
PITF 2010年
FPMC 2010年
FM 2010年
EFM 2014年
FFM 2016年
Wide & Deep 2016年
DeepCTR 2016年
FNN 2016年
PNN 2016年
DeepFM 2017年
NCF 2017年
DCN 2017年
NFM 2017年
ACF 2017年
xDeepFM 2018年
DIN 2018年

LFM和FM(或FFM)啥关系?
LFM是一个体系或一类方法(且这种概念出现的更早,2008年之前就有,SVD++论文就有介绍Latent factor models ),LFM具体包括LDA、LSI、pLSA、SVD等;
而FM(或FFM)都是一种具体的方法(每个对应一篇论文);
可以认为,FM(或FFM)都属于LFM体系;
注意:LFM原名FunkSVD

SVD++
合并FM和邻域方法;
对SVD引入训练和优化,保持了邻域方法的优点,如对新用户不需要retrain,可解释性;
公式多而复杂;

PITF
基于标签的推荐;Tag recommenders ;
训练和预测都是线性时间;
users, items and tags两两交互;
BPR即Bayessian Personalized Ranking;

FPMC
结合了 Markov chain 和matrix factorization model;
其中MF和MC都是独立的推荐算法;

EFM
针对LFM推荐结果的不可解释性,作者提出EFM,即Explicit Factor Models;
显式信息是指抽取用户评论中的opinions,做phrase-level sentiment analysis;
这种推荐模型能更好的影响用户的购买行为;
情感词典构建(Sentiment Lexicon Construction);Feature-Opinion Pair Mapping ;
User-Feature Attention Matrix ;Item-Feature Quality Matrix ;
本质上是一种matrix factorization 框架;

FNN
FNN即Factorisation Machine supported Neural Network;
FNN是第一篇将DNN用到 CTR estimation 上的论文;
需要unsupervised pre-training作为第一阶段,a fine tuning 作为第二阶段;
还有一种SNN,即 Sampling-based Neural Network;分为 SNN-RBM and SNN-DAE;

PNN
PNN即Product-based Neural Networks;
提出了两类PNN,分别使用inner and outer product operations ,即IPNN and OPNN;
和FNN一样,也是做用户行为预测(User Response Prediction),主要是CTR;
PNN比FNN多了一层product layer;
若采用inner product operator,那么PNN和FM类似;

Wide & Deep
在Google Play上试验;
jointly training a linear model component and a neural network component;
分别用FTRL、AdaGrad训练宽度和深度部分;
Wide linear models 能捕捉sparse feature,deep neural networks 能泛化未知;
相比于factorization machines ,用神经网络代替了点积;
侧重推荐中的ranking;
https://github.com/tensorflow/models/tree/master/official/r1/wide_deep (tf上的官方实现)
https://ai.googleblog.com/2016/06/wide-deep-learning-better-together-with.html (谷歌博客)
https://mp.weixin.qq.com/s/9vYKUgusuFhCMDaXQLdZQw (wide&deep在贝壳推荐场景的实践)

DeepCTR
主要是online advertising systems中预测CTR和CVR;
广告具有basic features and visual features;前者指users, products and ad positions;后者指广告的image;
(图片对广告的点击率有重要影响)
利用ad image和其他特征来训练DNN并预测CTR;(包含CNN和全连接)
网络结构有17层卷积;包括 Convnet, Basicnet and Combnet三部分;

DeepFM
结合FM和DNN,其中FM负责低阶特征,DNN负责高阶特征;
不需要特征工程;端到端训练;不需要pretrain;
和Wide & Deep不同,DeepFM的两个部分共享输入和词嵌入;
和FNN、PNN、Wide & Deep对比,比它们都好;
主要做CTR预测;
https://blog.csdn.net/zynash2/article/details/79348540 (论文精读-DeepFM)

DCN
DCN(Deep&Cross Network)继承了residual networks的优点;
中间是一个Deep Network和一个Cross Network,和Wide & Deep类似;
前面是Embeddingand Stacking Layer,后面是Combination output Layer;
所谓的Cross Network,公式上就是三个向量相乘再加上偏置;
做的也是CTR预测(ad click predictions);

NFM
NFM即Neural Factorization Machines,看名字是FM的神经网络版本;
NFM包括Embedding Layer、Bi-Interaction Layer、Hidden Layers、Prediction Layer;
(FM可以看成没有Hidden Layers的NFM;)
NFM和DCN、Wide&Deep等最大的不同是Bi-Interaction pooling component;
NFM可以用在regression,classification and ranking任意一个;
https://github.com/hexiangnan/neural_factorization_machine (论文源码)

ACF
致力于multimedia recommendation;item-and component-level implicitness;
第一篇将attention mechanism引入到CF模型的论文;
使用两个attention modules,包括component-level attention module和item-level attention module;
ACF能无缝接入到传统CF models中,比如BPR、SVD++;
ACF是一种非传统的content-based CF method;

NCF
NCF即Neural network based Collaborative Filtering,是将MF的inner product代替为neural architecture;
(这一点和Wide & Deep类似;MF可看成NCF的特例;)
侧重于implicit feedback来获取用户偏好,包括watching videos, purchasing products and clicking items;
https://github.com/tensorflow/models/tree/master/official/recommendation
(tf上的推荐算法,NCF即Neural Collaborative Filtering,以及NeuMF即Neural Matrix Factorization)
https://github.com/hexiangnan/neural_collaborative_filtering (NCF原始版本)
https://github.com/mlperf/training/tree/master/recommendation/pytorch (NCF斯坦福实现)

xDeepFM
https://github.com/Leavingseason/xDeepFM (源码;python实现,tf)
在DCN(Deep&Cross Network)基础上改进,设计了CIN(compressed interaction network);
xDeepFM集成了CIN和DNN;

DIN
DIN即Deep Interest Network,做的是CTR预测;
设计了local activation unit来学习user interests的表示;
阿里的论文,同时被阿里应用在online display advertising system;
提出了mini-batch aware regularizer和data adaptive activation function;
和PNN、Wide&Deep、DeepFM比较,指标AUC和RelaImpr都更高;

Deep Neural Networks for YouTube Recommendations》2016年
难点在于数据量大、要保持新颖、有噪声;(Scale、Freshness、Noise)
主要由candidate generation 和 ranking两部分构成;
主要解决TopN推荐问题;
利用用户的年龄、性别、地理位置、查询观看记录等来训练candidate generation网络;
利用Categorical和Continuous特征,包括user language、video language、video embedding、time since last watch等来训练ranking网络;

Collaborative Filtering with Temporal Dynamics》 2009年
目的是研究随时间变化的用户偏好;
研究了time-aware factor model 并提出了TimeSVD++ ;
同时研究了邻域模型中的相应方法(TEMPORAL DYNAMICS NEIGHBORHOOD MODELS);
注意:FM和邻域模型都属于Collaborative Filtering;
公式多而复杂;难度较大

Recurrent Recommender Networks》2017年
提出了一种Recurrent Recommender Networks (RRN) 能够预测未来的行为轨迹;(利用LSTM实现)
RRN比TimeSVD++以及PMF等模型要小;

Deep Session Interest Network for Click-Through Rate Prediction》2019年
也是阿里的论文,提出了DSIN,用于动态CTR预测;
侧重于candidate ranking stage,用CTR进行排序;
第一部分用self-attention建模每个会话,提取用户兴趣,用于CTR预测(淘宝场景;session-based recommendation);
会话兴趣(session interests)存在某种序列模式(sequential pattern),因此第二部分用Bi-LSTM刻画;
提到了YoutubetNet、Wide&Deep、DeepFM、AFM以及DIN、DIEN、ATRANK等模型;

https://zhuanlan.zhihu.com/p/100019681 (推荐系统技术演进趋势:从召回到排序再到重排)

搜索、推荐、广告都有检索(召回)、排序(Learning to rank)两个任务?
召回强调快,排序强调准;
更精细的划分:召回、粗排(可选)、精排、重排序(ReRanker);
重排序主要是去已读、去重、打散、多样性保证、固定类型物品插入等等,技术产品策略主导或者为了改进用户体验;

召回技术含量不高,偏向策略型导向,可以灵机一动;所以推荐系统论文,95%是讲排序阶段的模型;
召回包括协同过滤、标签、热门等,一般是多路召回,分为有个性化因素和无个性化因素;
(可以把某一路召回看成是单特征模型排序的排序结果;协同过滤看成是userid、itemid两个特征的排序结果;)
(因此召回也看成是一种排序,那么推荐系统的各个环节就统一了;)
(用户行为序列召回,有时间顺序;
用户多兴趣拆分召回,即把用户兴趣拆分成多个embedding;
知识图谱融合召回,在用户行为数据稀疏的场景,增强推荐效果;KG融合模式分为知识图谱Embedding模式(KGE)及图路径模式;
图神经网络模型召回,如GraphSAGE、PinSage;)

排序技术
显式特征组合有:DeepFM、DCN、XDeepFM;
特征抽取器方面,Transformer比CNN、RNN更适合做推荐;
AutoML在推荐的应用,如ENAS结构搜索,但很不成熟,相对人工设计结构优势不明显;
增强学习在推荐的应用,如Youtube;
多目标优化有两个问题,模型结构问题和不同优化目标的重要性如何界定;Share-Nothing结构、Share-Bottom结构;帕累托最优;
多模态信息融合,是将文本、图片、视频、音频等信息映射到统一的语义空间内;难在工程效率;
长期兴趣/短期兴趣分离,用户点击属于短期兴趣(特别是最近的K个行为序列中的物品);用UID特征来表征用户的长期兴趣;

重排技术
集合了各种业务和技术策略,比如为了更好的推荐体验;
排序阶段的三种优化目标:Point Wise、Pair Wise和List Wise;重排一般用List Wise;
重排阶段的输入是精排的输出,因而是有序的,因此考虑时序性,可以使用RNN和Transformer;

推荐系统有哪些task?
TopN推荐、评分预测问题;(TopN推荐就是召回+排序)
CTR、CVR、watch time prediction、app acquisition rate(app下载或购买率)都属于user response prediction;
用户画像、行为建模;可以基于用户画像做个性化推荐;

CTR和TopN推荐的关系?CTR和评分预测问题的区别?
CTR预测是为了选出CTR最高的N个广告(TopN推荐);
CTR是一种两分类,用AUC评价;CTR预测也是一种评分预测问题?

广告和推荐的关系,为啥把广告从商品单独拎出来?
广告收费方式最普遍的是按点击付费,点击率高点击的次数就多,收入自然也会增长,这符合商家和广告主的利益,
点击率预测在广告中是非常重要的,也是很多平台和广告主优化的目标;
还有一种说法:把广告与推荐区分,是由于广告是帮物品找用户,推荐是帮用户找物品。

《What is a Good Recommendation Algorithm?》质疑了评分预测推荐算法的意义,Greg认为Top-N更有价值和意义。 Top-N更接近用户真实需求:擅长对所有电影进行预测评分的推荐引擎并不一定能很好的预测排名靠前的N部电影。

https://www.sohu.com/a/297609093_820218 (今日头条、抖音推荐算法原理全文详解!)
https://www.jianshu.com/p/aab1bf1307fd (Learning to rank基本算法小结)
https://blog.csdn.net/abcdefg90876/article/details/103675791 (如何构建一个推荐系统的验证框架)
https://www.jianshu.com/p/ed3aa36d9813 (使用Bert来进行序列推荐)

https://github.com/princewen/tensorflow_practice (文哥的github,涉及NLP、推荐、强化学习、GAN等)
https://www.jianshu.com/u/c5df9e229a67 (文哥的简书)
https://github.com/shenweichen/DeepCTR (浅梦的github,涉及推荐的多篇论文实现)
https://zhuanlan.zhihu.com/p/53231955 (浅梦的知乎,介绍DeepCTR工具包)
https://deepctr-doc.readthedocs.io/en/latest/Quick-Start.html (DeepCTR文档)
https://www.zhihu.com/people/wang-zhe-58/posts (王喆的知乎)

推荐系统与知识图谱结合:
https://www.jianshu.com/p/2e3cade31098 (DKN模型原理及实现)
https://www.jianshu.com/p/af5226c7fbbb (MKR模型原理及实现)
https://www.jianshu.com/p/c5ffaf7ed449 (RippleNet模型原理及实现)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!