要想了解YouTube的召回模型,需要依次掌握召回算法、召回模型网络结构,以及召回特征和样本设计。
召回算法
为了生成候选集,需要从视频语料库中选出与用户相关的视频,可以将其看成一个极多分类问题(extreme multiclass classification problem)。
基于特定的用户U和上下文C,在时刻t将指定的视频Wt准确地划分到第i类中,其中
极多分类就是Softmax分类,公式如下:
其中,用户向量u是由用户观看和搜索视频记录进行Embedding,再和上下文以及用户的其他特征组合而成的一个向量。
vju表示第j个视频的Embedding向量,这里每个视频都Embedding成一个向量。
假设存在百万个类别,训练这样的极多分类问题时会显得异常困难,需要对Softmax多分类问题进行优化加速。其解决方法采用负类采样(sample negative classes),通过采样找到数千个负类,将多分类问题变成二元分类问题,如此一来运行速度大大提升。
召回模型网络结构
在Word2vec语言模型(CBOW)中,我们将各个词Embedding编码到一个向量,并将词的Embedding向量喂给前馈神经网络进行学习。受此方法启发,我们将每个视频都映射(Embedding)到一个向量,并且将视频的Embedding向量喂给神经网络,其中神经网络的输入需要为固定大小的向量。我们可以简单地将用户观看过的所有视频ID的Embedding做聚合操作(最大、最小、平均、累加等),其中平均操作的效果最好。
另外,视频的Embedding向量也可以通过正常的梯度下降反向传播更新与所有其他模型参数一同学习。召回模型的网络结构如下图所示。
召回模型的网络结构
YouTube召回模型的网络结构包含多层神经网络:输入层、中间层(多层网络)、输出层。接下来对各层神经网络进行详细介绍。
- 输入层
在该网络结构中,输入数据都是一些异构数据,包括:
- 用户观看视频序列ID——对视频ID的Embedding向量进行累计并求平均值,得到观看向量(watch vector)。
- 用户搜索视频序列ID——对视频ID的Embedding向量进行累计并求平均值,得到搜索向量(search vector)。
- 用户地理特征和用户设备特征——均为一些离散特征。可以采用Embedding方法或者直接采用OneHot方法(当离散的维度比较小时),得到用户的地理向量(geographic embedding)和设备向量。
- 人口属性特征——可进行归一化处理。其中,人口统计特征(如example age、gender)可以提供丰富的先验信息,以实现比较好的对新用户的推荐效果。
- 中间层
中间层包括两层,其中每一层的激活函数为ReLU。
- 输出层
输出层的维度和视频ID的Embedding维度一致,最终得到用户向量u。
通过该网络结构的学习,最终可以得到所有视频的Embedding向量V,其维度为pool_size×k,其中pool_size为训练集视频资源池大小,k为Embedding的维度。我们还可以得到所有用户的输出向量u,其中每个用户向量的维度是k维,和物品的Embedding维度一致。
在线服务阶段,通过视频向量V和用户向量u,进行相似度计算,采用最近邻查询,取得Top相似视频作为召回候选集。
召回特征和样本设计
接下来介绍召回模型输入层的特征处理,以及如何进行样本的设计和如何选择模型参数。
- 异构信息处理
包括如下内容。
- 视频ID向量化:基于此向量,可以得到用户的曝光视频向量、观看视频向量、搜索视频向量等(得到用户的各种视频行为向量)。
- 用户画像特征归一化处理:如地理位置、设备、性别、年龄、登录状态等连续或离散特征都被归一化为[0,1],并和用户视频行为向量做连接(concat)。
- example age(视频生命周期特征):该特征表示视频被上传之后的时间。在YouTube上,每秒都有大量视频被上传。推荐这些最新视频对于YouTube来说是极其重要的。通过持续观察,可知用户更倾向于被推荐那些尽管相关度不高但却为最新的视频。推荐系统往往会利用用户过去的行为预测未来。对于历史行为,推荐系统通常能够学习到一种隐式的基准。但是这对于视频的流行度分布往往是高度不稳定的。为了解决这个问题,这里的推荐策略是,将example age作为一个特征拼接到DNN的输入向量,在训练时,时间窗口越靠后,该值越接近于0或者一个绝对值小的负数。加入example age特征后,模型效果和观测到的实际数据更加逼近,参见下图。
加入example age特征后的效果示例
这里在训练时将训练样本的example age值作为一个特征进行训练学习;而在线上进行在线推荐服务时,会将example age这个特征值设置为0(或绝对值比较小的负数),以反映模型正在训练窗口的末端进行预测。
- 样本选择和上下文选择
包括如下两项内容。
- 样本选择:训练样本是从YouTube的全部观看记录中产生的,而不仅仅包括推荐系统生成的观看记录。这样做的好处是便于加入对新视频的测试,防止对推荐者的观看记录过度利用;同时用户通过其他途径的观看行为也容易被推荐系统采集到,从而可以通过CF快速传播用户行为。另外,对每一个用户所产生的观看记录生成固定数量的训练样本,使得每个用户在损失函数中的权重都是相等的,防止一小部分超级活跃用户影响损失函数的公平性。对于搜索样本的无序化处理问题,要注意防止过拟合的情况。比如,利用用户的最后一次搜索生成推荐的主页,效果通常比较糟糕。将用户的搜索序列做无序化处理,推荐系统不再直接获知搜索样本的原始值,效果会更好。
- 上下文选择:用户观看视频时,遵循的是一种非对称模式,即在初始的观看序列中,范围会比较广泛;在后期的观看序列中,范围会逐渐集中。我们还发现按照顺序预测用户观看的下一个视频,会比随机挑选某一个视频并根据该视频的上下文来预测该视频本身的性能要好。大部分协同过滤算法在推荐时,往往利用的是用户的全量观看历史,从用户的观看历史序列中,随机选择一个视频作为label,将该视频的上下文作为输入,通过该上下文输入来预测label,这一过程可以描述为下图(a)那样,但是这种情况会出现label提前泄漏的问题。相比之下,在输入时只选择label发生之前的视频,就可以避免这个问题,该过程可以描述为下图(b)那样。
上下文选择对比效果示例
- 神经网络深度参数选择
通过增加特征数量和神经网络的深度,可以显著提高准确性,如下图所示。
神经网络深度参数对比示例
在上图的实验中,总共有数以百万计的视频和搜索词汇,我们取最多50个观看视频和50个最近搜索视频,映射成256维的float数组。最后一层网络的输出是一个256维的向量,其中最后的输出结果会通过一个Softmax函数,计算得到1MB视频的得分,即分类结果。模型基于所有YouTube用户数据进行训练,直至收敛。网络结构呈一个常见的塔状,底部的网络最宽,每往上一层节点数就减半。深度为0的网络和之前的推荐系统非常相似,是一个高效的线性分解模型。
- 深度为0:这时网络会把连接起来的输入层转换一下,和Softmax的256维输出对应起来。
- 深度为1:第一层为256个节点,激活函数是ReLU。
- 深度为2:第一层为512个节点,第二层为256个节点,激活函数都是ReLU。
- 深度为3:第一层为1024个节点,第二层为512个节点,第三层为256个节点,激活函数都是ReLU。
本文节选自电子工业出版社博文视点的新书《推荐系统算法实践》。这本书系统、全面、深入地解析了推荐系统中的推荐算法,包括线性模型、树模型、集成学习模型、深度学习模型中的典型方法,以及在Sklearn、Spark、TensorFlow主流工具中的源码实现与应用实现,可以帮助读者进行工程实践并在实际工作中应用。走过路过不要错过左下阅读原文,作为互联网时代最为通行的一种信息检索工具,推荐系统将通过有效连接用户和信息,为你创造显著价值。
内容简介:本书主要讲解推荐系统中的召回算法和排序算法,以及各个算法在主流工具Sklearn、Spark、TensorFlow等中的实现和应用。书中本着循序渐进的原则进行讲解。首先,介绍推荐系统中推荐算法的数学基础,推荐算法的平台、工具基础,以及具体的推荐系统。其次,讲解推荐系统中的召回算法,主要包括基于行为相似的协同过滤召回和基于内容相似的Word2vec召回,并且介绍其在Spark、TensorFlow主流工具中的实现与应用。再次,讲解推荐系统中的排序算法,包括线性模型、树模型和深度学习模型,分别介绍逻辑回归、FM、决策树、随机森林、GBDT、GBDT LR、集成学习、深度森林、DNN、Wide & Deep、DeepFM、YouTube推荐等模型的原理,以及其在Sklearn、Spark、TensorFlow主流工具中的实现与应用。最后,介绍推荐算法的4个实践案例,帮助读者进行工程实践和应用,并且介绍如何在Notebook上进行代码开发和算法调试,以帮助读者提升工作效率。本书适合 AI、数据挖掘、大数据等领域的从业人员阅读,书中为开发者展现了推荐算法的原理、实现与应用案例。
作者简介:黄美灵,现任一线互联网公司的高级工程师,拥有多年大型互联网公司推荐系统和机器学习实战经验,现从事广告推荐、应用分发和资讯Feeds流推荐相关工作。