엔드 투 엔드 추천자 시스템

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")

# Select the basic features.
ratings = ratings.map(lambda x: {
  "movie_id": tf.strings.to_number(x["movie_id"]),
  "user_id": tf.strings.to_number(x["user_id"])
  })
movies = movies.map(lambda x: tf.strings.to_number(x["movie_id"]))

# Build a model.
class Model(tfrs.Model):

  def __init__(self):
    super().__init__()

    # Set up user representation.
    self.user_model = tf.keras.layers.Embedding(
    input_dim=2000, output_dim=64)
    # Set up movie representation.
    self.item_model = tf.keras.layers.Embedding(
    input_dim=2000, output_dim=64)
    # Set up a retrieval task and evaluation metrics over the
    # entire dataset of candidates.
    self.task = tfrs.tasks.RetrievalTask(
      corpus_metrics=tfrs.metrics.FactorizedTopK(
        candidates=movies.batch(128).map(self.item_model)
      )
    )

  def compute_loss(self, features: Dict[Text, tf.Tensor], training=False) -> tf.Tensor:

    user_embeddings = self.user_model(features["user_id"])
    movie_embeddings = self.item_model(features["movie_id"])

    return self.task(user_embeddings, movie_embeddings)

  model = Model()
  model.compile(optimizer=tf.keras.optimizers.Adagrad(0.5))

  # Randomly shuffle data and split between train and test.
  tf.random.set_seed(42)
  shuffled = ratings.shuffle(100_000, seed=42, reshuffle_each_iteration=False)

  train = shuffled.take(80_000)
  test = shuffled.skip(80_000).take(20_000)

  # Train.
  model.fit(train.batch(4096), epochs=5)

  # Evaluate.
  model.evaluate(test.batch(4096), return_dict=True)

메모장에서 실행
TensorFlow Recommenders는 추천자 시스템 모델을 빌드하기 위한 라이브러리입니다.
추천자 시스템을 빌드하는 전체 워크플로(데이터 준비, 모델 공식화, 학습, 평가 및 배포)에 도움이 됩니다.
Keras에 기반하며 복잡한 모델을 빌드하는 유연성을 제공하는 동시에 부드러운 학습 곡선을 갖추는 것을 목표로 합니다. API 문서에서 API 참조를 확인하세요.