【推荐系统实战】电影推荐系统(上)——整体设计

1. 项目框架

1.1 系统模块设计:

在这里插入图片描述

1.2 项目系统架构

在这里插入图片描述



2. 数据源解析

2.1 数据源信息

  • 电影信息 movies.csv
电影ID(MID) 电影名称(NAME) 电影描述(DESCRI) 电影时长(TIMELONG) 发行时间(ISSUE) 拍摄时间(SHOOT) 电影语言(LANGUAGE) 电影类别(DIRECTOR) 电影演员(ACTORS) 电影导演(DIRECTOR)
1 Toy Story - 81minutes March 20, 2001 1995 English Adventure
Animation
Children
Comedy
Fantasy
Tom Hanks
Tim Allen

Wallace Shawn
John Lasseter
  • 用户评分信息 ratings.csv
用户ID(UID) 电影ID(MID) 电影评分(SCORE) 评分时间(TIMESTAMP)
1 31 2.5 1260759144
  • 电影标签信息 tags.csv
用户ID(UID) 电影ID(MID) 电影标签(TAG) 标签时间(TIMESTAMP)
15 1995 dentist 1193435061

2.2 主要数据模型

在这里插入图片描述



3. 离线统计模块

在这里插入图片描述

3.1 历史热门电影统计

统计所有历史数据中每个电影的评分数量(这里只考虑评分的数量,而不考虑评分的大小。)

# RateMoreMovies  数据结构:mid,count
select mid,count(mid) as count from ratings group by mid

3.2 近期热门电影统计

统计每月的电影评分个数,就代表了电影近期的热门度。
changeDate:对评分时间(TIMESTAMP)使用 SimpleDateFormat 对 Date 进行格式转换,转换格式为 “yyyyMM”。

# ratingOfMonth   数据结构:mid,score,yearmonth
select mid,score,changeDate(timestamp) as yearmonth from ratings
# RateMoreRecentlyMovies   数据结构:mid,count,yearmonth
select mid,count(mid) as count, yearmonth from ratingOfMonth group by yearmonth,mid order by yearmonth desc,count desc

3.3 电影平均评分统计

# AverageMovies   数据结构:mid,avg
select mid,avg(score) as avg from ratings group by mid

3.4 各类别Top10优质电影统计

# movieWithScore  把所有的类别和所有的电影做匹配判断
select a.mid,genres,if(isnull(b.avg),0,b.avg) score from movies a left join averageMovies b on a.mid=b.mid




4. 离线推荐模块

4.1 用ALS算法训练隐语义模型

ALS是交替最小二乘法(alternating least squares)的简称,在机器学习中,ALS特指使用交替最小二乘法求解的一个协同推荐算法。

因子分解类模型的好处在于,一旦建立了模型,对推荐的求解便相对容易。所以这类模型的表现通常都很出色。但弊端可能在于因子数量的选择有一定困难,往往要结合具体业务和数据量来决定。一般来说,因子的取值范围在10~200之间。注意:k越大,其计算复杂度越高


ALS推荐模型训练
在这里插入图片描述

4.2 计算用户推荐矩阵

在这里插入图片描述

4.3 计算电影相似度矩阵

在这里插入图片描述

两个电影的评分大小并不能体现这两个电影的相似度,因此我们在这里使用余弦相似度来表征两个电影的相似度,而不是用欧氏距离。


存储电影相似度矩阵
在这里插入图片描述



5. 实时推荐模块

  • 计算速度要快
  • 结果可以不是特别精确
  • 有预先设计好的推荐模型

5.1 实时推荐架构

在这里插入图片描述


5.2 实时推荐优先级计算

基本原理:用户最近一段时间的口味是相似的。

需要综合考虑 与用户最近看的电影相似的电影 以及 用户对该电影的评分(评分低的话 则不推荐相似电影),对这两个因素进行 加权求和 得到 推荐优先级。

具体做法:

  1. 首先先获取一组备选电影列表;
  2. 然后对每一个备选电影去做计算,计算它的推荐优先级;
    E u q = ∑ r ∈ R K s i m ( q , r ) × R r s i m n u m + l g m a x ( i n c o u n t , 1 ) − l g m a x ( r e c o u n t , 1 ) E_{uq} = \frac{\sum\limits_{r\in RK} sim(q,r)\times R_r}{sim_num} + lg max(incount, 1) - lg max (recount, 1) Euq=simnumrRKsim(q,r)×Rr+lgmax(incount,1)lgmax(recount,1)其中,
    • sim(q,r) 为 备选电影 q q q 与用户最近看过的电影 r ∈ R K r\in RK rRK 之间的相似度;
    • R r R_r Rr 表示用户对电影 r r r 的评分;
    • ∑ r ∈ R K s i m ( q , r ) × R r s i m n u m \frac{\sum\limits_{r\in RK} sim(q,r)\times R_r}{sim_num} simnumrRKsim(q,r)×Rr 表示 相似度 与 评分 进行加权求和,再取平均;
    • l g m a x ( i n c o u n t , 1 ) lg max(incount, 1) lgmax(incount,1) 表示奖励项, i n c o u n t incount incount 表示用户的最近评分中 高分(自定义)的个数;
    • l g m a x ( r e c o u n t , 1 ) lg max(recount, 1) lgmax(recount,1) 表示惩罚项, i n c o u n t incount incount 表示用户的最近评分中 低分(自定义)的个数。

在这里插入图片描述



6. 基于内容的推荐模块

  • 电影A的相似电影——有相同标签的电影
  • Item-CF:根据标签提取电影A的内容特征,选取与A特征相似的电影
  • 根据 UGC 的特征提取——TF-IDF





参考:
[1] 尚硅谷机器学习和推荐系统项目实战教程

猜你喜欢

转载自blog.csdn.net/qq_42757191/article/details/126699421