前言

论文地址:https://arxiv.org/pdf/1708.05031.pdf?ref=https://codemonkey.link
代码地址:https://github.com/hexiangnan/neural_collaborative_filtering

系列文章

推荐系统——Neural Collaborative Filtering(NMF)
推荐系统——Deep Interest Network for Click-Through Rate Prediction(DIN)
推荐系统——Deep Interest Evolution Network for Click-Through Rate Prediction(DIEN)
推荐系统——Deep Session Interest Network for Click-Through Rate Prediction(DSIN)
推荐系统——Multi-Interest Network with Dynamic Routing for Recommendation at Tmall(MIND)
推荐系统——Behavior Sequence Transformer for E-commerce Recommendation in Alibaba(BST)
持续更新中…

动机

这是比较早的文章了,推荐系统经常用向量的点积来学习向量间的交互信息,

向量点积的目的:这样的好处是计算速度快所以粗排的时候经常采用这种策略。向量点积如果两个向量都已经L2 norm的话表征的意义就是两个向量的余弦距离。但是我看很多推荐系统的代码实现上并不会事先对两个向量进行L2 norm,目前感觉合理的解释是一般点积完后面还会接FC层去做分类或者降维之类的,FC是不是一定程度可以实现L2 norm的功能呢所以事先L2 norm是不必要的。

本文的作者提出使用多层线性层来学习user和item的交互信息,作者认为更深的神经网络能比简单的点积更好的表征推荐系统的特征。

结构


推荐系统的结构真的看的比较简单明了,整个结构分为左右两个分支,两个分支可以是独立的,首先输入的user特征和item是one hot的格式,通过torch.nn.Embedding就可以把onehot的特征编码成维度相同的特征并且与onehot直接相关。

接下来MF User Vector和MLP User Vector是将user的特征经过两个不同的FC层得到的两个两个特征,右侧的MF item vector和MLP item Vector同理。用不同的FC是为了左右两个分支可以完全独立,目的在后面会说。

左侧分支:MF的user和item特征在GMF layer里面进行点乘。
右侧分支:MLP的user和item特征送入MLP层。

最后将MLP和GMF输出的特征在维度上concat起来,经过FC层后进行分类等任务。

下面是user侧有10个长度的序列进行nmf的demo:

import torch
import torch.nn as nnclass RecoClsNMF(nn.Module):def __init__(self,input_dim,output_dim):super().__init__()self.input_dim = input_dimself.output_dim = output_dimself.mf_user = torch.nn.Linear(self.input_dim, self.input_dim)self.mf_item = torch.nn.Linear(self.input_dim, self.input_dim)self.mlp_user = torch.nn.Linear(self.input_dim, self.input_dim)self.mlp_item = torch.nn.Linear(self.input_dim, self.input_dim)self.fc_layers = torch.nn.ModuleList()layers = [2, 8, 4, 2, 1]for idx, (in_size, out_size) in enumerate(zip(layers[:-1], layers[1:])):self.fc_layers.append(torch.nn.Linear(in_size * self.output_dim, out_size * self.output_dim))def forward(self, user, item):# user:[bs,lebgth,dim] item:[bs,dim]user = torch.sum(user,dim=1) # [bs,dim]# user vectormf_user = self.mf_user(user)mlp_user = self.mlp_user(user)# item vectormf_item = self.mf_item(item)mlp_item = self.mlp_item(item)# GMFGMF_out = torch.mul(mf_user, mf_item)  # batch,dim# MLPvector = torch.cat([mlp_user, mlp_item], dim=-1)  # batch,dim*2for idx, _ in enumerate(range(len(self.fc_layers))):vector = self.fc_layers[idx](vector)vector = torch.nn.ReLU()(vector)MLP_out = vector  # vector->batch,dim# NeuMFx = torch.cat([MLP_out, GMF_out], dim=-1)  # batch,dim*2return xif __name__ == '__main__':model = RecoClsNMF(128,128)user = torch.randn((16,10,128))item = torch.randn((16,128))print("user shape",user.shape)print("item shape", item.shape)out = model(user, item)print("out shape",out.shape)

输出结果:

user shape torch.Size([16, 10, 128])
item shape torch.Size([16, 128])
out shape torch.Size([16, 256])

代码很简单,效果还可以。

推荐系统——Neural Collaborative Filtering(NMF)相关推荐

  1. 【推荐系统论文精读系列】(五)--Neural Collaborative Filtering

    文章目录 一.摘要 二.介绍 三.准备知识 3.1 从隐式数据中进行学习 3.2 矩阵分解 四.神经协同过滤 4.1 总体框架 4.1.1 学习NCF 4.2 广义矩阵分解(GMF) 4.3 多层感知 ...

  2. 论文笔记:Neural Collaborative Filtering

    一.基本信息 论文题目:<Neural Collaborative Filtering> 发表时间:WWW 2017 作者及单位: 二.摘要 In recent years, deep n ...

  3. 【科研导向】Outer Product-based Neural Collaborative Filtering (ConvNCF)基于外积的神经协同过滤<论文理解代码分析>

    Outer Product-based Neural Collaborative Filtering--IJCAI'18 文章简介 一.摘要解析 二.技术要点 三.实验部分 代码解析 一.模型构建 二 ...

  4. 【科研导向】Neural Collaborative Filtering 神经协同过滤 <论文理解代码分析>

    Neural Collaborative Filtering--WWW'17 文章简介 一.摘要解析 二.技术要点 三.实验部分 代码解析 一.模型构建 二.难点问题 未来展望 文章简介 该文由何向南 ...

  5. 论文笔记【Neural Collaborative Filtering】

    标题 * 表示未完成 论文原文 本文使用基于神经网络的模型来分析 user 和 item 的潜在特征,最终设计出了一个基于神经网络的协同过滤通用框架(NCF).此框架融合了线性MF和非线性MLP模型. ...

  6. FedNCF:Federated Neural Collaborative Filtering | 联邦神经协同过滤

    论文信息 标题:FedNCF: Federated Neural Collaborative Filtering 作者:Vasileios Perifanis ∗ ^* ∗, Pavlos S. Ef ...

  7. Neural Collaborative Filtering【论文笔记】

    文章目录 1 文章为了解决什么问题? 2 文章提出了什么方法? 3 模型架构以及原理? 3.1 推荐问题基本描述 3.2 矩阵分解(Matrix Factorization, MF) 3.3 NCF通 ...

  8. 论文笔记(Neural Collaborative Filtering)

    神经协同过滤 论文链接:Neural Collaborative Filtering, WWW'17 原理:融合 GMF 和 MLP 1. 摘要 虽然最近的一些研究使用深度学习作为推荐,但他们主要是用 ...

  9. Neural Collaborative Filtering 1

    目录 2 PRELIMINARIES 3. NEURAL COLLABORATIVE FILTERING 3.1 通用框架 3.2 广义矩阵分解(GMF) 3.3 MLP 3.4 GMF和MLP的聚合 ...

  10. 论文笔记:Neural Collaborative Filtering(NCF)

    前言 论文链接:https://arxiv.org/abs/1708.05031 github:https://github.com/yihong-chen/neural-collaborative- ...

最新文章

  1. JDK的安装与系统环境变量的配置
  2. IP 网络性能的度量标准
  3. java 二分法 应用_介绍一下java中的二分法运用
  4. Python 面向对象与 C++、Java 的异同
  5. VTK修炼之道62:体绘制_固定点光线投影体绘制与GPU加速光线投影体绘制
  6. 移动前端—H5实现图片先压缩再上传
  7. gitlab git clone 卡住_gitlab从入门到绝望
  8. php 常用文件系统函数,PHP fileperms 文件系统函数
  9. (转) Dockerfile 中的 COPY 与 ADD 命令 1
  10. REST和RESTful有什么区别
  11. Games101 Tansformer
  12. 初级商业数字营销师超级推荐
  13. ORA-03113: 通信通道的文件结尾
  14. Unity常见资源类型
  15. 第三方支付-分账接口对接
  16. 2048小游戏后端的实现
  17. 安装双系统/误删导致原来的引导分区中的boot丢失的解决方案
  18. 系统分析员、系统架构师、项目经理的区别
  19. win10动态壁纸怎么设置_教程丨WIN10系统下设置固定IP或动态IP
  20. 川大计算机学院周激流,周激流(电子信息学院)老师 - 四川大学 - 院校大全

热门文章

  1. Okhttp上传图片
  2. 红米手机html文件,红米手机中ES文件浏览器无法删除SD卡中文件的解决办法-es文件浏览器...
  3. webview跳转第三方小程序
  4. Nginx服务详细篇从基础到反向代理和负载均衡
  5. 从KMP到FSA有限状态自动机字符串匹配
  6. UVA 12304 2D Geometry 110 in 1! 六个直线与圆的问题+经典几何
  7. web安全:X老师上课讲了Robots协议,小宁同学却上课打了瞌睡,赶紧来教教小宁Robots协议是什么吧
  8. 如何在Jsp页面加载时候就能执行某个方法
  9. 【转载】【常见缺陷分析技术】基于ODC的软件缺陷度量研究
  10. 更改Ubuntu 18.04的时区