TensorFlow Recommenders多任务学习指南:同时优化多个推荐目标
TensorFlow Recommenders多任务学习指南同时优化多个推荐目标【免费下载链接】recommendersTensorFlow Recommenders is a library for building recommender system models using TensorFlow.项目地址: https://gitcode.com/gh_mirrors/rec/recommendersTensorFlow Recommenders是一个使用TensorFlow构建推荐系统模型的库多任务学习是其强大功能之一能够帮助开发者同时优化多个推荐目标提升推荐系统的整体性能。为什么选择多任务学习在实际的推荐系统应用中往往存在多种丰富的用户反馈信号。例如电商平台可能会记录用户对商品页面的访问数量多但信号相对较弱、图片点击、加入购物车以及最终的购买行为甚至还包括购买后的评价和退货等信号。整合所有这些不同形式的反馈对于构建用户喜爱的系统至关重要这样可以避免系统为了优化某一个指标而牺牲整体性能。此外为多个任务构建联合模型可能比构建多个特定任务模型产生更好的结果。特别是当某些数据丰富如点击而某些数据稀疏如购买、退货、手动评价时联合模型可以通过迁移学习利用从数据丰富任务中学习到的表示来改进对数据稀疏任务的预测。多任务模型的关键组成部分多任务推荐系统有两个关键部分一是优化两个或多个目标因此有两个或多个损失二是在任务之间共享变量实现迁移学习。在本指南中我们将构建一个同时预测评分和电影观看情况的多任务模型。共享的用户和电影模型用户和电影模型与单任务模型类似通过嵌入层将用户ID和电影标题转换为嵌入向量user_model tf.keras.Sequential([ tf.keras.layers.StringLookup( vocabularyunique_user_ids, mask_tokenNone), # 考虑未知标记我们加1 tf.keras.layers.Embedding(len(unique_user_ids) 1, embedding_dimension) ]) movie_model tf.keras.Sequential([ tf.keras.layers.StringLookup( vocabularyunique_movie_titles, mask_tokenNone), tf.keras.layers.Embedding(len(unique_movie_titles) 1, embedding_dimension) ])多个任务定义第一个任务是评分任务目标是尽可能准确地预测评分tfrs.tasks.Ranking( losstf.keras.losses.MeanSquaredError(), metrics[tf.keras.metrics.RootMeanSquaredError()], )第二个是检索任务目标是预测用户会观看哪些电影tfrs.tasks.Retrieval( metricstfrs.metrics.FactorizedTopK( candidatesmovies.batch(128) ) )构建多任务模型模型架构图多任务推荐模型并行结构示意图展示了交叉网络和深度网络如何协同工作我们将所有组件整合到一个模型类中。由于有两个任务和两个损失需要确定每个损失的重要性通过为每个损失分配权重并将这些权重视为超参数。class MovielensModel(tfrs.models.Model): def __init__(self, rating_weight: float, retrieval_weight: float) - None: super().__init__() embedding_dimension 32 # 用户和电影模型 self.movie_model: tf.keras.layers.Layer tf.keras.Sequential([ tf.keras.layers.StringLookup( vocabularyunique_movie_titles, mask_tokenNone), tf.keras.layers.Embedding(len(unique_movie_titles) 1, embedding_dimension) ]) self.user_model: tf.keras.layers.Layer tf.keras.Sequential([ tf.keras.layers.StringLookup( vocabularyunique_user_ids, mask_tokenNone), tf.keras.layers.Embedding(len(unique_user_ids) 1, embedding_dimension) ]) # 用于预测评分的小型模型 self.rating_model tf.keras.Sequential([ tf.keras.layers.Dense(256, activationrelu), tf.keras.layers.Dense(128, activationrelu), tf.keras.layers.Dense(1), ]) # 任务定义 self.rating_task: tf.keras.layers.Layer tfrs.tasks.Ranking( losstf.keras.losses.MeanSquaredError(), metrics[tf.keras.metrics.RootMeanSquaredError()], ) self.retrieval_task: tf.keras.layers.Layer tfrs.tasks.Retrieval( metricstfrs.metrics.FactorizedTopK( candidatesmovies.batch(128).map(self.movie_model) ) ) # 损失权重 self.rating_weight rating_weight self.retrieval_weight retrieval_weight def call(self, features: Dict[Text, tf.Tensor]) - tf.Tensor: user_embeddings self.user_model(features[user_id]) movie_embeddings self.movie_model(features[movie_title]) return ( user_embeddings, movie_embeddings, self.rating_model( tf.concat([user_embeddings, movie_embeddings], axis1) ), ) def compute_loss(self, features: Dict[Text, tf.Tensor], trainingFalse) - tf.Tensor: ratings features.pop(user_rating) user_embeddings, movie_embeddings, rating_predictions self(features) # 计算每个任务的损失 rating_loss self.rating_task( labelsratings, predictionsrating_predictions, ) retrieval_loss self.retrieval_task(user_embeddings, movie_embeddings) # 使用损失权重组合它们 return (self.rating_weight * rating_loss self.retrieval_weight * retrieval_loss)特征交叉的重要性图特征交叉过程示意图展示了输入特征如何通过交叉操作生成更有意义的特征表示在多任务模型中特征交叉扮演着重要角色。如上图所示特征交叉通过将不同的输入特征进行组合能够捕捉到特征之间的交互关系生成更有表现力的特征表示从而提升模型对多个任务的预测能力。训练不同权重的多任务模型评分专用模型首先尝试一个只考虑评分的模型将评分权重设为1.0检索权重设为0.0model MovielensModel(rating_weight1.0, retrieval_weight0.0) model.compile(optimizertf.keras.optimizers.Adagrad(0.1)) model.fit(cached_train, epochs3)该模型在预测评分方面表现尚可RMSE约为1.11但在预测哪些电影会被观看方面表现不佳其top-100准确率几乎比专门训练用于预测观看情况的模型差4倍。检索专用模型接着尝试一个专注于检索的模型将评分权重设为0.0检索权重设为1.0model MovielensModel(rating_weight0.0, retrieval_weight1.0) model.compile(optimizertf.keras.optimizers.Adagrad(0.1)) model.fit(cached_train, epochs3)得到了相反的结果模型在检索方面表现良好但在预测评分方面表现不佳。联合模型最后训练一个为两个任务都分配正权重的模型model MovielensModel(rating_weight1.0, retrieval_weight1.0) model.compile(optimizertf.keras.optimizers.Adagrad(0.1)) model.fit(cached_train, epochs3)结果是一个在两个任务上都表现得与每个专用模型大致相同的模型。使用多任务模型进行预测我们可以使用训练好的多任务模型来获取训练后的用户和电影嵌入以及预测的评分trained_movie_embeddings, trained_user_embeddings, predicted_rating model({ user_id: np.array([42]), movie_title: np.array([Dances with Wolves (1990)]) }) print(Predicted rating:) print(predicted_rating)虽然在这个案例中联合模型没有显示出明显的准确性优势但多任务学习通常是一个极其有用的工具。当我们能够将知识从数据丰富的任务如点击转移到密切相关的数据稀疏任务如购买时我们可以期待更好的结果。快速开始多任务推荐如果你想快速开始使用TensorFlow Recommenders构建多任务推荐系统可以参考项目中的官方示例docs/examples/multitask.ipynb。通过这个示例你可以亲身体验多任务学习在推荐系统中的应用。首先你需要克隆仓库git clone https://gitcode.com/gh_mirrors/rec/recommenders然后按照示例中的步骤进行操作探索多任务学习的魅力构建更强大的推荐系统 【免费下载链接】recommendersTensorFlow Recommenders is a library for building recommender system models using TensorFlow.项目地址: https://gitcode.com/gh_mirrors/rec/recommenders创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2589682.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!