0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

TensorFlow Recommenders开源软件包可简化构建、评估和应用推荐模型

Tensorflowers 来源:TensorFlow 作者:Maciej Kula 和 James 2020-10-21 10:54 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

文 /Maciej Kula 和 James Chen,Google Brain

推荐系统是机器学习的一大主要应用,能够根据用户偏好推送相关内容,比如推荐电影、餐厅、搭配时装首饰或筛选媒体信息流等。

Google 过去几年一直在探索新的深度学习技术,力求通过结合多任务学习、强化学习、提取更好的用户表征和构建公平性指标提供更好的推荐。这些努力和其他方面的进展大幅改善了我们的推荐效果。

今天,我们荣幸地推出 TensorFlow Recommenders (TFRS),这款开源 TensorFlow 软件包可简化构建、评估和应用复杂的推荐模型。

TensorFlow Recommenders (TFRS)
https://tensorflow.google.cn/recommenders

TFRS 使用 TensorFlow 2.x 构建,有助于:

构建和评估灵活的Candidate Nomination Model;

将条目、用户和上下文信息自由整合到推荐模型;

训练可联合优化多个推荐目标的多任务模型;

用 TensorFlow Serving 高效利用生成的模型。

TFRS 基于 TensorFlow 2.x 和 Keras,十分易于上手,在采用模块化设计的同时(您可以自定义每个层和评价指标),仍然组成了一个强有力的整体(各个组件可以良好协作)。在 TFRS 的设计过程中,我们一直强调灵活性和易用性:合理的默认设置、直观易行的常见任务以及更复杂或自定义的推荐任务。

TensorFlow Recommenders 现已在 GitHub 上开源。我们的目标是让其不断发展,能够灵活地进行学术研究,并以高度可扩展的方式构建全网推荐系统。我们还计划在多任务学习、特征交叉建模、自监督学习和最前沿 (SOTA)近似最邻近计算方面扩展其功能。

GitHub
https://github.com/tensorflow/recommenders

示例:构建电影推荐工具

让我们先用一个简单示例展现 TensorFlow Recommenders 的使用方法。首先,使用 pip 安装 TFRS:

!pip install tensorflow_recommenders

然后,我们可以使用 MovieLens 数据集训练一个简单的电影推荐模型。数据集所含信息包括用户观看了哪些电影以及用户对该电影的评分。

我们将使用这一数据集构建模型,预测用户已观看和未观看的电影。此类任务通常选择双塔模型:一个具有两个子模型的神经网络,分别学习 query 和 candidate 的表征。给定的query-candidate 对的得分 (score) 只是这两个塔的输出的点积。

这个模型架构相当灵活。query 塔的输入可以是:用户 ID、搜索关键词或时间戳;对于 candidate 侧则有:电影片名、描述、梗概、主演名单。

在此示例中,我们在 query 塔仅使用用户 ID,在 candidate 塔仅使用电影片名。

我们先来准备数据。数据可从 TensorFlow Datasets 获取。

import tensorflow as tf import tensorflow_datasets as tfds import tensorflow_recommenders as tfrs

# Ratings data. ratings = tfds.load("movie_lens/100k-ratings", split="train") # Features of all the available movies. movies = tfds.load("movie_lens/100k-movies", split="train")

在数据集的所有可用特征中,最实用的是用户 ID 和电影片名。虽然 TFRS 有多种可选特征,但为简单起见,我们只使用这两项。

ratings = ratings.map(lambda x: { "movie_title": x["movie_title"], "user_id": x["user_id"], }) movies = movies.map(lambda x: x["movie_title"])

只使用用户 ID 和电影片名时,我们简单的双塔模型与典型的矩阵分解模型非常相似。我们需要使用以下内容进行构建:

一个用户塔,将用户 ID 转换为用户 embedding 向量(高维向量表示)。

一个电影塔,将电影片名转换为电影 embedding 向量。

一个损失函数,对于观看行为,最大化预测用户与电影的匹配度,而未观看的行为进行最小化。

TFRS 和 Keras 为实现这一目标提供了大量基本模块。我们可以从创建模型类开始。在__init__方法中,我们设置一些超参数以及模型的主要组件。

class TwoTowerMovielensModel(tfrs.Model): """MovieLens prediction model.""" def __init__(self): # The `__init__` method sets up the model architecture. super().__init__() # How large the representation vectors are for inputs: larger vectors make # for a more expressive model but may cause over-fitting. embedding_dim = 32 num_unique_users = 1000 num_unique_movies = 1700 eval_batch_size = 128

第一个主要组件是用户模型:一组描述如何将原始用户特征转换为数字化用户表征的层。我们在这里使用 Keras 预处理层将用户 ID 转换为整数索引,然后将其映射到学习的 embedding 向量:

# Set up user and movie representations. self.user_model = tf.keras.Sequential([ # We first turn the raw user ids into contiguous integers by looking them # up in a vocabulary. tf.keras.layers.experimental.preprocessing.StringLookup( max_tokens=num_unique_users), # We then map the result into embedding vectors. tf.keras.layers.Embedding(num_unique_users, embedding_dim) ])

电影模型看起来很相似,能够将电影片名转换为 embedding 向量:

self.movie_model = tf.keras.Sequential([ tf.keras.layers.experimental.preprocessing.StringLookup( max_tokens=num_unique_movies), tf.keras.layers.Embedding(num_unique_movies, embedding_dim) ])

得到用户和电影模型后,就需要定义我们的目标和它的评估指标了。在 TFRS 中,可以通过 Retrieval任务完成这一点(使用 in-batch softmax loss):

# The `Task` objects has two purposes: (1) it computes the loss and (2) # keeps track of metrics. self.task = tfrs.tasks.Retrieval( # In this case, our metrics are top-k metrics: given a user and a known # watched movie, how highly would the model rank the true movie out of # all possible movies? metrics=tfrs.metrics.FactorizedTopK( candidates=movies.batch(eval_batch_size).map(self.movie_model) ) )

我们使用 compute_loss方法查看模型的训练过程:

def compute_loss(self, features, training=False): # The `compute_loss` method determines how loss is computed. # Compute user and item embeddings. user_embeddings = self.user_model(features["user_id"]) movie_embeddings = self.movie_model(features["movie_title"]) # Pass them into the task to get the resulting loss. The lower the loss is, the # better the model is at telling apart true watches from watches that did # not happen in the training data. return self.task(user_embeddings, movie_embeddings)

我们可以调用 Keras 的 fit 拟合此模型:

model = MovielensModel() model.compile(optimizer=tf.keras.optimizers.Adagrad(0.1)) model.fit(ratings.batch(4096), verbose=False)

要对模型的推荐进行 Sanity-Check(合理性检验),我们可以使用 TFRS BruteForce 层。BruteForce 层以预先计算好的 candidate 的表征进行排序,允许我们对所有可能的 candidate 计算其所在 query-candidate 对的得分,并返回排名最靠前的电影 (query):

index = tfrs.layers.ann.BruteForce(model.user_model) index.index(movies.batch(100).map(model.movie_model), movies) # Get recommendations. _, titles = index(tf.constant(["42"])) print(f"Recommendations for user 42: {titles[0, :3]}")

当然,BruteForce 层只适用于非常小的数据集。有关将 TFRS 与近似最邻近库 Annoy 结合使用的示例,请参阅我们的完整教程。

完整教程
https://tensorflow.google.cn/recommenders/examples/basic_retrieval#building_a_candidate_ann_index

我们希望这能让您对 TensorFlow Recommenders 的功能有所了解。要了解更多信息,请查看我们的教程或 API 参考。如果您想参与,一同推动 TensorFlow 推荐系统发展,请考虑贡献您的一份力量!我们还将在近期宣布成立 TensorFlow Recommendations 特殊兴趣小组 (SIG),欢迎大家就嵌入向量学习和分布式训练与应用等主题开展合作和做出贡献。敬请期待!

教程
https://tensorflow.google.cn/recommenders/examples/quickstart

API 参考
https://tensorflow.google.cn/recommenders/api_docs/python/tfrs/all_symbols

贡献您的一份力量
https://github.com/tensorflow/recommenders/

致谢

TensorFlow Recommenders 是 Google 以及其他组织的人员共同努力的成果。我们要感谢 Tiansheng Yao、Xinyang Yi、Ji Yang 对库的核心贡献,感谢 Lichan Hong 和 Ed Chi 的领导与指导。我们也要感谢 Zhe Zhao、Derek Cheng、Sagar Jain、Alexandre Passos、Francois Chollet、Sandeep Gupta、Eric Ni 等人对项目的建议和支持。

责任编辑:xj

原文标题:TensorFlow Recommenders 现已开源,让推荐系统更上一层楼!

文章出处:【微信公众号:TensorFlow】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器学习
    +关注

    关注

    66

    文章

    8541

    浏览量

    136236
  • 推荐系统
    +关注

    关注

    1

    文章

    44

    浏览量

    10403
  • tensorflow
    +关注

    关注

    13

    文章

    331

    浏览量

    61858

原文标题:TensorFlow Recommenders 现已开源,让推荐系统更上一层楼!

文章出处:【微信号:tensorflowers,微信公众号:Tensorflowers】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    元服务发布选择待发布软件包

    上传软件包并通过基础合法检查后,就可以从上传的版本中选择需要发布的软件包。 登录AppGallery Connect,点击“APP与元服务”。 选择要发布的元服务。 左侧导航选择“应用上架 &
    发表于 11-03 17:10

    在linux中使用env时如何下载软件包

    在windows的env中可以直接使用pkgs —update去下载软件包,Linux环境下这个指令好像不生效,那么Linux环境下的软件包下载指令是什么呢?
    发表于 10-11 09:23

    Pico Technology发布Python软件包pyPicoSDK

    近日,全球领先的基于 PC 的仪器供应商Pico Technology 官方发布了 pyPicoSDK,这是一款旨在简化 PicoScopes 应用的 Python 软件包。pyPicoSDK 在
    的头像 发表于 09-29 15:03 653次阅读

    如何使用menuconfig添加配置micro-ros软件包

    请问有没有最新的rtthread移植micro-ros移植使用教程,使用menuconfig添加配置micro-ros软件包
    发表于 09-25 06:37

    ENV不能添加rt_vsnprintf_full软件包怎么解决?

    想在bsp工程打印浮点数,结果找不到rt_vsnprintf_full软件包 问题复现 使用env-windows-v2.0.0 执行pkgs --upgrade 打开menuconfig找不到rt_vsnprintf_full软件包 使用/搜索找到
    发表于 09-24 06:04

    RT-thread studio添加新的软件包和新的文件出错怎么解决?

    从模板工程中,添加新的软件包时,点击同步scons配置至项目出现报错 另外,添加新创文件夹后,点击添加至构建,并没有效果 是否是需要新建Sconscript文件
    发表于 09-19 06:02

    请问RT-Thread Studio更新软件包为什么不成功?

    RT-Thread Studio更新软件包出现 MESSAGE cmd_package_update 462 WARNING Error message : local variable
    发表于 09-18 06:36

    ENV添加micropython软件包出现异常的原因?

    的python27.dll和platformenv_releasedenvtoolsPython27换一下。结果还是错误?。 没办法了,就行下一步添加micropython软件包。按照教程走出现了这个东西我直接
    发表于 09-12 08:06

    添加mbedtls软件包scons失败怎么解决?

    我按照官网的步骤来添加mbedtls的软件包,进行scons为什么会出现这个问题,我用的芯片是stm32f407vet6,在keil5里面编译倒是没问题 整个项目是基于lwip联网的,网络通讯
    发表于 09-10 06:17

    RT-Thread Studio更新软件包为什么不成功呢?

    RT-Thread Studio更新软件包出现 MESSAGE cmd_package_update 462 WARNING Error message : local variable
    发表于 05-27 06:53

    如何下载do on stack软件包AN3942SW.zip?

    有谁知道在哪里/如何下载 do on stack 软件包AN3942SW.zip
    发表于 03-21 06:33

    构建开源OpenVINO™工具套件后,模型优化器位于何处呢?

    构建开源OpenVINO™工具套件后,模型优化器位于何处?
    发表于 03-06 08:18

    可以使用OpenVINO™工具将中间表示 (IR) 模型转换为TensorFlow格式吗?

    无法将中间表示 (IR) 模型转换为 TensorFlow* 格式
    发表于 03-06 06:51

    构建开源OpenVINO™工具后,使用MYRIAD插件成功运行演示时报错怎么解决?

    构建开源OpenVINO™工具后,使用 MYRIAD 插件成功运行演示。 使用 CPU 插件运行演示时遇到错误: Cannot load library \'libarmPlugin.so
    发表于 03-05 09:57

    i.MX8M Yocto工程更新第三方软件包

    NXPi.MX8M系列依托于Yocto工程进行简单快捷的配置,可以方便增删第三方软件包以及更改内核、Uboot源码等。目前有些客户希望能够升级Yocto自带软件版本,这里就以我司
    的头像 发表于 02-12 08:11 1274次阅读
    i.MX8M Yocto工程更新第三方<b class='flag-5'>软件包</b>