6.4 TensorFlow Recommenders 推荐系统库


文档摘要

6.4 TensorFlow Recommenders 推荐系统库 6.4 TensorFlow Recommenders (TFRS) 推荐系统库 TensorFlow Recommenders (TFRS) 是一个用于构建推荐系统的 TensorFlow 库。它旨在简化推荐模型的构建、评估和部署过程,提供了一系列预构建的组件和工具,使得研究人员和工程师能够更专注于模型的设计和优化,而非底层基础设施。 6.4.1 TFRS 的核心概念 TFRS 的核心围绕以下几个概念展开: Retrieval (召回): 从大规模候选集中快速筛选出用户可能感兴趣的一小部分物品。 Ranking (排序): 对召回阶段筛选出的物品进行精细排序,预测用户对每个物品的偏好程度。

6.4 TensorFlow Recommenders 推荐系统库

6.4 TensorFlow Recommenders (TFRS) 推荐系统库

TensorFlow Recommenders (TFRS) 是一个用于构建推荐系统的 TensorFlow 库。它旨在简化推荐模型的构建、评估和部署过程,提供了一系列预构建的组件和工具,使得研究人员和工程师能够更专注于模型的设计和优化,而非底层基础设施。

6.4.1 TFRS 的核心概念

TFRS 的核心围绕以下几个概念展开:

  • Retrieval (召回): 从大规模候选集中快速筛选出用户可能感兴趣的一小部分物品。

  • Ranking (排序): 对召回阶段筛选出的物品进行精细排序,预测用户对每个物品的偏好程度。

  • Query (查询): 代表用户的特征,例如用户 ID、浏览历史、人口统计信息等。

  • Candidate (候选): 代表物品的特征,例如物品 ID、类别、描述等。

  • Tasks (任务): 定义了模型的目标,例如预测用户是否会点击物品、评分预测等。

  • Metrics (指标): 用于评估模型性能的指标,例如 Precision@K、Recall@K、NDCG 等。

6.4.2 TFRS 的主要组件

TFRS 提供了以下主要组件,方便用户构建推荐系统:

  • Models: 预定义的推荐模型架构,例如矩阵分解、双塔模型等。

  • Layers: 构建模型的各种层,例如 Embedding 层、Dense 层等。

  • Tasks: 定义模型训练目标的类,例如 RetrievalTask、RankingTask 等。

  • Metrics: 评估模型性能的指标,例如 FactorizedTopK、NDCGMetric 等。

  • Datasets: 用于加载和预处理数据的工具。

6.4.3 构建推荐系统的流程

使用 TFRS 构建推荐系统通常遵循以下流程:

  1. 数据准备: 准备用户和物品的特征数据,并将其转换为 TensorFlow Dataset 格式。

  2. 模型定义: 选择合适的模型架构,并使用 TFRS 提供的组件构建模型。

  3. 任务定义: 定义模型训练的目标,例如 RetrievalTask 或 RankingTask。

  4. 模型训练: 使用准备好的数据训练模型。

  5. 模型评估: 使用评估指标评估模型性能。

  6. 模型部署: 将训练好的模型部署到生产环境。

6.4.4 代码实践:构建一个简单的双塔召回模型

下面是一个使用 TFRS 构建简单的双塔召回模型的代码示例。

import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers import tensorflow_recommenders as tfrs # 1. 数据准备 # 假设我们有用户和电影的数据,每个用户和电影都有一个 ID users = tf.constant(["42", "43", "44"]) movies = tf.constant(["The Shawshank Redemption", "The Godfather", "The Dark Knight"]) # 创建一个数据集 ratings = tf.data.Dataset.from_tensor_slices( {"user_id": users, "movie_title": movies} ) # 将数据集转换为字典格式 ratings = ratings.map(lambda x: { "user_id": x["user_id"], "movie_title": x["movie_title"] }) # 创建用户和电影的词汇表 user_ids_vocabulary = tf.keras.layers.StringLookup(mask_token=None) user_ids_vocabulary.adapt(ratings.map(lambda x: x["user_id"])) movie_titles_vocabulary = tf.keras.layers.StringLookup(mask_token=None) movie_titles_vocabulary.adapt(ratings.map(lambda x: x["movie_title"])) # 2. 模型定义 # 定义用户模型 class UserModel(tf.keras.Model): def __init__(self, embedding_dimension): super().__init__() self.user_embedding = tf.keras.Sequential([ user_ids_vocabulary, tf.keras.layers.Embedding(user_ids_vocabulary.vocabulary_size(), embedding_dimension) ]) def call(self, user_id): return self.user_embedding(user_id) # 定义电影模型 class MovieModel(tf.keras.Model): def __init__(self, embedding_dimension): super().__init__() self.movie_embedding = tf.keras.Sequential([ movie_titles_vocabulary, tf.keras.layers.Embedding(movie_titles_vocabulary.vocabulary_size(), embedding_dimension) ]) def call(self, movie_title): return self.movie_embedding(movie_title) # 3. 定义 TFRS 模型 class RecommenderModel(tfrs.models.Model): def __init__(self, embedding_dimension=64): super().__init__() self.user_model = UserModel(embedding_dimension) self.movie_model = MovieModel(embedding_dimension) self.task = tfrs.tasks.Retrieval( metrics=tfrs.metrics.FactorizedTopK( candidates=movies.batch(128).map(self.movie_model) ) ) def compute_loss(self, features, training=False): user_embeddings = self.user_model(features["user_id"]) movie_embeddings = self.movie_model(features["movie_title"]) return self.task(user_embeddings, movie_embeddings) # 4. 模型训练 # 创建模型实例 model = RecommenderModel() # 编译模型 model.compile(optimizer=tf.keras.optimizers.Adagrad(0.1)) # 训练模型 model.fit(ratings.batch(4096), epochs=3) # 5. 模型评估 # 创建评估数据 test_ratings = tf.data.Dataset.from_tensor_slices( {"user_id": ["42"], "movie_title": ["The Godfather"]} ).map(lambda x: { "user_id": x["user_id"], "movie_title": x["movie_title"] }) # 评估模型 model.evaluate(test_ratings.batch(4096), return_dict=True) # 6. 模型预测 # 创建一个索引 index = tfrs.layers.factorized_top_k.BruteForce(model.user_model) index.index_from_dataset( tf.data.Dataset.zip(( movies.batch(100), movies.batch(100).map(model.movie_model) )) ) # 获取推荐结果 _, titles = index(tf.constant(["42"])) print(f"Recommendations for user 42: {titles[0, :3]}")

代码解释:

  1. 数据准备:

    • 创建用户和电影的示例数据。

    • 使用 tf.data.Dataset 创建数据集。

    • 创建用户和电影 ID 的词汇表,用于将字符串 ID 转换为整数索引。

  2. 模型定义:

    • UserModelMovieModel 分别定义用户和电影的 Embedding 模型。

    • RecommenderModel 是一个 TFRS 模型,包含用户模型、电影模型和一个 RetrievalTask。

    • RetrievalTask 定义了模型的目标,即预测用户和电影之间的相关性。

    • FactorizedTopK 是一个评估指标,用于评估模型推荐 Top-K 个物品的准确性。

  3. 模型训练:

    • 使用 model.compile() 编译模型,指定优化器。

    • 使用 model.fit() 训练模型。

  4. 模型评估:

    • 使用 model.evaluate() 评估模型性能。
  5. 模型预测:

    • 使用 tfrs.layers.factorized_top_k.BruteForce 创建一个索引,用于快速查找与给定用户最相关的电影。

    • 使用 index() 方法获取推荐结果。

6.4.5 模型结构图

可以使用 mermaid 绘制模型结构图,更直观地了解模型架构。

图表解释:

  • 用户 ID 和电影标题分别输入到用户 Embedding 模型和电影 Embedding 模型。

  • Embedding 模型的输出是用户和电影的 Embedding 向量。

  • 计算用户和电影 Embedding 向量的点积,得到用户和电影之间的相关性得分。

  • 使用相关性得分计算损失函数。

  • 使用优化器更新用户和电影 Embedding 模型的参数,以最小化损失函数。

6.4.6 TFRS 的优势

  • 易于使用: TFRS 提供了高层次的 API,简化了推荐模型的构建过程。

  • 灵活性: TFRS 提供了各种预构建的组件,用户可以根据自己的需求自定义模型。

  • 可扩展性: TFRS 基于 TensorFlow 构建,可以轻松扩展到大规模数据集和模型。

  • 高性能: TFRS 使用 TensorFlow 的优化技术,可以实现高性能的训练和预测。

6.4.7 TFRS 的局限性

  • 学习曲线: 虽然 TFRS 简化了推荐模型的构建过程,但仍然需要一定的 TensorFlow 基础。

  • 定制化: 对于一些复杂的推荐场景,可能需要自定义 TFRS 的组件或构建自己的模型。

6.4.8 总结

TensorFlow Recommenders (TFRS) 是一个强大的推荐系统库,它提供了构建、评估和部署推荐模型所需的各种工具和组件。 通过使用 TFRS,研究人员和工程师可以更专注于模型的设计和优化,从而构建更有效的推荐系统。 本文提供了一个简单的双塔召回模型的代码示例,并解释了 TFRS 的核心概念、主要组件、优势和局限性。 希望能帮助读者快速入门 TFRS,并将其应用到实际的推荐系统中。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U