推荐系统-YouTube DNN

多路召回:基于item的协同过滤,YouTubeDNN,牛顿冷却定律。
排序:GBDT+LR。

注意力 + 神经协同过滤、离散协同过滤
更高阶的特征级注意力机制
考虑时间序列
去除隐形反馈噪声
负反馈
推荐系统实时性
差分隐私用于深度推荐系统??

深度推荐算法几个当前的研究热点包括:
(1)效率与可拓展性:神经网络的计算量十分庞大,而推荐系统因实时性的要求需要在短时间内完成对大量数据的处理,因此如何将它们更高效地应用在超大规模的推荐平台上,是亟需解决的技术难点。
(3)捕捉用户长短期偏好:深度学习中的RNN、LSTM等模型可以捕捉时序信息,将它们应用到推荐中可以用来捕捉用户的长短期偏好,进而结合用户长短期偏好产生推荐。

推荐结果的多样性和公平性:
如果我们在推荐中,只考虑推荐的准确性,那么方法很容易就陷入“信息茧房”。例如某个用户在Netflix上观看了一部喜剧片,如果推荐系统缺乏推荐的多样性,那么接下来向这位用户推荐的内容将会全部都是喜剧片,但很有可能这个用户不仅喜欢喜剧还会喜欢悬疑片,如果只推荐喜剧无疑会带来不好的用户体验与较低的推荐转化率。

至于推荐的公平性,是一个暂时没有具体的衡量标准问题。一个比较典型的例子是前段时间网上的一则新闻,大概内容是某求职网站给企业雇主推荐应聘者时,推荐的结果中全是男性的应聘者,而没有女性的应聘者,这便是推荐不公平的一种体现。我个人理解在某种程度上,推荐的多样性和推荐的公平性追求的结果是一致的, 推荐的结果多样到一定程度,自然也就公平了。

不同的用户对于不同种类的个人信息会持不同的态度,那么如何
实现针对不同用户,定制化地进行隐私保护策略的制定,使得系
统能够快速地适应各类用户,从而实现真正的个性化服务

工业化的推荐系统经过最近几年的发展,目前已经进化到了深度学习时代,代表性的模型有很多,比如Wide& Deep或者DeepFM模型。但是跟NLP或者图像领域相比,很明显深度学习在实用化的推荐系统应用场景还未能发挥符合人们期待的效果。并没有哪个深度学习推荐模型能够相对传统模型有非常大的性能提升,这里面原因可能比较复杂。从模型角度看,我比较看好将Transformer模型应用在推荐领域,大家知道,Transformer在NLP里面已经大放异彩,而且从机制上,它是比较适合用来做推荐或者CTR模型的。但是可能仍然需要针对推荐领域的特点做些改造,直接应用效果也没有太体现出来,但是总体而言,我个人比较看好这个模型。当然,从实用化的推荐引擎角度,还有很多值得关注的点,比如多模态融合/多目标、多任务与Transfer Learning以及AutoML的应用等,都是很有前景和值得探索的方向。刚才讲的是排序模型和推荐机制,至于推荐领域的另外一个重要环节:召回阶段,我觉得采用模型统一召回代替传统的多路召回是个比较明显的趋势。

GAN应用到推荐领域
loss函数增加公式。

点子:

  • 召回模型:
    解决召回内容头部问题--推荐系统公平性、多样性。(多目标优化 )跨域推荐能否解决??
    用户行为序列召回:可以用无监督?(Sum Pooling)
    用户多兴趣拆分:从行为序列打出多兴趣点embedding,可以解决单Embedding召回头部问题。由输出单独一个embedding,换成输出多个用户兴趣embedding。本质上,把用户行为序列打到多个embedding上,实际它是个类似聚类的过程。目前常用的拆分用户兴趣embedding的方法,主要是胶囊网络和Memory Network,但是理论上,很多类似聚类的方法应该都是有效的,所以完全可以在这块替换成你自己的能产生聚类效果的方法来做。
  • 排序(也可以召回):
    多目标优化:两个问题。第一个问题是多个优化目标的模型结构问题;第二个问题是不同优化目标的重要性如何界定的问题。
    长短期兴趣分离:长期兴趣目前建模方式还比较简单,这里完全可以引入一些新方法来进行进一步的兴趣刻画,而且有很大的建模空间。
    跨域推荐:参考 https://mp.weixin.qq.com/s/jkGb_qkfmEOEs030ZRIJIw
    https://www.zhihu.com/question/314255787

YouTube DNN

参考.
在推荐系统领域,特别是YouTube的所在视频推荐领域,主要面临三个挑战:

规模大:用户和视频的数量都很大,只能适应小规模数据集的算法就不考虑了。
更新快:youtube视频更新频率很高,每秒有小时级别的视频上传,需要在新发布视频和已有存量视频间进行balance。更新快(实时性)的另一方面的体现是用户实时行为切换很快,模型需要很好的追踪用户的实时行为。
噪音:(手抖、标题党) 噪音主要体现在用户的历史行为往往是稀疏的并且是不完整的,并且没有一个明确的ground truth的满意度signal,我们面对的都是noisy implicit feedback signals。噪音另一个方面就是视频本身很多数据都是非结构化的。这两点对算法的鲁棒性提出了很高的挑战。隐性反馈的行为是有许多噪声的。
之所以要在推荐系统中应用DNN解决问题,一个重要原因是google内部在机器学习问题上的通用solution的趋势正转移到Deep learning,系统实际部署在基于tensorflow的Google Brain上。

总体架构

推荐系统-YouTube DNN_第1张图片
整个推荐系统分为candidate generation(召回)和Ranking(排序)两个阶段。召回阶段通过i2i/u2i/u2u/user profile等方式“粗糙”的召回候选商品,召回阶段视频的数量是百级别了;排序阶段对Matching后的视频采用更精细的特征计算user-item之间的排序分,作为最终输出推荐结果的依据。

之所以把推荐系统划分成 召回 和 排序 两个阶段,主要是从性能方面考虑的。召回阶段面临的是百万级视频,单个视频的性能开销必须很小;而排序阶段的算法则非常消耗资源,不可能对所有视频都算一遍,实际上即便资源充足也完全没有必要,因为往往来说通不过召回粗选的视频,大部分在排序阶段排名也很低。接下来分别从召回和排序阶段展开介绍。

召回

问题建模

把推荐问题建模成一个“超大规模多分类”问题。即在时刻t,为用户U(上下文信息C)在视频库V中精准的预测出视频i的类别(每个具体的视频视为一个类别,i即为一个类别),用数学公式表达如下:
推荐系统-YouTube DNN_第2张图片

模型架构

推荐系统-YouTube DNN_第3张图片
整个模型架构是包含三个隐层的DNN结构。输入是用户浏览历史、搜索历史、人口统计学信息和其余上下文信息concat成的输入向量;输出分线上和离线训练两个部分。 离线训练阶段输出层为softmax层,输出上面公式表达的概率。而线上则直接利用user向量查询相关商品,最重要问题是在性能。我们利用ANN/近似最近邻算法(比如类似局部敏感哈希/Locality Sensitive Hashing、KD-Tree、K-means Tree)为用户提供最相关的N个视频。

主要特征

类似于word2vec的做法,每个视频都会被embedding到固定维度的向量中。用户的观看视频历史则是通过变长的视频序列表达,最终通过加权平均(可根据重要性和时间进行加权)得到固定维度的watch vector作为DNN的输入。

label and context selection

在有监督学习问题中,最重要的选择是label了,因为label决定了你做什么,决定了你的上限,而feature和model都是在逼近label。我们的几个设计如下:

  • 使用更广的数据源:不仅仅使用推荐场景的数据进行训练,其他场景比如搜索等的数据也要用到,这样也能为推荐场景提供一些explore。
  • 为每个用户生成固定数量训练样本:我们在实际中发现的一个practical lessons,如果为每个用户固定样本数量上限,平等的对待每个用户,避免loss被少数active用户domanate,能明显提升线上效果。
  • == 抛弃序列信息==:我们在实现时尝试的是去掉序列信息,对过去观看视频/历史搜索query的embedding向量进行加权平均。这点其实违反直觉,可能原因是模型对负反馈没有很好的建模。
  • 不对称的共同浏览(asymmetric co-watch)问题:所谓asymmetric co-watch值的是用户在浏览视频时候,往往都是序列式的,开始看一些比较流行的,逐渐找到细分的视频。下图所示图(a)是hled-out方式,利用上下文信息预估中间的一个视频;图(b)是predicting next watch的方式,则是利用上文信息,预估下一次浏览的视频。我们发现图(b)的方式在线上A/B test中表现更佳。而实际上,传统的协同过滤类的算法,都是隐含的采用图(a)的held-out方式,忽略了不对称的浏览模式。
    推荐系统-YouTube DNN_第4张图片

排序Ranking

Ranking阶段的最重要任务就是精准的预估用户对视频的喜好程度。不同于Matching阶段面临的是百万级的候选视频集,Ranking阶段面对的只是百级别的商品集,因此我们可以使用更多更精细的feature来刻画视频(item)以及用户与视频(user-item)的关系。比如用户可能很喜欢某个视频,但如果list页的用的“缩略图”选择不当,用户也许不会点击,等等。

此外,Matching阶段的来源往往很多,没法直接比较。Ranking阶段另一个关键的作用是能够把不同来源的数据进行有效的ensemble。

模型架构

推荐系统-YouTube DNN_第5张图片

特征表达

  • Feature Engineering:
    尽管深度学习在图像、语音和NLP等场景都能实现end-to-end的训练,没有了人工特征工程工作。然而在搜索和推荐场景,我们的很难吧原始数据直接作为FNN的输入,特征工程仍然很重要。而特征工程中最难的是如何建模用户时序行为(temporal sequence of user actions),并且关联这些行为和要rank的item。

我们发现最重要的Signal是描述用户与商品本身或相似商品之间交互的Signal,这与Facebook在14年提出==LR+GBDT模型的paper(Practical Lessons from Predicting Clicks on Ads at Facebook)==中得到的结论是一致的。比如我们要度量用户对视频的喜欢,可以考虑用户与视频所在频道间的关系:
数量特征:浏览该频道的次数?
时间特征:比如最近一次浏览该频道距离现在的时间?

这两个连续特征的最大好处是具备非常强的泛化能力。另外除了这两个偏正向的特征,用户对于视频所在频道的一些PV但不点击的行为,即负反馈Signal同样非常重要

第二遍

参考:https://zhuanlan.zhihu.com/p/52169807 #概述
https://zhuanlan.zhihu.com/p/52504407 问题解答

可以后续继续读的文章:https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/46488.pdf #YouTube使用RNN建模

Covington P, Adams J, Sargin E. Deep neural networks for youtube recommendations[C]//Proceedings of the 10th ACM conference on recommender systems. 2016: 191-198.

2016年的论文,如今看来在算法架构上已无惊奇之处。在百万量级的视频规模下进行个性化推荐。由于候选视频集合过大,考虑online系统延迟问题,不宜用复杂网络直接进行推荐,所以Youtube采取了两层深度网络完成整个推荐过程。
Candidate Generation Model:其实就是召回层,完成候选视频的快速筛选,这一步候选视频集合由百万降低到了百的量级。
Ranking Model:几百个候选视频的精排。

召回阶段具体模型结构:将所有embedding之后的特征向量拼接起来,喂给上层的ReLU神经网络。这里Youtube在建模时把这个问题看作为用户推荐next watch的问题,所以输出是一个在所有候选视频集上的概率分布,自然是一个多分类问题。

问题:
架构图的左上角,为什么在online serving的时候不直接用这套网络进行预测而要使用nearest neighbor search 的方法?
多分类问题中,Youtube的candidate video有百万之巨,意味着有几百万个分类,这必然会影响训练效果和速度,如何改进?

排序阶段具体模型结构:引入另一套DNN作为ranking model的目的就是引入更多描述视频、用户以及二者之间关系的特征,达到对候选视频集合准确排序的目的。
具体特征:

  • impression video ID embedding: 当前要计算的video的embedding
  • watched video IDs average embedding: 用户观看过的最后N个视频embedding的average pooling
  • language embedding: 用户语言的embedding和当前视频语言的embedding
  • time since last watch: 自上次观看同channel视频的时间
  • previous impressions: 该视频已经被曝光给该用户的次数
    第4个和第5个特征,很好的引入了对用户行为的观察。刚看过相同类型的视频,大概率是会继续看这个channel的视频的。特征5,避免同一个视频持续对同一用户进行无效曝光。尽量增加用户没看过的新视频的曝光可能性。

十个文中解决的非常有价值的问题:

  • 文中把推荐问题转换成多分类问题,在next watch的场景下,每一个备选video都会是一个分类,因此总共的分类有数百万之巨,这在使用softmax训练时无疑是低效的,这个问题Youtube是如何解决的?
  • 在candidate generation model的serving过程中,Youtube为什么不直接采用训练时的model进行预测,而是采用了一种最近邻搜索的方法?
  • Youtube的用户对新视频有偏好,那么在模型构建的过程中如何引入这个feature?
    原文是模型引入了“Example Age”这个feature,把sample log距离当前的时间作为example age。比如24小时前的日志,这个example age就是24。
    将热度作为特征,引入模型。
    推荐系统-YouTube DNN_第6张图片
    从上图中我们也可以看到,在引入“Example Age”这个feature后,模型的预测效力更接近经验分布;而不引入Example Age的蓝线,模型在所有时间节点上的预测趋近于平均,这显然是不符合客观实际的。
  • 在对训练集的预处理过程中,Youtube没有采用原始的用户日志,而是对每个用户提取等数量的训练样本,这是为什么?
    减少高度活跃用户对于loss的过度影响
  • Youtube为什么不采取类似RNN的Sequence model,而是完全摒弃了用户观看历史的时序特征,把用户最近的浏览历史等同看待,这不会损失有效信息吗?
  • 在处理测试集的时候,Youtube为什么不采用经典的随机留一法(random holdout),而是一定要把用户最近的一次观看行为作为测试集?
  • 在确定优化目标的时候,Youtube为什么不采用经典的CTR,或者播放率(Play Rate),而是采用了每次曝光预期播放时间(expected watch time per impression)作为优化目标?
  • 在进行video embedding的时候,为什么要直接把大量长尾的video直接用0向量代替?
  • 针对某些特征,比如#previous impressions,为什么要进行开方和平方处理后,当作三个特征输入模型?
  • 为什么ranking model不采用经典的logistic regression当作输出层,而是采用了weighted logistic regression?

你可能感兴趣的:(推荐系统)