Tensorflow 2.12 电影推荐系统之召回模型
- 学习笔记
-
- 导入相关模块
- 准备数据
-
- 加载数据
- 数据预处理
- 生成词汇表
- 构建模型
-
- 嵌入维度
- 查询塔
- 候选条目塔
- 模型指标
- 损失函数
- 定义双塔召回模型
- 训练和评估
-
- 创建模型实例
- 缓存数据
- 训练
- 评估
- 预测
- 导出和加载模型
- 结尾
学习笔记
Tensorflow 2.12 智能电影推荐系统搭建学习笔记~
Tensorflow是谷歌开源的机器学习框架,可以帮助我们轻松地构建和部署机器学习模型。这里记录学习使用tensorflow-recommenders来构建一个电影推荐召回模型。
版本:python3.1.0、tensorflow2.12.0~
导入相关模块
python"># 导入os模块,主要提供系统相关的函数,如文件操作等,这里主要用于保存模型
import os
# pretty print,适合打印复杂的数据结构对象
import pprint
# 用于创建临时文件和目录
import tempfile
# 字典以及文本处理模块
from typing import Dict, Text
# 一个用于进行科学计算的Python库,它提供了高性能的多维数组对象(ndarray)以及用于处理这些数组的各种函数和工具
import numpy as np
# 导入TensorFlow
import tensorflow as tf
import tensorflow_recommenders as tfrs
# TensorFlow示例数据加载模块
import tensorflow_datasets as tfds
准备数据
加载数据
Movielens数据集是明尼苏达大学的GroupLens研究小组的经典数据集。它包含了一组用户对电影的评分,是推荐系统研究的重要数据集。
python"># 加载用户-电影评分数据
ratings = tfds.load("movielens/100k-ratings", split="train")
# 加载电影特征数据
movies = tfds.load("movielens/100k-movies", split="train")
# 打印
for x in ratings.take(1).as_numpy_iterator():
pprint.pprint(x)
# 数据:{'bucketized_user_age': 45.0,'movie_genres': array([7], dtype=int64),'movie_id': b'357','movie_title': b"One Flew Over the Cuckoo's Nest (1975)",'raw_user_age': 46.0,'timestamp': 879024327,'user_gender': True,'user_id': b'138','user_occupation_label': 4,'user_occupation_text': b'doctor','user_rating': 4.0,'user_zip_code': b'53211'}
for x in movies.take(1).as_numpy_iterator():
pprint.pprint(x)
# 数据:{'movie_genres': array([4], dtype=int64),'movie_id': b'1681','movie_title': b'You So Crazy (1994)'}
数据预处理
先对数据进行处理,方便后续进行模型构建、训练、验证等。
python"># 数据处理,保留使用到特征,方便训练(这里保留用户Id以及用户观看过的电影标题)
ratings = ratings.map(lambda x: {
"movie_title": x["movie_title"],
"user_id": x["user_id"],
})
movies = movies.map(lambda x: x["movie_title"])
# 设置随机数
tf.random.set_seed(42)
# 对数据集中的样本进行随机排序,以打乱样本的顺序(通过对数据集进行洗牌,可以确保模型在训练过程中能够更好地学习样本之间的关联性,提高模型的泛化能力)
shuffled = ratings.shuffle(100_000, seed=42, reshuffle_each_iteration=False)
# 切分数据集,训练数据以及测试数据
train = shuffled.take(80_000)
tes