下文要讲的模型,也是在模型结构或者特征层面做的各种变化。
4.1.1.1 NeuMF 模型 ( Neural Matrix Factorization )
Neural MF,顾名思义,同时利用了 MF 和神经网络 MLP 的能力来拟合 matching score;MF 利用向量内积学习 user 和 item 的关联,同时 MLP 部分捕捉两者的其他高阶信息。这篇 paper 其实和 NCF 框架是出自同一篇 paper 的。模型可以分为 GMF 和 MLP 两个部分来看,如图4.4所示。
![1cc66835572b2f34e48351b9e7d5413c.png](https://img-blog.csdnimg.cn/img_convert/1cc66835572b2f34e48351b9e7d5413c.png)
图4.4 NeuMF 模型结构框架
❶ GMF ( General Matrix Factorization ) 部分
User 和 item 都通过 one-hot 编码得到稀疏的输入向量,然后通过一个 embedding 层映射为 user vector 和 item vector。这样就获得了 user 和 item 的隐向量,一般可以通过向量点积或者哈达马积 ( element-wide product ) 得到交互,不过在 NeuMF 中多连接了一个连接层,也就是 GMF layer:
![810eb0338e9a04fdfd2149f9747951b1.png](https://img-blog.csdnimg.cn/img_convert/810eb0338e9a04fdfd2149f9747951b1.png)
❷ MLP 部分
输入和 GMF 部分一样,都是 one-hot 的稀疏编码,然后通过 embedding 层映射为 user vector 和 item vector。注意到这里 user 和 item 的 vector 和 GMF 部分是不一样的,原因是 GMF 和 MLP 两个网络结构对隐层维度要求不同,MLP 部分会高一些 ( 个人感觉 share embedding 能更充分训练 embedding )。
Embedding 层之后就是几层常规的 MLP,这块没什么好说的,最后一层输出作为 MLP 的 output。
![5daa3a68db4264be45715be774aa0aa9.png](https://img-blog.csdnimg.cn/img_convert/5daa3a68db4264be45715be774aa0aa9.png)
4.1.1.2 NNCF 模型 ( Neighbor-based NCF )
CIKM2017 提出的一种基于 neighbor 的 NCF 方法,最大的不同在于输入除了 user 和 item 的信息,还各自引入了 user 和 item 各自的 neighbor 信息。
![72d3f449a0b6011ea65f2f9c1a3c13cc.png](https://img-blog.csdnimg.cn/img_convert/72d3f449a0b6011ea65f2f9c1a3c13cc.png)
图4.5 NNCF 模型框架
图4.5所示的输入由两部分组成,中间 xu 和 yi 为原始的 user 和 item 的 one-hot 输入,通过 embedding 层后映射为 pu 和 qi 的 embedding 向量,然后通过哈达马积作为 MLP 的输入。而输入层两侧的 nu 和 ni 是 user 和 item 各自的 neighbor 信息的输入,这里 nu 和ni 信息如何提取可以采用多种手段,如二部图挖掘,user-CF 或者 item-CF 等。
对于 neighbor 信息,由于每个用户和 item 的 neighbor 数不一致,输入是不定长的,通过卷积和 pooling 后提取得到定长的 embedding,然后和 user 以及 item 本身的向量 concat 后输入到模型中:
![ddef8dccc15da37f026a079cd2f5dd8a.png](https://img-blog.csdnimg.cn/img_convert/ddef8dccc15da37f026a079cd2f5dd8a.png)
4.1.1.3 ONCF 模型 ( Outer-Product based NCF )
何向南博士2018年在 NCF 模型框架上提出了 outer-product based NCF,在原有的 NCF 框架上,引入了 outer product 的概念,如图4.6所示。
![373f74fe94592bdc425984d7ff530c1c.png](https://img-blog.csdnimg.cn/img_convert/373f74fe94592bdc425984d7ff530c1c.png)
图4.6 ONCF 模型框架
在 embedding layer 之后,O-NCF 模型引入了 interaction map 也就是特征交叉层,对于用户 u 的向量 pu 和物品 i 的向量 qi,引入两者的 outer-product:
![0c93c8ddf3430185cf5d7820bdaf3ff4.png](https://img-blog.csdnimg.cn/img_convert/0c93c8ddf3430185cf5d7820bdaf3ff4.png)
E 是一个 k*k 维的矩阵,其中的每个 element 两两相乘,得到2维的矩阵。到这,可以通过把二维矩阵展开变成一个 k2 维度的向量,作为 MLP 的输入。假设 k=64,那么 E 就是个4096的向量,每一层隐层单元个数设置为上一层的一半,那么第一层的维度为4096*2048约需要840万的网络参数需要训练,参数量非常巨大。
因此,文章提出了一种利用 CNN 局部连接共享参数的方法来减少 embedding layer 到 hidden layer 之间的参数,如图4.7所示。
![a21869db11b9296b199cf7b61309a675.png](https://img-blog.csdnimg.cn/img_convert/a21869db11b9296b199cf7b61309a675.png)
图4.7 ConvNCF 模型框架
假设隐层维度 K=64,有6层 hidden layer,每一层有32个卷积核 ( feature map ),步长 stride=2,那么经过每个卷积核后的 feature map 大小为原来的1/4 ( 长和宽各少了一半 )。以第一层卷积为例:
![fdcdaf7b8521d9043dd1de00d95e51aa.png](https://img-blog.csdnimg.cn/img_convert/fdcdaf7b8521d9043dd1de00d95e51aa.png)
那么第一层卷积后得到的网络是个32*32*32的3维 vector,其中最后一个32代表 feature map 个数。这里如何体现特征交叉的思想呢?ei,j,c 代表的就是在前一层的 feature map 中,第 i 个单元和第 j 个 element 的二阶交叉。第一层 feature map 中,每个单元提取的是上一层2*2区域的 local 连接信息,第三层提取的就是第一层4*4的信息,那么在网络的最后一层就能提取到原始 feature map 里的 global 连接信息,从而达到高阶特征提取的目的。
总结来说,使用原始的 outer-product 思想,在第一层网络处有近千万的参数需要学习,而使用 CNN 网络一方面能够减少参数量,另一方面又同时提取了低阶和高阶特征的组合。个人觉得引入 CNN 固然能节省内存,但也同时会带来训练和推理时间的增加,是一种时间换空间的思想。另外用 CNN 是否能够比原始 MLP 更有效拟合特征组合也需要结合数据分布去看。
4.1.1.4 小结
基于 NCF 框架的方法基础原理是基于协同过滤,而协同过滤本质上又是在做 user 和 item 的矩阵分解,所以,基于 NCF 框架的方法本质上也是基于 MF 的方法。矩阵分解本质是尽可能将 user 和