手把手教你基于深度学习构建推荐系统
文章插图
> Photo by freestocks on Unsplash
对现代电影推荐器的简要介绍传统上 , 推荐系统基于诸如聚类 , 最近邻和矩阵分解的方法 。但是 , 近年来 , 深度学习在从图像识别到自然语言处理的多个领域都取得了巨大的成功 。推荐系统还受益于深度学习的成功 。实际上 , 当今的最先进的推荐系统(例如 , Youtube和Amazon的推荐系统)由复杂的深度学习系统提供支持 , 而传统方法则更少 。
为什么要使用本教程?在阅读了许多有用的教程(包括使用矩阵分解等传统方法的推荐系统基础知识)时 , 我注意到缺少涵盖基于深度学习的推荐系统的教程 。在此笔记本中 , 我们将进行以下操作:
· 如何使用PyTorch Lightning创建自己的基于深度学习的推荐系统
· 推荐系统的隐式和显式反馈之间的区别
· 如何在不引入偏见和数据泄漏的情况下训练测试拆分数据集以训练推荐系统
· 评估推荐系统的指标(提示:准确性或RMSE不适用!)
本教程的数据集本教程使用MovieLens 20M数据集提供的电影评论 , MovieLens 20M数据集是一个受欢迎的电影评分数据集 , 其中包含1995年至2015年收集的2000万电影评论 。
如果您想按照本教程中的代码进行操作 , 则可以查看我的Kaggle笔记本 , 在其中可以运行代码并按照本教程的步骤查看输出 。
使用隐式反馈构建推荐系统在建立模型之前 , 了解隐式和显式反馈之间的区别以及现代推荐系统为何建立在隐式反馈上非常重要 。
明确的反馈在推荐系统中 , 显式反馈是从用户那里收集的直接和定量数据 。例如 , 亚马逊允许用户以1-10的等级对购买的商品进行评分 。这些评级是直接从用户提供的 , 该量表允许Amazon量化用户的偏好 。明确反馈的另一个示例包括YouTube上的拇指向上/向下按钮 , 该按钮可捕获用户对特定视频的明确偏好(即喜欢或不喜欢) 。
但是 , 显式反馈的问题在于它们很少 。如果您考虑一下 , 您最后一次单击YouTube视频上的"赞"按钮或对您的在线购买进行评分是什么时候? 您在YouTube上观看的视频数量有可能远远超过您明确评分的视频数量 。
隐式反馈另一方面 , 隐式反馈是从用户交互中间接收集的 , 它们充当用户偏好的代理 。例如 。您在YouTube上观看的视频会用作隐式反馈 , 以为您量身定制推荐内容 , 即使您未对视频进行明确评分 。隐式反馈的另一个示例包括您在Amazon上浏览的项目 , 这些项目用于为您建议其他类似的项目 。
隐式反馈的优点是它很丰富 。使用隐式反馈构建的推荐器系统还使我们能够通过每次单击和交互来实时定制建议 。如今 , 在线推荐系统是使用隐式反馈构建的 , 该系统允许系统在每次用户交互时实时调整其推荐 。
数据预处理在开始构建和训练模型之前 , 让我们进行一些预处理 , 以获取所需格式的MovieLens数据 。
为了使内存使用情况易于管理 , 我们将仅使用此数据集中30%用户的数据 。我们随机选择30%的用户 , 仅使用所选用户的数据 。
import pandas as pdimport numpy as npnp.random.seed(123)ratings = pd.read_csv('rating.csv', parse_dates=['timestamp'])rand_userIds = np.random.choice(ratings['userId'].unique(),size=int(len(ratings['userId'].unique())*0.3),replace=False)ratings = ratings.loc[ratings['userId'].isin(rand_userIds)]过滤完数据集后 , 现在有41,547位用户的6,027,314行数据(仍然是很多数据!) 。数据框中的每一行都对应一个用户进行的电影评论 , 如下所示 。
文章插图
训练数据测试拆分除了评分之外 , 还有一个时间戳列 , 显示提交评论的日期和时间 。在"时间戳记"列中 , 我们将使用"留一法"方法实施火车测试拆分策略 。对于每个用户 , 将最新的评论用作测试集(即不做评论) , 而其余评论将用作训练数据 。
为了说明这一点 , 下面显示了用户39849审阅的电影 。用户最近看过的电影是2014年的热门电影《银河护卫队》 。我们将把这部电影用作该用户的测试数据 , 并将其余的已审查电影用作训练数据 。
文章插图
> Movie posters from themoviedb.org (free to use)
在训练和评估推荐系统时 , 通常会使用这种火车测试拆分策略 。随机分组并不公平 , 因为我们可能会使用用户的近期评论进行培训 , 而使用较早的评论进行测试 。这会导致数据泄漏并带有前瞻性偏差 , 并且训练后的模型的性能无法推广到实际性能 。
- 路由器|家里无线网经常断网、网速慢怎么办?教你几个小窍门,轻松解决
- 走心|平安夜还在送苹果?太不走心了,教你几招,快来物色一个
- 云图|不会制作词云图?我来教你
- 科技成果|“基于第三代半导体光源的低投射比投影仪关键技术”通过科技成果评价
- 如何基于Python实现自动化控制鼠标和键盘操作
- 手机|手机文件夹都是英文,占空间还不敢删除,教你一招省下10G内存
- 需要更换手机了:基于手机构建无人驾驶微型汽车
- 蓝鲸专访|水滴CTO邱慧:基于业务场景做技术创新,用户需求可分析并唤醒
- iPhone装了App却在桌面找不到?教你如何解决
- iOS 14小部件如何展示自己心爱的照片?我来教你这个办法
