Интересное что-то
557 subscribers
2.79K photos
253 videos
140 files
4.59K links
Материалы и мысли, понадерганные отовсюду
Блог: https://t.iss.one/asisakov_channel
Чат: https://t.iss.one/youknowds_chat
Download Telegram
vklsd_presentation.pdf
2.1 MB
Моё решение — 5/216 место на VK RecSys Challenge LSVD

Мне было интересно снова поучаствовать в соревновании, чтобы проверить некоторые идеи, поучить Polars и поразвивать интуицию вокруг RecSys. Ниже кратко напишу про результаты.

Задача: нужно было предсказать 100 пользователей, которые лайкнут клип VK Видео, причём с самим клипом в истории нет взаимодействий.

Бейзлайн: будем «рекомендовать» тех юзеров, которые уже лайкали автора в прошлом. Сортируем по сумме лайков. Это уже ~30/216 место.

Решение: возьмём всех юзеров, которые видели автора клипа, и отсортируем их с помощью LGBMRanker. Подробнее — в презентации.

Чего было у тех, кто выше, но не было у меня: трансформер, DCN, SANSA, CatBoost. Я не смог это качественно заиспользовать.

Чем хочется поделиться:

1) Я использовал идею из поста 2023 года канала Wazowski Recommends с экспоненциальными счётчиками, чтобы «переварить» все данные. Для расчёта фичей я использовал словари в словарях в Python с помощью кода на ~500 строк, который мне полностью написала ChatGPT. Грубо говоря, я пробежался for-циклом по всему датасету и с экспоненциальным затуханием насчитал все фичи без даталиков.

2) Всех юзеров я разбил по user_id % M == k и работал только с выбранной пачкой (простое шардирование), что позволило гибко настраивать trade-off «скорость vs RAM». Это был ключевой шаг, чтобы обработать все данные.

3) Я пытался искусственно побить клипы на кластеры по контенту и насчитать фичи, но это оказалось бесполезным занятием. У меня есть теория, что когда ты создаёшь группировку user/item на основе контента, но такой группировки не существует в самом сервисе, — это бесполезно для качества.
Например, если мы рекомендуем продукты питания, у нас есть категоризация сервиса и фичи вида user–category. Категории существуют в каталоге → фичи значимые. Если же мы создадим semantic id и посчитаем фичи вида user–semantic-id, эти фичи дадут меньший эффект, чем user–category.

4) Задача подбора аудитории в целом — это во многом история про борьбу за активных людей. Если у вас есть приложение, в котором вы показываете баннер, и вы спросите: кто кликнет на него завтра? Я бы собрал аудиторию из самых активных пользователей приложения. Если отправлять email и собирать аудиторию, кто его прочитает, — это те, кто чаще всего читает email. Тут никакой RecSys / ML не нужен.

И здесь есть тонкая грань между персонализацией и простой эксплуатацией самого активного ядра юзеров под любые нужды. Недаром авторы RecSys Challenge поставили ограничение, что нельзя выбирать одного юзера 101+ раз.

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

В общем, участие оказалось очень полезным, всем советую попробовать себя в соревнованиях по Recsys)
🟠Первый видосик 2026

Выкладываю ДВУХ часовое видео с разбором самых популярных вопросов по с СОБЕСЕДОВАНИЙ нейросеткам, торчу и компьютерному зрению.
Решил почему бы не оцифровать свои знания, если в беседах 1-1 это помогает людям, то пусть сразу всем будет доступно.

Разобрал там вопросы про (краткая выжимка):
🟠Градиентные спуски: SGD+momentum, Adam, шедулеры
🟠Базовый CV: Считаем число параметров в слоях, почему используются именно свертки 3x3
🟠Детекция: Как выглядит лосс у YOLO, Focal Loss, почему в детекции не считается Accuracy
🟠Трансформеры: Абсолютное и относительное кодирование, RoPE, как устроен ViT
🟠Аугментации: Как делать нейросетевые ауги и синтетику, как бороться с последствиями синтетики
И МНОГО ВСЕГО ДРУГОГО
СМОТРЕТЬ ТУТ:

ССЫЛКА
ССЫЛКА
ССЫЛКА

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

🟠Материалы к видео ТУТ
Практиковаться с впоросами можно ТУТ
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Awesome DL
How to build your search engine?

Понимание бэкенда + архитектуры помогает делать ваш вайбкод one-shot готовым решением. Поэтому я люблю читать блоги про о том, как создается архитектура разных приложений - так нарабатывается насмотренность для решения архитектурых задач. А тут бац, и человек собрал свой поисковик с 0 нуля и рассказал все нюансы создания:

- как парсить данные
- как их готовить
- как их хранить
- как эффективно инференсить поисковик, чтобы не ждать вечность
- и сделать своё ai overview

Сохраняйте и читайте 🔖
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Андрей Созыкин (Andrey Sozykin)
LeetСode Study Plan SQL 50

Как я провел лето длинные зимние каникулы – решал задачки по SQL с LeetСode из SQL 50 Study Plan.

Study Plan'ы на LeetСode сделали достаточно давно, но я их открыл только перед новым годом 🤦‍♂️. Это коллекции задачек по заданной технологии, сгруппированных по темам и уровням. Я когда-то записывал видео с разбором задач по SQL c LeetСode, но тогда Study Plan еще не было. И в целом задач по SQL на LeetСode было не очень много. Поэтому видео получилось мало и по тематике они были разбросаны.

В плане SQL 50, как можно понять из названия, 50 задач по SQL. Что важно, все задачи бесплатные. По уровню задачи рассчитаны от начинающего до продвинутого (basic to intermediate). Задачи разбиты по темам:
- SELECT.
- Базовые JOIN'ы.
- Базовые функции агрегации.
- Сортировка и группировка.
- Продвинутые SELECT'ы и JOIN'ы.
- Подзапросы.
- Продвинутые функции для обработки срок и регулярные выражения.

Задачи в основном уровня Easy (32 штуки) и Medium (17 штук), уровня Hard всего одна задача. Причем Hard не очень сложная, в ней нужно применить много различных особенностей SQL одновременно, но особых хитростей нет. Над многими задачами уровня Medium я думал значительно дольше, чем над хардовой задачей.

В целом особенность задач по SQL на LeetСode в том, что почти все содержат хотя бы небольшие, но хитрости. Поэтому даже над простыми задачами приходится задумываться и решение получается не сразу. Зато значительно лучше понимаешь, как действительно работает SQL и как его применять для практических задач с реальными ограничениями.

За каникулы успел решить все задачи из SQL 50. Для их решения почти достаточно моего курса по SQL. Не хватает следующих тем:
- Условный оператор CASE.
- Работа с NULL, в том числе COALESCE.
- Функции работы с датами, строками, регулярными выражениями и т.п.
Также будут полезны CTE, но их использовать не обязательно.

Рекомендую решить SQL 50, если вы начинаете изучать SQL, или хотите его вспомнить для подготовки к собеседованию. Я сам дальше планирую решать на LeetCode задачи уровня Hard. А также задачи на оконные функции, т.к. их в SQL 50 не было.

На LeetCode также есть продвинутый Study Plan Advanced SQL 50, но он только за деньги 😞. Из полезного еще есть два Study Plan'а по Pandas: Introduction to Pandas и 30 Days of Pandas. Недостаток – в них много задачек из SQL 50, но решать их нужно не с помощью SQL, а в Pandas. Код на Pandas написать полезно, но думать второй раз над задачкой уже не придется...
Привет, товарищи-статистики!

Влад опять сделал это: нашел новую свежую статью, которую я коротко окрестил бы как "точки над CUPED". Пока Владислав пилит свой пост на тему как статьи, так и CUPED (ожидайте!), я отмечу самое примечательное на мой взгляд:

1) Начнем с того, что китайцы, выделили два вида симуляций: DBF - Design-Based Framework и MDF - Model-based framework.

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

Второе, модель генерации данных / модель, порождающая данная: во время симуляции мы можем задать популяцию на основе нормального распределения с Mu=24, sigma=2, то есть наша популяция (данные) будут порождены (сгенерированы) моделью N(24, 2)

population = np.random.default_rng().normal(mu_H0, sigma, population_size)
sample_based_on_population = np.random.choice(population, size = sample_size)


Далее мы брали выборки из этой популяции (тогда она сама бы была порождающей данные)
Но... а что если сразу задавать модель генерации данных на уровне выборки? Те же N(24, 2), только всего, условно, пара-тройка измерений?...

sample_based_on_model = np.random.default_rng().normal(mu_H0, sigma, sample_size)


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

1.1. DBF - Design-Based Framework, это подход к причинному выводу и статистическому анализу,
в котором единственным источником случайности считается механизм назначения (сплитовалка),
а не модель генерации данных

1.2. MBF - Model-based framework (модельно-ориентированный подход) - это подход к статистическому выводу, в котором данные рассматриваются как реализации случайных величин (в рамках выборок),
порождённых некоторой вероятностной моделью, а случайность исходит от процесса генерации данных, а не от сплитовалки.

При этом вся математика с ее E(X)=... построена именно на Model-based: поэтому если вы хотите обобщения корректности выводов вашей придумки для всех-всех, то надо обязательно доказывать корректность модели на MDF подходе, иначе вы просто доказали, что это работает в рамках вашей оценки ген. совокупности (DBF), то есть только для вашего случая (!)

В чем разница в рамках результатов симуляции-то?
MDF cимуляция каждый раз генерирует _новые_ данные. Если в модели заложен тяжелый хвост, выбросы будут приходить всегда вне ограничений по удаленности, но такое ограничение как раз будет при DBF (=просто популяция, мы делаем ее большой, но не бесконечной, а значит и не весь хвост соберёем). Используя MBF там, где надо DBF (а мы всегда в этом формате работаем), можно получить слишком много шума (=большая дисперсия), то есть.

Коротко: сначала проверка через Model-Based framework, а потом на Design-Based Framework на своих исторических данных; в случае же чистых симуляций, если у вас n очень большое, то особой разницы уже не будет.

2) Китайцы вывели поправку для theta (это такой коэффициент, который оптимальным образом позволяет ковариате минимизировать дисперсию), когда мы считаем ее отдельно для контроля и теста.

Всего есть три сценария расчета theta, которые вызывали (кажется, до этого момента) споры в индустрии:
1. theta сразу по всем данным теста и контроля, - используют Booking, Walmart, Statsig (Стасик, Стасик, Стасик, - сможешь ли ты меня остановить!?)
2. theta "усреднённая" (pooled) по тесту, контролю, - Netflix, Airbnb
3. отдельно по данным групп, - запрещенная в РФ Meta, Microsoft; эта theta как раз спорная, так как при не шибко больших выборках и MDF может быть смещенность дельты (не совпадать с истинным, например, нулем при отсутствии эффекта).

Но:
- cкриншот показывает, что 3-ая при DBF менее конвервативна и самая мощная из всех
- самое важное: китайские братушки вывели поправку для дисперсии разниц CUPED, чтобы не бояться bias'a! И при этом вывели они просто через базу в статистике! Ту самую, которую скипнуть бы и обмазаться сразу кьюдеп-х*юпед. Оказывается, нельзя! База всему голова.

Проникнуться гениальностью вывода
Forwarded from ML Baldini • Nikita Boyandin (Nikita Boyandin)
#МЛ_мюсли собесы

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

1. Насколько же к собесам стало готовиться проще💳
Вспоминая свою подготовку пару лет назад, самой большой проблемой был поиск информации. Сейчас пайплайн из хендбука Яндекса(огромный им поклон, реализовать все мл подходы с мат базой - это очень сильно), плейслист ШАДА по LLM, плюс видео Карпатого и вы уже отвечать на вопросы и рассуждать. Вам останется добрать кейсы на хакатонах и, если повезет, на коммерческих проектах и дальше вы сможете получить хоть что-то внутри бигтеха. Кажется, собесы будут все больше отходить от вопросов по метрикам и архитектурам к MLSD.

2. Удивило, что нет большого количества вопросов к собеседованиям😠
Но из хорошего нашел методичку из общих вопросов, про NLP, а также нашел сборник кейсов про MLSD. Этих материалов вам точно хватит, чтобы узнать ваши пробелы примерно до уровня техлида.

3. Методички про собесы и поиск компании😱
Около полугода назад прочитал методичку про поиск работы в ML от Бориса опять, очень понравилось, всем советую. На неделе также нашел методичку на английском, хоть она и старая, но очень понравилось строение и в целом виденье автора.

PS: если у вас есть любимые материалы подготовки к собесам, обязательно кидайте в комментарии💃

Надеюсь, из всех дел я смогу вылезти побыстрее, а пока ставьте реакции, ведь они сильно меня мотивируют не забрасывать канал💗
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from DevFM
RAG на практике

RAG – наверное, второе по популярности слово в индустрии после ai-aгент. Всем нужен RAG.

Наткнулся на статью победителя RAG Challenge. Это соревнование, где нужно было за 2.5 часа спарсить 100 PDF-отчётов (до 1000 страниц каждый) и построить QA-систему. Автор занял первое место. В статье описал весь пайплайн, показал код, рассказал, на какие грабли наступил – получилось очень интересно и практично.

Парсинг
Первый этап – превратить PDF в текст. Казалось бы, стандартная задача. Автор перепробовал пару десятков парсеров и пришёл к выводу: нормальных не существует. Таблицы разваливаются, многоколоночный текст путается. Пришлось форкнуть Docling и допиливать руками.

Индексация
Дальше текст нарезается на куски и складывается в векторную базу для поиска. Ключевое решение – отдельная база на каждую компанию. Зачем мешать метрики разных компаний в одну кучу? Область поиска сразу сужается в 100 раз.

Поиск
Векторный поиск возвращает топ-N результатов, но ранжирует их довольно грубо – при векторизации часть смысла теряется. В итоге в топ-10 попадает релевантная информация, но не всегда на первых местах.

Логичная идея – добавить классический текстовый поиск (BM25) и скомбинировать результаты. Автор попробовал – не зашло. Гибридный поиск чаще ухудшал качество, чем улучшал.

Зато сработал другой подход: достаём топ-30 из векторного поиска и просим gpt-4o-mini оценить релевантность каждого куска. Получается точнее, чем любой алгоритмический реранкинг. И стоит меньше цента на вопрос.

Генерация ответа
Чем больше правил даёшь модели в одном промпте, тем хуже она им следует. Модель начинает что-то игнорировать или путать.

Решение – роутинг, в зависимости от типа ожидаемого ответа вопрос уходит в разные промпты. В каждом – только релевантные правила.

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

Помогает Structured Output + Chain of Thought: модель сначала рассуждает в отдельном поле, анализирует контекст с разных сторон, и только потом даёт ответ. Это заметно снижает количество галлюцинаций.

Неоднозначность
Отдельная история – что вообще считать правильным ответом. «Who is the CEO?» – звучит просто. Но CEO это только Chief Executive Officer? Или Managing Director тоже подходит? А President? И таких вопросов в бизнес-области может быть мильон.

Автор называет это – порогом свободы интерпретации. И его приходится калибровать с заказчиком вручную, разбирая edge cases.

Вывод такой, что для построения RAG нет одного магического решения. Качество складывается из мелочей на каждом этапе. И чем глубже понимаешь задачу – тем точнее можешь эти мелочи настроить.

Статью очень рекомендую.

#ai
Forwarded from DevFM
Управление изменениями
Книга "Управление изменениями без потрясений и конфликтов" Адизеса

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

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

Одна из областей, где давно хотел систематизировать знания – понимание особенностей людей. Какие бывают типы, как они действуют, принимают решения. Интуитивно понимаю, что делать, но четкой структуры не было. Решил начать с классики – Адизеса.

Природа изменений
Адизес начинает с того, что изменения неизбежны, а любое изменение порождает проблемы. И эти проблемы необходимо решать – пока никаких открытий:)

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

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

Они по-разному понимают одни и те же слова. "Да" для одного типа – это действительно "да". Для другого может означать "может быть". А для третьего – вежливый способ сказать "нет".

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

Конфликт как норма
А раз люди разные – конфликт неизбежен. Один хочет делать сейчас, другой хочет сначала всё продумать, третий хочет менять направление, четвёртый хочет чтобы все договорились. Адизес утверждает, что конфликт – по сути необходимое условие хорошего решения. Плохо не когда команда спорит, а когда не спорит – значит кто-то молчит или всем всё равно.

Но конфликт бывает конструктивным и деструктивным. Разница – во взаимном уважении и доверии. Если они есть, разногласия ведут к лучшим решениям. Если нет – то ничего хорошего не получится.

CAPI: почему недостаточно быть правым
Допустим, команда прошла через конструктивный конфликт и нашла хорошее решение. Достаточно ли этого, чтобы изменение произошло?

Адизес вводит концепцию CAPI – Coalesced Authority, Power, Influence. Authority – это формальное право говорить "да" или "нет". Power – возможность поощрять или наказывать. Influence – способность убеждать без принуждения. Чтобы изменение реально случилось, нужно собрать все три компонента. Можно быть правым и иметь лучшее решение – но если нет полномочий, власти или влияния, ничего не произойдёт.

Менеджерская результативность – это по сути способность собрать нужный CAPI под свои задачи.

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

#books
Forwarded from DevFM
Продолжая разговор о книге Адизеса хочется еще поделиться парочкой цитат, которые выписал, пока читал книгу.

Если в ответ на ваше предложение босс говорит "нет", спросите, имеет ли он право говорить "да". Если ему не позволено говорить "да", то выясните, кто обладает этим правом. Только этот человек и должен иметь право говорить "нет"


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

Всякий раз, не соглашаясь с собеседником, уделяйте больше внимания тому, как вы выражаете несогласие, а не тому, что составляет его суть


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

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


Проблема новоиспеченных тимлидов, которых поставили, нагрузили обязанностями, а вот про полномочия и власть – забыли. Кого нанимать? Не твое. Решение о премии? Не твое. Приоритеты менять? Согласуй сначала. Еще что-то хочешь внедрить – тоже согласуй. И вот у тебя куча обязанностей, а полномочий и власти – нет.

#books
Я принес. Винни-Пух и его друзья решают менеджерские проблемы

Мой товарищ, коллега и сообщник по сообществу руководителей Management Hub Саша Коныгин написал на Хабре две статьи, которые мне очень понравились по нескольким причинам:

1. Он использует инструменты теории ограничений, чтобы и копнуть вглубь проблемы, и не пытаться разом всё на свете сделать одномоментно.
2. Забавно подано в стиле полилога между известными мультяшными персонажами.
3. Всё структурно и поэтапно. Для самых маленьких, так сказать. 🙂

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

Обе статьи based on true story. 🙂

https://habr.com/ru/articles/971680/
https://habr.com/ru/articles/988796/