Представляем Рекомендации с помощью TensorFlow

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


Автор: Мацей Кула и Джеймс Чен, Google Brain

От рекомендаций фильмов или ресторанов до координации модных аксессуаров и выделения сообщений в блогах и новостных статьях рекомендательные системы являются важным приложением машинного обучения, открывающим новые открытия и помогающим пользователям найти то, что они любят.

В Google мы потратили последние несколько лет на изучение новых методов глубокого обучения , чтобы обеспечить лучшие рекомендации с помощью многозадачного обучения, обучения с подкреплением, лучшего представления пользователей и целей справедливости. Эти и другие достижения позволили нам значительно улучшить наши рекомендации.

Сегодня мы рады представить TensorFlow Recommenders (TFRS)-пакет TensorFlow с открытым исходным кодом, который упрощает построение, оценку и обслуживание сложных рекомендательных моделей.

Построен с помощью TensorFlow 2.x, СКР позволяет::

СКР основан на TensorFlow 2.x и Keras, что делает его мгновенно знакомым и удобным для пользователя. Он модульный по своей конструкции (так что вы можете легко настроить отдельные слои и метрики), но все же образует единое целое (так что отдельные компоненты хорошо работают вместе). На протяжении всего проектирования СКР мы подчеркивали гибкость и простоту использования: настройки по умолчанию должны быть разумными; общие задачи должны быть интуитивно понятными и простыми в реализации; более сложные или пользовательские задачи рекомендаций должны быть возможны.

TensorFlow Recommenders является открытым исходным кодом и доступен на Github. Наша цель - сделать его эволюционирующей платформой, достаточно гибкой для проведения академических исследований и высоко масштабируемой для построения рекомендательных систем веб-масштаба. Мы также планируем расширить его возможности для многозадачного обучения, кросс-моделирования функций, самоконтролируемого обученияи современных эффективных приближенных вычислений ближайших соседей.

Пример: создание рекомендателя фильма

Чтобы получить представление о том, как использовать рекомендации TensorFlow, давайте начнем с простого примера. Во-первых, установите СКР с помощью pip:

!pip install tensorflow_recommenders

Затем мы можем использовать набор данных MovieLens для обучения простой модели рекомендаций по фильмам. Этот набор данных содержит информацию о том, какие фильмы смотрел пользователь, и какие оценки пользователи давали фильмам, которые они смотрели.

Мы будем использовать этот набор данных для построения модели, чтобы предсказать, какие фильмы пользователь смотрел, а какие нет. общим и эффективным шаблоном для такого рода задач является так называемая модель двух башен: нейронная сеть с двумя подмоделями, которые изучают представления для запросов и кандидатов отдельно. Оценка данной пары запрос-кандидат - это просто точечное произведение выходов этих двух башен.

Архитектура этой модели достаточно гибкая. Входные данные могут быть любыми: идентификаторы пользователей, поисковые запросы или временные метки на стороне запроса; названия фильмов, описания, синопсисы, списки главных актеров на стороне кандидата.

В этом примере мы будем сохранять простоту и придерживаться идентификаторов пользователей для башни запросов и названий фильмов для башни кандидатов.

Для начала давайте подготовим наши данные. Эти данные доступны в наборах данных TensorFlow.

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

Из всех функций, доступных в наборе данных, наиболее полезными являются идентификаторы пользователей и названия фильмов. В то время как СКР могут использовать произвольно богатые функции, давайте использовать их только для того, чтобы все было просто.

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

При использовании только идентификаторов пользователей и названий фильмов наша простая модель с двумя башнями очень похожа на типичную модель факторизации матрицы. Чтобы построить его, нам понадобится следующее:

  • Пользовательская башня, которая превращает идентификаторы пользователей в пользовательские вложения (высокомерные векторные представления).
  • Башня кино, которая превращает названия фильмов в вложения фильмов.
  • Потеря, которая максимизирует предсказанное сродство пользователя к фильму для часов, которые мы наблюдали, и минимизирует его для часов, которые не произошли.

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 для преобразования идентификаторов пользователей в целочисленные индексы, а затем сопоставляем их с изученными векторами встраивания:

 # 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)     ])

Модель фильма выглядит аналогично, переводя названия фильмов в вложения:

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

Как только у нас будут модели пользователей и фильмов, нам нужно будет определить нашу цель и ее оценочные показатели. В СКР мы можем сделать это с помощью 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)

Чтобы проверить рекомендации модели на вменяемость, мы можем использовать слой TFRS BruteForce. Слой BruteForce индексируется с предварительно вычисленными представлениями кандидатов и позволяет нам извлекать лучшие фильмы в ответ на запрос, вычисляя оценку запроса-кандидата для всех возможных кандидатов:

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, приблизительной библиотекой ближайших соседей.

Мы надеемся, что это дало вам представление о том, что предлагает TensorFlow Recommenders. Чтобы узнать больше, ознакомьтесь с нашими учебными пособиями или справочником по API. Если вы хотите принять участие в формировании будущего рекомендательных систем TensorFlow, подумайте о том, чтобы внести свой вклад! Мы также вскоре объявим о создании специальной группы по интересам TensorFlow Recommendations, приветствующей сотрудничество и вклад в такие темы, как внедрение обучения и распределенное обучение и обслуживание. Оставайтесь с нами!

Подтверждения

TensorFlow Recommenders - это результат совместных усилий многих людей в Google и за его пределами. Мы хотели бы поблагодарить Тяньшэн Яо, Синьян и, Цзи Ян за их основной вклад в библиотеку, а также Личань Хун и Эд Чи за их руководство и руководство. Мы также благодарны Чжэ Чжао, Дереку Чэну, Сагару Джайну, Александру Пассосу, Франсуа Шоле, Сандипу Гупте, Эрику ни и многим, многим другим за их предложения и поддержку этого проекта.


Источник: blog.tensorflow.org

Комментарии: