DS实习Week1 ---推荐系统学习(4)实例:电影推荐系统①

本文介绍了电影推荐系统的学习,基于ml-1m数据集,包括数据集介绍、推荐系统思路和数据处理流程。数据处理涉及用户、电影、评分和海报图像,目标是将特征转化为神经网络可处理的格式。推荐系统通过计算用户和电影特征向量的相似度进行推荐。
摘要由CSDN通过智能技术生成

一、数据集介绍

个性化推荐算法的数据大多是文本和图像。比如网易云音乐推荐中,数据是音乐的名字、歌手、音乐类型等文本数据;抖音视频推荐中,数据是视频或图像数据;也有可能同时使用图像和文本数据,比如YouTube的视频推荐算法中,会同时考虑用户信息和视频类别、视频内容信息。

本次实践我们采用ml-1m电影推荐数据集,它是GroupLens Research从MovieLens网站上收集并提供的电影评分数据集。包含了6000多位用户对近3900个电影的共100万条评分数据,评分均为1~5的整数,其中每个电影的评分数据至少有20条。该数据集包含三个数据文件,分别是:

  • users.dat:存储用户属性信息的文本格式文件。
  • movies.dat:存储电影属性信息的文本格式文件。
  • ratings.dat:存储电影评分信息的文本格式文件。

另外,为了验证电影推荐的影响因素,我们还从网上获取到了部分电影的海报图像。现实生活中,相似风格的电影在海报设计上也有一定的相似性,比如暗黑系列和喜剧系列的电影海报风格是迥异的。所以在进行推荐时,可以验证一下加入海报后,对推荐结果的影响。 电影海报图像在posters文件夹下,海报图像的名字以"mov_id" + 电影ID + ".png"的方式命名。由于这里的电影海报图像有缺失,我们整理了一个新的评分数据文件,新的文件中包含的电影均是有海报数据的,因此,本次实践使用的数据集在ml-1m基础上增加了两份数据:

  • posters:包含电影海报图像。
  • new_rating.txt:存储包含海报图像的新评分数据文件。

用户信息、电影信息和评分信息包含的内容如下表所示。

用户信息 UserID Gender Age Occupation
样例 1 F【M/F】 1 10
电影信息 MovieID Title Genres PosterID
样例 1 Toy Story Animation| Children’s|Comedy 1
评分信息 UserID MovieID Rating
样例 1 1193 5【1~5】

其中部分数据并不具有真实的含义,而是编号。年龄编号和部分职业编号的含义如下表所示。

年龄编号 职业编号
  • 1: “Under 18”
  • 18: “18-24”
  • 25: “25-34”
  • 35: “35-44”
  • 45: “45-49”
  • 50: “50-55”
  • 56: “56+”
  • 0: “other” or not specified
  • 1: “academic/educator”
  • 2: “artist”
  • 3: “clerical/admin”
  • 4: “college/grad student”
  • 5: “customer service”
  • 6: “doctor/health care”
  • 7: “executive/managerial”

海报对应着尺寸大约为180*270的图片,每张图片尺寸稍有差别。

从样例的特征数据中,我们可以分析出特征一共有四类:

  1. ID类特征:UserID、MovieID、Gender、Age、Occupation,内容为ID值,前两个ID映射到具体用户和电影,后三个ID会映射到具体分档。
  2. 列表类特征:Genres,每个电影有多个类别标签。如果将电影类别编号,使用数字ID替换原始类别,特征内容是对应几个ID值的列表。
  3. 图像类特征:Poster,内容是一张180×270的图片。
  4. 文本类特征:Title,内容是一段英文文本。

因为特征数据有四种不同类型,所以构建模型网络的输入层预计也会有四种子结构。


二、推荐系统思路

如果能将用户A的原始特征转变成一种代表用户A喜好的特征向量,将电影1的原始特征转变成一种代表电影1特性的特征向量。那么,我们计算两个向量的相似度,就可以代表用户A对电影1的喜欢程度。据此,推荐系统可以如此构建:

假如给用户A推荐,计算电影库中“每一个电影的特征向量”与“用户A的特征向量”的余弦相似度,根据相似度排序电影库,取 Top k的电影推荐给A。

图2:推荐系统设计

 

这样设计的核心是两个特征向量的有效性,它们会决定推荐的效果。

1.如何获得有效特征

如何获取两种有效代表用户和电影的特征向量?首先,需要明确什么是“有效”?

对于用户评分较高的电影,电影的特征向量和用户的特征向量应该高度相似,反之则相异。

我们已经获得大量评分样本,因此可以构建一个训练模型如下图所示,根据用户对电影的评分样本,学习出用户特征向量和电影特征向量的计算方案(灰色箭头)。

图2:训练模型

  1. 第一层结构:特征变换,原始特征集合变换为两个特征向量。

  2. 第二层结构:计算向量相似度。为确保结果与电影评分可比较,两个特征向量的相似度从【0~1】缩放5倍到【0~5】。

  3. 第三层结构:计算Loss,计算缩放后的相似度与用户对电影的真实评分的“均方误差”。

以在训练样本上的Loss最小化为目标,即可学习出模型的网络参数,这些网络参数本质上就是从原始特征集合到特征向量的计算方法,如灰色箭头所示。根据训练好的网络,我们可以计算任意用户和电影向量的相似度,进一步完成推荐。

2.从原始特征到特征向量之间的网络如何设计?

基于上面的分析,推荐模型的网络结构初步设想如下。

图3:推荐模型的网络结构设想

 

将每个原始特征转变成Embedding表示,再合并成一个用户特征向量和一个电影特征向量。计算两个特征向量的相似度后,再与训练样本(已知的用户对电影的评分)做损失计算。

但不同类型的原始特征应该如何变换?有哪些网络设计细节需要考虑?将在后续结合代码实现逐一探讨,包括四个小节:

  1. 数据处理,将MovieLens的数据处理成神经网络理解的形式。
  2. 模型设计,设计神经网络模型,将离散的文字数据映射为向量。
  3. 配置训练参数并完成训练,提取并保存训练后的数据特征。
  4. 利用保存的特征构建相似度矩阵完成推荐。

三、数据处理流程

数据处理就是将人类容易理解的图像文本数据,转换为机器容易理解的数字形式,把离散的数据转为连续的数据。在推荐算法中,这些数据处理方法也是通用的。本次实验中,数据处理一共包含如下六步,流程如图4所示:

  1. 读取用户数据,存储到字典
  2. 读取电影数据,存储到字典
  3. 读取评分数据,存储到字典
  4. 读取海报数据,存储到字典
  5. 将各个字典中的数据拼接,形成数据读取器。
  6. 划分训练集和验证集生成迭代器,每次提供一个批次的数据

图4:数据处理流程图

1.用户数据处理

用户数据文件user.dat中的数据格式为:UserID::Gender::Age::Occupation::Zip-code,存储形式如下图所示:

上图中,每一行表示一个用户的数据,以::::隔开,第一列到最后一列分别表示UserID、Gender、Age、Occupation、Zip-code,各数据对应关系如下:

数据类别 数据说明 数据示例
UserID 每个用户的数字代号 1、2、3等序号
Gender F表示女性,M表示男性 F或M
Age 用数字表示各个年龄段
  • 1: “Under 18”                      
  • 18: “18-24”
  • 25: “25-34”
  • 35: “35-44”
  • 45: “45-49”
  • 50: “50-55”
  • 56: “56+”
Occupation 用数字表示不同职业
  • 0: “other” or not specified
  • 1: “academic/educator”
  • 2: “artist”
  • 3: “clerical/admin”
  • 4: “college/grad student”
  • 5: “customer service”
  • 6: “doctor/health care”
  • 7: “executive/managerial”
  • 8: “farmer”
  • 9: “homemaker”
  • 10: “K-12 student”
  • 11: “lawyer”
  • 12: “programmer”
  • 13: “retired”
  • 14: “sales/marketing”
  • 15: “scientist”
  • 16: “self-employed”
  • 17: “technician/engineer”
  • 18: “tradesman/craftsman”
  • 19: “unemployed”
  • 20: “writer”
zip-code 邮政编码,与用户所处的地理位置有关。
在本次实验中,不使用这个数据。
48067

首先,读取用户信息文件

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值