A content-based movie recommender system using MovieLens tags (用标签构建一个简单的电影推荐系统)

现在有很多电影。如果没有某种推荐系统,您会担心,随着时间的流逝,用户可能会被他们不关心的电影所淹没。因此,您决定构建电影推荐系统。由于您的服务是新服务,因此您没有足够的数据来了解哪些用户正在观看哪些电影。这被称为冷启动问题,它使您无法仅根据用户的历史收视率来推荐电影。幸运的是,即使没有足够的收视数据,我们仍然可以使用电影元数据构建一个不错的推荐系统。这就是MovieLens的用处。MovieLens为每个电影提供带有关键字标签的公共数据集。这些标签非常有用。

这个转化单功能多个分类值的办法十分有用,整个数据集整理完之后为:

Source: https://datascience.stackexchange.com/questions/14847/multiple-categorical-values-for-a-single-feature-how-to-convert-them-to-binary-u

在本文的其余部分中,我将回答三个业务问题,这些问题对于使用MovieLens的标签构建基于内容的简单推荐系统至关重要:

  1. 每部电影需要几个标签?
  2. 我们如何使用标签来衡量电影之间的相似性?
  3. 我们如何使用标签为用户生成电影推荐?

第一个问题:每部电影需要几个标签?

MovieLens标签基因组数据集中大约有10万部唯一电影和一千个唯一标签。每部电影对每个标签都有一个相关性得分,因此大约有1000万个电影标签对,取值区间从0到1。但是并非每个标签都与电影相关,因此我们只需要保留最相关的标签。首先,我们可以根据相关性得分对每部电影的标签进行排序。以玩具总动员为例:

接下来,我们在下面的图表中确认,电影排名较高的标签通常具有较高的中位数相关性突出。电影的第1级标签的中位相关性几乎几乎为1。我们可以看到, 随着大约第50级,中位相关性逐渐降低。

要查找电影的最相关标签,我们可以根据相关性得分保留电影的前N个标签。在这里,我们需要仔细选择N。如果N很小,则我们具有非常相关的标签。如果N大,则我们有很多标签,但其中许多标签可能无关紧要。下图显示了当我们从排名第1升至第100时,中位数相关性得分的变化百分比。当相关性得分开始变得更加稳定时,我们会在第50个等级附近看到一个拐点。因此,我们可以选择N = 50作为每个电影要保留的合理数量的标签。请注意,这是一种非常简单的“弯头方法”样式的方法,以后可以对其进行优化。

现在,我们可以获得每部电影的前50个标签的列表,这些标签将在下一部分中使用。例如,玩具总动员的50个标签。

另外可以根据电影的名称来查询标签

第二个问题:我们如何使用标签来衡量电影之间的相似性?

在为用户生成电影推荐之前,我们需要一种基于电影的前50个标签来衡量电影之间相似度的方法。在基于内容的推荐器系统中,将向用户推荐与他们已经看过的电影相似的电影。

在这里,我将演示两种测量相似度的方法:

  1. 两组电影标签的Jaccard系数
  2. 基于标签的电影矢量(也称为内容嵌入)的余弦相似度

Jaccard 系数:

使用Jaccard Index的第一种方法是将两个集合AB之间的相似度作为交集的大小除以并集的大小。在衡量电影之间的相似性时,我们可以为两组电影标签计算此索引。

例如,假设我们下面有三部电影,以及前三部标签:

  • 电影A标签=(动作,空间,友谊)
  • 电影B标签=(冒险,太空,友谊)
  • 电影C标签=(浪漫,喜剧,成年)

直观地看,电影A与电影B相似,这是因为电影A和电影B共享两个标签(空格,友谊),而电影A和电影C没有共享标签。以下是根据Jaccard Index进行的类似于心灵捕手的前十部电影。 对于善意狩猎的观众来说,这些看起来像是合理的建议。 请注意,我在列表中包括了心灵捕手,以表明在将电影与其自身进行比较时,Jaccard Index = 1。

根据Jaccard 系数,与《星际穿越》相似的前十部电影以下。 对于《星际穿越》的观众来说,这些看起来也很合理。

为了进一步说明“ Jaccard Index”的有效性,请参见下文基于类似于《星际穿越》电影的标签频率的词云。 在这里,我们可以看到哪些标签在相似度计算中更为突出(例如科幻小说,伟大的结局,错位的未来,哲学的,大脑的)。

余弦相似度(Cosine Similarity)

Jaccard Index的第一种方法帮助我们建立了与标签相似意味着什么的直觉。 这里余弦相似度的第二种方法稍微复杂一些。 它要求我们将电影表示为矢量。 在这里,向量只是一组数字。

例如,我们可以用三个实数表示同一部电影:

电影A =(1.1,2.3,5.1)

电影B =(1.3,2.1,4.9)

电影C =(5.1,6.2,1.1)

凭直觉,我们再次可以看到电影A与电影B的相似度高于电影B,这是因为电影A和电影B在每个维度上的数字都更接近(例如,在第一维度上的数字是1.1与1.3)。为了找到电影的良好矢量表示,我使用本文中的Doc2Vec(PV-DBOW)技术拍摄电影(文档),并根据其标签(文档中的单词)学习到潜在K维矢量空间的映射。

Doc2Vec论文中PV-DBOW技术的可视化; 对于每个段落ID(电影),我们正在训练一个模型来预测该段落中单词(电影标签)的出现

一旦我们可以将每个电影表示为矢量,就可以计算矢量之间的余弦相似度,以找到相似的电影。 我不会在这里详细介绍余弦相似度,但是从较高的角度讲,它可以告诉我们彼此之间相似的电影矢量之间的相似度,我们可以使用它们来生成推荐。 下面,我使用UMAP可视化二维的电影矢量,这是一种流行的非线性降维技术。 我们可以看到在此向量空间中距离更近的电影更加相似(例如玩具总动员和怪物工厂)。

第三个问题:我们如何使用标签为用户生成电影推荐?

现在,我们可以测量带有标签的电影之间的相似性,我们可以开始向用户生成电影推荐。请记住,在基于内容的推荐器系统中,将向用户推荐与他们已经看过的电影相似的电影。如果用户仅看过一部电影(例如心灵捕手),我们可以像以前一样简单地使用Jaccard索引(或余弦相似度)来生成要推荐的类似电影的列表。

实际上,用户将观看一组电影,我们需要根据这些电影的组合属性生成推荐。 一种简单的方法是将用户矢量计算为他们看过的电影矢量的平均值。 这些用户向量可以代表用户的电影偏好设置。

例如,如果用户只看了下面的电影A和B:

电影A =(1、2、3)

电影B =(7,2,1)

用户向量=电影A和电影B的平均值=(4、2、2)

以下是我观看和欣赏的电影,包括星际穿越、心灵捕手、千钧一发、几乎成名、肖申克的救赎、明日边缘、甜心先生、阿甘正传和回到未来。我们如何使用这些电影中的标签生成电影推荐呢?我的用户向量将是上述九部电影的电影向量的平均值。 我可以利用用户向量来查找尚未观看的最相似的电影(基于余弦相似度)。 考虑到我们仅在这里使用电影标签,以下是我的电影推荐,这些推荐出奇的好!

以下是我们基于内容的推荐系统的摘要。 请注意,如果我们将系统部署为API,则可以在批处理过程中预先计算用户向量和相似性分数,以加快建议的提供。

输入:用户向量(从标记中学到的电影向量的平均值)

输出:基于用户和电影向量的余弦相似度,与用户相似的电影列表

Source: Johnson Kuan, 2019. How to Build a Simple Movie Recommender System with Tags. Available from: https://towardsdatascience.com/how-to-build-a-simple-movie-recommender-system-with-tags-b9ab5cb3b616 [25 June 2020]

个人Github :

非商业应用,仅用于学术分享,侵权删

movielens推荐系统_基于内容推荐(二)相关推荐

  1. 推荐系统之基于内容推荐

    目录 (1)基于内容推荐原理 (2)基于内容推荐优势与应用场景 (3)基于内容推荐架构图详解 (4)基于内容推荐TF-IDF详解 (5)构建基于内容推荐开发环境 (6)内容推荐开发步骤与数据演化详解 ...

  2. 推荐系统_基于内容的推荐

    关于推荐系统的算法大概可以分类两类: 一类就是基于用户或者基于商品的协同过滤,我们主要是通过用户行为这个海量数据来挖掘出用户在品味上的一些相似程度,或者说 商品的相似程度,然后我们在利用相似性来进行推 ...

  3. 基于内容推荐算法的电影推荐系统

    基于内容的推荐算法 格局用户过去一段时间内喜欢的物品,以及由此推算出来用户偏好,为用户推荐相似物品.其中的"内容"指的便是:用户过去一段时间内喜欢的物品,以及由此推算出来的用户偏好 ...

  4. 推荐算法-基于内容推荐(CB)

    推荐算法CB 写在前面 一 为什么要做推荐系统 二 基于内容推荐是什么? 1 引入Item属性的Content Based推荐 2 引入User属性的Content Based推荐 三 正排表与倒排表 ...

  5. 推荐机制 协同过滤和基于内容推荐的区别

    基于人口统计学的推荐 基于人口统计学的推荐机制(Demographic-based Recommendation)是一种最易于实现的推荐方法,它只是简单的根据系统用户的基本信息发现用户的相关程度,然后 ...

  6. 推荐算法之协同过滤和基于内容推荐

    一.协同过滤 基于用户商品评分矩阵来做协同,典型的是根据余弦相似来求向量相似. 协同过滤典型的有两种Usercf和Itemcf,Usercf的思路就是根据a,b用户相似,将b用户喜欢的a用户未浏览过的 ...

  7. 基于内容推荐算法实现原理

    本文会从什么是基于内容的推荐算法.算法基本原理.应用场景.基于内容的推荐算法的优缺点.算法落地需要关注的点等5个方面来讲解. 1.什么是基于内容的推荐算法 所谓基于内容的推荐算法(Content-Ba ...

  8. 协同过滤推荐算法和基于内容推荐算法的区别?

    文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼:我热爱编程.热爱算法.热爱开源.所有源码在我的个人github :这博客是记录我学习的点点滴滴,如果您对 Python.Java.AI ...

  9. 新闻推荐系统:基于内容的推荐算法(Recommender System:Content-based Recommendation)

    2018/10/04更新 这篇文章似乎被越来越多的小伙伴看到了,所以觉得有必要做一些进一步的详细说明. 首先按照本文所讲解的推荐思路进行新闻推荐的推荐系统,我已经实现并已经放在Github上了.欢迎小 ...

最新文章

  1. Nat. Mach. Intell. | 可解释性人工智能(xAI)遇上药物发现
  2. 1分钟10万字大法:量子波动速读、蒙眼翻书穿针,这是席卷15省的最新智商税...
  3. java 文件路径表达式_Java基础(二十二) Lambda表达式和File类
  4. file control
  5. 【Python】开启Pandas进阶:图解Pandas透视表、交叉表
  6. LTE系统信息块SIB:LTE system information blocks-MIB,SIB-1,2,3,4,5,6,7,8,9,10,11
  7. vue js 反编译_学会了Vue,前端面试却没找到工作?
  8. Java String 探索
  9. Kazrog AmpCraft 1992 for Mac - 放大器建模插件
  10. 93. 复原IP地址
  11. 数值分析完整思维导图
  12. 【咕嘎批量图片查找助手】如何批量根据图片文件名批量查找图片库,移动或复制到指定文件夹保存
  13. 高级JAVA工程师的岗位职责,岗位要求
  14. oracle block corrupted,ORA-01578: ORACLE data block corrupted (file # 6, block # 132)
  15. 基于STM32的智能抽油烟机系统
  16. 关于 戴尔G3 NVIDIA 1050TI 显卡驱动无法使用的解决办法
  17. PHP之支付宝APP支付
  18. 关于知乎搜索页面x-zes-96解密思路方法
  19. SAAS健身房会员管理软件
  20. IIC 总线协议(Verilog)

热门文章

  1. 青岛智能院助力智慧城市 打造智能产业“黄埔军校”
  2. bootstrap-代码-内联代码
  3. day12-nginx
  4. 【转】使用Apache Kylin搭建企业级开源大数据分析平台
  5. javaweb下载文件
  6. win10大文件无法移动到U盘
  7. spring的service不启动事务的配置。
  8. ABB机器人的错误处理
  9. 【图像处理】——改变图像的大小(降采样重采样)下采样和上采样
  10. linux 下的gettimeofday 函数在windows上的替换方案