推荐系统一——深入理解推荐系统召回算法(2)
四、基于FM模型召回
FM是Steffen Rendle在2010年提出的,FM算法的核心在于特征组合,以此来减少人工参与特征组合工作。对于FM,其优势可分以下三点:
- FM能处理数据高度稀疏场景,SVM则不能;
- FM具有线性的计算复杂度,而SVM依赖于support vector。
- FM能够在任意的实数特征向量中生效。
FM的数据结构如下:
FM特征数据结构:User相关、Item相关、类别相关的特征、历史行为数据特征等等,最后一列可看作是User对Item评分。FM通过不同特征的组合,生成新的含义。然而,特征组合也随之带来一些问题:
- 特征之间两两组合容易导致维度灾难;
- 组合后的特征未必有效,可能存在特征冗余现象;
- 组合后特征样本非常稀疏,如果原始样本中不存在对应的组合,则无法学习参数,那么该组合就显得无效。
虽然有这些缺点,但是也并不影响FM在广告推荐领域的地位,每个算法都有风靡一时的过去,抱着敬畏之心的态度去学习是没问题的。下面,来看看如何基于FM来做召回的。
4.1 具体召回过程
基于FM的召回与完全版本的FM不同,这里会放弃
U
U
U与
I
I
I特征组内部的二阶交互,即没有了age、gender、item_id、cate_id这样的交互,仅是进行到求解隐向量阶段。
摘自“推荐系统召回四模型之:全能的FM模型”
这里是“推荐系统召回四模型之:全能的FM模型”一文中给出的极简的FM召回模型,即不考虑上下文特征。
第一步,对于某个用户,我们可以把属于这个用户子集合的特征,查询离线训练好的FM模型中这个用户对应的特征embedding向量(FM模型求解出的隐向量,即 v i v_i vi,其长度为 k k k,包含 k k k个描述特征的因子),然后将这个用户对应的 n n n个特征embedding向量累加,形成这个用户的兴趣向量 U U U,这个向量维度和每个特征的维度是相同的。
类似的,我们也可以把每个物品,其对应的物品子集合的特征,查询离线训练好的FM模型对应的特征embedding向量,然后将m个物品子集合的特征embedding向量累加,形成物品向量I,这个向量维度和每个特征的维度也是是相同的。
第二步,对于每个用户以及每个物品,我们可以利用步骤一中的方法,将每个用户的兴趣向量离线算好,存入在线数据库中比如Redis(用户ID及其对应的embedding),把物品的向量逐一离线算好,存入Faiss(Facebook开源的embedding高效匹配库)数据库中,进行knn索引,然后高效检索。
第三步,当用户登陆或者刷新页面时,可以根据用户ID取出其对应的兴趣向量embedding,然后和Faiss中存储的物料embedding做内积计算,按照得分由高到低返回得分Top K的物料作为召回结果。
有关FM召回更加详细的内容:https://zhuanlan.zhihu.com/p/58160982
4.2 矩阵分解和FM
可以认为FM是加了特征的矩阵分解(MF),原来用户和物品侧都只有一个id特征,现在用户侧加了年龄、性别、学历等特征,物品侧加了品类、店铺等特征,然后进一步融入到FM模型后,它将所有的特征转化为embedding低维向量表达,然后用户侧的特征和物品侧特征两两矩阵分解,即两两特征embedding的内积,得到特征组合的权重。
五、基于深度神经网络模型
前文讲述了如何使用矩阵分解来学习Embedding。 矩阵分解的一些限制包括:
- 使用附加特征(即queryID /itemID以外的其他特征)困难。 因此只能对训练集中存在的用户或item进行推荐。
- 推荐的相关性。 正如前文所描述的那样,倾向于向所有人推荐热门item,尤其是在使用点积作为相似性度量时。 难以刻画特定的用户兴趣。
深度神经网络(DNN)模型可以解决矩阵分解的这些限制。 DNN可以轻松地融入query特征和item特征(由于网络输入层的灵活性),这可以帮助捕获用户的特定兴趣并提高推荐的相关性。
5.1 Softmax DNN 模型
一般而言,DNN模型是利用softmax作为最后一层的输出,它会将问题视为多分类问题,其中:
- 输入是用户query。
- 输出是一个概率向量,其大小等于语料库中item的数量,代表与每个item进行交互的概率; 例如,点击或观看视频的可能性。
输入层
DNN的输入可以包括:
- 稠密(dense)特征(如,点击频率、观看时长等)
- 稀疏(sparse)特征(如,观看视频类型、地区等)
与矩阵分解方法不同,可以添加年龄或地区等附加特征。 我们用x表示输入向量。
模型结构
模型结构决定了模型的复杂性和表达性。 通过添加隐藏层和非线性**函数(例如ReLU),模型可以捕获数据中更复杂的关系。 但是,增加参数的数量通常也会使模型更难训练且服务成本更高。 我们将用 Ψ ( x ) ∈ R d \Psi(x)\in R^d Ψ(x)∈Rd表示最后一个隐藏层的输出。
输出层: 预测的概率分布
该模型通过softmax层将最后一层的输出映射到概率分布 p ^ = h ( ψ ( x ) V T ) \hat{p}=h(\psi(x)V^T) p^=h(ψ(x)VT),其中:
- h : R n → R n h:R^n\rightarrow R^n h:Rn→Rn是softmax函数, h ( y ) i = e y i ∑ j e y i h(y)_i=\frac{e^{y_i}}{\sum_{j} e^{y_i}} h(y)i=∑jeyieyi
- V ∈ R n × d V\in R^{n\times d} V∈Rn×d是softmax层的权重矩阵。
softmax层将分数矢量
y
∈
R
n
y\in R^n
y∈Rn(有时称为logits)映射到概率分布。
损失函数
最后,定义用以比较以下两项的损失函数:
- p ^ = e y i ∑ j e y i \hat{p}=\frac{e^{y_i}}{\sum_{j} e^{y_i}} p^=∑jeyieyi,softmax层的输出(概率分布)
-
p
p
p,groud-truth,代表用户与之互动的item(例如,用户点击或观看的视频)。 这可以表示为归一化的muti-hot分布(概率向量)。
例如,可以使用交叉熵损失来比较两个概率分布。
Softmax Embedding
i
t
e
m
j
item_j
itemj的概率由
p
j
^
=
e
x
p
(
<
ψ
(
x
)
,
V
j
>
)
Z
\hat{p_j}=\frac{exp(<\psi(x),V_j>)}{Z}
pj^=Zexp(<ψ(x),Vj>) 给出,其中
Z
Z
Z是不依赖于
j
j
j的归一化常数。
换句话说,
l
o
g
(
p
j
^
)
=
<
ψ
(
x
)
,
V
j
>
−
l
o
g
(
Z
)
log(\hat{p_j})=<\psi(x),V_j>-log(Z)
log(pj^)=<ψ(x),Vj>−log(Z),因此,
i
t
e
m
j
item_j
itemj的对数概率是(最大为加法常数)两个
d
d
d维矢量的点积,可以将其解释为query和item Embedding:
- ψ ( x ) ∈ R D \psi(x) \in R^D ψ(x)∈RD是最后一个隐藏层的输出。 我们称其为query 的Embedding。
- V j ∈ R D V_j \in R^D Vj∈RD是将最后一个隐藏层连接到输出 j j j的权重向量。 我们称其为item的Embedding。
5.2 DNN和矩阵分解
在softmax模型和矩阵分解模型中,系统对于每个item学习一个Embedding向量 V V V。 我们在矩阵分解中所谓的item Embedding 矩阵KaTeX parse error: Undefined control sequence: \items at position 10: V\in R^{n\̲i̲t̲e̲m̲s̲ ̲d}是softmax层的权重矩阵。但是,用户query Embedding是不同的。 将不再对每个query学习一个对应的query Embedding向量,而是学习从query 特征 x x x到Embedding的映射 ψ ( x ) ∈ R D \psi(x)\in R^D ψ(x)∈RD。 因此,可以将此DNN模型视为矩阵分解的泛化,其中将query侧替换为非线性函数 ψ ( ⋅ ) \psi(\cdot) ψ(⋅)。
item特征使用
可以将相同的想法应用于item侧吗? 也就是说,除了对每个item学习一个对应的Embedding之外,模型可以学习将item特征映射到Embedding的非线性函数吗? 当然可以。可以使用由两个神经网络组成的双塔模型:
如上图所示,DSSM模型最早被提出是用来提升搜索场景下文档和query匹配的问题,模型接受两个输入到两个神经网络中,通过模型编码到同一个语义向量空间。对于推荐排序场景:
- 一种神经网络将qeury特征 x q u e r y x_{query} xquery映射到qeury Embedding ψ ( x q u e r y ) ∈ R D \psi(x_{query})\in R^D ψ(xquery)∈RD
- 一个神经网络将item特征
x
i
t
e
m
x_{item}
xitem映射到item Embedding
ϕ
(
x
i
t
e
m
)
∈
R
D
\phi(x_{item})\in R^D
ϕ(xitem)∈RD
模型的输出可以定义为 < ψ ( x q u e r y ) ϕ ( x i t e m ) > <\psi(x_{query})\phi(x_{item})> <ψ(xquery)ϕ(xitem)>的点积。 请注意,这再是softmax模型。 新模型对每对 ( ψ ( x q u e r y ) , ϕ ( x i t e m ) ) (\psi(x_{query}),\phi(x_{item})) (ψ(xquery),ϕ(xitem))预测一个值,而不是每个query的概率向量。
5.3 softmax训练
前文解释了如何将softmax层合并到推荐系统的深度神经网络中。 下面介绍如何利用训练数据对模型参数进行求解。
训练数据
训练数据由query特征 [公式] 和与用户进行交互的item向量组成(表示为概率分布 [公式] )。在下图中,标记为蓝色。 模型的变量是不同层中的权重。 在下图中,标记为橙色。 通常使用随机梯度下降相关方法来训练模型。
六、更多召回模型
Youtube DNN召回:YouTube在2016年发表的论文《Deep Neural Networks for YouTube Recommendations》为背景进行YouTube的深度神经网络推荐模型的介绍。YouTube的dnn matching召回,将用户和context特征输入DNN,用隐含层最后一层作为向量表示,用Softmax每个item对应的参数作为item的向量表示,通过内积最大索引得到top k
论文地址:Deep Neural Networks for YouTube Recommendations
DSSM语义召回:DSSM模型是微软2013年发表的一个关于query/ doc的相似度计算模型,后来发展成为一种所谓”双塔“的框架广泛应用于广告、推荐等领域的召回和排序问题中。
论文地址:Learning Deep Structured Semantic Models for Web Search using Clickthrough Data
RNN序列召回:基于用户session中的点击序列进行建模召回有很多种方式,其中使用RNN深度网络结构来刻画是其中比较有代表性的一种。相应的网络结构其实很简单,如下图所示。使用用户session中的点击序列作为模型输入,输出则为用户下次点击的item相应的得分。
论文地址:Session-based recommendations with recurrent neural networks
TDM深度树匹配召回:TDM模型是阿里巴巴于2018年提出的新一代深度召回模型,试图通过结合树结构搜索与深度学习模型来解决召回的高性能需求与使用复杂模型进行全局搜索与之间的平衡。它将召回问题转化为层级化分类问题,借助树的层级检索可以将时间复杂度降到对数级。即认为用户对某节点的兴趣是大于等于其叶子节点的,所以只需在每层选出topk,且在下一层仅计算上一层选出来的节点相应子节点的兴趣,对于规模为M的语料库,只需要遍历 2 * k * logM个分支就可以在完全二叉树中找到topk的推荐结果。
论文地址:Learning Tree-based Deep Model for Recommender Systems
参考文献
https://zhuanlan.zhihu.com/p/34497989
https://developers.google.cn/machine-learning/recommendation
https://zhuanlan.zhihu.com/p/58160982
https://zhuanlan.zhihu.com/p/87578318