这篇文章出自facebook,主要探索了如何利用类别型特征(categorical features)并且构建一个深度推荐系统。值得注意的是,文章还特别强调了工业实现上如何实现并行,也很良心地给出了基于Pytorch和Caffe2的模型实现。

引言

目前的个性化推荐系统深度模型主要有两种方式:

  • 推荐系统角度:这类系统使用内容过滤,即由专家对物品分类,然后根据用户的喜好进行匹配推荐。该领域随后发展为协同过滤方法,或者是其它基于邻居和隐语义(Latent factor)方法。
  • 预测分析角度:这类方法依靠统计模型基于给定数据对事件进行分类或者预测发生概率。这类方法使用embedding对类型数据转换为稠密向量

本文提出的推荐方法是上述两种方法的结合,该模型(DLRM)使用embedding处理稀疏特征,并使用MLP处理稠密特征,然后显式考虑这些特征的交互,最后再使用一个MLP预测事件概率。

模型设计与架构

模型整体的架构如图所示,主要组件包括Embeddings,Matrix Factorization,Factorization Machine以及Multilayer Perceptrons。

Embeddings的思路很简单,就是每个稀疏特征都会转换成一个one-hot或者n-hot向量,然后利用这个向量在embedding表中查询:
\[
\mathbf{w}_i^T = \mathbf{e}^T_i \mathbf{W}
\]

Multilayer Perceptrons用于更复杂的特征交互和预测,形式如下:
\[
\hat{y} = W_k \sigma(W_{k-1} \sigma(\dots \sigma(W_1 \mathbf{x} + \mathbf{b}_1)\dots)+ \mathbf{b}_{k-1})
\]

Matrix Factorization主要是用于学习用户和物品的向量表示,其学习目标可以用下式表示:
\[
\min \sum_{(i,j)\in \mathcal{S}}r_{ij} - \mathbf{w}_i^T \mathbf{v}_j
\]
其中\(r_{ij} \in \mathbb{R}表示第\)i\(个物品和第\)j$个用户的得分, \(\mathbf{w}_i\) 和 \(\mathbf{v}_j\) 分别表示物品和用户的向量

Factorization Machine用于对特征进行交叉,对稀疏数据比较有利:
\[
\hat{y} = b + \mathbf{w}^T \mathbf{x} + \mathbf{x}^T \text{upper}(VV^T)\mathbf{x}
\]

并行

在DLRM中,稀疏特征(类别型特征)都要转换为embedding,这部分产生了大量参数,因此整个模型需要并行处理。本文中,DLRM同时使用模型并行和数据并行。其中,模型并行用于embedding模块,数据并行用于MLP模块。由于现有的PYtorch和Caffe2中都没有这方面实现,因此论文也给出了自己的方案。

数据和实验

论文使用了三种类型的数据,随机数据、合成数据和公开数据集。论文的实验在Big Basin AI platform上进行,使用了8块Nvidia Tesla V100 16GB GPU,对精度也有一些调整。实验的代码已经在GitHub上公开。最终的实验结果如下图所示:

其中数据集是Criteo Ad Kaggle数据集,DCN是指Deep and Cross network。

结论与感想

看到这篇论文是因为paperweekly的推荐,但是通读下来并没有太多惊艳的地方,模型构建方式也比较地传统。但对于工程实现来说应该具有不错的指导价值,尤其是也有实现的代码。

Deep Learning Recommendation Model for Personalization and Recommendation Systems的更多相关文章

  1. 【深度学习Deep Learning】资料大全

    最近在学深度学习相关的东西,在网上搜集到了一些不错的资料,现在汇总一下: Free Online Books  by Yoshua Bengio, Ian Goodfellow and Aaron C ...

  2. Use of Deep Learning in Modern Recommendation System: A Summary of Recent Works(笔记)

    注意:论文中,很多的地方出现baseline,可以理解为参照物的意思,但是在论文中,我们还是直接将它称之为基线,也 就是对照物,参照物. 这片论文中,作者没有去做实际的实验,但是却做了一件很有意义的事 ...

  3. Wide and Deep Learning Model

    https://blog.csdn.net/starzhou/article/details/78845931 The Wide and Deep Learning Model(译文+Tensorlf ...

  4. Edge Intelligence: On-Demand Deep Learning Model Co-Inference with Device-Edge Synergy

    边缘智能:按需深度学习模型和设备边缘协同的共同推理 本文为SIGCOMM 2018 Workshop (Mobile Edge Communications, MECOMM)论文. 笔者翻译了该论文. ...

  5. Geometric deep learning on graphs and manifolds using mixture model CNNs

    Monti, Federico, et al. "Geometric deep learning on graphs and manifolds using mixture model CN ...

  6. Wide & Deep Learning Model

    Generalized linear models with nonlinear feature transformations (特征工程 + 线性模型) are widely used for l ...

  7. Predicting effects of noncoding variants with deep learning–based sequence model | 基于深度学习的序列模型预测非编码区变异的影响

    Predicting effects of noncoding variants with deep learning–based sequence model PDF Interpreting no ...

  8. 论文翻译:2021_Towards model compression for deep learning based speech enhancement

    论文地址:面向基于深度学习的语音增强模型压缩 论文代码:没开源,鼓励大家去向作者要呀,作者是中国人,在语音增强领域 深耕多年 引用格式:Tan K, Wang D L. Towards model c ...

  9. (转)分布式深度学习系统构建 简介 Distributed Deep Learning

    HOME ABOUT CONTACT SUBSCRIBE VIA RSS   DEEP LEARNING FOR ENTERPRISE Distributed Deep Learning, Part ...

随机推荐

  1. python2 && python3 的 input函数

    Python2.x中的input()函数input()函数让我们明确我们输入的是数字格式还是字符格式,就是我们自己要知道我们想要的是什么,数字格式直接输入,字符格式必须加上单引号或者双引号,以确定我们 ...

  2. IDEA中常用快捷键

    Alt+Enter 牛掰的万能快捷键,实现接口和抽象类.导入包.异常捕获.转换lambda表达式.equals的翻转和更换访问修饰符等,无所不能.   Ctrl+D 复制当前行 Ctrl+Y 删除行 ...

  3. C++2.0新特性(一)——<特性认知、__cplusplus宏开启、Variadic Templates 、左右值区分>

    一.新特性介绍 2.0新特性包含了C++11和C++14的部分 1.2 启用测试c++11功能 C++ 标准特定版本的支持,/Zc:__cplusplus 编译器选项启用 __cplusplus 预处 ...

  4. ubuntu16.04解决文件中文乱码问题

    1.查看当前系统使用的字符编码 ~$ locale LANG=en_US LANGUAGE=en_US: LC_CTYPE="en_US" LC_NUMERIC="en_ ...

  5. 制作OpenFOAM计算结果的gif动画【转载】

    转载自:http://blog.sina.com.cn/s/blog_6277cbbf0100niqi.html PS:对其中错误地方进行了修正 1.用ParaView将每一帧都输出成图片(File- ...

  6. RabbitMQ入门学习系列(二),单生产者消费者

    友情提示 我对我的文章负责,发现好多网上的文章 没有实践,都发出来的,让人走很多弯路,如果你在我的文章中遇到无法实现,或者无法走通的问题.可以直接在公众号<爱码农爱生活 >留言.必定会再次 ...

  7. 前端通用下载文件方法(兼容IE)

    之前在网上看到一个博主写的前端通用的下载文件的方法,个人觉得很实用,所以mark一下,方便以后查阅 源文地址(源文还有上传/下载excel文件方法) 因为项目要求要兼容IE浏览器,所以完善了一下之前博 ...

  8. TextFX Notepad++

    textFx Notepad++ - 国内版 Bing https://cn.bing.com/search?FORM=U227DF&PC=U227&q=textFx+Notepad% ...

  9. DTServiceHubClient failed to bless service hub for simulator iPhone X (5C15AE72-12E2-475D-9C2B-EF...

    XCode跑不起模拟器,并报错:DTServiceHubClient failed to bless service hub for simulator iPhone X (5C15AE72-12E2 ...

  10. Jenkins自动化版本构建

    1.拉取代码 2.更新父版本 更新依赖版本 3.打包并推送到maven私库 4.版本控制后提交代码并打成docker镜像 PS:修改pom.xml项目版本,这里我没使用插件,直接使用脚本进行修改,这样 ...