Интересное что-то
517 subscribers
2.71K photos
253 videos
138 files
4.51K links
Материалы и мысли, понадерганные отовсюду
Блог: https://t.iss.one/asisakov_channel
Чат: https://t.iss.one/youknowds_chat
Download Telegram
Forwarded from Dealer.AI
🤩🤩🤩
https://github.com/huggingface/transformers/releases/tag/v4.55.0

Верим? 🤨

Upd. Пока видим, что обе момзельки MoE с 3.6B и 5.1B активными параметрами, и конечно новый ускорятор на FlashAttention3.

Architecture.
- Token-choice MoE with SwiGLU activations. Классика 🚬
- When calculating the MoE weights, a softmax is taken over selected experts (softmax-after-topk). Тоже ничего нового. 🪨
- Each attention layer uses RoPE with 128K context. Не удивили.
- Alternate attention layers: full-context, and sliding 128-token window. Сам бы так сделал. 😘
- Attention layers use a learned attention sink per-head, where the denominator of the softmax has an additional additive value. Это интересное. 🧠
- It uses the same tokenizer as GPT-4o and other OpenAI API models. Ну ок че.
- Some new tokens have been incorporated to enable compatibility with the Responses API. Ожидаемо. 😏

P. S. Спасибо дорогому подписчику
@azik1725 😘
Please open Telegram to view this post
VIEW IN TELEGRAM
Гид по специализациям в Data Science

Как выбрать подходящее направление?
Прежде чем рассматривать конкретные роли, важно понять:
Вам интересна теоретическая или прикладная работа?
Предпочитаете ли вы работу с данными, моделями или бизнес-аналитикой?
Насколько для вас важна инженерная составляющая?
Data Analyst
Преобразуем данные в бизнес-инсайты, поддерживаем принятия решений
Стек:

построение отчетов и дашбордов (Tableau, Power BI)

проведение A/B тестов

анализ ключевых метрик (DAU, LTV, retention)

знание SQL и основ статистики

ML Researcher
Разрабатываем новые алгоритмы машинного обучения и совершенствовуем существующие подходы, ну и создаём архитектуры нейронок (трансформеры, GAN, RL)+публикация научных работ
Стек:

Python и фреймворки (PyTorch, TensorFlow)

принципы работы вычислительных систем (GPU/TPU)

высшмат (линейная алгебра, теория вероятностей)

умение формализовать исследовательские задачи

Data Engineer
Тут построение и поддержка инфраструктуры для хранения и обработки данных
Стек:

проектирование хранилищ данных (Data Lakes, DWH)

настройка ETL/ELT процессов

работа с распределенными системами (Spark, Kafka)

знание SQL и языков программирования (Python, Java, Scala)

ML Engineer
Переносим исследовательские модели в prod и на нас- их обеспечение стабильной работы в промышленной среде
Стек:

оптимизация моделей для production (квантование, дистилляция)

настройка CI/CD процессов для ML

работа с облачными платформами (AWS, GCP

Docker и Kubernetes

MLOps Engineer
Основная деятельность- обеспечить полный жизненный цикл ML-моделей в проде
Стек:

автоматизация процессов обучения и развертывания моделей

настройка мониторинга и алертинга

оптимизация использования вычислительных ресурсов

MLflow, Kubeflow

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

Для любителей фундаментальных исследований: ML Researcher
Для тех, кто хочет видеть практическое применение моделей: ML Enginee
Для специалистов по работе с данными: Data Engineer
Для аналитиков, ориентированных на бизнес: Data Analyst
Для инженеров, обеспечивающих надежность: MLOps Engineer

Полезные статьи по теме:
یک
ב
س
ד
پنج
ו
@zadachi_ds
Цикл прохождения: Middle WB MLops направления🍇
#wildberries
Вакансию нашёл в тгк канале при вузике(я еврейский мальчик из мгу)

В момент подачи на вакансию имелся годовой опыт работы с командами: 3 месяца стажки с альфа банке, 6 месяцев в Сбере джуном и месяц накручен

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

что такое Docker и зачем? платформа для создания или запуска контейнеров - изолированных сред с приложением и зависимостями, обеспечивает консистентность окружения и переносимость

ограничения Docker?
меньшая изоляция чем у VM (общее ядро, риски безопасности), нельзя запустить приложение под другое ядро ОС без доп. усилий, сложности с GUI, данные по умолчанию непостоянны (нужны volumes)

что такое манифест?
файл (YAML/JSON), декларативно описывающий желаемое состояние объекта в кластере (ex., Deployment с числом реплик и образом)

как k8s взаимодействует с Docker?
k8s командует container runtime (Docker/containerd/CRI-O) через CRI, где и когда запускать или останавливать контейнеры на нодах

зачем Ingress?
для управления входящим внешним трафиком: маршрутизация на основе хоста/пути (L7) и TLS-терминация (реализуется Ingress Controller'ами типа Nginx, Traefik)

зачем балансировщики?
распределять нагрузку между репликами сервиса и предоставлять единую точку входа для клиентов (внутри кластера - Service, снаружи - Service типа LoadBalancer или Ingress)

провайдеры k8s кластеров?
управляемые облачные (GKE, EKS, AKS), он-премис (kubeadm, OpenShift), дистрибутивы (RKE)

как взаимодействуют ML модели и k8s?
модель упаковывается в Docker-контейнер с serving-кодом; деплоится в k8s (Deployment для реплик и отказоустойчивости, Service для доступа); обеспечивает масштабируемость, отказоустойчивость и управление версиями моделей

разница многопоточность vs многопроцессорность?
потоки легковесны, делят память, но ограничены GIL
процессы тяжелее, изолированы, обходят блокировку


Airflow: платформа для оркестрации, планирования и мониторинга рабочих процессов, описываемых как код (DAG), состоящих из задач с зависимостями

MLflow- управление ML lifecycle: Tracking (логирование экспериментов), Projects (упаковка кода), Models (формат + Registry для управления версиями) и Serving

как Airflow и MLflow работают вместе?
Airflow задаёт пайплайн (запуск обучения, деплой), MLflow- отслеживает эксперименты и управляет моделями; задачи Airflow взаимодействуют с MLflow Tracking/Registry


Всё длилось в районе 1.5 часика, потом пошёл играть в цивилизацию🤓

От момента подачи до оффера прошло 2 недели, в целом, оперативно

@zadachi_ds
Нейронки для всего
Уже развёрнутые веб-сервисы
выбираешь задачу -> загружаешь данные
->получаешь ответ

@zadachi_ds
Изи стажка в OzonTech💙
#ozon
Недавно кончилась моя стажка в озоне, поэтому напишу кратко про сам отбор и впечатления...

Параллельно с учёбой на 3 курсе искал подработку, наткнулся на сайт с вакансиями, откликнулся на DS поиска и рекомендаций звучало хайпово.

Закинул резюме и оставил tg на сайте. Hr написала спустя месяц:^) я уж и забыл, что вообще подавался. В резюме были общие слова про место учёбы(финашка), ну и 2 курса по машинке, которые брал факультативно

Сначала был созвон с рекрутером(минут 20, тех вопросов не было)
Потом- тех собес; были теорвопросы по sql, простой quizz по видам ключей и joinов, терия ml и pytorch👇
1️⃣написать свёрточную сеть с одним свёрточным слоем и линейным
(параметры задавал тимлид в ходе интервью)
model = torch.nn.Sequential(
torch.nn.Conv2d(3, 16, 3),
torch.nn.ReLU(),
torch.nn.Flatten(),
torch.nn.Linear(16 * 30 * 30, 10)
)

2️⃣дан кусок кода. нужно отдебажить
for epoch in range(10):
y_pred = model(x)
loss = torch.nn.functional.mse_loss(y_pred, y)
loss.backward()
optimizer.step()
# тут надо вставить optimizer.zero_grad() перед backward

3️⃣написать класс логрегрессии
class LogisticRegression(nn.Module):
def __init__(self, input_dim):
super().__init__()
self.linear = nn.Linear(input_dim, 1)

def forward(self, x):
return torch.sigmoid(self.linear(x))

def fit(self, X, y, epochs=100, lr=0.01):
criterion = nn.BCELoss()
optimizer = torch.optim.SGD(self.parameters(), lr=lr)

for epoch in range(epochs):
optimizer.zero_grad()
outputs = self(X)
loss = criterion(outputs, y.unsqueeze(1))
loss.backward()
optimizer.step()

def predict(self, X, threshold=0.5):
with torch.no_grad():
return (self(X) >= threshold).float()

def predict_proba(self, X):
with torch.no_grad():
return self(X)

Работать было действительно круто, хоть и не без сложностей😶
Больше всего зацепило, что сразу попал в серьёзные проекты с реальной аудиторией в миллионы юзеров...приходилось думать над каждым мельчайшим нюансом, потому что любая ошибка могла повлиять на многих людей
Ещё была топ команда: все ребята были на одной волне, постоянно что-то предлагали и помогали разобраться в сложных моментах+был доступ к куче обучающих курсов(по сути как в Сбере), даже успели отправить на конференцию

зп: 80к гросс фултайм, считаю, для начала карьерного пути- это хорошо🤓
@zadachi_ds
Please open Telegram to view this post
VIEW IN TELEGRAM
Трансформеры — это база в 2025🤖

без них даже на джун-роль не возьмут, так что пробежимся по must-know

Кратко о сути:

текст сначала разбивается на токены (слова или их фрагменты), которые превращаются в эмбеддинги — плотные числовые векторы, фиксирующие базовое значение слова
главное чудо происходит в self-attention:
тут каждое слово формирует три вектора: Запрос (Q) (что ищу?),
Ключ (K) (как найти?),
Значение (V) (что знаю?)
🔜 Q текущего слова сравнивается (скалярное произведение) с K каждого слова в предложении, вычисляя их релевантность
🔜 Эти оценки превращаются в веса внимания (softmax), показывающие, какое влияние оказывают другие слова на текущее
🔜 Итоговое представление слова — динамическая сумма векторов V всех слов, взвешенная по важности

Так "ключ" (дверной) в контексте "замок" и "дверь" кардинально отличается от "ключ" (музыкальный) рядом с "ноты" и "скрипичный"
multi-head attention использует несколько независимых наборов параметров (голов), чтобы параллельно анализировать разные типы связей (например, грамматические и семантические)
также необходимо позиционное кодирование (специальные сигналы), чтобы передать порядок слов

Почему же трансформеры сейчас максимально актуальны
Во-первых, вся последовательность обрабатывается одновременно; во-вторых, любые слова влияют друг на друга напрямую, независимо от расстояния, ну и наконец- важно увеличение данных и параметров стабильно повышает качество


👍трансформеры хороши в рамках сложных задач с длинными зависимостями, большими данными и требованиями к генерации/глубокому анализу
(ex. большие языковые модели, машинный перевод, анализ текста/изображений/аудио, создание контента)
👎но малоэффективны для коротких последовательностей(избыточны), систем с критичными ограничениями памяти или скорости вывода, а также задач с малым объемом обучающих данных

@zadachi_ds_chat
Please open Telegram to view this post
VIEW IN TELEGRAM
Изи стажка в VKВидео✅️
#vk
В начало

Делюсь отзывом о стажировке от выпускника наших курсов. Учусь на 4 курсе бизнес-информатики в ВШЭ. Всё началось с моего друга, он уже работал в вк и дал контакт своего эйчара. Я отправил резюме, и через месяц мне пришла обратная связь на почту... кхе-кхе
Ваше резюме заинтересовало

и просьба связаться с hr. Списались в tg. Было сказано, мол будет алгоритмическая задачка и теория по ML, но я бы сузил до алгоритмическая задачка и рекомендашки

По сути вышло 3 этапа: созвон с эйчаром, тех-собес на 1.5 часа, финал с командой

Тех.собес
1.собеседующий рассказал, почему пошёл в вк (кстати, лично я кайфанул от прикольной фичи в офисе, такой как безлимитная кола(стоит автомат как в бургер кинге:), иногда засиживался на кофе-поинтах в ноуте из-за этого)
2.Алгоритмическая таска
Дан массив чисел и число k. Нужно вернуть k самых частых элементов
по решению: считаем частоту чисел через хеш-мапу, сортируем пары (число, частота) по убыванию частоты, берём первые k элементов, O(NlogN) асимптотика
3.Блок с рекомендашками
написать функцию, которая вычисляет Precision@K
def precision_at_k(recommended_items, relevant_items, K):
top_k = recommended_items[:K]
relevant_in_top_k = [item for item in top_k if item in relevant_items]
return len(relevant_in_top_k) / K if K > 0 else 0.0


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

можно ранжировать айтемы по вероятности клика(CTR, например), учитывая контекст: время, устройство и историю просмотров, после чего делать A/B-тесты и добавлять разнообразие(избегаем застревания в одной категории), повышая вовлечённость

написать формулы метрик ранжирования, которые помню(написал MAP, nDCG, MRR), обсудили ранговую корреляцию+ попросил рассказать основные подходы к построению рекомендательных систем

Финал
ребята рассказали о себе, я поделился своими пет-проектами; в целом, словили общий вайб

через 3 дня дали офер

По стажке
понравился опыт, лично я дорабатывал алгоритмы рекомендаций, крутил данные, проверял гипотезы и даже пару раз устроил небольшой баг в A/B-тестах (но быстро поправил!)
+ немного помогал внедрять фичи в бекенд

вообще, если попадёте, рекомендую ходить на митапы и задавать глупые(как вам кажется) вопросы, быстрее освоитесь:)

зп: 80к гросс, 3 месяца
@zadachi_ds_chat
Please open Telegram to view this post
VIEW IN TELEGRAM
Авторы вспомнили мутационные алгоритмы, которые я ненавидела в бакалавриате, когда мы их проходили, и утверждают, что это заменит RLHF

Если коротко АМЕРИКАНСКИЕ УЧЕННЫЕ придумали как заставить модель учиться на своих ошибках от артефактов CoT (ну а что он тупо существует, еще и жалуются ходят, что он не показывает настоящих размышлений модели)

Работает все следующих образом:

1) запускаем модель на минибатч задач по определенному классу
2) собираем с запуска всякие CoT, тул коллы (когда работаем с агентами), ошибки с компиляторов, когда это кодовые задачи и тд
3) другая LLM-ка смотрит на артефакты и выдает экспертное мнение чего не хватало в промпте, чтобы модель получше ПОДУМОЛА

За что лайк: вместо жадного выбора лучшего кандидата (который ведет к локальным оптимумам), GEPA строит Парето-фронт:
💛Сохраняет всех кандидатов, которые лучше хотя бы на одной задаче
💛Убирает полностью доминируемых
💛Стохастически выбирает из оставшихся

Это дает exploration без раздувания пула кандидатов. GEPA также может скрещивать кандидатов. Если один хорошо эволюционировал модуль А, а другой — модуль Б, то берет лучшие части от каждого

В общем то что? Понятное дело, авторы делают ставку на интерпретируемость процесса эволюции, меньшее время подбора систем промптов таким способом в сравнении с RL обучением, но как это работает на самом деле не понятно, ни кода, ни модели, которая победила модель с GRPO, нифига на руках не имеется.

🖼💅

📖Папир
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Refat Talks: Tech & AI
This media is not supported in your browser
VIEW IN TELEGRAM
🤩 Как новенький LangExtract от Google может помочь в AI работе с доками, RAG и не только

Неделю назад Google тихо выпустил библиотеку, которая решает боль production LLM систем: как гарантировать, что извлеченные данные действительно есть в источнике, а не выдуманы моделью. Ты задаешь примеры что хочешь извлечь из текста (например, даты и суммы из контракта), LangExtract находит все такие элементы и показывает где именно каждый находится в документе, гарантируя что ничего не выдумано. Мне как раз надо было что-то подобное, я полез изучать, потом залез в исходники и залип.

Ключевая инновация - Source Grounding
Каждое извлечение привязано к точным координатам в тексте. Парсите контракт на 50 страниц? Система не просто скажет "срок оплаты 30 дней", но и покажет exact char positions где это написано. Под капотом - умный fuzzy matching алгоритм, который находит источник даже если LLM слегка перефразировал. То есть да, это как NER только без обучения, и как structured outputs, но с точным и надежным определением координат цитаты.

А еще на основе моих тестов эта штука поразительно хорошо и быстро работает с длинными документами.

Ботанский кусок (разверните кому интересно):
Покопался в исходниках, рассказываю суть.

По сути LangExtract = Few-shot Information Extraction + Structured Outputs + Automatic Source Grounding.

В отличие от простого использования structured outputs, автоматически находит точное местоположение типа {"startpos": 41, "endpos": 57}.

Общий принцип:

Документ → [Chunking] → [LLM + Schema] → [alignment phase] → Результат с позициями

Трехуровневый alignment (exact → case-insensitive → fuzzy) покрывает все основные кейсы, результаты потом валидируются.

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

На входе использует example-driven подход - вместо написания промптов вы предоставляете несколько примеров того, что хотите извлечь. Из этих примеров автоматически генерируется JSON schema для structured output и создается few-shot промпт. Поддержка разных LLM провайдеров (Gemini, OpenAI, Ollama) с оптимизациями под каждый.

А с длинными доками хорошо работает за счет трех элегантных решений:
- Intelligent chunking с сохранением границ предложений (не тупое разбиение по токенам)
- Multi-pass extraction - несколько независимых проходов, каждый может найти что-то новое, результаты консолидируются
- Массивная параллелизация - десятки чанков обрабатываются одновременно

Есть встроенная HTML-визуализация с подсветкой найденных элементов прямо в исходном тексте (показана на видео).

Некоторые альтернативы: Instructor/Marvin/Outlines.


Use кейсы для вдохновления:
- Контракты на 100+ страниц - находит все суммы и сроки с точной ссылкой на цитату, можно легко интегрировать в UI "подсветку" фактов
- Медкарты с записями - извлекаем дозировки лекарств с гарантией и визуальным указанием источника
- Data Science стал еще доступнее: на вход тысячи не структурированный документов, на выход - CSV с нужными колонками и точными координатами откуда взял
- Извлекаете из корпоративной wiki, email, Slack: люди, проекты, технологии, их связи. Строим графы знаний - Profit!

Главное: LangExtract не просто надежно извлекает, но еще и доказывает откуда взял каждый факт.
Двигаемся еще ближе от "LLM как магический черный ящик" к "LLM как надежный production инструмент".

Блогпост | Репа

🔥🔁
Спустя долгое время отсутствия приношу пост 👀

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

Так вот это довольно легко сделать (по крайней мере на Linux) с помощью дебагера gdb

Делается так:
0. Сохраняем локально файл libpython.py. Это нужно, чтобы в gdb стек и код вокруг отображался "по-питонячему" (иначе это будет малопонятный C++).
- Для этого открываем CPython на гитхабе
- Переключаемся с main ветки на tag с версией питона, которым запущен зависший код
- Скачиваем файл libpython.py (например `wget https://raw.githubusercontent.com/python/cpython/refs/tags/v3.13.5/Tools/gdb/libpython.py`)
1. Подключаемся к зависшему питонячему процессу
sudo gdb -p 68653
2. Подключаем файл
source libpython.py
3. Выбираем нужный поток, если их несколько
info threads - показать все
thread 1 - выбрать первый
4. Смотрим стек
py-bt
5. Смотрим код вокруг
py-list
6. Смотрим переменные
py-locals
7. Двигаемся по стеку выше/ниже
py-up
py-down

Все команды можно посмотреть как раз в файле libpython.py, который мы скачивали на шаге 0

Один-два раз это упражнение делаешь - код болеть не будет! 💪