Алхимия данных: размышления об алгоритмах RecSys | 2025-11-16T04:02:08

Заумный пост сегодня. Пока писал книгу по RecSys, поймал себя на мысли, что современный data science — это, по сути, алхимия 21 века. За половиной «лучших практик» в алгоритмах нет хорошего математического аппарата. Это набор эвристик, которые «просто работают». Причем как в 17 веке смешивали все подряд, так и сейчас смешивают, и если что-то сработало лучше, все остальные начинают делать так же. Ответа на вопрос «почему» просто нет.

Возьмем, к примеру, алгоритм NCF/NeuMF (Neural Collaborative Filtering). Там такая логика. Есть, скажем, миллион оценок пользователями фильмов. И 100 миллионов оценок пользователями еще на даны — пользователи ж не могут посмотреть все фильмы на свете. Но из этих 100 миллионов для конкретного пользователя надо выбрать кандидатов для рекламы. У алгоритма, конечно, есть фаза тренировки, когда рассчитываются веса, и стадия предсказания, когда эти веса используются на входящих данных.

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

На один позитивный пример он берет 4 негативных. Потому четыре? Да просто это «не много и не мало». Будет ли 8 лучше? Неизвестно, но учиться будет точно дольше.

Почему размерность эмбеддингов 32? или 64? Нет никакой формулы. Это «золотая середина» между «тупой» моделью (мало k) и «переобученной» (много k).

Теперь про нейронку. Почему MLP-блок строят «башней» (64 -> 32 -> 16)? Почему не (50 -> 25 -> 10)? Почему между ними ReLU (а не tanh например)? Чистая эмпирика. Число слоев в башне тоже подбирается.

Почему у GMF и MLP-частей разные эмбединги на входе? Потому что авторы статьи попробовали, и так «получилось лучше». Мат. доказательства нет. Почему на финальный слой они идут с равными весами? Потому что потому.

Почему выходы двух путей «склеиваются» (concat), а не складываются или перемножаются? «Опыт показал, что так результат точнее».

И так во всем, вплоть до выбора оптимизатора Adam или «магического» learning_rate=0.001, хотя с этими по крайней мере понятен матаппарат.

То есть, у одного алгоритма как минимум с десяток параметров подобрано эмпирически, при этом однозначной уверенности, что они независимые друг от друга — нет. Зато многие из них зависят от датасета, но никто не знает как 😉

В общем, алхимия.

Илья Мечников: Жизнь в борьбе за науку | 2025-11-13T04:53:34

Читал тут биографию Мечникова (не знаю, как меня уж занесло) и подумал, как много может поместиться в одну жизнь. Это не просто учёный, это какой-то сериал:

Его старший брат Иван — тот самый прототип «Смерти Ивана Ильича» у Льва Толстого. А другой брат, Лев, был видным анархистом, социологом и сражался в Италии вместе с Гарибальди. У Мечникова две попытки отправиться на тот свет: первый раз — после смерти первой жены (которую, больную туберкулезом, внесли в церковь на стуле). Он выпил морфий, но выжил. Второй раз — когда его вторая жена Ольга тяжело заболела тифом. Он сознательно привил себе возвратный тиф. К счастью, оба выжили. Зато потом смерть с косой сделала свое только после третьего инфаркта подряд.

Чувак окончил университет в 19 лет экстерном. Его рекомендовал сам И.М. Сеченов на профессорскую должность. Но Мечникова «забаллотировали» (провалили) одним голосом. В знак протеста Сеченов уволился вместе с ним.

Он основал в Одессе первую на тот момент в стране бактериологическую станцию. Но из-за ошибки сотрудника (испортили вакцину от сибирской язвы) погибло целое стадо овец. После этого скандала он уехал из России. Станция — на улице Льва Толстого.

В Париже его сразу же взял под крыло Луи Пастер (который отец пастеризованного молока), который поддержал его теорию и дал ему лабораторию в своем институте. Там Мечников и проработал 28 лет, став замдиректора.

Во время изучения холеры в Институте Пастера Мечников выдвинул теорию, что не все люди, контактирующие с возбудителем, заболевают. Он предположил, что все дело… (конечно же) в микрофлоре кишечника. Чтобы это доказать, он сознательно выпил культуру с холерным вибрионом. Ничего, пронесло (тебя бы так проснесло, подумал Мечников)

В итоге он получил Нобелевскую премию за открытие фагоцитоза (клеточный иммунитет). А еще он «отец геронтологии» — именно Мечников выдвинул теорию, что для долголетия нужно бороться с плохими бактериями в кишечнике с помощью пробиотиков. Теперь, говорят, геронтологи всего мира пьют 15 мая простоквашу вспоминая Мечникова.

Умер в Париже, его прах хранится в библиотеке Института Пастера.

А еще в английской Википедии он Élie Metchnikoff. Непросто догадаться.

На фото Мечников и Лев Толстой обсуждают иммунологию.

Instagram: Ностальгия по t.A.T.u | 2025-11-12T12:51:59

Инстаграм рекламирует аккаунты для подростков девочкой, сильно напоминающей Лену Катину из t.A.T.u в молодости;-)

Интерактивная визуализация алгоритмов рекомендаций в новом open source приложении | 2025-11-11T05:23:46

У меня вышло электронное open source приложение к моей книжке Recommender Algorithms! Это «песочница», где можно «погонять» различные алгоритмы рекомендаций с разными настройками, и по каждому алгоритму посмотреть специфичную ему визуализацию, помогающую понять как он работает. Например, для таких алгоритмов как ItemKNN, SLIM или EASE ключевой визуализацией является heatmap, выученной матрицы схожести (item-item similarity matrix). Это позволяет увидеть, какие именно пары товаров модель считает «похожими» (или «влияющими» друг на друга). Для SLIM, например, полезна «Sparsity Plot» , показывающая, что матрица схожести действительно получилась разреженной. Для алгоритмов ассоциативных правил (Apriori, FP-Growth, Eclat) визуализация — это вообще не график, а интерактивные таблицы с найденными «Частотными наборами» (Frequent Itemsets) и сгенерированными «Правилами» (Association Rules) , которые можно фильтровать и сортировать.

Кроме этого, там есть параметрический механизм создания «игрового датасета» — Dataset Wizard. Работает он так — есть шаблонные датасеты, которые описывают items через характеристики. Например, рецепты через вкусы. Или фильмы через жанры. Система генерирует случайных пользователей со случайным набором характеристик из того же набора — причем там много ползунков, позволяющих это распределение сделать более контрастным или сложным. Далее создается уже матрица оценок пользователями айтемов — условно если совпадают характеристики пользователя и айтема, то оценка будет выше, так как «совпадают вкусы» и наоборот, если различаются, то оценка будет ниже. Тут тоже ползунки, добавляющие шум и scarcity — рандомно удаляется часть матрицы. На вход алгоритму рекомендаций характеристики товаров и пользователей не подаются, они скрыты, но они используются для визуализации результатов.

Третьим компонентом приложения является подбор гиперпараметров. По сути, это автоконфигуратор под конкретный датасет. Там используется итеративный подход, который намного эффективнее, чем полный перебор (Grid Search) или случайный поиск (Random Search). Если говорить кратко, система анализирует историю прошлых запусков (trials) и строит вероятностную «карту» (суррогатную модель) того, какие параметры, скорее всего, дадут лучший результат. Затем она использует эту карту, чтобы по-умному выбрать следующую комбинацию для проверки. Этот метод называется Последовательная оптимизация на основе суррогатных моделей (SMBO).

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

Ссылочка на код в комментариях.

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

Натюрморт с яблоками: Творение в красках | 2025-11-10T04:29:16

Мои яблоки почти поспели #нарисовалось

Скандал в посёлке: сбежавшие хаски убили чихуахуа | 2025-11-09T22:55:32

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

Албанский вирус: как работает новая киберугроза | 2025-11-07T14:21:14

«Привет. Я албанский вирус, но в силу низкого уровня технологий в моей стране я ничего не могу сделать с вашим компьютером. Будьте добры, удалите один файл на своем компьютере и затем перешлите меня другим пользователям.»

Вот вам версия из 2025. Строчку, которую они просят вставить в терминал — echo «<…>» | base64 -d | bash

Эта строчка содержит curl, указывающий на 217.119.139.117 результат которого передается в `nohup bash`. А с этого адреса грузится скрипт, разумеется obfuscated.

Разумеется, ни одна LLM из доступных расшифровывать его не соглашается. Но Qwen оказался не против.

Скрипт при запуске собирает информацию из Chrome, Brave, Edge, Firefox и других, извлекая куки-файлы, историю автозаполнения форм и данные для входа в системы, собирает криптокошельки Electrum, Coinomi, Exodus, Atomic, Wasabi, Ledger Live и др., собирает содержимое приложения «Заметки» macOS с прикрепленными медиафайлами, данные из Keychain (пароли), а также сканирует рабочий стол и документы в поиске файлов определенных расширений. Собранные данные архивируются и отправляются на удаленный сервер с IP-адресом 217.119.139.117.

Для обеспечения постоянного доступа скрипт создает скрытые службы запуска (LaunchDaemons) со случайными именами, что затрудняет его обнаружение. Он может загружать и заменять легитимное приложение Ledger Live на модифицированную версию.

Вот такой албанский вирус)

SingleFile: решение проблем с сохранением и обменом веб-страницами | 2025-11-05T17:45:42

Нашел полезный экстеншн к Chrome — SingleFile. Решает вот такую задачу — нужно поделиться страницей из браузера, которая не публичная, например, по iMessage или Telegram. Это не так тривиально сделать. Например, модно записать из браузера на лэптопе файл .mhtml, и его отправить, но открыть его не смогут только получатели на айфоне. Записать в обычный .html тоже не вариант, так как там не сохраняются картинки и стили. Сделать скриншот — попадет только небольшой фрагмент. Поставить экстеншн, который делает длинный большой PNG со всей страницей — этот PNG нельзя открыть на айфоне из телеграмма как минимум, отрисовывается только верх. Печать в PDF тоже не выход — результат очень плохой и очень зависящий от желания разработчиков делать print-friendly version.

SingleFile позволяет создать снэпшот страницы из браузера, обычный .html, который открывается где угодно, со встроенными стилями и изображениями. Но что особенно удобно, перед экспортом можно через WebInspector поудалять все, чем делиться не хочешь, и оно не попадет в финальный .html. У экстеншена свободный код на github, и он никуда ничего не отправляет. Судя по всему, если на странице была динамическая подгрузка через JS, то сохраняется не JS, а результат подгрузки, а JS вырезается.

В общем, удобно, хорошая штука, пользуйтесь.

(Это у меня сегодня интервью вышло на внутреннем портале, и мне нужно было им с семьей поделиться в нашем семейном чатике)

Теплые объятия после большой победы: Анастасия Гуляева и её маленькая фанатка | 2025-11-03T16:37:25

Интуиция Теслы: как автомобиль определяет водителя | 2025-11-03T14:29:41

Кстати, в моей Тесле очень умная система понимания, кто водитель. Если я захожу первый в машину, но сажусь на пассажирское, сразу кладу телефон на зарядку в центральную консоль, а Надя вторая, но садится на водительское, и тоже кладет туда телефон, выбирается не мой, а ее профиль автоматом, она ж водитель. Хотя телефоны оба находятся на зарядке под центральной консолью.

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