WSS推荐系统学习笔记6:特征交叉
1 Factorized Machine(FM)
1.1 线性模型
设模型有 $d$ 个特征,记作 $\mathbf{x}=\left[x_{1}, \cdots, x_{d}\right]$,则线性模型:
$$
p=b+\sum_{i=1}^{d} w_{i} x_{i}
$$
模型有 $d+1$ 个参数:$\mathbf{w}=\left[w_{1}, \cdots, w_{d}\right]$ 和 $b$(偏移项),预测是特征的加权和(只有加,没有乘)。
1.2 二阶交叉特征
线性模型 + 二阶交叉特征,其中的 $x_{i} x_{j}$ 是两个特征的交叉,$u_{ij}$ 是两个特征交叉的权重,两个特征不仅能够相加,还能够相乘:
$$
p=b+\sum_{i=1}^{d} w_{i} x_{i}+\sum_{i=1}^{d} \sum_{j=i+1}^{d} u_{i j} x_{i} x_{j}
$$
模型有 $O\left(d^{2}\right)$ 个参数,如果 $d$ 比较小,那么这样的模型没有什么问题。如果 $d$ 比较大,那么参数数量就太大了,计算代价会很大,而且很容易出现过拟合。
1.3 如何减少特征数量
重点关注交叉特征的权重 $u_{ij}$,可以把所有的小 $u$ 矩阵构成矩阵 $U$。矩阵 $U$ 有 $d$ 行和 $d$ 列,是一个对称矩阵,所以可以做矩阵近似。用矩阵 $V$ 乘 $V^T$ 来近似矩阵 $U$,其中矩阵 $V$ 是 $d$ 行 $k$ 列,$k$ 越大,则乘积越接近于矩阵 $U$。
则公式可以转换成以下:
$$
\begin{array}{l}p=b+\sum_{i=1}^{d} w_{i} x_{i}+\sum_{i=1}^{d} \sum_{j=i+1}^{d} u_{i j} x_{i} x_{j} . \\\approx b+\sum_{i=1}^{d} w_{i} x_{i}+\sum_{i=1}^{d} \sum_{j=i+1}^{d} \mathbf{v}_{i}^{T} \mathbf{v}_{j} b x_{i} x_{j} . \end{array}
$$
Factorized Machine(FM):
$$
p=b+\sum_{i=1}^{d} w_{i} x_{i}+\sum_{i=1}^{d} \sum_{j=i+1}^{d}\left(\mathbf{v}_{i}^{T} \mathbf{v}_{j}\right) x_{i} x_{j}
$$
FM模型有 $O(kd)$ 个参数($k \ll d$),这样使得推理的计算量更小,而且不容易出现过拟合。
总结:FM 是线性模型的替代品,能⽤线性回归、逻辑回归的场景,都可以⽤ FM。FM 使用二阶交叉特征,表达能力比现行模型更强。FM 通过做近似 $u_{i j} \approx \mathbf{v}_{i}^{T} \mathbf{v}_{j}$,FM 把二阶交叉权重的数量从 $O(d^2)$ 降低到 $O(kd)$。
2 深度交叉网络(DCN)
2.1 召回、排序框架
双塔模型:后期融合,两个塔计算出向量之后再计算余弦相似度,其中的网络结构可以任意配置。双塔是一种框架,而不是具体的网络。
多目标排序:网络结构可以任意配置,这个神经网络可以被多个任务共享,称为 shared bottom。
MMoE:网络结构可以任意配置。
2.2 交叉层
由下图可知,这个网络的参数都在全连接层中,其余的操作没有可学习的参数。
上述过程可以表示为以下公式,其中把输入和输出相加是残差网络中的跳跃连接:
2.3 交叉网络
向量 $x_o$ 是 Cross Network 的输入,之后送入上面介绍的交叉层,交叉层输出向量 $x_1$,之后把 $x_0$ 和 $x_1$ 再送入下一个交叉层,以此类推可以加入多个交叉层。
2.4 深度交叉网络
推荐系统的输入是将用户特征、物品特征和其他特征做拼接后送入神经网络,上面的是全连接网络,下面的是交叉网络,两个网络并联。两个网络各输出一个向量,之后把这两个向量做拼接,再送入全连接层,最后再输出一个向量。
以上模型架构就是 DCN,可以用于召回和排序,现在在工业界中已经被广泛应用。
3 LHUC 网络结构
Learning Hidden Unit Contributions(LHUC)起源于语音识别,快手将LHUC 应⽤在推荐精排,称作 PPNet。目前 LHUC 只能用于精排。
3.1 语音识别中的 LHUC
语音识别的输入是一段语音信号,我们希望通过对语音信号进行处理,对特征进行变化,然后得到语音中的文字。语音是人说的,不同的人声音会有所区别,所以最好加入一些说话者的特征。
将说话者的特征送入神经网络,这个神经网络是多个全连接层和 Sigmoid 乘以 2,这样神经网络的输出介于 [0, 2] 之间。之后与语音信号通过全连接层的输出做哈达玛积,这样有的语音信号被放大,有的被缩小。
把哈达玛积再送入下一个网络,之后再和另一个向量做哈达玛乘积,最后作为 LHUC 的输出。
3.2 推荐系统排序模型中的 LHUC
在推荐系统中,两个特征变成了物品特征和用户特征,其他和上面介绍的相同。
4 SENet & Bilinear Cross
4.1 SENet
SENet 发表在2018年的 CVPR,应用在 CV 领域上,可以将其应用到推荐系统领域。推荐系统用到的离散特征有用户 ID、物品 ID、物品类目和物品关键词等,之后对这些离散特征做 Embedding。设一共有 $m$ 个特征,每个特征是一个 $k$ 维向量,可以把所有特征表示成一个 $m \times k$ 的矩阵。
之后对 $m \times k$ 的矩阵做 AvgPool,得到一个 $m \times 1$ 的向量,向量的每一个元素对应一个离散特征。用一个全连接层和 ReLU 激活函数把 $m$ 维的向量压缩为 $\frac{m}{r}$ 维的向量,再恢复到 $m$ 维的向量。之后把这个向量和最初的 $m \times k$ 的矩阵相乘,还是得到一个 $m \times k$ 的矩阵。
在对每个特征做嵌入时,嵌入的维度可以不同:
SENet 的本质是对离散特征做 field-wise 加权。例如,⽤户 ID Embedding 是 64 维向量,64 个元素算⼀个 field,获得相同的权重。如果有 $m$ 个 fields,那么权重向量是 $m$ 维。
4.1.1 特征交叉:内积和哈达玛积
如果用向量内积做交叉, 最终得到 $m^2$ 个实数。如果用哈达玛乘积做交叉,最终得到 $m^2$ 个向量,必须要人工选一些 pair 做交叉,不能对所有的特征做交叉。在做内积和哈达玛乘积的时候,必须要求两个向量形状相同,如果不同,就不能做内积和哈达玛乘积。
4.1.2 特征交叉:Bilinear Cross
在上述基础上增加了 $W_{ij}$ 矩阵,最终得到 $m^2$ 个实数,同时也会有 $\frac{m^2}{2}$ 个参数矩阵,
用哈达玛乘积替换内积操作,同时也要人工指定一部分特征做交叉:
4.2 FiBiNet
把 SENet 和 Bilinear Cross 结合起来就是 FiBiNet,文章发表在 2019 年。FiBiNet 用 SENet 加权和 BiLinear 用在精排模型上确实有收益。