Как стать автором
Обновить

Комментарии 16

Всё хорошо и интересно, но пара мелочей, которая может быть также полезна и читателям:

  • Когда вводите какую-то новую математическую нотацию — явно прописывайте её перед использованием, все конечно догадываются, что !X — это дополнение множества Х, но лучше всего это явно прописать (у самого с этим проблемы);
  • По возможности использовать стандартные обозначения, например или для дополнения множества;
  • Сложные дроби в несколько этажей тяжело читать, возможно стоит попробовать \rfrac или другие функции для дробей.

P.S. Данные использованные в примерах где-нибудь доступны? Чтобы самим опробовать этот метод.
Спасибо за замечания, постараюсь учесть в будущем.

Данные использованные в примерах где-нибудь доступны?

К сожалению нет
Показать список похожих объектов — это довольно частый кейс.

В качестве начального baseline действительно разумно построить неперсонализированные похожести и показывать в блоке top-k. У вас сейчас так?

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

Причем подобный блок после персонализации продолжать маскировать под неперсонализированный, а профит от персонализации измерять на честном A/B.

В качестве начального baseline действительно разумно построить неперсонализированные похожести и показывать в блоке top-k. У вас сейчас так?

В блоке похожее (в карточке фильма) обычная неперсонализированная top-k похожесть.

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

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

Но мелкая персонализация присутствует. Блок похожее дублируется в плеере, но из него удаляются фильмы, которые пользователь уже просмотрел. В результате при непрерывном просмотре, пользователь не смотрит повторно то, что уже смотрел (в случае с музыкой и мультиками, такое, видимо, не работает). Кроме того мы учитываем смотрел ли пользователь платный контент.

Интересная статья, подталкивающая к изучению тонкостей вопроса. Спасибо.
Вопросик не по теме. А ivi.ru на Python по большей части реализована?
Сейчас основной язык разработки Python. Но также есть разработка на Go, php и JS
Приветствую. В целом неплохо, хотя это не метод ассоциаций.

Поясню на примере: возьмём поисковый запросы «скачать фильмы» и «смотреть фильмы». Очевидно, что «смотреть» и «скачать» часто используются со словом фильм, то есть — они совместны. Но слова «смотреть» и «скачать» крайне редко участвуют в одном и том-же запросе, но очень часто — в одинаковом окружении. Они — взаимозаменяемы, или, другими словами — ассоциированы.

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

Как бы я это сделал:

1. Выстроить статистику в виде фраз. Пользователь посмотрел несколько фильмов? получаем строку вида «название1 название2 название3». Для другого пользователя — «название1 название 5 название8» и т.д.
2. Обработать полученный текстовый корпус методами снижения размерности — например LSA или Word2Vec
3. Если использовать Word2Vec — то совместные фильмы получатся при использовании алгоритма bag of words (-nbow 0), а асооциированные — skipgrams (-nbow 1).

Преимущество подхода в частности в решении «банановой проблемы» и рекомендации пользователю редких, но очень похожих фильмов.
Фича технически интересна, а с точки зрения пользователя есть ли анализ, насколько успешна такая рекомендация (пользователь перешел по ссылке и посмотрел фильм)? Мне, например, в 95% хочется плеваться от рекомендаций в том же ivi.ru, поэтому уже давно не обращаю внимание на этот раздел. Это очень вероятно — субъективно, поэтому хотелось бы статистику увидеть.
Возможно когда-нибудь вынесем в отдельный пост. Сейчас эта информация является конфиденциальной.
Любимая тема и можно долго обсуждать особенности :)

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

[evil mode]
Другой интересный вопрос со стороны коммерции. Не всегда множество подсказанных фильмов и выгодных для проката фильмов совпадает.
[/evil mode]
Интересно узнать что вы делаете с «киноманами» когда множество рекомендаций и множество просмотренных фильмов совпадает.… Вопрос в том, как посчитать наиболее похожий фильм из другого кластера, когда между элементами есть пересечение только по самым общим параметрам вроде «жанра» или года издания.

Классный вопрос :). На деле у нас несколько рекомендателей (как персонализированных так и неперсонализированных). К каждому рекомендателю есть требования по количество возвращаемых рекомендаций и по минимальному значению веса рекомендации. Если рекомендатель A не набрал нужного количества рекомендаций, либо веса рекомендаций не прошли проверки, то система пытаемся получить рекомендации из рекомендателя B, C и т.д. Последним в каждой группе рекомендателей является рекомендатель-заглушка. Он отдает популярный контент разных жанров независимо от того смотрел пользователь его или нет. Таким образом система всегда возвращает рекомендации.

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

…, то система пытаемся получить рекомендации из рекомендателя B, C и т.д.

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

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

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


Пока все банально просто. Рекомендатели имеют свои приоритеты.Возможны два варианта:
  • рекомендатель с более высоким приоритетом ничего не нашел — тогда отрабатывает рекомендатель с менее высоким приоритетом
  • рекомендатель с более высоким приоритетом нашел что-то — тогда результат добирается объектами рекомендателя с менее высоким приоритетом


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


Пользователю достаточно посмотреть/оценить несколько фильмов, чтобы проблема холодного старта решилась, поэтому мы предлагаем ему самое популярное.
Книга по теме «Программируем коллективный разум», вторая глава про рекомендации.
>Так как фильм очень популярен и его смотрело много людей, то sim(x, y) будет стремиться к 1 почти для всех фильмов x.
Только для асимметричного варианта если взять столбец, а не строку.

Второй метод какой-то менее нормированный. Пусть a=x∩y, b=¬x∩y, тогда по последней формуле: sim(x,y)=a/b, а по несимметричной схожести: sim(y,x)=a/(a+b). Соответственно, во втором варианте не требуется(но ничего не мешает) по особенному относиться к случаю b=0(фильм популярный).

Отношение сходства симметрично, каковы преимущества отхода от симметрии?
Отношение сходства симметрично, каковы преимущества отхода от симметрии?

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

Соответственно, во втором варианте не требуется(но ничего не мешает) по особенному относиться к случаю b=0(фильм популярный).

Да, возможно стоит над этим задуматься.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий