阅读更多
近些年,深度学习在语音识别、图像处理、自然语言处理等领域都取得了很大的突破与成就。相对来说,深度学习在推荐系统领域的研究与应用还处于早期阶段。

携程在深度学习与推荐系统结合的领域也进行了相关的研究与应用,并在国际人工智能顶级会议AAAI 2017上发表了相应的研究成果《A Hybrid Collaborative Filtering Model with Deep Structure for Recommender Systems》,本文将分享深度学习在推荐系统上的应用,同时介绍携程基础BI团队在这一领域上的实践。

一、推荐系统介绍
推荐系统的功能是帮助用户主动找到满足其偏好的个性化物品并推荐给用户。推荐系统的输入数据可以多种多样,归纳起来分为用户(User)、物品(Item)和评分(Ratings)三个层面,它们分别对应于一个矩阵中的行、列、值。对于一个特定用户,推荐系统的输出为一个推荐列表,该列表按照偏好得分顺序给出了该用户可能感兴趣的物品。

图1. 推荐系统问题描述

如图1右边所示,推荐问题一个典型的形式化描述如下:我们拥有一个大型稀疏矩阵,该矩阵的每一行表示一个User,每一列表示一个Item,矩阵中每个“+”号表示该User对Item的Rating,(该分值可以是二值化分值,喜欢与不喜欢;也可以是0~5的分值等)。

现在需要解决的问题是:给定该矩阵之后,对于某一个User,向其推荐那些Rating缺失的Item(对应于矩阵中的“?”号)。有了如上的形式化描述之后,推荐系统要解决的问题归结为两部分,分别为预测(Prediction)与推荐(Recommendation)。

“预测”要解决的问题是推断每一个User对每一个Item的偏爱程度,“推荐”要解决的问题是根据预测环节所计算的结果向用户推荐他没有打过分的Item。但目前绝大多数推荐算法都把精力集中在“预测”环节上,“推荐”环节则根据预测环节计算出的得分按照高低排序推荐给用户,本次分享介绍的方案主要也是”预测”评分矩阵R中missing的评分值。

二、基于协同过滤的推荐
基于协同过滤的推荐通过收集用户过去的行为以获得其对物品的显示或隐式信息,根据用户对物品的偏好,发现物品或者用户的相关性,然后基于这些关联性进行推荐。
其主要可以分为两类:分别是memory-based推荐与model-based推荐。其中memory-based推荐主要分为Item-based方法与User-based方法。协同过滤分类见图2。

图2. 协同过滤分类

Memory-based推荐方法通过执行最近邻搜索,把每一个Item或者User看成一个向量,计算其他所有Item或者User与它的相似度。有了Item或者User之间的两两相似度之后,就可以进行预测与推荐了。

图3. 矩阵分解示意图

Model-based推荐最常见的方法为Matrix factorization,其示意图见图3左边。矩阵分解通过把原始的评分矩阵R分解为两个矩阵相乘,并且只考虑有评分的值,训练时不考虑missing项的值,如图3右边所示。R矩阵分解成为U与V两个矩阵后,评分矩阵R中missing的值就可以通过U矩阵中的某列和V矩阵的某行相乘得到。矩阵分解的目标函数见图3,U矩阵与V矩阵的可以通过梯度下降(gradient descent)算法求得,通过交替更新u与v多次迭代收敛之后可求出U与V。

矩阵分解背后的核心思想,找到两个矩阵,它们相乘之后得到的那个矩阵的值,与评分矩阵R中有值的位置中的值尽可能接近。这样一来,分解出来的两个矩阵相乘就尽可能还原了评分矩阵R,因为有值的地方,值都相差得尽可能地小,那么missing的值通过这样的方式计算得到,比较符合趋势。

协同过滤中主要存在如下两个问题:稀疏性与冷启动问题。已有的方案通常会通过引入多个不同的数据源或者辅助信息(Side information)来解决这些问题,用户的Side information可以是用户的基本个人信息、用户画像信息等,而Item的Side information可以是物品的content信息等。例如文献[1]提出了一个Collective Matrix Factorization(CMF)模型,如图4所示。

图4. Collective Matrix Factorization模型

CMF模型通过分别分解评分矩阵R,User的side information矩阵,Item的side information矩阵,其中User或者Item出现在多个矩阵中,其所分解的隐向量都是一致的。

三、深度学习在推荐系统中的应用
Model-based方法的目的就是学习到User的隐向量矩阵U与Item的隐向量矩阵V。我们可以通过深度学习来学习这些抽象表示的隐向量。

Autoencoder(AE)是一个无监督学习模型,它利用反向传播算法,让模型的输出等于输入。文献[2]利用AE来预测用户对物品missing的评分值,该模型的输入为评分矩阵R中的一行(User-based)或者一列(Item-based),其目标函数通过计算输入与输出的损失来优化模型,而R中missing的评分值通过模型的输出来预测,进而为用户做推荐,其模型如图5所示。

图5. Item-based AutoRec模型

Denoising Autoencoder(DAE)是在AE的基础之上,对输入的训练数据加入噪声。所以DAE必须学习去除这些噪声而获得真正的没有被噪声污染过的输入数据。因此,这就迫使编码器去学习输入数据的更加鲁棒的表达,通常DAE的泛化能力比一般的AE强。Stacked Denoising Autoencoder(SDAE)是一个多层的AE组成的神经网络,其前一层自编码器的输出作为其后一层自编码器的输入,如图6所示。

图6. SDAE


文献[3]在SDAE的基础之上,提出了Bayesian SDAE模型,并利用该模型来学习Item的隐向量,其输入为Item的Side information。该模型假设SDAE中的参数满足高斯分布,同时假设User的隐向量也满足高斯分布,进而利用概率矩阵分解来拟合原始评分矩阵。该模型通过最大后验估计(MAP)得到其要优化的目标函数,进而利用梯度下降学习模型参数,从而得到User与Item对应的隐向量矩阵。其图模型如图7所示。

图7. Bayesian SDAE for Recommendation Sysytem


在已有工作的基础之上,携程基础BI算法团队通过改进现有的深度模型,提出了一种新的混合协同过滤模型,并将其成果投稿与国际人工智能顶级会议AAAI 2017并被接受。该成果通过利用User和Item的评分矩阵R以及对应的Side information来学习User和Item的隐向量矩阵U与V,进而预测出评分矩阵R中missing的值,并为用户做物品推荐。

图8. Additional Stacked Denoising Autoencoder(aSDAE)


该成果中提出了一种Additional Stacked Denoising Autoencoder(aSDAE)的深度模型用来学习User和Item的隐向量,该模型的输入为User或者Item的评分值列表,每个隐层都会接受其对应的Side information信息的输入(该模型灵感来自于NLP中的Seq-2-Seq模型,每层都会接受一个输入,我们的模型中每层接受的输入都是一样的,因此最终的输出也尽可能的与输入相等),其模型图见图8。

结合aSDAE与矩阵分解模型,我们提出了一种混合协同过滤模型,见图9所示。该模型通过两个aSDAE学习User与Item的隐向量,通过两个学习到隐向量的内积去拟合原始评分矩阵R中存在的值,其目标函数由矩阵分解以及两个aSDAE的损失函数组成,可通过stochastic gradient descent(SGD)学习出U与V,详情大家可以阅读我们的paper《A Hybrid Collaborative Filtering Model with Deep Structure for Recommender Systems》[4]。

图9. 混合协同过滤模型


我们利用RMSE以及RECALL两个指标评估了我们模型的效果性能,并且在多个数据集上和已有的方案做了对比实验。实验效果图如图10所示,实验具体详情可参看我们的paper。

图10. 实验效果对比


在今年的推荐系统顶级会议RecSys上,Google利用DNN来做YouTube的视频推荐[5],其模型图如图11所示。通过对用户观看的视频,搜索的关键字做embedding,然后在串联上用户的side information等信息,作为DNN的输入,利用一个多层的DNN学习出用户的隐向量,然后在其上面加上一层softmax学习出Item的隐向量,进而即可为用户做Top-N的推荐。

图11. YouTube推荐模型图


此外,文献[6]通过卷积神经网络(CNN)提出了一种卷积矩阵分解,来做文档的推荐,该模型结合了概率矩阵分解(PMF)与CNN模型,图见图12所示。该模型利用CNN来学习Item的隐向量,其对文档的每个词先做embedding,然后拼接所有词组成一个矩阵embedding矩阵,一篇文档即可用一个二维矩阵表示,其中矩阵的行即为文档中词的个数,列即为embedding词向量的长度,然后在该矩阵上做卷积、池化以及映射等,即可得到item的隐向量。User的隐向量和PMF中一样,假设其满足高斯分布,其目标函数由矩阵分解以及CNN的损失函数组成。

图12. 卷积矩阵分解模型


四、总结
本文介绍了一些深度学习在推荐领域的应用,我们发现一些常见的深度模型(DNN, AE, CNN等)都可以应用于推荐系统中,但是针对不同领域的推荐,我们需要更多的高效的模型。随着深度学习技术的发展,我们相信深度学习将会成为推荐系统领域中一项非常重要的技术手段。

本文由携程技术中心投递,ID:ctriptech。作者:董鑫,携程基础业务部BI团队高级算法工程师,博士毕业于上海交通大学计算机科学与技术系。

引用
[1] Ajit P. Singh, Geoffrey J. Gordon. “Relational Learning via Collective Matrix Factorization”, KDD 2008
[2] Suvash Sedhain, Aditya Krishna Menon, Scott Sanner, Lexing Xie. “AutoRec: Autoencoders Meet Collaborative Filtering”, WWW 2015
[3] Hao Wang,Naiyan Wang, Dit-Yan Yeung. “Collaborative Deep Learning for Recommender Systems”, KDD 2015
[4] Xin Dong, Lei Yu, ZhonghuoWu, Yuxia Sun, Lingfeng Yuan, Fangxi Zhang. “A Hybrid Collaborative Filtering Model with Deep Structure for Recommender Systems”, AAAI 2017
[5] Paul Covington, Jay Adams, Emre Sargin. “Deep Neural Networks for YouTube Recommendations”, RecSys 2016
[6] Donghyun Kim, Chanyoung Park, Jinoh Oh, Sungyoung Lee, Hwanjo Yu. “Convolutional Matrix Factorization for Document Context-Aware Recommendation”, RecSys 2016
  • 大小: 100.1 KB
  • 大小: 43.5 KB
  • 大小: 45.6 KB
  • 大小: 47 KB
  • 大小: 79 KB
  • 大小: 72.3 KB
  • 大小: 66.2 KB
  • 大小: 73.6 KB
  • 大小: 90.8 KB
  • 大小: 136.5 KB
  • 大小: 85 KB
  • 大小: 100.5 KB
0
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 机器学习-推荐系统中基于深度学习的混合协同过滤模型

    携程在深度学习与推荐系统结合的领域也进行了相关的研究与应用,并在国际人工智能顶级会议AAAI 2017上发表了相应的研究成果《A Hybrid Collaborative Filtering Model with Deep Structure fo...

  • 【推荐系统】从协同过滤到深度学习

    本文基于《深度学习推荐系统》的模型总结,从协同过滤和逻辑回归的演变大方向来整理。 目录1.CF——*只利用交互信息*2. LR——*多特征融合*3.MF——*引入用户、物品隐变量*4.AutoRec——*结合自编码器*5.NeuralCF...

  • <转>推荐系统中基于深度学习的混合协同过滤模型

    相对来说,深度学习在推荐系统领域的研究与应用还处于早期阶段。 携程在深度学习与推荐系统结合的领域也进行了相关的研究与应用,并在国际人工智能顶级会议AAAI 2017上发表了相应的研究成果《A Hybrid ...

  • 【回顾】推荐系统中基于深度学习的混合协同过滤模型

    近些年,深度学习在语音识别、图像处理、自然语言处理等领域都取得了很大的突破与成就。相对来说,深度学习在推荐系统领域的研究与应用还处于早期阶段。 携程在深度学习...

  • 【推荐系统】:协同过滤和基于内容过滤概述

    “我们正在离开信息时代,进入推荐时代。”与许多机器学习技术一样,推荐系统根据用户的历史行为进行预测。...要构建推荐系统最典型的两种方法是基于内容过滤和协同过滤。本文将探讨他们的原理、优缺点等。......

  • 毕业设计-基于协同过滤推荐算法的视频推荐系统

    毕业设计-基于协同过滤推荐算法的视频推荐系统:在信息化时代,各种电子信息化平台、APP、小程序开始走入大家的生活,其中电商类、视频类、音乐类、聊天类、游戏 类软件是大家使用较多的几类软件,而视频类软件因为...

  • 基于内容的推荐和基于协同过滤推荐

    1.基于内容的推荐:根据物品或内容的元数据,发现物品或内容的相关性,然后基于用户以前的喜好记录推荐给用户相似的物品。 如:对于用户 A,他喜欢看电影 A,那么系统就...基于用户的协同过滤推荐算法先使用统计技...

  • 推荐系统算法的研究与实践:协同过滤、基于内容的推荐和深度学习推荐模型

    推荐系统是一种通过分析用户历史行为、个人兴趣和社交关系等信息,向用户...本文将详细介绍推荐系统算法的研究与实践,重点介绍了协同过滤、基于内容的推荐和深度学习推荐模型,并分析了它们的优缺点和实际应用场景。

  • C++与Comsol联合仿真的锂电池枝晶生长多物理场耦合模型研究

    内容概要:本文详细介绍了利用C++编程和Comsol软件进行锂电池内部枝晶生长过程的多物理场耦合仿真。首先探讨了枝晶生长对浓度场、电场、温度场以及应力场的敏感性,并展示了相应的数学模型和C++代码实现。接着讨论了采用元胞自动机(CA)和格子玻尔兹曼方法(LBM)来模拟枝晶的非均匀生长特性,特别是通过引入偏心正方算法改进了传统CA模型的方向局限性。此外,文中还涉及了如何将多种物理场(如浓度场、电场、温度场、应力场和流场)耦合在一起,形成完整的多物理场仿真系统。最后,作者分享了一些实用的经验和技术细节,比如参数调整技巧、避免常见错误的方法等。 适合人群:从事锂电池研究的专业人士,尤其是对电池安全性和性能优化感兴趣的科研工作者和技术开发者。 使用场景及目标:适用于希望深入了解锂电池内部枝晶生长机制的研究人员,旨在帮助他们构建更加精确的仿真模型,从而更好地理解和解决枝晶引起的电池安全隐患。 其他说明:文章不仅提供了理论分析,还包括具体的代码实例,便于读者动手实践。同时强调了多物理场耦合的重要性,指出这是提高仿真精度的关键因素之一。

  • (源码)基于STM32F10x微控制器的综合驱动库.zip

    # 基于STM32F10x微控制器的综合驱动库 ## 项目简介 本项目是一个基于STM32F10x系列微控制器的综合驱动库,旨在为开发者提供一套全面、易于使用的API,用于快速搭建和配置硬件资源,实现高效、稳定的系统功能。项目包含了STM32F10x系列微控制器的基本驱动和常用外设(如GPIO、SPI、Timer、RTC、ADC、CAN、DMA等)的驱动程序。 ## 项目的主要特性和功能 1. 丰富的外设驱动支持支持GPIO、SPI、Timer、RTC、ADC、CAN、DMA等外设的初始化、配置、读写操作和中断处理。 2. 易于使用的API接口提供统一的API接口,简化外设操作和配置,使开发者能够专注于应用程序逻辑开发。 3. 全面的时钟管理功能支持系统时钟、AHB时钟、APB时钟的生成和配置,以及时钟源的选择和配置。 4. 电源管理功能支持低功耗模式、电源检测和备份寄存器访问,帮助实现节能和延长电池寿命。

  • (源码)基于Python和TensorFlow的甲骨文识别系统.zip

    # 基于Python和TensorFlow的甲骨文识别系统 ## 项目简介 本项目是一个基于Python和TensorFlow的甲骨文识别系统,旨在利用深度学习技术,尤其是胶囊网络(Capsule Network)来识别甲骨文图像。项目包括数据集准备、模型构建、训练、测试以及评估等关键步骤。 ## 主要特性和功能 1. 数据准备项目提供了数据集的下载、预处理以及分割为训练集、验证集和测试集的功能。 2. 模型构建实现了基于胶囊网络的甲骨文识别模型,包括基本的CapsNet模型、分布式CapsNet模型以及支持多任务学习的CapsNet模型。 3. 训练与测试提供了训练模型、评估模型性能以及可视化训练过程的功能。 4. 性能评估通过测试集评估模型的识别准确率,并提供了测试结果的详细分析。 ## 安装使用步骤 1. 环境准备安装Python和TensorFlow,以及相关的依赖库。 2. 数据准备 下载MNIST或CIFAR数据集

  • (源码)基于C++的Arduino BLE设备交互库.zip

    # 基于C++的Arduino BLE设备交互库 ## 项目简介 本项目是一个用于与BLE(蓝牙低能耗)设备交互的Arduino库。它为使用Arduino平台的开发者提供了与BLE设备通信所需的功能,能让开发者更轻松地将BLE设备集成到自己的项目中。 ## 项目的主要特性和功能 1. 初始化BLE设备调用begin()方法,可初始化BLE设备并启动通信。 2. 扫描和连接设备利用scan()方法扫描附近的BLE设备,通过connect()方法连接特定设备。 3. 读取和写入数据使用read()和write()方法,实现从BLE设备读取数据或向其写入数据。 4. 处理事件通过setEventHandler()方法注册回调函数,处理BLE事件,如连接成功、断开连接等。 5. 控制广播和广告使用advertise()和stopAdvertise()方法,控制BLE设备的广播和广告功能。

  • 基于ANSYS Fluent的增材制造激光熔覆同轴送粉熔池演变模拟及UDF应用

    内容概要:本文详细探讨了利用ANSYS Fluent对增材制造中激光熔覆同轴送粉技术的熔池演变进行模拟的方法。文中介绍了几个关键技术模块,包括高斯旋转体热源、VOF梯度计算、反冲压力和表面张力的UDF(用户自定义函数)实现。通过这些模块,可以精确模拟激光能量输入、熔池内的多相流行为以及各种物理现象如表面张力和反冲压力的作用。此外,文章展示了如何通过调整参数(如激光功率)来优化制造工艺,并提供了具体的代码示例,帮助读者理解和实现这些复杂的物理过程。 适合人群:从事增材制造领域的研究人员和技术人员,尤其是那些希望深入了解激光熔覆同轴送粉技术背后的物理机制并掌握相应模拟工具的人群。 使用场景及目标:适用于需要对增材制造过程中的熔池演变进行深入研究的情景,旨在提高制造质量和效率。具体目标包括但不限于:理解熔池内部的温度场和流场分布规律,评估不同参数对熔池形态的影响,预测可能出现的问题并提出解决方案。 其他说明:文章不仅提供了详细的理论背景介绍,还包括了大量的代码片段和实例解析,使读者能够在实践中更好地应用所学知识。同时,通过对实际案例的讨论,揭示了增材制造过程中的一些常见挑战及其应对策略。

  • COMSOL中三维激光切割热流耦合模型:水平集、流体传热及层流分析的应用与优化

    内容概要:本文详细介绍了在COMSOL中构建三维激光切割过程中涉及的热流耦合模型的方法和技术要点。主要内容涵盖水平集物理场用于追踪材料界面变形、流体传热用于描述熔池流动和热传导的相互作用以及层流分析用于处理熔融金属流动。文中提供了具体的MATLAB代码片段,展示了如何设置材料属性、热源加载、熔融金属流动方程、求解器配置及后处理步骤。此外,还讨论了常见问题及其解决方案,如界面过渡区厚度的选择、热源加载的技术细节、表面张力系数的设置、求解器配置的技巧等。 适合人群:从事激光切割工艺研究、仿真建模的研究人员和工程师,尤其是熟悉COMSOL Multiphysics平台的用户。 使用场景及目标:适用于希望深入了解并优化激光切割过程中的热流耦合仿真的研究人员和工程师。主要目标是提高仿真精度,优化切割参数,改善切割质量和效率。 其他说明:文章不仅提供理论指导,还包括大量实用的操作建议和调试技巧,帮助用户更好地理解和应用COMSOL进行复杂物理现象的模拟。

  • (源码)基于PythonDjango和Vue的美多电商平台.zip

    # 基于PythonDjango和Vue的美多电商平台 ## 项目简介 本项目是一个基于PythonDjango和Vue的B2C电商平台,名为美多商城,专注于销售自营商品。系统前台具备商品列表展示、商品详情查看、商品搜索、购物车管理、订单支付、评论功能以及用户中心等核心业务功能系统后台涵盖商品管理、运营管理、用户管理和系统设置等系统管理功能。同时,项目新增了统一异常处理、状态码枚举类等设计,避免使用魔法值,提升了项目的可扩展性和可维护性。 ## 项目的主要特性和功能 ### 前台功能 1. 商品相关提供商品列表展示、商品详情查看以及商品搜索功能,方便用户查找心仪商品。 2. 购物车支持用户添加、管理商品,方便集中结算。 3. 订单支付集成阿里支付,支持订单创建、支付及支付结果处理。 4. 评论用户可对商品进行评价,分享购物体验。 5. 用户中心支持用户注册、登录、密码修改、邮箱验证、地址管理等操作。 ### 后台功能

  • 目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛

    目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛,目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛,目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛 目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛,目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛,目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛~ 目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛,目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛,目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛 目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛,目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛,目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛 目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛,目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛,目前最火的C/C++和Java蓝桥杯竞赛练习题,充分备战竞赛

Global site tag (gtag.js) - Google Analytics