Авторы: Джон Тренкл, Джая Кавале и команда Tubi ML

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

Кто такой Туби и чем мы занимаемся?

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

В нашем последнем посте на Medium мы обсуждали, как Tubi использует машинное обучение. Напомним, что Tubi придерживается подхода, основанного на данных, и выполняет постоянную миссию по исследованию постоянно растущей вселенной машинного обучения, глубокого обучения, обработки естественного языка (NLP) и компьютерного зрения).

Бизнес-модель Tubi: реклама видео по запросу (AVOD)

Tubi использует бизнес-модель «Видео по запросу» (AVOD). Это похоже на услуги видео по запросу (SVOD) на основе подписки, за исключением того, что они бесплатны, потому что зрители видят минимальное количество рекламы. Это сильно влияет на то, какие проблемы мы решаем, и на то, как мы используем машинное обучение (ML) для их решения.

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

Что такое понимание контента?

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

Давайте посмотрим, какая информация у нас есть по названию отдельного фильма или телешоу. Как правило, для каждого фрагмента контента на Tubi у нас есть текстовые, видео- и графические данные из различных партнерских источников, таких как IMDB, Gracenotes и Rotten Tomatoes. У нас также есть различные дополнительные данные из таких источников, как Википедия и другие.

Данные, которые мы собираем, включают такую ​​информацию, как жанр, язык, год выпуска, синопсис сюжета и резюме, рейтинги, баллы на Rotten Tomatoes, отзывы пользователей, кассовые сборы и многое другое. Этот огромный объем данных не только помогает нам понять контент, но и понять предпочтения пользователей в отношении названий различных фильмов или телешоу. Одна из основных целей любой службы VOD - иметь релевантные заголовки, появляющиеся на главной странице пользователя. Если предложенные названия актуальны, зрители захотят его посмотреть и вернутся, чтобы узнать больше.

Как мы используем эти данные?

Есть несколько основных способов использования этих данных для создания лучшего контента для наших пользователей.

Решение, какие фильмы или телешоу покупать

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

  1. Определите относительную меру исторической эффективности всех игр, которые когда-либо играли на Tubi. Установите порог на желаемом уровне, чтобы получить зависимую переменную.
  2. Используйте все метаданные и вложения для шоу в качестве независимых переменных.
  3. Используйте моделирование бинарной классификации, чтобы предсказать, какие заголовки будут наиболее эффективными.
  4. Оцените все заголовки в нашей базе данных, используя эту модель.
  5. Оцените их по уверенности в том, что они хорошие исполнители.

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

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

Некоторые из приложений, которыми занимается Project Spock, можно увидеть на этом рисунке:

Платформа Spock для понимания контента

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

Project Spock поддерживает платформу для приема, предварительной обработки и очистки данных. Данные поступают из собственных и сторонних источников. После приема данных они проходят несколько этапов очистки. Предварительная обработка данных - важный шаг в машинном обучении, особенно для НЛП. Помимо очистки данных с помощью типичных алгоритмов предварительной обработки, таких как выделение и удаление стоп-слов, знаков препинания, HTML-тегов, эмодзи и чисел, мы также должны очищать пользовательский контент, например обзоры. Одна из проблем с обзорами заключается в том, что они могут содержать грамматические ошибки и часто могут отражать только мнение пользователей, например «Я ненавидел этот фильм», без каких-либо повествовательных аспектов. Для некоторых случаев использования, таких как определение, может ли определенный сегмент аудитории быть интересен заголовком, сигнал настроения может быть усилен. Для других приложений, таких как поиск, этот тип текста не имеет значения.

Команда машинного обучения Tubi считает, что не существует единого алгоритма, представления или их комбинации, которые были бы лучшим решением для всех задач - высокоуровневая интерпретация Теорема об отсутствии бесплатного обеда . В этом ключе Project Spock стремится поддерживать широкий спектр составляемых функций - как семейства вложений, так и необработанные метаданные и показатели ценности - чтобы повысить вероятность нахождения надежных решений наших бесчисленных проблем с помощью процесса открытие. Платформа поддерживает множество встраиваний, обеспечивающих различные варианты использования продукта. Вложения - это жизненная сила современного НЛП, заслуживающая отдельного раздела.

Подробнее о встраивании

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

Векторы слов - наиболее распространенные представления, встречающиеся в задачах НЛП. Одним из простейших представлений является создание актуального вектора: словаря, который создает длинный вектор с одним слотом для каждого слова. В этом случае одно слово представляет собой длинный вектор с «1» в назначенном ему слоте, а остальные - с «0». Тогда предложение представляет собой вектор с «1» для каждого слота слова. Это редкое представление со многими ограничениями. Одно большое ограничение - это проклятие размерности. Длина вектора линейно масштабируется с длиной словаря. Другая проблема состоит в том, что семантика теряется в представлении. Слова, которые могут быть близки по смыслу, не близки в векторном представлении.

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

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

Кроме того, хорошо известны геометрические свойства пространств вложения для завершения аналогий, таких как знаменитый «Мужчина для женщины, как король для ______». Давайте посмотрим на что-то подобное при встраивании на основе Doc2Vec, где векторы представляют фильмы. В приведенных ниже примерах показано добавление вложений и ближайшего заголовка после добавления. Мы видим очень интересные закономерности встраивания дополнений, заставляя нас поверить в то, что вложения фиксируют семантические отношения между заголовками.

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

Хотя многие из этих подходов изначально были реализованы и разработаны в чистом коде C, сегодня модули существуют на других языках и фреймворках, включая PyTorch. Таким образом, можно работать в единой согласованной экосистеме, исследуя широту и глубину алгоритмической области. Это не, чтобы сказать, что каждый из этих модулей является лучшим в своем классе - вызывая NFL - но многие из них, а остальные обычно достаточно хороши для поддержки экспериментов.

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

PyTorch поддерживает создание многих из этих типов вложений вместе с предварительно обученными моделями, что чрезвычайно полезно, поскольку всегда необходимо выполнять некоторый уровень тонкой настройки или настройки для своей области. Мы также используем Hugging Face, который обеспечивает доступ к современным моделям НЛП через PyTorch.

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

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

Создание специализированного внедрения с помощью PyTorch

Давайте рассмотрим более конкретный пример того, как мы создаем специализированные вложения с помощью PyTorch. Хорошим примером создания глубокой нейронной сети с использованием PyTorch, которая выполняет две цели для варианта использования AVOD, является то, что мы называем Genre Spectrum. Вкратце, модель Genre Spectrum Model разработана Tubi, чтобы переварить потенциально многочисленное и субъективное распределение жанров по названиям и дать пару полезных продуктов:

  1. Карта до четырех жанров, отражающих суть названия, ранжированных с весом, который указывает, насколько объясняется каждым жанром. Это пропорции, и в сумме они равны 1. Например, {action: 0.45, western: 0.35, adventure: 0.2}
  2. Пространство для встраивания, которое можно использовать для отражения целостной сущности жанра для последующих задач моделирования.

Предпосылка состоит в том, что жанры являются непрерывными и не дискретными, и нам надлежит поддерживать несколько представлений, которые могут соответствовать различным вариантам использования, с которыми мы сталкиваемся. На следующем графике показано встраивание Genre Spectrum, спроецированное в 2D с помощью UMap.

Чтобы построить модель Genre Spectrum, мы используем наш Embeddings Menagerie, который представляет собой настоящую сокровищницу независимых переменных. Задача обучения предсказанию жанра - это многоклассовая задача, состоящая из нескольких ярлыков. То есть каждому заголовку назначается один или несколько жанров из небольшого набора, и цель задачи - предсказать, какие классы описывают заголовок. Зависимая переменная выглядит так:

Независимые переменные выбираются из «Встраиваемого зверинца» и фокусируются на функциях, которые должны иметь подобие жанров названия. Контекстные векторы различных типов из Doc2Vec и BERT очень эффективны на этом фронте, как и приведение типов и другие метаданные, отражающие суть заголовка. Таким образом, записи для обучения выглядят так:

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

Для наших целей задача сформулирована как мультиклассовая классификация и использует функцию потерь MultiLabelSoftMarginLoss. Самое интересное, что мы делаем, - это использование объекта Dataset для локализации нескольких методов регуляризации в мини-пакетном построении, чтобы максимизировать полезность наших данных. Чтобы сосредоточиться на одном аспекте нашего обучения, мы предполагаем, что линейные комбинации членов одного и того же класса, вероятно, также будут членами этого класса. Итак, мы определяем переменную, которая указывает, какая часть записей в мини-пакете должна быть искусственными комбинациями, а не фактическими записями - для отдельного заголовка. На практике это позволяет нам иметь практически бесконечное количество записей для обучения. Таким образом, мы минимизируем возможность запоминания или чрезмерной подгонки набора данных, а также обеспечиваем динамический баланс распределений классов. Единственным недостатком является то, что мы не можем экстраполировать эффективно и выдвигать гипотезы о вещах, которые мы не видели. Однако на практике мы обнаружили, что тренировка 100% комбо дает одни из лучших результатов. Кроме того, мы также можем добавить шум, размеры выпадения и случайным образом возмущать зависимые переменные (случайным образом удаляя или добавляя жанры), каждая из которых может сделать сетевые прогнозы более надежными.

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

Оставайтесь с нами, чтобы узнать больше

В заключение мы рассказали вам все о том, как Tubi использует PyTorch для поддержки Content Understanding, особенно для создания набора функций, которые мы называем Встраивание зверинца. Дальнейший путь приведет нас к графам знаний, чтобы облегчить более структурированное представление фактов, состоящих из сущностей, отношений и семантических описаний. Графы знаний позволяют интуитивно и выразительно моделировать большой объем информации. По мере того, как НЛП продолжает развиваться, оно может помочь нам в будущих приложениях, таких как объединение объектов интереса - фильмов, сериалов, звезд, персонажей, жанров и других существительных - в мире фильмов и телешоу, и позволяет нам сравнивать их в прямой путь.

В будущих публикациях мы более подробно рассмотрим другие аспекты машинного обучения на Tubi. Быть в курсе! Если вы хотите узнать больше, подпишитесь на PyTorch на Medium.