Оглавление

    Персонализация ленты развлекательного медиа

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

    Зачем персонализировать?

    Хронологические ленты в социальных сетях себя давно исчерпали. Вокруг море информации, и большая ее часть каждому из нас отдельно не интересна. «Усредненного человека» не существует. Cовременные медиа это прекрасно понимают, и потому двигаются в сторону персонализации контента. Такой подход позволяет сделать пользовательский опыт лучше, увеличить степень вовлечения и retention.

    Стандартные подходы: Коллаборативная фильтрация на основе факторизации матриц взаимодействия

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

    Чаще всего такой подход используют в e-commerce. На высоком уровне все выглядит так: пользователь явно или неявно оценил товары, алгоритм сравнил его оценки с оценками других пользователей и рекомендовал то, что понравилось им.

    В классической реализации такой модели есть существенный подводный камень: т.н. проблема «холодного старта». Когда пользователь только пришел к нам — мы не можем эффективно ему ничего рекомендовать. Нет истории — нет точности предсказаний.

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

    Чем такой подход может помочь медиа?

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

    Использование готовых решений

    Сегодня есть много неплохих open-source решений для рекомендательных систем для многих бизнес-областей. Рассмотрим их применимость.

    Подводные камни

    1. Жизненный срок рекомендаций

    Контент долго не живет. Уже через пару дней окажется, что над картинкой смеялся еще дед пользователя. Самые просматриваемые части ленты — посты за день и неделю. Поэтому важнее всего грамотно фильтровать наиболее свежий контент. У большинства коробочных решений есть бутылочное горлышко: модель необходимо переучивать, когда появляется новый контент и взаимодействия пользователей с ним. Для приложения, где постов в день могут быть сотни, а лайков и комментариев — бесчисленные тысячи, модель пришлось бы переобучать постоянно. А это занимает время. И чем больше данных, тем дольше. В реальном времени выдавать качественные рекомендации не выйдет.

    2. Проблема «холодного старта» решена лишь частично

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

    3. Сложно учитывать семантику

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

    И это даже не все проблемы.

    Посмотрим, как персонализируют контент социальные сети

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

    Twitter

    Гибридная модель, использующая:

    • атрибуты твита, такие как давность, наличие медиа, количество фактов взаимодействия (лайки, ретвиты)
    • история взаимодействия с автором
    • история взаимодействия пользователя

    Источник: How Twitter’s Feed Algorithm Works — As Explained by Twitter

    Facebook

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

    Источники: Official noteОписание алгоритмовChange notes

    VK

    Алгоритм ранжирования VK называется «умной лентой». Учитывается взаимодействие с автором, временные метки, формат контента и общая популярность.Помимо общего алгоритма ранжирования, сервис использует собственный продукт поиска и продвижения уникального популярного контента: Прометей.

    Источники: Умная лентаПрометей

    Yandex Zen

    Сам Zen — одна большая персональная лента. Здесь, как и в социальных сетях, используются алгоритмы матричного разложения (SVD). Здесь же анализ текста и визуального содержимого, а значит модель тоже гибридная.

    Источники Общее описаниеДетальное описание

    Что мы можем? Научить машину понимать мемы!

    Тот самый deep learning

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

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

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

    Реализация и технические подробности

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

    Учим нейросеть понимать мемы

    Мы хотим использовать предобученную для классификации изображений нейронную сеть, чтобы извлечь высокоуровневое числовое представление картинки (картинок, если их несколько, гифок или видео). Такое представление содержит в себе всю необходимую информацию для понимания абстракций, того что находится на изображении. Дополнительно производится распознавание текста, и при его наличии — перевод в векторное представление с помощью другой нейронной сети. Полученный вектор является числовым представлением текста, которое также захватывает семантику. Соединяя векторы признаков, мы получаем единое векторное представление мема. Это происходит без всякого дополнительного обучения.

    … и людей

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

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

    Чему учить? Учить давать оценку релевантности конкретного мема для конкретного пользователя. Архитектура сети выглядит так:

    Входа два: один для вектора признаков мема, второй для семантического вектора пользователя. Далее они объединяются и проходят через несколько слоев нелинейных операций. Выход один: число — оценка релевантности.

    Минимизируем функцию потерь

    Имея данные о том, с какими мемами какой пользователь взаимодействовал, можно научить нейронную сеть минимизировать BPR (Bayesian Personalized Ranking) функцию потерь. Что она из себя представляет?

    У нас есть пользователь, позитивный мем (который он лайкнул), негативный мем (который он видел, но не лайкнул). Функция потерь будет минимальной, когда на вход подаем пользователя и позитивный мем и максимальной, когда подаем пользователя и негативный мем. Таким образом сеть учится предсказывать релевантность постов. Под капотом она присваивает каждому посту числовой рейтинг релевантности.

    Используем историю на полную катушку

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

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

    Понимать мемы и рекомендовать интересные посты — не все, что может AI. Если внедрять искусственный интеллект, то почему бы не использовать его на полную?

    1. Поиск похожих мемов

    Что?

    Если пользователю нравится пост, он может нажать «Посмотреть похожие» и увидеть ранжированный по убыванию похожести список постов. Это альтернативный способ учета предпочтений каждого пользователя.

    Как?

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

    2. Поиск постов по тексту

    Что?

    Часто бывает, что мы хотим найти какой-то вполне определенный мем. О котором рассказали друзья или который хочется кому-то показать и т.д. Мы можем добавить поиск постов по тексту на картинках.

    Как?

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

    3. Проверка мемов на уникальность

    Что?

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

    Как?

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

    4. «Мировоззрение» и настроение комментариев

    Что?

    Добавим щепотку индивидуализации к профилю. Если помните, в Dungeons and Dragons все персонажи делились по шкале от Good до Evil и от Lawful до Chaotic. В более современных играх систему чаще упрощают до шкалы добрый/злой.

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

    Как?

    Задача оценки эмоционального окраса комментария весьма тривиальна. Это типичная для машинного обучения задача классификации (позитивный/негативный). Решается с помощью алгоритма анализа на основе нейронных сетей. Каждый комментарий вносит свой вклад в общую копилку репутации пользователя. Результат можно отображать в профиле.