Интересное что-то
517 subscribers
2.72K photos
253 videos
139 files
4.52K links
Материалы и мысли, понадерганные отовсюду
Блог: https://t.me/asisakov_channel
Чат: https://t.me/youknowds_chat
Download Telegram
newsletter.maartengrootendorst.com/p/a-visual-guide-to-quantization


толковый обзорный блогпост по квантизациям, вводят базовые понятия, довольно толково
Симуляция A/A тестов и зачем это нужно

A/A тест — это эксперимент, где обе группы одинаковы. Он нужен, чтобы проверить: работает ли наша система экспериментов честно и не выдумывает эффекты там, где их нет.

Самое главное, для чего мы проводим синтетический A/A тест (на большом количестве итераций) — это контроль ошибки первого рода. Ошибка первого рода (False Positive Rate) — это вероятность найти изменения там, где их нет. То есть мы заранее знаем, какой процент экспериментов ложно прокрасится (обычно, это очень маленькие вероятности в районе 0.01, 0.05, иногда 0.1, но достаточно редко).

Зачастую это нужно для проверки сплитовалке на определенном срезе пользователей / с кастомными метриками (которые будут участвовать в эксперименте).

В некоторых компаниях есть команда A/B платформы, которая занимается валидацией метрик, применением критериев к различным выборкам / метрикам.

В компании важно уметь пересчитывать ошибки I и II рода на разных срезах. Без этого мы не можем быть уверены, что группы изначально одинаковые. Если этого не будет, то утверждать о том, что изначально выборки были одинаковые (предположение для A/B теста) сказать нельзя. Метрики на предпериоде до эксперимента могут разъезжаться.

В каких случаях стоит запускать проверки?

1. Когда в компании уже есть процесс пересчёта метрик и нужно убедиться, что он работает корректно.
2. Когда появляется новая поверхность или метрика. Важно проверить, что группы не расходятся случайно.
3. Когда есть риск выбросов: несколько объектов могут сильно влиять на результат и завышать вероятность ложных срабатываний.

Я видел историю, когда был запущен эксперимент одним аналитиком, но при подведении итогов на определенном срезе покупателей (кто фактически видел эту фичу), получили ошибку первого рода 0.15 на целевой метрике (по которой мы принимаем решением), хотя ожидалось 0.05, то есть ошибку первого рода мы не контролируем => эксперимент невалиден. Затем я посмотрел, что происходило с группами на предпериоде, целевая метрика по группам разъехалась очень сильно, а это нарушает ключевое предположение A/B теста.


Как запустить синтетическую проверку?

Давайте запустим симуляцию: 10 000 A/A тестов на случайных группах и посмотрим, как ведут себя p-value

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

data = np.random.normal(loc=100, scale=10, size=10_000)
alpha = 0.05

p_values = []

for _ in range(10_000):

idx = np.random.permutation(len(data))

a_idx, b_idx = np.array_split(idx, 2)
a, b = data[a_idx], data[b_idx]

_, p = stats.ttest_ind(a, b)
p_values.append(p)

print('Ошибка первого рода:', np.mean(np.array(p_values) < alpha)) # в идеале здесь будет значение в районе 0.05
plt.hist(p_values, bins=50, edgecolor="black")
plt.xlabel("p-value")
plt.title("Распределение p-value в A/A тесте (10000 симуляций)")
plt.show()


Что мы ожидаем увидеть в ходе синтетического A/A теста?

Равномерное распределение p-value, которое говорит нам о том, что все хорошо, нет проблем. Это значит, что система работает корректно: ложные срабатывания происходят ровно с той частотой, которую мы задали. Можно думать про это как про честную монетку (предположим, что мы подкидываем ее 100 раз, а затем проводим 10 000 симуляций): иногда выпадет значимо, но ровно с той частотой, которую мы сами задали (например, 5% при alpha=0.05).

A/A тесты — это краш-тест для платформы экспериментов. Если они честные, бизнес может доверять результатам A/B.

Понравился пост? Ставьте 🐳, пишите комментарии, что думаете по поводу A/A тестов.
Please open Telegram to view this post
VIEW IN TELEGRAM
Режимы работы Spark: client vs cluster mode

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

Выбор режима зависит от того, где запускается Spark-приложение: на локальной машине или в распределённом кластере. Режим запуска определяется местоположением драйвера.

Тут напомню, что любое Spark-приложение состоит из процесса драйвера и множества процессов исполнителей (executors). Драйвер управляет всей информацией, планирует и распределяет работу исполнителей. Он превращает код в задачи (tasks), которые потом распределяются по исполнителям. Исполнители же непосредственно выполняют вычисления и работу с данными.


В кластере ресурсами управляет диспетчер ресурсов (Resource Manager), который выделяет виртуальные машины или процессы с заданным набором ресурсов для приложений. Мастер приложений (Application Master) координирует выполнение заданий, управление ресурсами и обеспечивает отказоустойчивость. Spark поддерживает разные менеджеры ресурсов: Hadoop YARN, Kubernetes, Standalone.

Есть два основных режима запуска:

⚫️Client mode - драйвер работает на той же машине, откуда подаётся команда spark-submit, т.е запускается задание. При этом исполнители находятся на кластере. Этот режим подходит для интерактивной работы и отладки.

Пример: вы запускаете Spark-скрипт со своей машины, и именно машина управляет выполнением задания.

Плюсы:
💗удобно для разработки и отладки (stdout/stderr выводятся прямо в вашу консоль),
💗легко менять код и получать результаты в интерактивном режиме (например, из spark-shell),
💗прост в настройке.

Минусы:
💗ограничение по ресурсам вашей машины,
💗если машина «упала» или нарушена сеть, то задание тоже упадёт.

⚫️Cluster mode - драйвер запускается не на вашей машине, а на одном из узлов кластера. Управление берёт на себя менеджер ресурсов (YARN, Kubernetes, Standalone).

Пример: вы отправляете задачу на Spark-кластер, и дальше распределением ресурсов занимаются сами узлы.

Плюсы:
💗высокая масштабируемость,
💗отказоустойчивость (если узел падает, задачи перераспределяются),
💗изоляция ресурсов между драйвером и воркерами.

Минусы:
💗сложнее настройка инфраструктуры,
💗отладка может быть не такой удобной (логи нужно собирать через Spark UI или интерфейс менеджера ресурсов).

⭐️Для домашнего использования Spark существует локальный режим (Local mode). В этом режиме всё приложение работает целиком на локальной машине: и драйвер, и исполнители.

Что в итоге?

🟣Local mode - playground для новичков, кто хочет потрогать Spark в домашних условиях.
🟣Client mode - выбор для разработки, прототипов, отладки и небольших задач. Как правило, такой режим выбирают для разработки процессов и анализа данных через Jupiter Notebook и подобные инструменты.
🟣Cluster mode - выбор для продакшена, больших объёмов данных и настоящей распределенной работы.

Источники:

🤩 2 режима развертывания приложений Apache Spark
🤩 Client vs Cluster Mode in Apache Spark
🤩 Understanding Apache Spark Deployment Modes: Client Mode, Cluster Mode, and Local Mode

©️что-то на инженерном
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
5 фишек Clickhouse для аналитиков

И снова на диване.


1️⃣ Отрисовка бар-чарта прямо в терминале

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

bar(x, min, max, width)

где х - название колонки, min и max - диапазон, а width - ширина бара в символах.

2️⃣ Словари для доступа к часто используемым справочникам

Например, когда нужно дотянуть страну или категорию пользователя. Это оптимальнее, чем обычный джойн, снижает нагрузку на базу данных. Для работы со словарем его нужно предварительно создать через CREATE DICTIONARY.

joinGet('dictionary_name', 'attribute', key)


3️⃣ Функция для воронки продукта

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

windowFunnel(window_seconds)(
timestamp_column,
event1_condition,
event2_condition,
...,
eventN_condition
)


4️⃣ Найти цепочку событий

В отличие от windowFunnel, которая возвращает номер достигнутого шага воронки, sequenceMatch отвечает на вопрос, встретилась ли в данных нужная цепочка событий. Оптимально для окон атрибуции в аналитике маркетинга.

sequenceMatch('pattern')(timestamp, cond1, cond2, ..., condN) 


5️⃣ Функции для АВ-тестов

ClickHouse позволяет делать анализ АВ-тестов прямо в SQL, спектр доступных функций довольно широкий. Приведу два примера:

studentTTest(sample1, sample2) -- равенство стредних

proportionsZTest(successes1, trials1, successes2, trials2) -- равенство долей (конверсий) в двух группах


P.S. Возможно, твоя задача решается проще, чем ты думаешь, нужно всего лишь загуглить или заджипитить)

Ставь 🔥, если узнал что-то новое

Ставь 🤕, если все это знал

#SQL_на_диване
@Divan_data
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from partially unsupervised
What makes Claude Code so damn good (and how to recreate that magic in your agent)

Рекомендую почитать любителям везде воткнуть мультиагентный граф, сверху накинуть векторный RAG и удивляться, почему все не очень работает.
Forwarded from Data Secrets
This media is not supported in your browser
VIEW IN TELEGRAM
SGR Deep Research: как из чёрного ящика агентов сделать прозрачную и надёжную систему

Сегодня у нас на повестке дня крайне интересный инженерный проект от наших соседей по тг. Но начнем с конца.

Все мы примерно представляем, как работает вызов инструментов у агентов. LLM сам решает, какие Tools вызывать, в какой последовательности и зачем. Модель адаптируется к результатам, может прерывать выполнение – в общем, полноценная автономия.

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

Именно здесь появляется альтернатива – Schema-Guided Reasoning (SGR). О самой подобной идее много кто уже где-то так или иначе упоминал даже в крупных стартапах, но, что примечательно, впервые end-to-end ее описал и формализовал автор канала "LLM под капотом" (@llm_under_hood) Ринат Абдулин. Вот дока.

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

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

Звучит интересно, правда? Да. Выглядит, как подход, который теоретически может подвинуть классические agent-фреймворки, если речь идёт о продакшене и задачах бизнеса. Прозрачность и контролируемость тут не просто nice-to-have, а буквально вопрос выживания продукта.

А еще это настоящий качественный скачок для маленьких моделей, которые плохи в вызове инструментов сами по себе. Например, Qwen3-4B показывает на Function Calling низкие 2%, а с SGR выдает стабильные 85-90%! Таким образом, целый огромный класс моделей, которые до этого для не подходили для агентных задач, теперь становятся для них открытыми. Это ключевое открытие.

Ну так вот. На основе описанной Ринатом техники другой наш друг, Валера с канала @neuraldeep, уже собрал полноценный опенсорсный production-ready проект SGR Deep Research. О Валере и его предыдущих проектах мы писали вот тут – почитайте.

Его SGR Deep Research – это система для многошагового поиска и анализа информации в интернете. Реализовано:

Вызов инструментов по схеме Schema-Guided Reasoning. Причем подход гибридный, с двухфазной архитектурой: принудительное структурированное рассуждение (JSON Schema) + детерминированное выполнение. Это позволяет даже 4B моделям проявлять агентные свойства, недоступные через классический Function Calling.
Прозрачное логирование на каждом шаге: от уточнения запроса и генерации плана до веб-поиска, анализа и финального отчёта, все трекается.
Работа на легких моделях вроде gpt-4o-mini и qwen instruct от 4b до 32b (+можно подключать свои).
OpenAI-совместимый API с персистентными агентами: каждый агент получает уникальный ID для продолжения исследования.

Где это лучше, чем полноценный агентный Tools? Там, где важна прозрачность + работа с малыми моделями. Например: работа с документами, корпоративные исследования, факт-чекинг, call-центры. Плюс – возможность запускать агентов на потребительском железе вместо дорогих API.

Сейчас ребята активно развивают проект, экспериментируют с гибридными схемами и приглашают сообщество подключаться.
– Если есть идеи – обязательно идите с ними к Валере.
– Если хотите попробовать – на гитхабе найдете подробнейший гайд по использованию.
– И, конечно, давайте ставить ребятам звездочки на проект. Он в своем роде уникальный, так что надо продвигать силами комьюнити.

Еще раз:
Ссылка на проект
Ссылка на канал Рината – автора идеи
Ссылка на канал Валеры – автора кода (здесь можно следить на развитием проекта)
Please open Telegram to view this post
VIEW IN TELEGRAM
Как скинуть обработку тысяч документов на LLM. Кейс Uber.

Вот вы работаете с поставщиками. Поставщик выставляет вам счет за товар/услугу. Конечно, в виде PDF-ки на электронную почту. Очень удобно.

Можно все эти PDF-ки разгребать руками, а можно попросить это сделать LLM, как сделали коллеги из Uber. Давайте разберемся с этим кейсом.

Архитектура решения

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

По шагам:

1. Взяли PDF-ку, сделали из нее картинку, чтобы дальше применять CV-модели
2. Накатили на нее OCR-модель. Распознали текст.
3. Взяли текст, извлекли из него все нужные поля LLM-кой
4. В красивом интрфейсе показали сотруднику извлеченные поля. Он ОКает, либо правит (наш любимый human-in-the-loop)

Самой проблемной точкой мне видится связка OCR + LLM. На шаге OCR уже может накопиться большая ошибка. Можно сразу делать VLM. Например, вот дообученный qwen, который по картинке документа текст распознает. Или, например, VLM Gemini сразу умеет работать с PDF .

Какая LLM под капотом?

Пробовали дообучать опенсорс и просто промптить GPT-4. Удивительно, но промптить GPT-4 оказалось сильно лучше.

Вообще, довольно сложно на опенсорсе победить OpenAI на широких задачах, вроде разработки кода. Но в задачах типа выделение именованных сущностей, классификации это обычно довольно просто (вот пруф).

Странно, что у коллег не получилось. Хотя, они использовали довольно слабые опенсорс модели, вроде Flan T5. Надо было на дипсике пробовать 🙂

Результаты

На первый взгляд, все благополучно. Средняя точность около 90%. В 2 раза сократили ручную обработку документов и на 70% сократили среднее время обработки.

Теперь чуть-чуть подумаем. Допустим, у Uber тысячи поставщиков. И есть целый отдел, не знаю, из 15 человек, который только обработкой счетов и занимается.

Такой проект LLM-автоматизации, если делать все с нуля (и сразу хорошо), делать несколько месяцев отдельной командой инженеров. Как думаете, он окупится?

Что нужно изменить

Перетаскивать это все на платформу. AI-команда не должна делать один проект по автоматизации только обработки счетов. Вы так деньги никогда не отобьете.

AI-команда делает платформу по автоматизации. Там должны быть инструменты: как писать промпты, как оценивать качество, как собирать датасеты, как потом это деплоить и мониторить качество.

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

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

#ai_cases
Я принес. Как просить больше денег и не брать больше ответственности

В моем информационном пузыре спикеров/менторов/блогеров очень много ребят из бигтехов. Там по большей части с зарплатами примерно понятно. Тебе раз в полгода-год делают какую-то индексацию (скорее всего, учитывая твои результаты перф ревью), а если хочешь еще больше денег в оклад, а не по премиям набирать, то предлагают грейдап (но у него есть своя цена – работа сложнее, ответственности больше, спрос выше и т. д.).

Но за 18+ лет трудового стажа я работал в разных компаниях. Вполне хватало и таких, где никаких пересмотров не было. Вернее, они были тогда, когда ты сам об этом решился заговорить. А это значит, что у кого-то они были, например, раз в год, а у кого-то раз в 5 лет. И вот те, кто работали 5 лет без этого разговора, обычно уже накапливали за это время дополнительную работу, ответственность, проекты и тащили это всё годами за те же деньги, а компании было хорошо, ведь «раз молчит, значит всё устраивает».

Вот как раз для таких случаев и подойдет статья из моего любимого Кинжала https://kinzhal.media/kak-poprosit-bolshe-deneg/.

Было ли у вас, что вам прибавляли существенно денег (например, 20% и больше) без докидывания еще чего-то нового? У меня бывало, когда я действовал примерно так же, как описано в статье.
Forwarded from Neural Kovalskii
SearXNG Tavily Adapter: когда жаба душит платить за поиск 🐸

Надоело тратить деньги на Tavily при тестировании агентов?
Мне тоже! За вечер сделал решение

Проблема: Tavily API съедает бюджет при разработке research агентов
Уже на тестах улетело больше $100 а это мы еще к бенчмаркам не перешли

Решение: SearXNG (open-source метапоисковик) + мой адаптер = drop-in замена Tavily достаточно поднять и сменить base_url уже звучу как маркетолог (нет)

# Было (платно):
client = TavilyClient("tvly-дорогой-ключ")

# Стало (бесплатно):
client = TavilyClient(api_base_url="http://localhost:8000")

Точно тот же API, но:
$0 вместо $$$$$$$$$$
Полная приватность
Без лимитов запросов
Web scraping для research агентов (только вот raw_content на bs4)
70+ поисковых движков под капотом (bing сразу в бан!)
погоду он находит при запросах "прогноз цены биткоина 2026"


Быстрый старт:
git clone https://github.com/vakovalskii/searxng-docker-tavily-adapter
docker compose up -d
# Готово! API работает на localhost:8000


Эффект жабы удовлетворен теперь могу тестировать
research агентов сутками за $5/месяц сервера вместо API лимитов!

GitHub: https://github.com/vakovalskii/searxng-docker-tavily-adapter

P.S. SearXNG существует годами, но мало кто знает что из него можно сделать замену коммерческих API!

Не забываем ставить звезды в репо!
Forwarded from BOGDANISSSIMO
2/2. Как оценивать LLM/ML/DL проект в деньгах?

С проектами по автоматизации (где LLM теперь чаще всего и участвуют) всё проще и интереснее. Мы почти всегда можем посчитать сколько сейчас компания тратит на какую-то задачу и отсюда плясать (кстати, отдельное спасибо @neuraldeep и @llm_under_hood, что подробно поделились своим опытом)

Пусть есть 3 сотрудника, 50% времени которых сейчас посвящено задаче, которую будем автоматизировать. Положим, на зарплату и налоги компания на них тратит по $3000. Итого $3000 * 3 * 50% = $4500 в месяц. Умножаем, например, на 3-6-12 месяцев, легко получаем $13K-$27K-$54K, в которые мы можем оценить value проекта для этого бизнеса

Отдельно можно умножить на коэффициент риска, мол, ничего не получится. Также начинать всегда рекомендуется с POC (Proof of Concept), который может занимать 7-14 дней, оплачивается предварительно и на основе которого будет ясно какие риски, какую точность стоит ожидать, давать ли проекту зеленый свет или «Галя, у нас отмена» и расходимся. Остальные выплаты логично разбивать на ключевые майлстоуны, которые вы прописываете в договоре

Важное преимущество автоматизации в том, что для компании если она даже не заменяет экспертов на 100%, то она делает их в 5-10 раз эффективнее, таким образом размер их штата перестаёт быть боттлнеком в бизнесе (см. посты где я писал про «Теорию ограничений» и читайте книгу «Цель» Эльяху Голдратта). LLM сервис можно при желании распараллелить, цена токенов по сравнению с ценой человеко-часа на порядки дешевле, он не уволится, не уйдет в декрет. Одни плюсы

P.S. Ну и отдельно можно вывести кейс, когда что-то что мы хотим сделать с LLM/ML/DL ещё не заменяет никаких сотрудников в компании. Но и здесь мы можем пойти по пути оценки альтернативных издержек, например, сколько будет стоить оплатить разметку такого-то объёма данных в Толоке / студентами / батч-генерацией GPT/Gemini?

При желании почти любую задачу можно так или иначе выразить в деньгах