С момента нашего первого публичного релиза на HackerNews и по сей день люди, следящие за развитием Metarank, спрашивали рекомендации. Когда мы объясняли концепцию персонализированного вторичного реранжирования и то, как его можно использовать для персонализации различных типов контента, все продолжали просить рекомендации!

Теперь, спустя почти год после того поста на HN, мы рады сообщить, что Metarank больше не просто второстепенный реранкер. С 0.6.1 (да, рекомендации были выпущены в 0.6.0, но 0.6.1 содержит ценное исправление) Metarank может генерировать популярные элементы и похожие элементы виджеты.

Отказ от ответственности: это выпуск критических изменений. Если вы используете более старые версии Metarank, вам потребуется повторно импортировать данные в Redis, так как формат хранения изменился.

Рекомендации

В Интернете доступно несколько систем рекомендаций с открытым исходным кодом, так что же привносит в их состав Metarank?

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

Мы вывели подход Metarank к персонализированному ранжированию в рекомендации — не нужно думать, как использовать тот или иной алгоритм, как хранить данные и реализовывать различные пайплайны данных. Вы просто подключаетесь к API Metarank, отправляете ему свои данные, и он сделает все остальное.

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

Виджет популярных рекомендаций

Наверное, один из самых популярных виджетов, который можно встретить практически везде — от электронной коммерции до социальных сетей.

Настроить трендовый виджет можно с помощью следующего добавления в файл конфигурации Metarank:

models:
  trending-widget:
    type: trending
    weights:
      - interaction: click
        decay: 0.8 # optional, default 1.0 - no decay
        weight: 1.0 # optional, default 1.0
        window: 30d # optional, default 30 days
      - interaction: like
        decay: 0.9
        weight: 1.5
        window: 60d
      - interaction: purchase
        decay: 0.95
        weight: 3.0

Вы можете определить несколько взаимодействий, которые будут объединены в результирующую формулу для вычисления результирующего ранжирования. Параметр Weight определяет, насколько важным является определенное взаимодействие, а decay используется, чтобы сделать недавние взаимодействия более важными, чем старые.

После импорта ваших исторических данных и запуска Metarank отправка следующего запроса вернет 10 трендовых элементов на основе предоставленной конфигурации:

curl http://localhost:8080/recommend/trending-widget -d '{
  "count": 10,
  "user": "alice1"
}'

Виджет рекомендации похожих товаров

Виджет Похожие элементы можно использовать несколькими способами, в зависимости от того, как вы его настроите:

  • пользователи, которые смотрели это, также смотрели это
  • часто покупают вместе
  • Вам также может понравиться

И многие другие могут быть реализованы путем объединения различных событий взаимодействия:

models:
  similar-widget:
    type: als
    interactions: [click] # which interactions to use
    factors: 100 # optional, number of implicit factors in the model, default 100
    iterations: 100 # optional, number of training iterations, default 100

Виджет, который часто покупается вместе, можно сделать, используя interactions: [purchase] конфигурацию и комбинируя различные типы взаимодействия, чтобы получить разные результаты рекомендаций.

После импорта ваших исторических данных и запуска Metarank следующий запрос вернет 10 похожих элементов на основе предоставленной конфигурации:

curl http://localhost:8080/recommend/similar-widget -d '{
  "count": 10,
  "user": "alice1",
  "items": ["item1"]
}'

Предоставляя параметр items, вы можете контролировать, для какого элемента или элементов создается виджет. Например. если вы находитесь на странице корзины, содержащей несколько товаров, генерировать часто покупаемые товары и получать их через API так же просто, как:

models:
  similar-widget:
    type: als
    interactions: [click] # which interactions to use
    factors: 100 # optional, number of implicit factors in the model, default 100
    iterations: 100 # optional, number of training iterations, default 100
curl http://localhost:8080/recommend/similar-widget -d '{
  "count": 10,
  "user": "alice1",
  "items": ["item1", "item2", "item3", "item4"]
}'

За кулисами Metarank использует алгоритм совместной фильтрации Матричная факторизация для рекомендаций, основанный на Быстрой матричной факторизации для онлайн-рекомендаций с неявной обратной связью X.He, H.Zhang, MY.Kan и TS.Chua. Metarank вычисляет вложения для ваших сохраненных элементов на этапе начальной загрузки и при отправке событий метаданных элемента.

При вызове API для получения аналогичных рекомендаций Metarank выполнит поиск k-NN, чтобы получить элементы на основе рассчитанных вложений.

Ошибки

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

Как всегда, подробный журнал изменений можно найти на Странице журнала изменений нашей документации и в примечаниях к выпуску репозитория Github.

Что дальше?

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

Следите за новостями от нашей команды и дайте нам знать, если у вас есть какие-либо вопросы или проблемы в нашем канале Slack.

Мы также обеспечиваем полную адаптацию и постоянную корпоративную поддержку для Metarank. "Свяжитесь с нами для более подробной информации.