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

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

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

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

Системы рекомендаций

Системы рекомендаций делятся на две большие категории:

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

При наличии достаточного количества данных системы совместной фильтрации оказываются эффективными при рекомендации соответствующих элементов. Основная идея совместной фильтрации заключается в том, что если пользователю 1 нравятся художники A и B, а пользователю 2 нравятся художники A, B и C, то вполне вероятно, что пользователь 1 также будет интересоваться художником C.

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

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

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

Итак… Что такое Word2vec?

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

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

Модель Word2vec Skip-gram - это неглубокая нейронная сеть с единственным скрытым слоем, которая принимает слово в качестве входных данных и пытается предсказать контекст слов вокруг него в качестве выходных. Возьмем для примера следующее предложение:

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

W1 и W2 представляют матрицы весов, которые управляют весами последовательных преобразований, которые мы применяем к нашему входу для получения выходных данных. Обучение нейронной сети состоит из изучения значений тех весовых матриц, которые дают нам результат, наиболее близкий к предоставленным обучающим данным.

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

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

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

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

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

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

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

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

Используя Word2vec, мы преобразовали нашу задачу поиска песен, которые появляются в схожих контекстах, в математические числа, которые фиксируют эти локальные совпадения. Мы можем рассматривать веса как координаты в многомерном пространстве, где каждая песня представлена ​​точкой в ​​этом пространстве. Это пространство определяется десятками измерений, которые мы не можем легко визуализировать как людей, но мы можем использовать методы уменьшения размерности, такие как t-SNE, чтобы уменьшить многомерные векторы до двух измерений и построить их на график:

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

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

Как мы уже упоминали ранее, чем больше раз две конкретные песни появляются в схожих контекстах, тем ближе будут их координаты. Итак, для конкретной исходной песни мы можем найти k других похожих песен, взяв косинусное сходство между вектором этой исходной песни и всеми остальными, сохраняя при этом первые k которые имеют самые высокие косинусы (которые соответствуют самым низким углам и, следовательно, наиболее похожи). Например, косинусное сходство между Shayef El Baher Shou Kbir ливанской классической певицы Fayrouz и Bhebbak Ma Baaref Laych того же певца составляет 0,98, тогда как сходство между Shayef El Baher Shou Kbir и Saharna Ya Leil от Элиссы - современной ливанской поп-артистки - всего -0,09. В этом есть смысл, потому что люди, которые слушают классику, такую ​​как песни Файруза, вряд ли будут чередовать их с поп-музыкой Элиссы в своих очередях.

Еще один интересный способ, которым мы можем использовать векторы песен, - это сопоставить слушательские привычки пользователя с этим пространством и выработать рекомендации на основе этого. Поскольку теперь мы имеем дело с векторами, мы можем использовать простую арифметику для сложения векторов. Возьмем, к примеру, пользователя, который слушал три песни: In the Morning Китона Хенсона, Wasting My Young Years от London Grammar и Youth от Daughter. Что мы можем сделать, так это получить векторы, соответствующие каждой из этих трех песен, и усреднить их вместе, чтобы найти точку, которая равноудалена от всех трех песен. По сути, мы преобразовали список песен, которые слушал пользователь, в вектор координат, представляющий пользователя в том же векторном пространстве, в котором находятся наши песни. Теперь, когда у нас есть вектор, определяющий пользователя, мы можем использовать ту же технику, которая использовалась ранее, чтобы найти похожие песни с точками, близкими к пользователю. Следующая анимация помогает визуализировать различные этапы выработки этих рекомендаций:

Мы находим такие песни, как The Head and the Heart's Down in the Valley, Mykonos Fleet Foxes и Small Things Бена Ховарда, которые все тот же инди-фолк стиль, что и наши исходные песни. Помните, что мы сделали все это не на основе изучения акустики звука, а, скорее, просто посмотрев, какие песни слушали другие люди в связи с этими конкретными песнями.

Заключение

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

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

Хотите участвовать в подобных интересных историях? Набираем!