• Stars
    star
    791
  • Rank 57,558 (Top 2 %)
  • Language
    Jupyter Notebook
  • Created about 9 years ago
  • Updated about 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

深度学习在推荐系统中的应用及论文小结。

目录

Recommendation System

Deep Learning

Kaggle

论文概述

Supervised Contrastive Learning

评分:4/5。
简介:Google家在SimCLR自监督对比学习(contrastive learning)的loss结构基础上,延伸到有监督学习中,并在多项图像任务中排列第一。论文本身和推荐系统无关,但是如果仔细推敲,公式非常接近bayesian personalized ranking loss(BPR loss),而其实这一类triplet loss正是contrasive learning的其中一个子应用,也即当只有一个正负样本对的时候,当正负样本对的数量增大到多个时,将sigmoid改进为softmax,即可推出该论文中自监督学习的公式了。

  • 相比于无监督的模式(SimCLR)的做法。
    • 需要一个encoder network,将image raw features映射为一个向量。比如图像中使用的是resnet,输出2048维度的向量。叠加一个norm layer,实验表明有助于提高指标。
    • 一个projection network,将2048维度映射到128维度,后续接一个norm layer,因为这么做能够是的后续的内积操作 = cos可以等效于优化向量方向来训练。分子 -> 1也就是向量方向一致。最终infer的时候会抛弃这个projection network,理由:实验表明,使用encoder network的结果对后续下游任务更友好。
  • 启发:这个方式不局限于z = user embedding点乘item embedding。也适用于i2i的训练,其中z = 两个item embedding的相似度。
  • 为什么这个有效果?因为主要来自于分母的设计,需要最大化分子的同时,最小化分母;也就是分母中所有负样本中最难的那个样本会成为优化的上界。从而模型会去优化更难的样本。而不会说是难的负样本和容易的负样本贡献的梯度是一致的。
  • 在无监督的公式里面,分子是1个正样本,而在监督学习里面,把1个正样本拓展为这个mini batch里面的所有同属于这个class的正样本。
  • 公式非常接近bayesian personalized ranking loss。其中的区别是,bpr loss针对的是一对正负样本对,属于triplet loss。
  • 在binary classification的时候,sigmoid = softmax;也就是其实把BPR loss延展为多分类问题的时候,就改为softmax,也就是上图无监督学习中的公式了。也就是从反向角度去证明了,其实SimCLR的思路有效,其实等效于把一个二分类的优化问题,转换为了多分类优化,其中其他的分类是包含了较难的负样本和较容易的负样本。

Multi-Interest Network with Dynamic Routing for Recommendation at Tmall

评分:5/5。
简介:引入capsule的dynamic routing和label-aware attention,对用户历史行为序列(点击商品的集合)提取用户兴趣特征(user embedding)。相比阿里之前的DIN在用户行为聚类上更进了一步,本质上是商品特征的soft clustering,并根据电商环境进行了改良。

  • 传统方式CF对稀疏数据集表现不好,而且存在MF计算量大的问题。而DNN的方式的局限在将用户特征用一个低维的向量来表示,对于多兴趣方向行为的用户损失了信息。DIN采用self attention的做法,使得对每一个目标商品可以attend to globel items,并在最后通过sigmoid预测CTR,速度慢,更适合Ranking精排序阶段。而MIND的主要任务和DIN不同,MIND主要负责输出用户嵌入向量,由于user embedding和item embedding在同一个vector space,可以快速通过内积的nearest neighbor得到大致推荐商品范围(粗排在一千个左右),为Matching粗排序阶段的筛选作准备。
  • 在dynamic routing输出了兴趣聚类capsules之后,接label-aware attetion层可以让训练让target item表示为interest capsules的一个线性组合。其实Key为target item,Q和V为interest capsules。
  • 具体用户兴趣聚类的个数可以动态调整。比如是用户历史行为的log。由于推荐系统环境中用户行为序列的长度不定(variable length),改进dynamic routing采用fixed shared weight使得未知商品同样能够作为网络输入。
  • 类似Airbnb real-time personalization的做法。目前几种主流将匹配机制做到实时的方法本质上都是将user和item embedding训练在同一个vector space,然后得以通过内积来进行快速比较。同时为了反映用户行为的变化,输入user embedding的架构需要对variable length的行为序列兼容,或者采取most recent N的固定架构。
  • 和其他Matching粗排序阶段的算法比较发现,MIND > item-based CF > Youtube DNN.

BERT4Rec- Sequential Recommendation with Bidirectional Encoder Representations from Transformer

评分:4/5。
简介:将Bert双向Transformer的结构带入了推荐系统,并改变了目标用Cloze task来防止信息泄漏并可用于预测随机masked的item。

  • 其中一个关键的假设:用户行为序列并没有NLP那样严格的逻辑依赖关系,更多在视频推荐场景里强调的是相关性,发现性和多样性。在Transformer里依旧是单向的次序结构,只不过相比RNN来说,Transformer能够在每一步都连接过去所有的input,而不必将信息condense到一个hidden state里(信息噪音和流失)。
  • Transformer的引入相比RNN对并行计算友好。复杂度从O(nd^2)变为O(n^2d),其中n为序列长度而d为特征长度,对于短序列高维的特征表示来说,self-attention是一个选择。同时由于只引入了matrix multiplication的操作,对SGD运算友好。
  • self attention本身其实和位置无关,只是一种扩大receptive field的方式,类似CNN中利用叠加起来的层次来一部部增大感受域,如果需要次序的概念,需要加入position encoding。
  • 在推荐系统里,position embedding对应的意义是此操作距离用户当前时刻的时间差。这个position embedding在不同的场景应当有不同的意义和改进技巧。比如在图片领域强调的是translation invariance那么相比absolute position更合适的其实是relative position encoding等等。

Behavior Sequence Transformer for E-commerce Recommendation in Alibaba

评分:3/5。
简介:将Transformer的self attention结构应用在推荐系统典型的Wide & Deep网络结构中。

  • 结合了position embedding,用距离当前推荐时间的时间差作为位置信息。
  • 采用的是内部的attention机制,也即Q = K = V = embedding,其中dot product计算的是物品之间的相似程度。最后采用multi-head的做法,类比CNN中使用的多个kernel得到多个feature map,multi-head使得能够探索出embedding不同位置的特性。注意的一点是,attention同样可以引入外部的embedding,只要保证key和value是一一对应的即可,可以利用外部embedding来升、降维度。
  • 最终的目标是预测目标产品的CTR的概率,适合电商的环境。对于视频推荐的场景,可以尝试youtube那篇文章的目标,即expected watch time。

Deep Neural Networks for YouTube Recommendations

评分:5+/5。
简介:使用DNN对大规模线上推荐系统架构的一次综述,包含Candidate Generation和Ranking两部分。Candidiate Gneration的部分负责生成user embedding,借鉴wordvec的skip gram negative sampling模型,Ranking部分使用类似的架构,并用weighted LR将目标改为预计观看时间。很经典的文章。

  • DNN的方法可以看作是泛化的matrix factorization的类别,但是优势在于可以加入任意连续或者类别的特征,适合不断迭代。
  • 在线系统获得的显式特征较稀疏,比如点赞、收藏等用户行为。训练时更多利用到的是隐式特征,比如用户观看市场,是否完整观看等等。
  • CF中并没有强调次序的观念,而youtube的DNN做法则只选取在用户观看视频之前的N个操作数据作为输入。同时使用unordered bag来防止次序带来的直接影响。比如推荐用户刚搜索过的视频等。
  • 鉴于用户点击视频事件highly unbalanced的属性,引入以用户观看时长为权重的weighted logistic regression,并推导可用odds来近似用户观看视频时长的预期(值域相同)。
  • 线上serving的场景中,可以根据用户的最新操作实时更新user embedding,而video embedding则是SGNS训练中的副产物,需要定期全量重训。实时场景里将embedding存入内存用ANN的方法,比如LSH,来推荐视频,而不需要对全量视频跑inference。
  • example age特征的引入很关键,指该用户操作距离此训练的时间间隔,使得模型可以模拟实际视频走红的时序特征。

Collaborative Deep Learning for Recommender Systems

评分:4/5。
简介:针对rating和content information matrix,设计MAP(Maximum A Priori)的objective function来改善user embedding。相比传统collaborative filtering不擅长直接处理稀疏rating输入,CDL通过更好地结合content information可以得到更好的rating prediction。

  • 引入SDAE(Stacked Denoising Auto Encoder)来获得item的compact feature。随机初始化单位user embedding,长度等同于SDAE中encoder的输出维度,使得uTv = r为目标来训练。其中v为encoder输出,及item的compact feature。构造MAP的objective利用EM交替更新参数。
  • 参数初始化都用bayesian model。整体上是hierachial bayesian model。
  • 使用recall作为evaluation metric,即在推荐结果中relevant的数量占全部relevant item的数量。对比precision。

Wide & Deep Learning for Recommender Systems

评分:4/5。
简介:利用logistic regression针对广度的交叉特征(cross product transformation),利用NN负责深度特征挖掘,并同时进行joint training。来自Google的工程实践总结。

  • 提出Wide & Deep的解决方案来改善memorization(relevancy)和generality(diversity)的表现。改善传统embedding容易因为稀疏输入而over-generalize的问题。
  • 介绍了工业上推荐系统的流程,先通过retrival从数据库选出初步的candidate,O(100)的量级;然后再通过rank的模型将candidate进行精排返回前十作为结果,Wide & Deep是在这个rank阶段的一种方案。
  • 每一次retrain时利用上一次的weight初始化,以减少训练时间,类比transfer learning。
  • 为了线上的低延迟在10ms量级,采取多线程small batch的方式跑inference,而不是将所有candidate放在同一个batch里跑。最终batch size为50,4个线程可以达到14ms的表现。
  • Matrix Factorization里通过dot product引入interaction的特征,其根本目的是为了引入non-linearity。但这部分可以用NN更好的完成。

Real-time Personalization using Embeddings for Search Ranking at Airbnb

评分:5/5。
简介:对listing做embedding,将user type,listing type以及query在同一个vector space构建embedding,以实时更新搜索结果并提高准度。KDD 2018 best paper。

  • 利用in-session signal,将用户行为(包括点击、最终达成交易以及被拒绝)模拟为一个时序序列,类比word2vec中的单个句子。然后利用skip-gram和negative sampling来进行word2vec模型的训练。
  • 对实际场景的精准观察是很多机制设计的灵感来源。比如:
    • 将最终的bookings作为global context添加进每一个sliding window的训练。
    • 因为旅游目的地的搜索是congregated search,于是添加在target area区域内的negative sampling sets。
    • 将奖赏(vetor距离更新)和惩罚(vector相互远离)加入进objective function的设计。
    • 考虑到用户booking的稀疏性,采用user type(users' many-to-one relation),并将listing type和query type并入同一序列进行训练,使得embedding在同一个vector space,以允许用户在搜索时可以提供语义上最接近的结果(而不是简单匹配),并改善最相近listing carousel模块的推荐结果。

A Cross-Domain Recommendation Mechanism for Cold-Start Users Based on Partial Least Squares Regression

评分:3/5。
简介:利用PLSR来解决用户推荐场景里cold start的问题。

  • PLSR适合针对多模态的数据特征进行回归拟合,原理是在压缩降维时考虑最大化cross-domain数据的covariance,区别于PCA,LSI等仅仅最大化单个domain数据的variance。论文针对用户在没有任何历史评分记录的target domain中,利用已有的可能完全不同种类的source domain的评分记录来进行预测。
  • PLSR的一个前提是需要完整的matrix信息,而user rating matrix的训练数据往往稀疏而且有很多缺失的entry。常见的预处理是利用MF(Matrix Factorization)或其变式NMF(Non-negative MF)来填充空缺的entry。 相比SVD,MF能够利用Alternating Least Square的方式并行化运算较快,但是并没有能够像SVD中那样可以选择合适的top K rank.
  • 论文中提到一个生产环境中加速的技巧,针对user rating matrix往往维度过大导致较高的计算复杂度,是在对数据预处理(补值)之后再进行一次MF来拿到user latent factor(n*k),然后利用这个数据在往后的计算中代替原始的user rating matrix以降低计算复杂度。online阶段加入新用户时再一次的MF计算,可以利用incremental MF的技巧来避免重复计算。
  • 其他类似的推荐算法:
    • crossMF:合并training,test数据一并使用MF来预测值。
    • crossCBMF(clustering-based MF):state-of-art。
  • 本质上PLSR也属于linear regression的一种,对于模拟数据间非线性的关系可以考虑kernel PLSR。对于传统机器学习算法来说,很多时候从线性到非线性的处理基本都会借助kernel来直接代替曾经的点乘操作,比如SVM。
  • 联想到我曾在一个reverse image search engine的kaggle竞赛中用到PLSR针对image feature vector和word embedding进行跨模态建模,效果不错,最终LB拿了第一名。

IRGAN - A Minimax Game for Unifying Generative and Discriminative Information Retrieval Models

评分:5/5。
简介:将GAN应用在information retrieval上。SIGIR2017满分论文。

  • 巧妙地构造了一个minmax的机制。discriminator负责判断一个document是否well-matched,通过maximum likelihood。而对generator来说,则是更新参数minimize这个maximum likelihood。可以借鉴的点,在于如何设计的likelihood的期望。Discriminator其实核心就是一个binary classifier,然后利用logistic转换到(0, 1)的值域范围,就可以设计log(D(d|q)) + log(1-D(d'|q))的likelihood来达到目标!(其中d'为generator的样本,d为ground truth distribution的样本)。理解的思路其实很简单,generator生成的d'是试图欺骗discriminator的,因此如果D判定d'为well-matched,则因此可以引入large loss来penalize discriminator,也是log(1-D(d'|q))的设计思路。
  • 相比传统的GAN在continuous latent space生成图片,IRGAN的generator则是在document pool选择最相关的relevant document,是离散的。于是引入RI里的policy graident来descent。
  • 利用hierachial softmax来降低softmax的复杂度。传统的softmax和所有的document相关,而hierachial softmax可以降至log(|D|).
  • MLE(Maximum Likelihood Estimation)是MAP(Maximum A Priori)的一种特殊情况,即Prior为uniform distribution的。MAP既考虑了likelihood还考虑了参数的Prior。

Practical Lessons from Predicting Clicks on Ads at Facebook

评分:4/5。
简介:Facebook提出的CTR预估模型,GBDT + Logistic Regression。

  • 加深了对entropy的理解,以及在CTR领域使用normalized entropy的实践。
  • 学习到了GBM和LR的结合。用boosted decision tree来主要负责supervised feature learning有很大的优势。之后对接的LR + SGD可以作为online learning保持日常更新训练保证data freshness。
  • 对引入prior的理解。[1] integrating knowledge. [2] avoid overfitting, similar to regularization.
  • 在online learning领域,对比LR + SGD和BOPR(Bayesian online learning scheme for probit regression)的优劣势。

More Repositories

1

chatroom

socket.io in nodejs, simple broadcasting.
JavaScript
18
star
2

screen-split-video

An creative way of displaying two or more videos at the same time in single web page.
JavaScript
9
star
3

Berkeley-CS61A

some interesting python projects and tutorials
Python
8
star
4

image-reverse-search-engine

Top 1 submission in 2018 CS5785 Machine Learning final kaggle competition.
Jupyter Notebook
6
star
5

wechat_web_scraper

A web scraper and content recommendation engine based on wechat articles.
Python
4
star
6

ReactNativeEverydayDemo

react native every day challenge and demo
Objective-C
4
star
7

chocoluffy.github.io

my world
HTML
3
star
8

Go-Back-N

Distributed System.
C
2
star
9

python-projects

doing some interesting python projects in my spare time
HTML
2
star
10

redditQA

Explore some interesting NLP experiments with reddit comments data.
Python
2
star
11

d3-force

A force graph with topic filtering in d3js
JavaScript
2
star
12

Advanced-Machine-Learning

Machine Learning classifiers and examples from the graduate class at Stony Brook with Prof. Leman Akoglu. Adaboost, EM, HMM, KNN, Naive Bayes vs. Logistic Regression.
Python
2
star
13

leetcode-cpp

Collections of useful interview questions and tutorials from Leetcode/Geeksforgeeks/EPI and company OAs.
Python
2
star
14

Reborn_SDK

reborn sdk readme
Ruby
1
star
15

pytorch_cnn

Customized convolutional neural network in Pytorch.
Python
1
star
16

rss-reader

fetch rss and forward them to slack bot
JavaScript
1
star
17

birthday-surprise

using javascript and canvas to make some pretty effect
JavaScript
1
star
18

beer-bubbles

Interactive animation for a page full of beer bubbles, using sketch.js
JavaScript
1
star
19

Hackrank-python-solution

using python to master data-structure and algorithm
Python
1
star
20

karabiner_complex_modification_config

A saved copy of my personal configuration
1
star
21

canvas-particles_effect

creating particles effect, can be triggered at touch, click, move, auto, e.t.c
JavaScript
1
star
22

blockchain-notes

My curation of learning notes on blockchain, bitcoin and crypto-economics.
1
star
23

racket-tutorials

Extra coding for course CSC324- functional programming on Racket and Haskell
Racket
1
star
24

faceEmoji

openCV facial detection and overlay a funny Emoji
Python
1
star
25

d3js3D

using d3js and aframe.js to create 3D fancy visual effect
HTML
1
star
26

firis

Let people act in the movies.
Jupyter Notebook
1
star
27

instagram_api

ruby on rails project using instagram API
JavaScript
1
star
28

face-gan

Generate human eyes for closed-eyed profile image.
Python
1
star
29

blog_assets

代替微博图床。
1
star
30

hotspots

Mind Sumo challenge for Kayak
Ruby
1
star
31

projectEuler-in-ruby

embrace every chance to polish yourself!
Ruby
1
star
32

p2p-chat

Distributed System.
Makefile
1
star
33

d3-js-projects

practicing d3.js projects in industrial-oriented way
HTML
1
star
34

Java-inheritance

the most detailed and crazy java inheritance material
Java
1
star
35

dotfiles

My dotfiles, keep synced over all machines.
Vim Script
1
star
36

blockchain-utxo

Experiments on blockchain's concepts: POW, POA, merkle tree, and UTXO model.
HTML
1
star
37

python-scheme-interpreter

using python to interpret scheme programs and draw some interesting images
Python
1
star
38

web-proxy

Distributed System.
HTML
1
star
39

canvas-star_war

creating a star war scene, using canvas(combined with particle effect and rays)
JavaScript
1
star
40

snapterest

a react.js project, aiming to filter and display tweets from twitter.
JavaScript
1
star
41

ADA2016

ADA 2016 general meeting slides website. A handy way to demo slides on website.
JavaScript
1
star
42

lazy-screen-capture

A python scripts that automatically upload the latest screen capture to be cloud-stored and get url copied to system clipboard.
Python
1
star
43

node-text-summary

Extract important sentences from paragraph, document, etc, implement algorithm(co-occurrence, nltk) in nodejs
JavaScript
1
star
44

chrome2mongo

A chrome browser extension that saves current page to mongoDB locally or cloudly.
JavaScript
1
star