推荐系统项目基础(七)基于内容的推荐系统
简介
基于内容的推荐比较直接,以物品的内容描述信息作为依据来进行推荐,本质上是基于物品和用户自身的特征进行分析和计算
基于内容的推荐实现步骤
1、画像构建
画像的字段一般有100+以上。
用户画像
一般来自于用户的历史信息或者个人信息,例如用户的性别,年龄,消费水平,已经购买物品的记录等。还可以包括活跃程度,风控维度。
物品画像
与物品相关的信息,例如分类信息,标题,电影主演等。一般从两个方面获取:
- PGC 用户画像-冷启动
- 物品自带的属性(物品一产生就具备的):如电影的标题,导演,演员等。
- 服务方提供的属性,如短视频话题,微博话题等
- 爬虫等
- UGC 用户产生的内容
- 用户再进行服务时提供的属性,用户的评论内容,用户拟定的话题(微博话题)
2、匹配用户画像与物品画像
根据用户匹配最相近的物品进行推荐
基于TF-IDF进行数据的推荐
推荐流程:
- 1、建立物品画像
- 筛选出所有物品与其对应的tag列表
- 根据TF-IDF求解出每个电影的topN(TFIDF 比较大的关键词)
- 建立【电影ID,关键词,关键词权重】的DataFrame
- 2、建立倒排索引
- 通过关键词可以找到对应的电影
- 遍历数据,读取每个关键词,用关键词对应的电影id作为value并保存。
- 3、建立用户画像
- 根据用户的评分列表获取到用户都有评分哪些电影,根据这些电影提取关键词
- 根据这些关键词作为用户的标签进行统计,将最常见的标签作为用户的画像关键词。
- 进行推荐
- 根据用户的关键词进行查找,
代码:
from functools import reduce
import pandas as pd
import numpy as np
from gensim.models import TfidfModel
from gensim.corpora import Dictionary
from collections import Counter
if __name__ == '__main__':
dtype = [("userId", np.int32), ("movieId", np.int32), ("tag", np.str), ("timestamp", np.int64)]
tags_df = pd.read_csv("../ml-25m/tags.csv", usecols=range(1, 3)).dropna()
movies_df = pd.read_csv("../ml-25m/movies.csv", index_col="movieId")
tags = tags_df.groupby("movieId").agg(list)
movies_df.loc[:, "genres"] = movies_df.loc[:, "genres"].apply(lambda x: x.split("|"))
# tags_df = tags_df.sort_values(