Whatnot — это платформа для онлайн-покупок, позволяющая пользователям общаться с сообществами, чтобы покупать и продавать товары Funko Pop! к коллекционным карточкам, кроссовкам и многому другому! Частью того, что делает Whatnot таким захватывающим, является развлекательная эфемерная природа продукта. Прямые трансляции на Whatnot планируются заранее и длятся от 20 минут до 2 часов, а в крайнем случае и несколько дней! Помогать пользователям находить наиболее релевантные шоу и ведущих, которые им нравятся, — бесконечная цель команды Whatnot.

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

Модель рекомендации хоста прямой трансляции

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

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

В сочетании с желаемым представлением другими нашими основными критериями моделирования был выбор целевой функции, которая соответствовала бы нашему варианту использования. Из-за постоянно меняющегося характера прямых трансляций мы быстро обнаружили, что модели, оптимизирующие офлайн-производительность при размещении в рейтинге, такие как Precision and Recall @ K, NDCG, Hit Rate и т. д., не очень надежны в последовательных дневных запусках. Это произошло из-за высокой изменчивости регулярности хостов на платформе и графиков потоковой передачи. Офлайн-данные быстро становятся менее сопоставимыми с онлайн-данными в быстро меняющихся ситуациях, таких как наша, поскольку доступные кандидаты для ранжирования редко доступны таким же образом для обучения и вывода. Это контрастирует с традиционными сайтами электронной коммерции или контентными сайтами, где каталог не меняется относительно быстро. В конце концов мы решили, что модели, оптимизированные для производительности ROC AUC в автономном режиме, скорее всего, будут лучшим прокси для онлайн-производительности. По сути, модели, оптимизирующие ROC AUC, оценивают, ранжируются ли хосты, с которыми пользователь уже взаимодействовал, с хостами, с которыми пользователю еще предстоит взаимодействовать, таким образом изучая представление, коррелирующее с предпочтениями пользователей. Эта контрастная [1] попарная точка зрения интуитивно важна, когда список элементов для ранжирования чрезвычайно длинный или часто меняется. Учитывая, что многие хосты не транслируются одновременно, более важно иметь интуитивное ощущение, что шоу персонализированы, чем если бы точные слоты Top 8 были идеально упорядочены, но никакой контент не был бы использован сразу.

Мы исследовали несколько методов для достижения наших целей. Такие подходы включали различные разновидности SVD, включая timeSVD++[2], факторизацию регуляризованной матрицы с чередующимся методом наименьших квадратов (ALS-WRMF) [3], как в SparkML [4], вариационные автоэнкодеры (VAE) [ 5], модели последовательности, такие как скип-граммотрицательная выборка (SGNS), также известная как word2vec [6], а также решения закрытой формы, такие как EASE [7]. Существует также множество методов глубокого обучения с использованием графов и последовательностей, которые мы начали изучать, но решили вернуться к ним позже. Однако после исследования мы начали с приближений матричной факторизации для представления вложений пользователь-хост с использованием байесовского персонализированного ранжирования (BPR) [8] и его варианта парного весового приблизительного ранга (WARP) [9]. BPR — это испытанный подход со многими доступными реализациями [10][11]. Он также напрямую оптимизирует функцию правдоподобия, связанную с нашей оценочной метрикой. Первоначальная статья BPR отлично объясняет взаимосвязь между его потерями как пропорциональное приближение для ROC AUC. Я призываю вас прочитать больше там, если интересно. Затем возникает трудность, как построить набор обучающих данных и как справиться с разреженным характером парных положительных взаимодействий по сравнению с большим количеством неизвестных. Эта проблема немного облегчается, если у вас есть принципиальный способ оценить значение пар положительный-отрицательный, как в случае с WARP, и контролировать максимальное количество отрицательных выборок для каждой итерации обучения.

X(u,i,j) — предполагаемое моделью предпочтение пользователя для элемента i по сравнению с элементом j.

Развитие пользовательских предпочтений

Учитывая пользователя и его сигналы взаимодействия, мы можем рекомендовать хосты и, следовательно, шоу, с которыми, по нашему мнению, этот человек должен и будет взаимодействовать. Звучит здорово, правда!?! Хотя это будет работать из коробки, у него есть свои недостатки. Если вы задумаетесь о рекомендательных системах, с которыми вы взаимодействуете каждый день, мы интуитивно поймем, что наши вкусы и предпочтения меняются и развиваются с течением времени. Мы все были в такой ситуации, когда вы находитесь в приложении, и вы нарушили наш обычный шаблон, чтобы просмотреть случайный элемент или видеоклип. В следующий раз, когда вы войдете в это приложение, оно безостановочно рекомендует элементы, похожие на эту фривольную вещь, и вам жаль, что вы никогда не нажимали на эту ссылку! Это проявляется потому, что большинство этих моделей делают вывод о вашем вкусе как о взвешенной агрегации ваших прошлых взаимодействий.

Чтобы лучше понять эти развивающиеся предпочтения, мы можем рассматривать упорядоченные взаимодействия пользователя с хостом как набор последовательных векторных преобразований, известных как траектория. Если мы используем метод уменьшения размерности, такой как UMAP [11], мы можем визуально представить эти многомерные векторы внутри двумерного графика.

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

Мы можем провести линию в скрытом пространстве и аппроксимировать траекторию, заданную этими прошлыми продавцами. Темная черная точка — это встраивание пользователя, спроецированное в скрытое пространство для сравнения.

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

Выше наш пользователь, который начал с кроссовок, но перешел к винтажной одежде в течение 4 покупок у 3 продавцов.

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

Рельсы скрытой космической защиты

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

Другим способом предоставления рекомендаций может быть использование полной неявной истории транзакций, T. Один из подходов состоит в том, чтобы брать каждое взаимодействие пользователя с активным хостом и использовать представление хоста и его K упорядоченных ближайших соседей для генерации T x K кандидатов. Затем мы можем использовать механизм сортировки слиянием, основанный на алгоритме консенсуса голосования, для получения единого отсортированного списка. Это эквивалентно усреднению или усреднению веса внедрений хоста в качестве альтернативного представления внедрению изученного пользователя. У этого есть приятное свойство устойчивости к выбросам, если пользователь отклонился от своего обычного пути. Чувствительность к этому подходу заложена в выбранном вами механизме/весе голосования.

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

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

Еще не все

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

Если вы заинтересованы в решении подобных и многих других проблем, обращайтесь, мы нанимаем!