Слышали фразу “алгоритмы тиктока”? “Лента рекомендаций”? А “вам может быть интересно”?

Интернет нас объединил как не смогло объединить ничто до него в истории и разъединил так успешно, что мы этого и не замечаем, а лишь изредка удивляемся случайно зайдя не на “свой сегмент” - “и такие люди существуют…”.

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

Введение

Допустим, вы издатель Газеты “Еженедельник Юмора” (или какая ближайшая аналогия с мем видосами в тиктоке?). Вы сам себе редактор (кто выбирает что будет в выпуске газеты нарисовано) и сам себе печатник (доводите до сведения читателей свой кон-тент). К сожалению, у вас нет возможности подогнать свежий выпуск под каждого вашего читателя, поэтому вы вынуждены придумать “одну версию, которая понравится всем” (ну или хотя бы большинству).

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

  • довольны потребители контента - они заходят в приложение и видят то, что им интересно, решают какие-то свои задачи (что это задачи платформа может и не подозревать), проводят время и успешнее монетизируются (большинство контент-платформ монетизируются через продажу рекламы)

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

  • доволен бизнес - в чем бы не заключалась бизнес задача - в росте аудитории, в увеличении прибыли - везде задача сводится к подбору нужного контента для пользователя

В большинстве современных контент платформ, с которыми вы сталкивались, скорее всего реализована персонализация в том или ином виде. Идея персонализации довольно проста:

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

  2. у нас есть большое количество пользователей, которые открывают наше приложение каждый день, чтобы насладиться новой порцией контента - и их нельзя разочаровывать. Мы, как контент платформа, должны подобрать наиболее интересные посты / видео / статьи / что-угодно из того, что насоздавали наши криейторы (content creator) для этого пользователя именно в этот момент времени

  3. мы учли предпочтения пользователя - значит мы достигли персонализации

  4. Обычно предполагается, что персонализацию мы делаем не вручную (изучая каждую ночь чего же может захотеть пользователь завтра), а как-то дешевле (например, с помощью того самого искусственного интеллекта)

Так как же решается задача персонализации? Что из себя представляют те самые алгоритмы тиктока? “Почему мне показывают женщин в купальниках, хотя я такое не смотрю”?

Обстоятельства

Допустим, вы серьезный уважаемый профессионал и вас недавно наняли как эксперта по искусственному интеллекту в компанию "TipTop". Одноименное приложение для коротких видео сейчас переживает не лучшие времена, пользователи кажется не совсем довольны, они не проводят в приложении много времени потому что им быстро становится скучно. С другой стороны, к вам активно не приходят новые контент-криейторы, а старые иногда уходят. У них плохо получается продвигать свои творения, кто-то записывает уже свое сотое видео но все никак не пройдет планку в тысячу просмотров. CEO компании установил, что в приложении действительно не очень интересно зависать и, идя в ногу со временем, вручил вам задачу внедрить персонализированную ленту с применением искусственного интеллекта.

Что ж, приступим!

Зачем все это? Может не надо?

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

Исходная точка - baseline

Утверждается, что в текущей ленте TipTop нет (достаточной) персонализации - что это значит? Как она выглядит, из чего состоит? Вот несколько вариантов:

  • Рандом

    • пользователям показываются абсолютное случайные видео

    • пользователь свайпает в ленте вниз - мы достаем всю нашу коллекцию видео на платформе - выбираем случайное еще непросмотренное (хотя бы так) видео - показываем это видео пользователю

    Довольны ли пользователи? Скорее всего нет… Этот доведенный до крайности пример скорее для демонстрации.

  • Рандом поумнее

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

  • Свежие посты, или то же самое поумнее

    • показываем новые видео в порядке из появления

    • показываем случайное свежее видео из того, что пользователь еще не видел

  • Популярные посты (видео)

    • показываем пользователям видео, которые набрали больше ста тысяч просмотров

    Идея чуть получше, уже какой-то сигнал об успешности видео используем. Но такой успешности нельзя доверять полностью:

    • если имеют шанс показаться только видео, набравшие больше X просмотров, то как новое видео наберет хоть 1?

    • если показывать пользователям почти всегда только популярные видео - допустим они будут довольны, но у новых видео будет очень тяжелая жизнь до того как им повезет набрать нужное количество просмотров

    • если часто показывать пользователям новые видео, об успешности которых мы еще ничего не знаем - пользователи скорее всего будут недовольны (их лента становится менее персонализированной). То есть, нужен какой-то баланс

    • скорее всего, лента нашего приложения станет однообразной - почти как газета “Еженедельник Юмора”, ведь там тоже пытались показать лучшее из лучшего?

    • а что если пользователи у нас … разные? Допустим одна группа любит видео с шиншиллами, а другая - про охоту. И допустим, что вторая группа превосходит по размеру и составляет большую часть аудитории нашего приложения. Высоки шансы, что вместо шиншилл любителю домашних животных мы покажем кадры, которые он не собирался видеть.

  • Другие эвристики - ручные правила

    Очевидно, разработчики TipTop не самые глупые люди и у них есть определенное видение того, как понять интересы пользователя (и соответственно, им следовать). Допустим, разработчик 1 долго анализировал поведение наших пользователей и обнаружил, что мужчины в среднем дольше смотрят видео с участием женщин нежели мужчин. И реализовал небольшой ручной алгоритм, который с более высокой вероятностью покажет мужчине видео с участием противоположного пола. Или разработчик 2 заметил, что люди старшего возраста чаще пропускают видео с мемами - и внес изменения в алгоритм подбора, чтобы видео с мемами не предлагались если возраст пользователя выше некоторого порога.

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

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

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

    • генерировать гипотезы вручную дорого. Создание нового эвристического правила начинается с выдвижения гипотезы. Гипотеза или выдумана автором, или появилась в результате анализа каких-то данных (например поведения пользователей в приложении). Выдуманные гипотезы зачастую оказываются неверны, а анализировать вручную данные хоть и полезно, но долго, а соотвественно и дорого.

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

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

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

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

А может просто спросить? Явная персонализация

Мы пытаемся понять предпочтения наших пользователей. А почему бы не спросить у них это прямо?

Продолжая аналогию с нашим контент-магазином, такой подход мог бы выглядеть так: Приходит клиент в магазин, а наш консультант с порога встречает: “Привет! Могу вам чем-нибудь помочь Каких видео хочется посмотреть?”. Подход в целом очень осмысленный, однако могут возникнуть некоторые проблемы:

  1. Пользователи не хотят отвечать

    Известно, что идеальный для пользователя продукт состоит из единственной большой кнопки “сделать хорошо”. И делает хорошо. А мы тут какими-то вопросами мучаем своих пользователей. Чем меньше пользователю нужно совершить действий - тем лучше. Иначе клиенты могут разбежаться.

  2. Предпочтения меняются

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

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

    • можно придумать какое-то решение этой проблемы - например периодически перезадавать этот вопрос пользователю. Но снова: честность, полнота, желание отвечать на вопросы от приложения…

  3. Пользователи сами не знают чего хотят

    На самом деле конечно знают: на вопрос “нравится ли тебе вот этот видос?” пользователь знает точный ответ (ну почти всегда). А вот вопрос “привет! а какое видео ты хочешь прямо сейчас увидеть?” уже гораздо сложнее.

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

Искусственный интеллект

  • хорошо, не будем спрашивать у пользователя чего он хочет, раз он и сам не знает

  • но и не будем за пользователя решать чего он хочет заранее - не будем городить эвристики

Позволим пользователю вести себя обычно.

На примере контент-консультанта: заходит клиент в наш магазин и сам смотрит товары, а консультант молча за ним следит. Пользователь ведет себя как обычно, а консультант следит и пытается в голове построить карту предпочтений пользователя (обучиться на поведении пользователя). Только между обычным магазином и нашим приложением есть разница: в магазине обычно можно посмотреть весь товар (или достаточное разнообразие) на полках, а в приложениях с короткими видео лента обычно состоит или из одного видео в один момент времени (как в TikTok), или из небольшого количества отобранных видео (как в explore вкладке Instagram). То есть, это больше похоже на такой сценарий: приходит пользователь в магазин, а ему консультант показывает один или несколько видео (выбранных как-то, об этом попозже) и следит за реакцией пользователя. Допустим пользователь может поставить лайк - консультант постарается выбирать больше таких видео, дизлайк - меньше.

Здесь возникает два вопроса:

  1. Что показывать пользователю в самом начале?

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

  2. Как выучивать предпочтения пользователя?

    • мы позволили пользователю реагировать на то, что мы его показываем - теперь задача сводится к тому, чтобы эффективно адаптировать наш алгоритм в зависимости от реакции пользователя

    • говоря чуть более точно, мы хотим предсказывать какие видео будут пользователю интересны

    • тут на сцену выходит машинное обучение

Обучение предпочтениям

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

Проводя аналогию с контент-консультантом, давайте представим как бы происходил процесс “выучивания предпочтений” в голове у контент-консультанта, будь он настоящим человеком. Он бы показывал пользователю видео, следил за реакцией - и сопоставлял бы у себя в голове все знания об этом пользователе и полученную реакцию, пытаясь понять, что именно могло породить такую реакцию (что могло бы консультанту помочь реакцию в следующий раз угадать).

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

Машинное обучение

Когда мы говорим “машинное обучение”, почти всегда имеется в виду, что строится некоторая модель (которая должна что-то предсказывать) и дальше она учится (чтобы предсказывала хорошо).

Модель машинного обучения - это цифровая версия нашего контент-консультанта.

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

Как выглядит модель? Модель обычно выглядит как некоторый объект в языке программирования который мы выбрали. Или как математическая формула - об этом чуть позже.

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

Для начала разберем, что значит предсказывать.

В нашем случае, предсказывать означает “приносим пользователя - модель выдает топ 10 лучших видео которые пользователю понравятся (по ее мудрому мнению)”. Современные модели персонализации обычно строятся немного иным образом и более точно их процедура предсказания выглядит как

“приносим пользователя и видео - модель выдает прогноз (число, например вероятность) насколько пользователя заинтересует это видео”.

Дальше задача “выдай 10 лучших видео для пользователя” превращается в

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

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

Каким именно образом эти данные модель модель использует и как на их основе строит свой прогноз - зависит от модели.

Обучение: таргет

Дальше мы будем говорить про процесс обучения модели.

Мы хотим чтобы модель умела понимать предпочтения пользователя. “Понимать” - это термин непонятный, поэтому более точно - мы хотим чтобы модель умела предсказывать предпочтения. Выше мы сузили задачу до еще более примитивной - мы хотим чтобы модель умела предсказывать вероятность что пользователю будет интересно посмотреть вот это конкретное видео. Именно это и будем являться конкретной задачей, которая решается “обучением”.

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

По сути обучение модели - это процесс подбора формулы, прогнозы которой наиболее близки к таргету.

Таргет (цель, целевая переменная) - то, что мы хотим предсказывать - реакция, или, если точнее, степень заинтересованности пользователя. И это - число, как и прогноз нашей модели. Но как именно заинтересованность превращается в число?

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

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

  • Поэтому здесь приходится иногда придумывать менее очевидные способы понимания реакции - например помимо лайка положительной реакцией будем считать событие “пользователь досмотрел видео”. На практике используют разные таргеты, некоторые примеры:

    • оставил комментарий

    • репостнул

    • отправил кому-то в личных сообщениях

    • сохранил в избранное

Обучение: процесс

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

В нашем случае нейросеть - это по сути математическая формула. Обычно очень сложная, длинная, но в конце концов математическая формула, которая имеет входные аргументы (как аргумент x в известной записи f(x)) и выдает на выход число (в аналогичной записи y=f(x), y- выход формулы (прогноз), x- данные пользователя + видео, а функция f- сама нейросеть).

В общем случае процесс обучения можно себе представить как “собрать как можно больше данных, где есть пользователь + видео + таргет (реакция пользователя в виде числа)” и подогнать формулу так, чтобы ее прогнозы были как можно ближе к таргету.

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

Обычно перебирать формулы просто так неудобно и долго - поэтому используются параметризованные формулы. То есть еще более простое множество для перебора, теперь нужно просто перебирать параметры у одной и той же формулы. Тут можно использовать “градиентный спуск”.

  • Вы спросите, а где же искусственный интеллект? Ответа не этот вопрос нет, процесс обучения нейросети есть ни что иное как перебор параметров у заранее заданной формулы :) Появляется ли у этой большой сложной формулы интеллект (а что такое интеллект?) во время такого перебора - вопрос открытый.

Когда найдем лучшие возможные параметры для формулы - модель (по сути формула) готова.

Как происходит валидация модели (научилась модель угадывать реакцию пользователя или нет? насколько?):

  • собрали 67 дней данных

  • на 60 первых дня - обучились, подогнали формулу

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

Как выглядит персонализированная лента?

Все, модель обучена и готова к использованию. Как в итоге выглядит наша новая лента?

Заходит новый пользователь в TipTop - про него мы еще не особо много знаем (то есть модель плохо предсказывает интерес для такого пользователя, потому что данных мало, а формула опирается на данные про пользователя), поэтому показываем ему не очень персонализированные видео какое-то время. Обычно это:

  • рекомендации от модели, несмотря на то, что мы еще не уверены в предпочтениях пользователя - модель должна учиться на каких-то примерах, поэтому собрать некоторое количество ошибок в начале необходимо

  • чтобы помочь проблеме холодного старта - подмешиваем в выдачу разные эвристически отобранные видео, в которых мы более-менее уверены - популярные, популярные для региона пользователя, последние трендовые и т.д.

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

Как модель решает что показать?

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

Мы можем попросить модель спрогнозировать вероятность положительной реакции конкретного пользователя на конкретное видео из нашей платформы - это единственный интерфейс, который мы сами же и определили у модели. На другие запросы, например “а каким пользователям ты показываешь видео про готовку?”, нейросетевая модель явно и понятно отвечать не в состоянии. Достать явный “список правил” из модели нельзя. Можно анализировать ее другими косвенными способами, например:

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

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

  • другое. Интерпретируемость нейросетевых моделей еще не подробно изученная тема, проблема еще исследуется.

Так почему мне постоянно подсовывают то, что я не люблю?

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

Обычно, когда что-то идет не так, причина в одном из двух: мы решаем задачу плохо; или сама задача плохая.

  • Плохая задача. Как выглядит наша оптимизационная задача? Какой у нас таргет?

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

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

    Бессознательно - когда попросту точно не получается понять реакцию пользователя, и приходится придумывать прокси таргеты (заменители). То есть лайки, досмотры, длинные сессии и т.п. Здесь же возникают проблемы “кликбейта”, “вотчбейта” и прочее, на которые нужно обращать внимание и решать.

  • Плохо решаем задачу. Слабая модель, недостаточно данных.

    Строя модель описанным выше образом, мы предполагаем, что похожие пользователи (похожие по признаковому описанию - то есть имеющие одинаковый пол, возраст, устройство, историю просмотров, зафолловленных авторов и т.п.) похоже реагируют на видео. Например, если в платформе сидят десятки тысяч пользователей, которые очень похожи на вас (по мнению модели, а точнее по признаковому описанию пользователя, над которым поработали разработчики) и все они очень любят видео про китайскую кухню, то, даже если вы очень холодно относитесь к китайской кухне - велик шанс что вам будут продолжать ее предлагать. Здесь или недостаточно точное / подробное признаковое описание, или само предположение неверно. А пока вас, к сожалению, никак не отличить от других пользователей и придется узнавать новинки китайской кухни.

Заключение

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

Спасибо за внимание.

Комментарии (1)


  1. Wadzhio
    00.00.0000 00:00

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