推荐系统概论
字节内推
社招: https://job.toutiao.com/s/NJWAUYn
字节跳动校招内推码: ZPT8QA5
投递链接: https://jobs.toutiao.com/s/NJWhbh8
推荐与搜索
推荐和搜索在工程上具有很高的相似度:二者实现的都是信息与用户意图之间的匹配。搜索系统是将海量内容与用户表意明确的查询词相关联,推荐系统则是将海量内容与用户没有明确表达的偏好相关联。

推荐系统分类【1】
协同过滤:根据用户历史行为(例如其购买的、选择的、评价过的物品等)结合其他用户的相似决策建立模型。这种模型可用于预测用户对哪些物品可能感兴趣(或用户对物品的感兴趣程度)
基于内容的(content-based filtering): 利用一些列有关物品的离散特征,推荐出具有类似性质的相似物品。例如,亚马逊推荐与已购买物品相似的产品
hybrid:混合两种方法
推荐系统在线工作流程分为召回,排序。召回阶段负责从上百万数据中找出相关信息返回,排序分为粗排,精排,重排。基本流程如下图

常用的召回方法有:协同过滤,基于内容的过滤(Word2Vec、LDA、FastText、LSTM),深度召回(YoutobeDNN...)
排序方法:线性模型(LR,FM),树模型(决策树,GBDT【XGBoost,LightGBM】),深度学习模型。
矩阵分解和YoutubeDNN
矩阵分解
矩阵分解是协同过滤模型下的一种方法。该模型将user-item矩阵分解为两个低纬矩阵的乘积

矩阵分解示意图
R矩阵纬度为m * n,表示m个用户(user)对n个物品(item)的评分矩阵。目标是将该矩阵分解为P和Q两个矩阵乘积。P矩阵维度为m * k, Q矩阵为n * k, k << m和 n,为隐含因子。P矩阵第u行Pu中每一项值表示第u个用户对物品某项特征感兴趣程度。Q矩阵第i行Qi中每一项表示第i个物品某项隐含特征的得分,例如类型,语言。

R表示预测的得分矩阵。因为有些用户习惯给高分,为了解决这种问题,需要加上bias。
对R中一个具体得分可以表示为

bu表示用户u的bias,bi表示物品i的bias。
目标函数是:

代码实现:
https://stackoverflow.com/questions/64605596/simple-way-of-performing-matrix-factorization-with-tensorflow-2
https://katbailey.github.io/post/matrix-factorization-with-tensorflow/ tensorflow1
计算得到分解后的矩阵,就可以通过求相似的用户矩阵,然后推荐这些用户喜欢的物品给另一个用户。存在的问题是:冷启动问题。
YouTubeDNN
YoutubeDNN是youtube在2016年提出的将深度学习应用于推荐的算法。论文【2】将推荐问题建模为超大规模多分类问题,从而使用了深度学习。因为深度学习最擅长的是分类和回归,大部分问题都需要归一化为这两种问题使用深度学习处理。

YoutubeDNN系统架构
上图展示了YoutubeDNN的整体架构,分为两个部分:召回和排序。这里主要介绍召回网络部分。下图是召回模型的结构

深度召回模型
特征处理-输入输出
该模型输入包括用户观看的视频列表,搜索词列表,用户信息年龄,性别,地区)。
其中对视频列表的处理比较需要关注:将观看的视频列表按时间排序,一段时间窗口内最后观看的视频作为输出的label。
模型最后一层采用的是softmax,那么最后一层的输出可以表示时刻t,预测用户U观看视频i的概率,公式如下:

模型最后一层softmax的输出是一个n * 1维向量,其中每一项的值按照上述公式计算得到。向量中数值最大的那一项表示观看概率最大的视频。损失函数一般采用交叉熵cross-entropy。
Embedding
输入video列表特征的进一步处理。对于每一个video可以使用一个序号唯一表示。神经网络中比较常用的表示方法是独热(one-hot)编码。因为视频库数量庞大,独热编码是相当大的稀疏矩阵,所以网络中采用类似NLP中的词袋模型,在固定的词汇表里学习高维编码,然后在前向传播神经网络学习。关于Embedding可以见参考【3】
其他特征:
地理特征可以提供先验知识,设备和地区都进行编码,用户的性别,登陆状态,年龄归一化到0-1的取值
预测
召回模型训练完后,最naive的方法是直接将输入用模型计算得到预测结果,下面将介绍的案例既是如此。而Youtube为了实时性,将训练得到的视频和用户的embedding存储起来,然后用ANN求用户向量相似的视频向量作为结果返回。
代码案例
https://theiconic.tech/implementing-the-youtube-recommendations-paper-in-tensorflow-part-1-d1e1299d5622
使用的MovieLens数据库,包含1000个用户对1700部电影的10万条评论。
预处理将每条数据转换成一个用户喜欢的电影列表,不喜欢的电影列表,用户看过的电影的类型列表,用户看过的电影名作为搜索词。这里不增加其他的异构特征,例如:地区,年龄,职业
为了得到喜欢和不喜欢的电影列表,定义评分大于2的电影为用户喜欢的电影。
预测的标签使用喜欢的电影列表最后一项
将输入编码后就有喜欢的视频库(like video corpus),dislike video corpus, search corpus, genre corpus,预测标签是最后观看的视频

样例
相关知识点
1. cross-entropy和softmax:
https://towardsdatascience.com/softmax-activation-function-how-it-actually-works-d292d335bd78
https://towardsdatascience.com/cross-entropy-loss-function-f38c4ec8643e
2. 全连层
最基本的神经网络,可以用一个矩阵表示其参数
Denseimplements the operation:output = activation(dot(input, kernel) + bias)whereactivationis the element-wise activation function passed as theactivationargument,kernelis a weights matrix created by the layer, andbiasis a bias vector created by the layer (only applicable ifuse_biasisTrue). These are all attributes ofDense.

3. batchNormalization 【5】【6】
Batch normalization applies a transformation that maintains the mean output close to 0 and the output standard deviation close to 1.
对某层输入进行转换,加速网络训练的技巧。
4. sigmoid/relu

sigmoid【7】形如上图的一种函数,主要作用是将神经网络某层的输出压缩到0-1的范围内

ReLu【8】是上图所示的一种函数,作用和sigmoid类似,求导更方便,更利于网络训练
负采样:待补充
参考:
【1】 https://zh.wikipedia.org/wiki/%E6%8E%A8%E8%96%A6%E7%B3%BB%E7%B5%B1
【2】 https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/45530.pdf
【3】Embedding
word2vec是怎么样的:
https://towardsdatascience.com/introduction-to-word-embedding-and-word2vec-652d0c2060fa
keras中embedding:
https://medium.com/analytics-vidhya/understanding-embedding-layer-in-keras-bbe3ff1327ce
https://www.kaggle.com/rajmehra03/a-detailed-explanation-of-keras-embedding-layer
【4】介绍YoutubeDNN的文章https://zhuanlan.zhihu.com/p/126282487
http://www.felixzhao.cn/Articles/article/15
【5】https://en.wikipedia.org/wiki/Batch_normalization
【6】https://www.tensorflow.org/api_docs/python/tf/keras/layers/BatchNormalization
【7】https://en.wikipedia.org/wiki/Sigmoid_function
【8】https://en.wikipedia.org/wiki/Rectifier_(neural_networks)
本文使用 文章同步助手 同步