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

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

Модель трансформаторов была представлена ​​в этой статье: Внимание - все, что вам нужно, а затем использовалась в различных успешных проектах, таких как BERT: Предварительное обучение глубоких двунаправленных трансформаторов. Доказано, что он лучше и быстрее, чем LSTM и GRU в домене NLP. Архитектура модели на основе преобразователя может быть применена и к рекомендательным приложениям, но проблемы с рекомендациями немного сложнее, чем область NLP, поэтому ее необходимо адаптировать в соответствии с потребностями бизнеса. Поэтому вместо того, чтобы предсказывать следующее слово на основе прошлой последовательности слов, в Scribd мы заинтересованы в предсказании того, что пользователь хотел бы прочитать следующим, на основе богатой истории взаимодействия с пользователем с несколькими типами документов и несколькими типами взаимодействий, где позиция в последовательность и относительное время являются важными факторами.

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

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

Модель Архитектура

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

Уровень внедрения и объединения входных данных: -

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

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

Слой кодировщика Transformer: -

Слой кодировщика объединяет все последовательности взаимодействий с использованием самовнимания, за которым следует сеть прямого распространения и нормализация. Мы обнаружили, что 2 энкодера и 1 головка достаточно для настройки гиперпараметров.

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

Функция оптимизации: -

Пользователи Scribd могут взаимодействовать по-разному, например читать книги, слушать аудиокниги или подкасты, делать закладки, загружать или оценивать книги, перемещаться, искать и т. Д. После тщательного анализа влияния на бизнес мы решили оптимизировать модель только для нескольких важных показателей взаимодействия, таких как чтение с определенным порогом чтения, закладкой, загрузкой и т. д. Чтобы упростить задачу многозадачного обучения, мы приняли одинаковые веса для всех этих показателей. Это свело проблему MTL к классификации для первой фазы. На более позднем этапе мы собираемся настроить веса для нескольких типов взаимодействия.

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

Обслуживание с использованием встроенных пользователей и элементов: -

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

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

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

Тренировочные данные и функции

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

Возможности. Для каждого взаимодействия в последовательности взаимодействий пользователя у нас есть 3 типа функций: функции взаимодействия, функции пользователя и функции элементов.

Функции взаимодействия - это время чтения, загрузка или нет, добавление в закладки или нет и т. Д., А пользовательские функции - это демографические данные пользователя, характеристики элемента - категория / таксономия, идентификатор элемента, язык и т. Д.

Проблемы и решения: -

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

Переменная длина последовательности взаимодействий: -

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

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

Использование относительного времени аналогично встраиванию позиций: -

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

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

Решение проблемы переобучения для опытных пользователей: -

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

Поддержка нескольких графических процессоров и функция оптимизации: -

Использование нескольких графических процессоров значительно ускорило время обучения, поэтому для обучения и прогнозирования мы использовали машину AWS с 8 графическими процессорами. Использование Multi-GPU просто, за исключением этапа оптимизации обучения модели. Именно эта документация по тензорному потоку помогла здесь. В настоящее время мы использовали потерю tf.keras.losses.SparseCategoricalCrossentropy, поскольку у нас менее 5 миллионов документов.

Рейтинг конвейера

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

  • Модель переобучается еженедельно.
  • Вложения пользователей и элементов создаются X ежечасно.
  • Первые N реквизитов генерируются после этапа предварительной фильтрации и ранжирования.

Полученные результаты

Используя внутреннюю платформу A / B-тестирования Scribd, мы провели эксперимент по сравнению существующей службы рекомендаций с новой моделью персонализации для создания домашней страницы подписчиков. Тест длился около месяца, в нем было назначено ›1 млн пользователей Scribd (испытателей или подписчиков). После тщательного анализа результатов мы увидели следующие статистически значимые (p

  • Увеличение количества пользователей, которые щелкнули по рекомендованному элементу
  • Увеличение среднего количества кликов на пользователя
  • Увеличение количества пользователей со временем чтения не менее 10 минут (в трехдневном окне)

Эти увеличения представляют собой значительное влияние на ключевые показатели эффективности бизнеса.

Следующие шаги

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

Спасибо за чтение! Мы надеемся, что вы нашли этот пост полезным и информативным.

Использованная литература: -

Вот несколько документов, на которые я ссылался в этой статье: