YoutubeDNN召回

8/2/2021 YoutubeDNN召回

# 请简述YoutubeDNN的结构和其原理

特征输入层包含了三部分内容:用户观看过的 video 的 embedding 向量、用户搜索词的 embedding 向量以及用户的地理位置年龄等静态特征;这里的 embedding 向量作者是用 word2vec 类方法预先生成的。

线下模型训练阶段,三层 ReLU 神经网络之后接到 softmax 层,也就是说在这里建模为为用户推荐下一个感兴趣视频的多分类问题,输出是在所有候选视频集合上的概率分布。

线上预测阶段,考虑到召回的高性能需求首先通过 userId 找到相应的用户向量,然后使用 KNN 类方法找到相似度最高的 N 条候选结果返回。

模型整体的思路可以认为是传统协同过滤思路的扩展。传统的User-cf强调相似的用户感兴趣的物品也相似;传统的Item-cf强调对物品A感兴趣的用户,可能也对物品A相似的物品同样感兴趣。所以传统的User-cf和Item-cf实际上是分别构造了用户向量空间和物品向量空间,在任何一个向量空间找到相似性都可以进行推荐。

而 YoutubeDNN 则学习统一的(用户、物品)向量空间来代替原来的两个独立的向量空间,使用深度网络将用户、物品映射到这个统一的低维向量空间来发现学习更高阶的用户物品相似性。

# YoutubeDNN模型是如何构造输入embedding的?

user embedding

  • 用户看过的视频的embedding,pooling成一个向量
  • 用户搜索的关键词的embedding,pooling成一个向量
  • 以上两个向量,加上一些用户的基本属性,拼接成一个大向量,喂入多层全连接(FC)进行充分交叉
  • 最后一层FC的输出就是user embedding

video embedding

  • 特征只用了video id,模型也只不过是一个大的embedding矩阵
  • 整个模型在两个地方要用到video embedding,一个自然是最后计算user embedding与video embedding点积作为匹配分的时候要用到,另一处是用户看过的视频的embedding要参与生成user embedding
  • 这两处video embedding是否需要共享?原文中没有详细说明。我是偏向于共享的,一来降低模型规模,二来增加一些冷门video得到训练的机会。