Комментарии 16
Всё хорошо и интересно, но пара мелочей, которая может быть также полезна и читателям:
P.S. Данные использованные в примерах где-нибудь доступны? Чтобы самим опробовать этот метод.
- Когда вводите какую-то новую математическую нотацию — явно прописывайте её перед использованием, все конечно догадываются, что !X — это дополнение множества Х, но лучше всего это явно прописать (у самого с этим проблемы);
- По возможности использовать стандартные обозначения, например или для дополнения множества;
- Сложные дроби в несколько этажей тяжело читать, возможно стоит попробовать \rfrac или другие функции для дробей.
P.S. Данные использованные в примерах где-нибудь доступны? Чтобы самим опробовать этот метод.
+4
Показать список похожих объектов — это довольно частый кейс.
В качестве начального baseline действительно разумно построить неперсонализированные похожести и показывать в блоке top-k. У вас сейчас так?
По опыту скажу, что если добавить в такой блок персонализацию, можно получить заметный профит. Если совсем грубо, то можно например брать top-2k похожих (неперсонализированно), а из них брать k лучших для этого пользователя. Пробовали что-то подобное?
Причем подобный блок после персонализации продолжать маскировать под неперсонализированный, а профит от персонализации измерять на честном A/B.
В качестве начального baseline действительно разумно построить неперсонализированные похожести и показывать в блоке top-k. У вас сейчас так?
По опыту скажу, что если добавить в такой блок персонализацию, можно получить заметный профит. Если совсем грубо, то можно например брать top-2k похожих (неперсонализированно), а из них брать k лучших для этого пользователя. Пробовали что-то подобное?
Причем подобный блок после персонализации продолжать маскировать под неперсонализированный, а профит от персонализации измерять на честном A/B.
0
В качестве начального baseline действительно разумно построить неперсонализированные похожести и показывать в блоке top-k. У вас сейчас так?
В блоке похожее (в карточке фильма) обычная неперсонализированная top-k похожесть.
По опыту скажу, что если добавить в такой блок персонализацию, можно получить заметный профит. Если совсем грубо, то можно например брать top-2k похожих (неперсонализированно), а из них брать k лучших для этого пользователя. Пробовали что-то подобное?
Полноценную персонализацию в похожее, своеобразную сортировку фильмов по релевантности для пользователя, сознательно пока не добавлял. Но она есть в планах. Пока что только отдельный блок персональных рекомендаций. Возможно стоит попробовать скрестить его с неперсональными на A/B и сравнить, что и как.
Но мелкая персонализация присутствует. Блок похожее дублируется в плеере, но из него удаляются фильмы, которые пользователь уже просмотрел. В результате при непрерывном просмотре, пользователь не смотрит повторно то, что уже смотрел (в случае с музыкой и мультиками, такое, видимо, не работает). Кроме того мы учитываем смотрел ли пользователь платный контент.
0
Интересная статья, подталкивающая к изучению тонкостей вопроса. Спасибо.
Вопросик не по теме. А ivi.ru на Python по большей части реализована?
Вопросик не по теме. А ivi.ru на Python по большей части реализована?
0
Приветствую. В целом неплохо, хотя это не метод ассоциаций.
Поясню на примере: возьмём поисковый запросы «скачать фильмы» и «смотреть фильмы». Очевидно, что «смотреть» и «скачать» часто используются со словом фильм, то есть — они совместны. Но слова «смотреть» и «скачать» крайне редко участвуют в одном и том-же запросе, но очень часто — в одинаковом окружении. Они — взаимозаменяемы, или, другими словами — ассоциированы.
При переходе к названиям фильмов это будет звучать следующим образом — рекомендовать можно фильмы, которые пользователи часто смотрят вместе (совместные), или рекомендовать фильмы, похожие друг на друга (ассоциированные). В принципе, пользователю будет полезнее второй тип рекомендации.
Как бы я это сделал:
1. Выстроить статистику в виде фраз. Пользователь посмотрел несколько фильмов? получаем строку вида «название1 название2 название3». Для другого пользователя — «название1 название 5 название8» и т.д.
2. Обработать полученный текстовый корпус методами снижения размерности — например LSA или Word2Vec
3. Если использовать Word2Vec — то совместные фильмы получатся при использовании алгоритма bag of words (-nbow 0), а асооциированные — skipgrams (-nbow 1).
Преимущество подхода в частности в решении «банановой проблемы» и рекомендации пользователю редких, но очень похожих фильмов.
Поясню на примере: возьмём поисковый запросы «скачать фильмы» и «смотреть фильмы». Очевидно, что «смотреть» и «скачать» часто используются со словом фильм, то есть — они совместны. Но слова «смотреть» и «скачать» крайне редко участвуют в одном и том-же запросе, но очень часто — в одинаковом окружении. Они — взаимозаменяемы, или, другими словами — ассоциированы.
При переходе к названиям фильмов это будет звучать следующим образом — рекомендовать можно фильмы, которые пользователи часто смотрят вместе (совместные), или рекомендовать фильмы, похожие друг на друга (ассоциированные). В принципе, пользователю будет полезнее второй тип рекомендации.
Как бы я это сделал:
1. Выстроить статистику в виде фраз. Пользователь посмотрел несколько фильмов? получаем строку вида «название1 название2 название3». Для другого пользователя — «название1 название 5 название8» и т.д.
2. Обработать полученный текстовый корпус методами снижения размерности — например LSA или Word2Vec
3. Если использовать Word2Vec — то совместные фильмы получатся при использовании алгоритма bag of words (-nbow 0), а асооциированные — skipgrams (-nbow 1).
Преимущество подхода в частности в решении «банановой проблемы» и рекомендации пользователю редких, но очень похожих фильмов.
0
Фича технически интересна, а с точки зрения пользователя есть ли анализ, насколько успешна такая рекомендация (пользователь перешел по ссылке и посмотрел фильм)? Мне, например, в 95% хочется плеваться от рекомендаций в том же ivi.ru, поэтому уже давно не обращаю внимание на этот раздел. Это очень вероятно — субъективно, поэтому хотелось бы статистику увидеть.
0
Любимая тема и можно долго обсуждать особенности :)
Интересно узнать что вы делаете с «киноманами» когда множество рекомендаций и множество просмотренных фильмов совпадает. Особенно в случае когда в множестве фильмов есть большие обособленные кластеры (например, кластеры европейского и азиатского кино) и, соответственно, обособленные кластеры пользователей которые больше смотрят европейское или, наоборот, азиатское кино. Вопрос в том, как посчитать наиболее похожий фильм из другого кластера, когда между элементами есть пересечение только по самым общим параметрам вроде «жанра» или года издания.
[evil mode]
Другой интересный вопрос со стороны коммерции. Не всегда множество подсказанных фильмов и выгодных для проката фильмов совпадает.
[/evil mode]
Интересно узнать что вы делаете с «киноманами» когда множество рекомендаций и множество просмотренных фильмов совпадает. Особенно в случае когда в множестве фильмов есть большие обособленные кластеры (например, кластеры европейского и азиатского кино) и, соответственно, обособленные кластеры пользователей которые больше смотрят европейское или, наоборот, азиатское кино. Вопрос в том, как посчитать наиболее похожий фильм из другого кластера, когда между элементами есть пересечение только по самым общим параметрам вроде «жанра» или года издания.
[evil mode]
Другой интересный вопрос со стороны коммерции. Не всегда множество подсказанных фильмов и выгодных для проката фильмов совпадает.
[/evil mode]
+1
Интересно узнать что вы делаете с «киноманами» когда множество рекомендаций и множество просмотренных фильмов совпадает.… Вопрос в том, как посчитать наиболее похожий фильм из другого кластера, когда между элементами есть пересечение только по самым общим параметрам вроде «жанра» или года издания.
Классный вопрос :). На деле у нас несколько рекомендателей (как персонализированных так и неперсонализированных). К каждому рекомендателю есть требования по количество возвращаемых рекомендаций и по минимальному значению веса рекомендации. Если рекомендатель A не набрал нужного количества рекомендаций, либо веса рекомендаций не прошли проверки, то система пытаемся получить рекомендации из рекомендателя B, C и т.д. Последним в каждой группе рекомендателей является рекомендатель-заглушка. Он отдает популярный контент разных жанров независимо от того смотрел пользователь его или нет. Таким образом система всегда возвращает рекомендации.
Есть еще второй аспект. Каталог ivi довольно большой и часто обновляется. Вероятность, что пользователь посмотрел все в пределах минимальной схожести, на мой взгляд, мала. Но заглушка помогает исключить и эту вероятность.
0
А тут целых несколько любимых тем :)
Если на базе нескольких рекомендателей создается единый список, то как ранжируются отдельные элементы в результате? Изначально метрика соответствия в каждом из рекомендателей разная — каким образом они сводятся к единой системе весов?
То есть в итоге это не список рекомендаций, а срез каталога по какому либо признаку (например по неперсонализированному рейтингу). И в случае новичков на сервисе (но не новичков в просмотре кино) мы можем получить список из фильмов, которые они уже смотрели.
…, то система пытаемся получить рекомендации из рекомендателя B, C и т.д.
Если на базе нескольких рекомендателей создается единый список, то как ранжируются отдельные элементы в результате? Изначально метрика соответствия в каждом из рекомендателей разная — каким образом они сводятся к единой системе весов?
Он отдает популярный контент разных жанров независимо от того смотрел пользователь его или нет. Таким образом система всегда возвращает рекомендации.
То есть в итоге это не список рекомендаций, а срез каталога по какому либо признаку (например по неперсонализированному рейтингу). И в случае новичков на сервисе (но не новичков в просмотре кино) мы можем получить список из фильмов, которые они уже смотрели.
0
Если на базе нескольких рекомендателей создается единый список, то как ранжируются отдельные элементы в результате? Изначально метрика соответствия в каждом из рекомендателей разная — каким образом они сводятся к единой системе весов?
Пока все банально просто. Рекомендатели имеют свои приоритеты.Возможны два варианта:
- рекомендатель с более высоким приоритетом ничего не нашел — тогда отрабатывает рекомендатель с менее высоким приоритетом
- рекомендатель с более высоким приоритетом нашел что-то — тогда результат добирается объектами рекомендателя с менее высоким приоритетом
То есть в итоге это не список рекомендаций, а срез каталога по какому либо признаку (например по неперсонализированному рейтингу). И в случае новичков на сервисе (но не новичков в просмотре кино) мы можем получить список из фильмов, которые они уже смотрели.
Пользователю достаточно посмотреть/оценить несколько фильмов, чтобы проблема холодного старта решилась, поэтому мы предлагаем ему самое популярное.
0
Книга по теме «Программируем коллективный разум», вторая глава про рекомендации.
0
>Так как фильм очень популярен и его смотрело много людей, то sim(x, y) будет стремиться к 1 почти для всех фильмов x.
Только для асимметричного варианта если взять столбец, а не строку.
Второй метод какой-то менее нормированный. Пусть a=x∩y, b=¬x∩y, тогда по последней формуле: sim(x,y)=a/b, а по несимметричной схожести: sim(y,x)=a/(a+b). Соответственно, во втором варианте не требуется(но ничего не мешает) по особенному относиться к случаю b=0(фильм популярный).
Отношение сходства симметрично, каковы преимущества отхода от симметрии?
Только для асимметричного варианта если взять столбец, а не строку.
Второй метод какой-то менее нормированный. Пусть a=x∩y, b=¬x∩y, тогда по последней формуле: sim(x,y)=a/b, а по несимметричной схожести: sim(y,x)=a/(a+b). Соответственно, во втором варианте не требуется(но ничего не мешает) по особенному относиться к случаю b=0(фильм популярный).
Отношение сходства симметрично, каковы преимущества отхода от симметрии?
+1
Отношение сходства симметрично, каковы преимущества отхода от симметрии?
Метод ассоциаций и асимметрия имеют преимущество, когда мы имеем дело с сопутствующими объектами. Например, если часто к новой машине мы покупаем новые колеса, это не значит, что также часто с новыми колесами мы покупаем новую машину.
Соответственно, во втором варианте не требуется(но ничего не мешает) по особенному относиться к случаю b=0(фильм популярный).
Да, возможно стоит над этим задуматься.
+1
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Неперсонализированные рекомендации: метод ассоциаций