В принципе - эта проблема радикально решена в Германии - там за "скачивание с торрентов" -введена-смертная-казьнь-довольно ощутимые штрафы. Но и там - тоже есть нюанс:
- если ты безработный и сидишь на пособии - качай сколько влезет. Штраф приходит и аннулировается. Так что некоторые особо ушлые граждане - качают с торентов за толику малую для более обеспеченных граждан бюргеров.
Ну в общем - они там в загнивающих Европах ТОЖЕ УМЕЮТ СЧИТАТЬ ДЕНЮЖКИ. Но сейчас не об этом.
Как скачать с торрентов на 70 дюймовую древнюю плазму, когда ты заебаный в хлам после работы включаешь телек фоном во время хавки? Вот у меня есть и комп и плазма, но последнее время я так заебываюсь на работе, что тупо врубаю по вайфаю в каком-нидь лордфильме первый попавшийся фильм. И так делает 80% людей. Еще 10 вообще не парятся и платят грошевую, сколько она там
Расскажу как это реализовано у меня, а я нихуя ни разу не айтишник. Итак:
роутер старенький Кинетик какой-то там с 4 Ethernet-портами. В него "приходит интернет".
к роутеру подключено сетевое хранилище Synology на 2Tb, какое-то древнее - купил на авито без дисков за копейки. Почему его? Интерфейс. Вообще не надо ни о чём думать. На хранилище просто дан доступ к папке VIDEO и MISIC.
к роутеру подключен древний как гавно мамонта ноутбук SONY, на нём запущен браузер и 2 вкладки с самыми известными торрентами. Наверное есть ещё, но их хватает выше крыши. Ноутбук работает в роли "качалки" и складывает (ну и раздаёт есс-но) скачанное в хранилище.
к роутеру подключена какая-то китайская андроид приставка для TV которая имеет доступ к хранилищу. Куплена на АЛИ года 4 назад - до сих пор работает. по HDMI - на ресивер/TV.
все подключения - по витой паре, никакого WiFi.
всё это хозяйство запитано от APC (догадайтесь - где я его купил?)
Как ЭТО работает? Очень просто.
На приставке стоит VLC плеер, ZONA android, какая-то программа с плейлистами для IPTV и что-то типа PowerAMP для музыки.
Если я хочу что-то-там такое посмотреть/послушать - я ищу на торрентах. Нашёл - ставлю на закачку и ухожу на работу. Не нашёл - значит оно мне не надо.
Вечером пришёл - включил либо скачанный фильм / музыку, либо что-нибудь с Зоны, либо IPTV один из 100500 каналов. Посмотрел фильм - в торрент-клиенте на ноутбуке удалил его с хранилища, или оставил для коллекции. ПЛАТНЫЕ ПОДПИСКИ? А ЗАЧЕМ???
Я вот вас вообще не понимаю - зачем тратить денежные средства на все эти подписки, если есть торренты - что угодно можно скачать оттуда.
Особенно умиляло, когда на работе коллеги рассказывали, что покупали на НЕДЕЛЮ право просмотра определенного фильма за 400, блеать, рублей!!! Вы что, совсем из ума выжили? Ну есть же бесплатная альтернатива. Ну или я просто человек, юность которого выпала на первую половину нулевых, где все скачивалось бесплатно
@RomaYolo, @RickTuber, и остальным разработчикам сайтов предлагаю создать сервис сравнения ассортиментов онлайн-кинотеатров и стриминговых сервисов. Пользователь вводит название фильма и ему приходит ответ "данный фильм есть на таком-то сервисе и за такие-то деньги" Сейчас большинство подписок - кот в мешке, сервис поможет сделать правильный выбор.
Покупал что-то из техники в одной крупной сети. Продавец предложил скидку хорошую если куплю у них полугодовую подписку на киносервис Wink. Купил. Дома на телек установил, посмотрел... Ну всё такое... Одним словом, для тех, кто любит отечественные мелодрамы и пересматривать советскую нетленку. Закрыл, забыл. Прошло время.
Смотрел вчера одного блогера, рекламирует российский сериал "Челюскин. Первые" с упоминанием, что сериал есть только на Wink. Ну вот! Пришло моё время! У меня ведь подписка!.. Не, не так... ПОДПИСКА!
Скорее всего, многие поняли, чем закончилось. Захожу на Wink, вот мылодрамы, вот советские фильмы, вот "Челюскин". Нажимаю и... Оказывается, что моя подписка, вроде подписка, но чтобы конкретно этот сериал глянуть, нужно купить ещё одну подписку. Тадам!
У меня большой соблазн написать: "Вы описали устаревший подход. Я тоже так думал, и поэтому год назад завалил собеседование в 'Эпл' и 'Амазон', причем в первом незнакомтсво с общепринятым в современности подходом было одной из главных причин, почему мне отказали на самом последнем этапе (шестое интервью после пяти успешно пройденных). Сейчас коллаборативная фильтрация обычно реализуется совсем по-другому, ее обычно уже и не называют коллаборативной фильтрацией".
Но на самом деле это было бы несправедливой придиркой. Да, коллаборативная фильтрация в том виде, как вы ее изложили, это технологии 2010-х годов, от которых давно отходят. Но так как ваше изложение все равно очень короткое и поверхностное, в принципе, под него можно притянуть и современные подходы - и иногда так и делают. Если поискать сочетание терминов collaborative filtering и two tower, последнее часто описывают как частный случай первого. Но чаще нейросетевые подходы к рекомендательным системам рассматривают, не упоминая коллаборативную фильтрацию.
В общем, коллаборативная фильтрация активно используется и сейчас. Но вот это ваше описание:
Допустим, недавно Вася посмотрел до конца и поставил высокую оценку вот таким тайтлам: Мастер и Маргарита, Атака Титанов, Фишер, Игры
А Петя сделал то же самое вот с таким контентом: Киберслав, Атака Титанов, Фишер, Игры
Итак, у Васи и Пети все тайтлы одинаковые, кроме одного различия: Мастер и Маргарита против Киберслава (ставьте лайк, если хотели бы увидеть такой кроссовер). По логике КФ, если пользователи “обменяются” своими 4 тайтлами (Вася глянет Киберслава, а Петя М&М), то им должно понравиться. Собственно, отсюда и слово “коллаборативная” в названии - пользователи как бы сотрудничают, подкидывая наилучшие рекомендации друг другу.
- это очень упрощенный пересказ того, как работали рекомендательные системы 10 лет назад. Подробнее он изложен, например, в книге Лесковеча, Раджарамана и Ульмана. Только эта книга издавалась и переиздавалась с 2010 по 2019 годы. Сейчас рекомендательные системы работают по-другому.
Если вы собираетесь проходить собеседования на специалиста по машинному обучению, рекомендую хотя бы поверхностно ознакомиться с темой современной коллаборативной фильтрации. Тем более что схожие подходы используются и в других областях: так сейчас делают и поиск, и распознавание лиц...
Крик души. Бесит что у многих российских сериалов и фильмов нет субтитров. Мне как инвалиду со слухом, очень сложно понимать даже русскую родную речь. Понимаю язык, но не слова. Онлайн кинотеатры которые продвигают свои российские сериалы и фильмы без субтитров, вы теряете часть аудитории которые хотели бы потреблять такой контент. Почему бы вам не запариться об этом? Я же не просто так покупаю подписку допустим на кинопоиск и окко. Даже если субтитры имеются, бывали косяки. По типу недавного случая, смотрел сериал "Надвое", и как назло в последней серии субтитры были с поломанным таймингом (+9 секунд). В тех поддержку обратился, спустя месяц только исправили. Бля, да этот сериал на торрентах был без субтитров. Так бы и сам тайминг поменял у себя. Есть ещё онлайн кинотеатр с автосубтитрами, вроде как с нейросетью. Но блин, сериал посмотреть можно бесплатно, а чтобы с субтитрами, это покупать подписку. Даже тут отделили. Покупать ещё одну подписку ради субтитров, не богат. С зарубежными сериалами и фильмами таких проблем минимум. Если нету официальных субтитров, то на торрентах или на других сайтах есть. Вроде как для всех контенты пилите, покажите хоть с субтитрами. Без них смотреть не могу, думаю немало людей кому не хватает субтитров для потребления нашего отечественного контента.
Вы приходите домой и включаете любимый стриминг. Лента сразу же выдаёт вам несколько фильмов и сериалов, которые… действительно хочется смотреть. Сегодня разберём, как именно рождается эта магия вне Хогвартса, и что сидит под капотом рекомендательного движка онлайн-кинотеатра.
Это крайне сложный мем про онлайн-кинотеатры и всю индустрию стриминга в целом. Просьба отнестись с пониманием и проникнуться глубиной!
Так как лично я чаще других сервисов включаю Кинопоиск (да, я посчитал с точностью до минуты), то детализировать детали и анализировать нюансы я буду именно на его примере. И да, в этой статье не будет сложных технических терминов и греческих букв. Её цель - раскрыть основные принципы стримингов человечьим языком и наглядно.
Итак, погнали:
Этого стриминга в Химках видал, неточными рекомендациями торгует!
Давайте пойдём поэтапно. Что нужно сделать онлайн-кинотеатру, чтобы быть классным? Рискну предположить, что сначала ему нужно вот что:
Составить хорошую библиотеку. Добавить к себе сериалов и фильмов крутых и разных, да побольше!
Набрать пользовательскую базу. Чтобы я, вы, ваша мама, ваш коллега и вон тот парень оформили подписку. Но не только - важно, чтобы вы ещё регулярно смотрели (почему - объясню ниже, это важный момент).
Итак, у нас есть контент, и у нас есть пользователи. Говоря более научно, есть item, и есть user. И теперь кинотеатру нужно сделать третий шаг, ключевой:
Соединить user и item. Проще говоря, дать пользователю Васе именно тот фильм, сериал или аниме по манге (мало ли от чего прётся наш Василий), который ему а) нужен в целом и б) актуален прямо сейчас.
Но как это сделать?
Вариант первый - плясать от юзера Васи (user-based recommendations). Допустим, мы видим, что Вася с кайфом посмотрел последний российский детектив про жуткого маньяка. Ну окей, пульнём ему другие леденящие душу истории про серийных убийц. Но что если ему понравился именно тот детектив, а новые не зайдут?
Хорошо, тогда можно использовать обратный подход - плясать от контента (item-based recommendations). Пусть алгоритмы глянут, что там "сидит" внутри этого детектива - сюжетные повороты, темп повествования, атмосфера, антураж, локации, год выпуска, набор актёров, подмешивание других жанров и т.д. Находим максимально похожий тайтл и кидаем его Васе на первое место в ленте!
Но Вася проходит мимо и садится смотреть турецкий сериал с Серканом Болатом, или как там его зовут. Почему? Да хрен его знает. Может после того сериала у него детективный передоз, и больше он не хочет смотреть на мрачные расследования? А может Вася планирует поездку в Турцию, и хочет полюбоваться видами Стамбула? Или ещё проще - у Васи появилась девушка, и пульт теперь у неё (ну или мы просто чего-то о нём не знаем). Люди - существа иррациональные, причин может быть очень много, а на поверхности - ни одной.
Раз уж вспомнили турецкие сериалы, то держите уютного стамбульского котика (запомните этот момент, это пасхалочка ко второй половине этой статьи).
Как видите, чистый user-based и item-based - это упражнение, конечно, интересное, но полезное лишь для общего развития. А для точных стриминговых рекомендаций нужно что-то позабористее. Но что?
Существует три вида лжи…
… ложь, наглая ложь и статистика. Так про статистику говорил то ли Бенджамин Дизраэли, то ли Марк Твен (но не Ленин, как многие думают, Ильич как раз статистику очень любил и уважал). Смысл цитаты в том, что статистическими выводами можно:
а) вертеть как угодно
и б) делать это на максимально серьёзных щщах
Ведь вывод будет подкреплён (ну, типа) анализом выборки, а не просто взят с потолка.
Не буду спорить, но в случае рекомендательных систем - это вовсе не минус, а очень даже плюс. Потому что нас интересует не единственно верная истина, а набор наиболее релевантных вариантов. Но давайте конкретнее:
В рекомендательных системах онлайн-кинотеатра выбор на основе большой статистики воплощён в виде коллаборативной фильтрации (КФ). КФ - это база-основа любого годного стриминга, от Ютуба до Яндекс Музыки. Онлайн-кинотеатры в целом, и Кинопоиск в частности - не исключение.
Давайте разберём, что это такое:
Коллаборативная фильтрация работает на предположении, что:
Пользователи, которые одинаково оценили какие-либо тайтлы (т.е. фильмы/ сериалы) в прошлом, склонны давать похожие оценки другим тайтлам в будущем.
То есть, если фильм "Ромашка" понравился многим пользователям с похожей историей просмотров, то он скорее всего понравится и другим пользователям с такой же (или почти такой же) историей просмотров.
Давайте на примере (очень упрощённо и схематично):
Допустим, недавно Вася посмотрел до конца и поставил высокую оценку вот таким тайтлам:
Мастер и Маргарита
Атака Титанов
Фишер
Игры
А Петя сделал то же самое вот с таким контентом:
Киберслав
Атака Титанов
Фишер
Игры
Итак, у Васи и Пети все тайтлы одинаковые, кроме одного различия: Мастер и Маргарита против Киберслава (ставьте лайк, если хотели бы увидеть такой кроссовер). По логике КФ, если пользователи “обменяются” своими 4 тайтлами (Вася глянет Киберслава, а Петя М&М), то им должно понравиться. Собственно, отсюда и слово “коллаборативная” в названии - пользователи как бы сотрудничают, подкидывая наилучшие рекомендации друг другу.
Понятное дело, что пример выше упрощён до неприличия. В реальности должны быть не Вася с Петей, а несколько сотен тысяч (а лучше миллионов) юзеров, и тайтлов в анализе должно быть слегка больше четырёх. И тогда рекомендательная система может на больших данных глянуть, что смотрят юзеры с похожими предпочтениями, и сделает статистически значимый вывод.
Чтобы было ещё понятнее, давайте проведём аналогию с чем-нибудь из жизни. Я вот с утра в зал сходил, давайте с ним и сравним:
Представьте какой-нибудь суперумный фитнес-зал (ИИшка видит его так), где камеры под потолком анализируют ВСЕ действия ВСЕХ посетителей.
Зал видит, что вы сделали жим сотку, гантели по тридцатке и пошли на кардио. А ещё он в своей базе данных видит, что были другие посетители, которые делали то же самое. Многие из них ещё делали румынскую тягу и французский жим. Логично будет порекомендовать эти упражнения и вам (вероятность попадания будет статистически высокая).
Однако, что будет, если вам нельзя делать румынскую тягу по медицинским показаниям, а во время французского жима вы год назад уронили гантелину на голову и теперь у вас психологический блок на это упражнение? Или ещё прикольнее - система подобрала целых 10/ 20/ 50/ да хоть тысячу статистически актуальных упражнений. Какое порекомендовать первым, а какое последним? И вообще, зачем всех под одну гребёнку пихать? Я же уникальная снежинка, предложи мне что-нибудь эдакое!
Вот и с контентом в онлайн-кинотеатре то же самое.
А что если Вася сильно отличается от других юзеров, которые смотрели похожие тайтлы?
А если актуальных рекомендаций много, то какую порекомендовать первой, второй, двадцать седьмой?
И вообще, настроение у Василия игривое, он хочет сюрпризов, удивите!
Или ещё сложнее - что если Вася только-только зарегался на Кинопоиске, и у него ещё нет никакой истории (a.k.a. “холодный юзер”)?
(Cat)бустим коллаборативную фильтрацию
Для преодоления вышеописанных преград, коллаборативная фильтрация отлично дополняется градиентным бустингом. Для начала очень кратко распишу, что это вообще за зверь такой:
Итак, градиентный бустинг - это такой метод машинного обучения, когда несколько “небольших” моделей применяются последовательно, и каждая из них исправляет ошибки предыдущей. Шаг за шагом ошибка становится всё меньше и меньше, а результат всё точнее и точнее.
Логика примерно такая. Берём дерево решений и пускаем по нему алгоритм. Смотрим, насколько существенна ошибка функции. Добавляем ещё дерево и запускаем новую итерацию. Ошибка становится меньше. И так далее, пока ошибка не минимизируется.
Множество маленьких моделек градиентного бустинга ещё называют “ансамбль моделей”. По-французски emsemble значит "вместе", ну вы поняли.
Давайте разберём на примере пиццы. Ну а что, в зал мы уже сходили, так что имеем право.
Итак, допустим, вы понятия не имеете, как готовить пиццу (= не знаете юзера Васю), но слышали, что её делают из теста и сыра. Вы кидаете кусок теста и сыра в печку. Получилась дрянь. Вы думаете: “А что, если раскатать тесто и положить на него сыр?”. Уже лучше, но тесто сгорело. Вы повторяете попытку, уменьшая жар. Ещё лучше, но сыр подгорел. Вы насыпаете его более равномерно. Отлично, но не хватает томатной пасты. Вы добавляете пасту. Теперь это уже похоже на пиццу, но всё равно есть что улучшать. Вы можете дальше повторять итеграции, играясь с рецептом и технологией готовке, пока у вас не получится идеальная пицца как у дядюшки Джузеппе.
Градиентный бустинг в онлайн-кинотеатре работает точно так же, только шагов и ошибок в “дереве решений” может быть гораздо-гораздо больше, ну и тесто с сыром не нужно портить (это ж машинное обучение, в конце концов).
У Кинопоиска за градиентный бустинг отвечает штука под названием CatBoost.
Кэт буст. Вижу так.
CatBoost - это набор библиотек (= готовых шаблонов и решений) градиентного бустинга, который Яндекс использует во многих своих сервисах: в маркетплейсе, прогнозе погоды, рекламных системах, музыкальном стриминге и т.д. Ну и в онлайн-кинотеатре, само собой.
“Cat” здесь значит “категориальный”, то есть модель заточена на работу с категориями, а не только с числовыми данными. Она умеет мыслить не только понятиями "один-ноль" и “больше-меньше”, но и отличать кошечку от собачки, Турцию от Кореи (а Южную Корею от Северной), детектив от триллера (или от комедии, хоррора, пеплума, …), Юру Борисова от Ванпанчмена и т.д.
С последним могут возникнуть проблемы. Не, ну правда, тут придётся очень много моделек запускать.
Итак, вернёмся к нашему юзеру Васе.
Сценарий первый. Коллаборативная фильтрация отобрала ему 50 самых-самых релевантных фильмов. И ещё 10 сериалов в качестве бонуса. Как всю эту очередь расставить в ленте?
Допустим, в списке есть Начало и Интерстеллар. Кого поставить выше? CatBoost видит, что Вася ставил всем фильмам Нолана оценку 8+ (любит он Нолана, в общем). Также он видит, что Вася плюс-минус одинаково хорошо смотрит и Ди Каприо, и Макконахи. Он идёт дальше, перебирает другие факторы. И видит, что по вечерам Васе чуть лучше заходит космическая тематика. А ещё он в Яндексе недавно чёрные дыры искал - совпадение? Сейчас как раз вечер, так что поставим Интерстеллара чуть выше Начала.
Понятно, что в реальности алгоритм будет ранжировать (да, забыл сказать, такая операция называется “ранжирование”) из множества единиц контента и одновременно учитывать сотни и тысячи единиц информации о пользователе. Но логика такая.
Сценарий второй. Вася из другой реальности (скажем, с Земли-616) только-только зарегался на Кинопоиске. Данных по нему нет, сравнить с другими пользователями не выйдет, коллаборативно фильтрануть не получится. Но! Во-первых, он наверняка зарегается не просто так из вакуума, а придёт за определённым тайтлом.
Ну например, увидит сериал “Игры” и такой: “О, это мне надо, хочу смотреть на младшего Верника в антураже брежневского Союза”. И оформит подписку.
И алгоритмы такие: “Ага, ему нравится младший Верник (ну или Серебряков, единственный в своём роде), антураж СССР, спортивная тематика, драмы с элементами детектива, современные российские сериалы, …”. Это всё гипотезы, каждую из них CatBoost может начать отрабатывать. Рекомендовать, смотреть на результат. Рекомендовать дальше, улучшать результат, отрабатывать ошибку. И так далее, далее, далее. Повышая знание о пользователе, учитывая всё новые факторы, делая “градиент” всё более плавненьким. В какой-то момент у Василия будет достаточно истории, и его получится нормально запихнуть в коллаборативную фильтрацию.
Если Вася всё же пришёл из ниоткуда (действительно холодный юзер), то ему сначала дадут глянуть что-нибудь из самого популярного. Посмотрят, как он реагирует на разные тайтлы из топ-10, а дальше см. выше.
Знания о пользователе крутятся, кэт бустится.
Здесь ещё можно было бы разобрать, какие факторы учитываются в градиентном бустинге, как именно алгоритм достаёт эти данные, с какой скоростью он учится… и многое другое.
Однако, статья и так получилась чуть больше, чем я планировал, поэтому на этой ноте откланяюсь. Напоследок держите набор простейших действий, способных здорово помочь КэтБусту и натренировать Кинопоиск. С другими онлайн-кинотеатрами тоже должно сработать - вплоть до Netflix или даже Youtube (последний - это тоже своего рода стриминг). Итак:
Ставим высокие оценки фильмам и сериалам, которые вам нравятся, и низкие - тем, которые не зашли. Для этого в конце просмотра есть специальная голосовалка, не пропускаем её.
Если листаем ленту и видим что-то прикольное, не стесняемся добавлять в “Буду смотреть”.
Если видим, что рекомендательная система прогадала и запихнула в ленту залётные неактуальные тайтлы, то прожимаем кнопку "Неинтересно".
Если вас зацепил какой-то фильм или сериал из ленты, но вы не хотите его смотреть прямо сейчас, то можно включить его хотя бы на пару минут (а лучше минут на 5-10). Это станет важным сигналом для рекомендательных систем.
Если не забывать про эти простые шаги, то алгоритмы скажут вам “спасибо”, коллаборативная фильтрация станет ещё более меткой, а вы сможете тратить ещё меньше времени на поиск персонализированной актуалочки.
Очень надеюсь, что вам стало понятнее, по какой логике алгоритмы этих наших стримингов вываливают на нас именно те фильмы, сериалы и прочее народное творчество, которое актуально, релевантно и желанно именно нам и именно в данный конкретный момент времени.
P.S. Понятно, что выше я описал основные подходы и базовую логику их применения. На самом деле сложность и продвинутость сего действия нужно умножить на дцать, и вообще, там всё переплетено так, что мама не горюй. Но принцип именно такой.
Если вам понравилось, то подписывайтесь на мой тг-канал Дизраптор, где я человечьим языком разбираю интересное из технологий, инноваций и бизнеса. А на втором канале Фичизм выходят самые кайфовые фичи и всё такое.