【Tensorflow 2.12 电影推荐系统之召回模型】

Tensorflow 2.12 电影推荐系统之召回模型

  • 学习笔记
    • 导入相关模块
    • 准备数据
      • 加载数据
      • 数据预处理
      • 生成词汇表
    • 构建模型
      • 嵌入维度
      • 查询塔
      • 候选条目塔
      • 模型指标
      • 损失函数
      • 定义双塔召回模型
    • 训练和评估
      • 创建模型实例
      • 缓存数据
      • 训练
      • 评估
    • 预测
    • 导出和加载模型
  • 结尾

学习笔记

Tensorflow 2.12 智能电影推荐系统搭建学习笔记~

Tensorflow是谷歌开源的机器学习框架,可以帮助我们轻松地构建和部署机器学习模型。这里记录学习使用tensorflow-recommenders来构建一个电影推荐召回模型。
版本:python3.1.0、tensorflow2.12.0~

导入相关模块

# 导入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研究小组的经典数据集。它包含了一组用户对电影的评分,是推荐系统研究的重要数据集。

# 加载用户-电影评分数据
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)'}

数据预处理

先对数据进行处理,方便后续进行模型构建、训练、验证等。

# 数据处理,保留使用到特征,方便训练(这里保留用户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

你可能感兴趣的:(深度学习,tensorflow,人工智能,深度学习,推荐算法,python,机器学习,tensorflow2)