专栏首页深度学习框架TensorFlow Recommenders: Quickstart
原创

TensorFlow Recommenders: Quickstart

In this tutorial, we build a simple matrix factorization model using the MovieLens 100K dataset with TFRS. We can use this model to recommend movies for a given user.

Import TFRS

from typing import Dict, Text
​
import numpy as np
import tensorflow as tf
​
import tensorflow_datasets as tfds
import tensorflow_recommenders as tfrs

Read the data

# Ratings data.
ratings = tfds.load('movielens/100k-ratings', split="train")
# Features of all the available movies.
movies = tfds.load('movielens/100k-movies', split="train")
​
# Select the basic features.
ratings = ratings.map(lambda x: {
    "movie_title": x["movie_title"],
    "user_id": x["user_id"]
})
movies = movies.map(lambda x: x["movie_title"])

Build vocabularies to convert user ids and movie titles into integer indices for embedding layers:

user_ids_vocabulary = tf.keras.layers.experimental.preprocessing.StringLookup(mask_token=None)
user_ids_vocabulary.adapt(ratings.map(lambda x: x["user_id"]))
​
movie_titles_vocabulary = tf.keras.layers.experimental.preprocessing.StringLookup(mask_token=None)
movie_titles_vocabulary.adapt(movies)

Define a model

We can define a TFRS model by inheriting from tfrs.Model and implementing the compute_loss method:

class MovieLensModel(tfrs.Model):
  # We derive from a custom base class to help reduce boilerplate. Under the hood,
  # these are still plain Keras Models.
​
  def __init__(
      self,
      user_model: tf.keras.Model,
      movie_model: tf.keras.Model,
      task: tfrs.tasks.Retrieval):
    super().__init__()
​
    # Set up user and movie representations.
    self.user_model = user_model
    self.movie_model = movie_model
​
    # Set up a retrieval task.
    self.task = task
​
  def compute_loss(self, features: Dict[Text, tf.Tensor], training=False) -> tf.Tensor:
    # Define how the loss is computed.
​
    user_embeddings = self.user_model(features["user_id"])
    movie_embeddings = self.movie_model(features["movie_title"])
​
    return self.task(user_embeddings, movie_embeddings)

Define the two models and the retrieval task.

# Define user and movie models.
user_model = tf.keras.Sequential([
    user_ids_vocabulary,
    tf.keras.layers.Embedding(user_ids_vocabulary.vocab_size(), 64)
])
movie_model = tf.keras.Sequential([
    movie_titles_vocabulary,
    tf.keras.layers.Embedding(movie_titles_vocabulary.vocab_size(), 64)
])
​
# Define your objectives.
task = tfrs.tasks.Retrieval(metrics=tfrs.metrics.FactorizedTopK(
    movies.batch(128).map(movie_model)
  )
)

Fit and evaluate it.

Create the model, train it, and generate predictions:

# Create a retrieval model.
model = MovieLensModel(user_model, movie_model, task)
model.compile(optimizer=tf.keras.optimizers.Adagrad(0.5))
​
# Train for 3 epochs.
model.fit(ratings.batch(4096), epochs=3)
​
# Use brute-force search to set up retrieval using the trained representations.
index = tfrs.layers.factorized_top_k.BruteForce(model.user_model)
index.index(movies.batch(100).map(model.movie_model), movies)
​
# Get some recommendations.
_, titles = index(np.array(["42"]))
print(f"Top 3 recommendations for user 42: {titles[0, :3]}")

代码地址: https://codechina.csdn.net/csdn_codechina/enterprise_technology/-/blob/master/NLP_recommend/TensorFlow%20Recommenders:%20Quickstart.ipynb

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 谷歌开源Tensorflow推荐器TFRS

    最近Google开源了基于Tensorflow的推荐器, 一个新的开源Tensorflow包。它的特点可以总结为下面四个:

    炼丹笔记
  • TensorFlow 2 quickstart for experts

    Use tf.data to batch and shuffle the dataset:

    XianxinMao
  • TensorFlow 2 quickstart for beginners

    Load and prepare the MNIST dataset. Convert the samples from integers to floatin...

    XianxinMao
  • 交叉学科与MIXLAB跨界社群 |Mix+人工智能 NO.43期

    作者设计了一个实验,让学生们来对一个椅子的设计来判断它是不是属于抄袭,然后根据学生提交的问卷,训练神经网络来判断一个设计的抄袭与否。

    mixlab
  • 隐性反馈的项目推荐(CS)

    项目推荐的任务是从大量的项目目录中为用户选择最好的项目。条目推荐通常是由内隐的反馈训练出来的,这些反馈包含了过去的积极行为。项目推荐的核心挑战是(1)如何从隐性...

    用户8054111
  • autoware quickstart

    https://github.com/CPFL/Autoware/blob/fix/update_requirements/docs/en/autoware-q...

    用户1908973
  • SignalR QuickStart

    SignalR 是一个集成的客户端与服务器库,基于浏览器的客户端和基于 ASP.NET 的服务器组件可以借助它来进行双向多步对话。 换句话说,该对话可不受限制地...

    张善友
  • SignalR QuickStart

    SignalR 是一个集成的客户端与服务器库,基于浏览器的客户端和基于 ASP.NET 的服务器组件可以借助它来进行双向多步对话。 换句话说,该对话可不受限制地...

    莫问今朝
  • 关于两阶段推荐系统中的组件相互作用

    由于其可扩展性,两阶段推荐器被当今许多最大的在线平台所采用,包括YouTube、LinkedIn和Pinterest。这些系统通过两个步骤产生推荐。(i)多个提...

    用户8436237
  • Building deep retrieval models

    In the featurization tutorial we incorporated multiple features into our models,...

    XianxinMao
  • Apache RocketMQ QuickStart

    RocketMQ作为一款分布式的消息中间件(阿里的说法是不遵循任何规范的,所以不能完全用JMS的那一套东西来看它),经历了Metaq1.x、Metaq2.x的发...

    一个会写诗的程序员
  • Tensorflow随笔(二)

    When training with methods such as tf.GradientTape(), use tf.summary to log the ...

    XianxinMao
  • WCF Data Service QuickStart

    开放数据协议(OData)是一个查询和更新数据的Web协议。OData是基于诸如HTTP和AtomPub的国际标准创建的,它提供了一个跨平台的数据通信的方案。O...

    张善友
  • 推出 TF Lite Task Library 接口,简化 ML移动端开发流程

    作者 | Lu Wang、Chen Cen、Arun Venkatesan 和 Khanh LeViet

    磐创AI
  • 2018-12-09基于AWS S3协议搭建个人云存储服务

    wget https://dl.minio.io/server/minio/release/linux-amd64/minio

    用户1733354
  • 实战派 | AI摸爬滚打之Win7+docker安装PaddlePaddle全纪实

    用户1107453
  • Kafka学习(一)-------- Quickstart

    截至2019年7月8日 最新版本为 2.3.0 2.12为编译的scala版本 2.3.0为kafka版本

    实时计算
  • TF.Learn 手写文字识别

    minist问题 计算机视觉领域的Hello world 给定55000个图片,处理成28*28的二维矩阵,矩阵中每个值表示一个像素点的灰度,作为feature...

    用户1332428
  • 从零开始构建Flink开发项目-Scala版

    今天要做一个Flink的测试,因此需要创建一个简单的Flink项目,于是找到了下面这种方式来创建一个Flink启动项目。

    kongxx

扫码关注云+社区

领取腾讯云代金券