SkillAgentSearch skills...

Recsys

LR, FM, DeepFM, xDeepFM, DIN, CF等推荐算法代码demo。采用TFRecords作为输入,方便实际场景应用。

Install / Use

/learn @wangruichens/Recsys
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

Recsys algorithms, 相关paper目录

算法:

  • LR (FTRL)
  • DNN
  • FM
  • GBDT + LR
  • CADE (Collaborative Denoising Auto-Encoder)
  • DeepFM (tf serving 保存模型 / grpc/rest client 调用demo)
  • xDeepFM
  • DCN (Deep Cross Network)
  • Deep & Wide
  • DIN (Deep Interest Network)
  • VAE-CF (Variational Autoencoders for Collaborative Filtering)

Performance Summary (Traditional Feature Interaction)

Algorithm |Paper AUC| Experiment AUC | Paper Loss | Experiment Loss --------------|-------: |---------------:|-----------:|----------------: DeepFM | 0.8007 | 0.7888 | 0.4508 | 0.4608 xDeepFM | 0.8012 | 0.79793376 | 0.4493 | 0.45614 DCN | 0.7961 | 0.78843915 | 0.4508 | 0.46
DNN | 0.7991 | 0.7773 | 0.4408 | 0.6369 FM | 0.7900 | 0.7901 | 0.4592 | 0.4591

Notes
  • 都采用criteo dataset, 共39个fields, 参考 data statistics。采用相同的数据预处理。embedding size 都选取16维。数据处理加转tfrecords都存在这里

  • 主要比较不同算法的区别性。对于共有的dnn part,这里我都采用了100,100的二层结构。

  • 都采用256 step size。训练总step 1w~5w不等,不同算法需要的迭代次数不同。有些算法容易过拟合,有些可以多跑几轮,取决于模型表达能力。

  • 虽然没有经过预处理和调参,与paper中的结果去比较没有什么意义,纯属顺手列在这里,作为参考。

Deepfm

论文结果:  AUC = 0.8007 logloss=0.4508
实验结果:  AUC = 0.7888 logloss=0.4608
平均速度:global_step/sec: 12

aucloss

xDeepfm

论文结果:AUC = 0.8012 logloss = 0.4493
实验结果:AUC = 0.79793376 logloss = 0.45614
平均速度:global_step/sec: 14

aucloss

DCN (Deep and Cross Network)

论文结果:AUC = 0.7961 logloss=0.4508
实验结果:AUC = 0.78843915 logloss =0.46
平均速度:global_step/sec: 45

dcn 确实跑的挺快,主要优势在于xT * w 以后得到的是一维标量。计算量会比其他的网络明显小很多。训练速度几乎是deepfm,xdeepfm的3倍~4倍速度。更多细节看这里

aucloss

DNN

论文结果: AUC = 0.7991 logloss=0.4408
实验结果: AUC = 0.7773 logloss=0.6369
平均速度:global_step/sec: 41

论文里的那些dnn似乎效果都不错。我这里的raw feature embedding 加上两层100,100的dnn差距很明显。在8k~1w步的时候就开始过拟合了。没有调参,区别还是很大的。

另一方面也体现出那些复杂模型的优势,不太需要特征处理,模型即使0调参,效果也不会如此之大。

aucloss

FM

论文结果: AUC = 0.7900 logloss=0.4592
实验结果: AUC = 0.7901 logloss=0.4591
平均速度:global_step/sec: 23

aucloss

Performance Summary (Attention based algorithms)

Algorithm |Paper AUC| Experiment AUC | Paper Loss | Experiment Loss --------------|-------: |---------------:|-----------:|----------------: DIN | 0.8818 | 0.7447 | None | None

Notes
  • 采用Amazon Electro dataset, 负样本随机生成。

DIN

论文结果:  AUC = 0.8818 
实验结果:  AUC = 0.7447 
平均速度:global_step/sec: 124

论文中的AUC很高,与正负样本构造的选择很有关系。如果直接全局负采样,模型很容易跑出auc 0.9以上。 因为热门item一般只占全局中很少的一部分。一个解决方法是先把item按频率分桶,然后在生成对应正样本的负样本时,在相同频率的桶中抽取负样本。

aucloss

Performance Summary (Collaborative Filtering Based Algorithms)

Algorithm |Paper Recall@20| Experiment Recall@20 | Paper NDCG@100 | Experiment NDCG@100 --------------|-------: |---------------:|-----------:|----------------: Multi-VAE^{PR} | 0.395 | 0.3943 | 0.42478 | 0.426 | Multi-DAE | 0.387 | 0.38739 | 0.419 | 0.41993 | Logistic-VAE | 0.388 | 0.38821 | 0.419 | 0.41869 |

Notes

VAE-CF

Multi-VAE^{PR} 修改了目标函数,加入了一个beta约束。当beta小于1时,先验的约束减小,拟合的权重变大。采用模拟退火算法来比较高效的得到beta的合适值。

另外采用multinomial分布来计算最大似然函数,而不是采用gaussian或者logistic,实验结果也确实证明在top n 排序中采用多项分布的结果更好一些。

original code ref

imgimg

知识储备:

Variational Inference 变分推断

原paper:Variational Inference: A Review for Statisticians

笔记:Variational Inference,

Variational Inference case study : GMM ref

img

code : vi_gmm.py

img

Variational AutoEncoder

img

reparameterization trick

  • e~N(0,1)
  • z=mu+sigma*e

Variational AutoEncoder

View on GitHub
GitHub Stars105
CategoryDevelopment
Updated5mo ago
Forks36

Languages

Python

Security Score

77/100

Audited on Oct 27, 2025

No findings