一、前言
最近由于需要做一个topK推荐的项目,所以调研了一下,发现youtubeNet好像大家的评价不错,想实现一下,以此博客记录一下
二、YoutubeNet基本框架
Youtube是国外的大型视频网站,用户多达几亿,每秒上传的视频长度多达几个小时。对于这样一个大型视频网站,它的推荐系统面临以下几个问题:
1、体量大:包括用户和视频集都十分巨大,如何从上百亿的视频中为上亿用户推荐他们所感兴趣的视频?
2、新鲜度:youtube视频集是一个动态的视频库,每秒上传的视频多达几个小时,如何平衡好新视频(new content)和以北大家所接受的热门视频(well-established videos)之间的关系?
3、噪音:youtube用户的行为很难准确预测(由于稀疏性和外部因素的不可控性)
整个系统分成Candicate generation和Ranking,前者从上百亿的视频中选出一个百级数量的候选视频集,后者将这百级数量的视频排序,选出topK(本课题是选出50个)个用户感兴趣的视频推荐给用户。整个系统如下图所示:
三、候选集生成(Candicate generation)
前者在这一部分是用的算法是矩阵分解(a matrix factorization approach trained under rank loss),可以将这部分的DNN模型是做一个非线性的因子分解技术(a non- linear generalization of factorization techniques)。
1、推荐看作分类(Recommendation as Classification)
作者们实际上将推荐问题看作一个多分类问题(超大规模多分类):已知视频全集V,用户U和其上下文C,预测其在t时刻的视频类别。公式如下:

如文中所说,该DNN的目的是学习user embedding向量,作为输入送到softmax classifier,用以生成初步候选集。整个候选集生成的模型如下图:

受启发于NLP中对词袋的处理。文中将用户历史观看视频ID (定长的,如历史前20次观看记录,不足补零)和用户历史搜索视频ID转化成定长的的embedding vector(可以通过求均值,补零等操作转化成定长&#