Интересное что-то
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 Young&&Yandex
🏁 Новое домашнее задание по ML

Самый разгар сезона Тренировок по ML — публикуем домашнее задание на выходные для участников:

🔘ДЗ №4
https://contest.yandex.ru/contest/79892/enter/
Дедлайн: 28 сентября, 23:59


А ещё смотри подборку материалов от Радослава Нейчева:
🔘
Глава про RL в ML-хендбуке Яндекса (автор Сергей Иванов
)
🔘
Методичка на русском языке от Сергея Иванова

🔘
Книга Ричарда Саттона Reinforcement Learning: An Introduction


И присоединяйся на две последние лекции сезона, ещё можно успеть: yandex.ru/yaintern/training/ml-training

Подписывайся 🔴⚫️
@Young_and_Yandex
Please open Telegram to view this post
VIEW IN TELEGRAM
Двенадцать единственных и очевидных способов записать строку в файл в Python!

В Python можно принтануть сразу в файл!

with open("file.txt", "w") as f:
print("привеееет!", file=f)


Хрен знает, зачем это вам! Но вот знайте!

Вообще в питоне есть один очевидный способ сделать это, дзен дело говорит!

Первый очевидный способ:

from pathlib import Path
Path("file.txt").write_text("привеееет!")


Второй очевидный способ:

from pathlib import Path
Path("file.txt").write_bytes(
"привеееет!".encode("utf-8")
)


Третий очевидный способ:

with open("file.txt", "w") as f:
print("привеееет!", file=f)


Четвёртый очевидный способ:

with open("file.txt", "w") as f:
f.write("привеееет!")


Пятый очевидный способ:

import os
fd = os.open(
"file.txt",
os.O_WRONLY | os.O_CREAT | os.O_TRUNC)
os.write(fd, "привеееет!".encode("utf-8"))
os.close(fd)


Шестой очевидный способ:

import io, shutil
data = io.StringIO("привеееет!")
with open("file.txt", "w") as f:
shutil.copyfileobj(data, f)


Седьмой очевидный способ:

import sys
sys.stdout = open("file.txt", "w")
print("привеееет!")
sys.stdout.close()


Восьмой очевидный способ:

from contextlib import redirect_stdout
with open("file.txt", "w") as f:
with redirect_stdout(f):
print("привеееет!")


Девятый очевидный способ:

import mmap
line = "привеееет!".encode("utf-8")
with open("file.txt", "w+b") as f:
f.write(b"\x00" * len(line))
f.flush()
with mmap.mmap(f.fileno(), 0) as mm:
mm[:len(line)] = line
mm.flush()


Десятый очевидный способ:

import tempfile, os
with tempfile.NamedTemporaryFile("w", delete=False) as f:
f.write("привеееет!")
name = f.name
os.replace(name, "file.txt")


Одиннадцатый очевидный способ:

import csv
with open("file.txt", "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow(["привеееет!"])


Двенадцатый очевидный способ:

import tarfile
import io
data = io.BytesIO("привеееет!".encode("utf-8"))
with tarfile.open("archive.tar", "w") as tar:
info = tarfile.TarInfo("file.txt")
info.size = len(data.getvalue())
tar.addfile(info, data)
with tarfile.open("archive.tar", "r") as tar:
tar.extractall(
path=".",
members=[tar.getmember("file.txt")], filter="data")


Вооот!
Forwarded from Pavel Zloi
Прекурсор про курсор или как вайб-кодить большие проекты

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

Проблема


Итак, предположим на горизонте маячит большой и сложный проект, его ТЗ объёмное и неоднородное - быстрое решение типа "зафигачил всё в чатик модельки и ждёшь чуда" не работает, так как модель забывает контекст, связи между логикой теряются, модель путает уровень абстракции, то переписывает архитектуру, то лезет в детали до того, как мы определили базовые кирпичи.

Как итог - имеем потерю контроля и топтание на месте вместо движения вперёд.

Как я решаю

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

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

В-третьих, "класс за раз". Просим модельку начать пилить код классов, сначала первый слой, то есть те классы, у кого нет зависимостей, на каждый класс пусть модель делает минимальные unit-тесты. Затем второй слой - это классы которые зависят только от классов первого слоя и от самих себя, третий слой - классы которые зависят от классов первого, второго слоёв и от себя и так далее.

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


Однако, каждый раз играть в эту игру не просто, можно проиграть, и тут на помощь приходят инструменты разработчика и Cursor IDE в частности.
Forwarded from Neural Kovalskii
Circuit Tracing от Anthropic: как мы в R&D by red_mad_robot решили заглянуть внутрь LLM при использовании в RAG-пайплайнах

Ищем галлюцинации под микроскопом!

29 мая Anthropic выложили в open-source свои инструменты Circuit Tracing методологию механической интерпретируемости, которую мы в R&D подразделении red_mad_robot первыми применили для решения практической задачи детекции галлюцинаций в RAG-системах!

В начале 2025 года, когда я возглавил новое R&D направление, я поставил амбициозную задачу: не просто оценивать качество ответов LLM "снаружи", а заглянуть внутрь процесса генерации и понять, откуда берутся галлюцинации.

Почему именно RAG-пайплайны и Circuit Tracing?

Проблема была очевидна: RAG-системы часто смешивают информацию из контекста с "внутренними знаниями" модели, создавая правдоподобные, но неточные ответы
Существующие методы детекции работают post-factum, а нам нужно было понять механизм принятия решений в реальном времени

Circuit Tracing от Anthropic давал именно это возможность построить атрибуционные графы и проследить, как токены входного контекста влияют на финальный ответ модели

Конкретные результаты нашего исследования

85% точность детекции галлюцинаций вот что мы получили на тестовом датасете с нашей реализацией на базе Qwen2.5-7B.

Как отмечает наш исследователь Ирина Кошкина:
"Основная идея — измерение доли влияния от токенов входа, соответствующих контексту, среди всего влияния от всех активных токенов."

Наша метрика Groundedness включает:
- Контекстную долю влияния (Gctx)
- Replacement Score — качество признаков vs ошибок
- Completeness Score — полнота объяснения через атрибуционный граф

Технические вызовы и решения

Cross-Layer Transcoders (CLT) стали ключевым компонентом системы
Вместо анализа отдельных слоев мы научились отслеживать влияние признаков между несколькими архитектурными уровнями трансформера

Основные проблемы, которые пришлось решать:
1. Вычислительная сложность процедура анализа на порядки медленнее генерации
2. Зависимость от качества обученного транскодера
3. Токен-уровневое сопоставление, приводящее к ложным срабатываниям

Но результат того стоил мы получили рабочий инструмент для анализа внутренних процессов модели во время генерации ответов в RAG-системах


Отдельное спасибо отделу маркетинга red_mad_robot за подготовку детальной статьи оформления и валидации на Хабре

Отдельное спасибо Саше (@dealerAI) за экспертную валидацию нашей гипотезы на старте проекта

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

Полный технический разбор с кодом, формулами и результатами экспериментов доступен в нашей статье на Хабре закидываем в закладки и ставим +
Forwarded from DeepSchool
Когда память дороже точности: приближённые структуры данных

Проблема: многие алгоритмы с линейным потреблением памяти не справляются с большим количеством данных. Решение: приближённые структуры!

В новой статье разбираем три популярные структуры данных с константным потреблением памяти, решающие ключевые задачи:
- HyperLogLog — оценка количества уникальных элементов,
- Фильтр Блума — проверка принадлежности ко множеству,
- Count-Min Sketch — подсчёт частот элементов.

Все они работают приближенно, зато позволяют работать с огромными объёмами данных. Читайте, как применять их на практике: https://blog.deepschool.ru/math/kogda-pamyat-dorozhe-tochnosti-priblizhyonnye-struktury-dannyh/
#llm #ml #systemdesign

Рекомендую изучить и в необходимых кейсах применять как методичку
Иллюстрация пайплайна из истории про спасение проекта с LLM под капотом

(проект про извлечение промышленных данных из разных PDF от разных поставщиков с таблицами и графиками)

Ссылки:
(1) Серии: 1, 2, 3, 4, 5, 6+7, Эпилог
(2) Описание первого и второго промпта.

Ваш, @llm_under_hood 🤗
Highly recommend this mathy blog about ML:

https://francisbach.com/
This media is not supported in your browser
VIEW IN TELEGRAM
💻 Написал статью про Наивный байесовский классификатор.

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

1. Ссылка на статью.
2. Датасет, с которым работал.
3. Код в Google Colab.

Первый раз писал тут, делюсь болью:

1. Столкнулся с тем, что при написании текста, страничка залагала, а при обновлении не сохранился кеш + нет автосохранения. После каждого написания текста советую нажимать "сохранить".
2. Нет конвертации в LaTeX. Поэтому пришлось писать формулы, конвертировать их в .svg, заливать в GitHub и по ссылке прикреплять в текст, вот такой замечательный пайплайн.
3. Периодически картинки не отображаются (хотя ведет на доступные ссылки) в моем GitHub.

Всем приятного чтива, а я пошел писать следующий пост!

😌😌😌🐸
😌😌😌😌
😌😌😌

Это я жду ваших комментов и реакций! Ставьте 🐳, делитесь и сохраняйте к себе!

Следующие посты будем разбирать математику, которая есть в A/B тестах или в ML. На примете разбор логистической регрессии.

@zasql_python
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Инжиниринг Данных (Dmitry)
Microsoft опубликовал большой курс по Generative AI.

https://github.com/microsoft/generative-ai-for-beginners/tree/main

Снизу по ссылке будут дополнительные ссылки на другие курсы.

Самые горячие кейсы по GenAI, с которыми сталкиваюсь:

- Text to Insights (уже несколько проектов по Snowflake + Cortex Analyst и один по BigQuery + TextQL). Такие проекты для больших компаний (enterprise), больше похоже на продажу AI на уровне директора/VP аналитики другим директорам/VP бизнес подразделений, ну типа мы AI driven

- Developer Performance с использование Cursor или Claude Code. GitHub CoPilot пока не дотягивает. Компания покупают лицензии и дают своим инженерам. В репозиториях обязательно файлы с правилами для GenAI.

- PR reviews, часто с Claude Code и Cursor. Опять же можно добавить правила (best practices) для PR review, чтобы фиксить согласно заданным требованиям (правилам)

- RAG - компании строят чат боты по внутренней и внешней документации и базе знаний, чтобы клиенту было проще найти ответ на свой вопрос.

- MCP интеграции, например DataHub (дата каталог) может ходить в Snowflake (хранилище данных), Cursor может писать запросы и на базе них создавать dbt модели.

Это прям, что мои команды используют. Все сходятся на позиции, что prompt (context) engineering очень важен, и нужно знать основы и следовать рекомендациям вендоров.

PS и конечно это все идет в мою любимую рубрику - увлекательные истории для вашего будущего собеседования:)
Hybrid: SGR + Tools - закрываем дыры, не ломая протокол

После горячих обсуждений и двух предыдущих постов (пост 1, пост 2) я решил показать рабочий гибридный паттерн и сделать вклад в опенсорс-подход к SGR (линк в конце поста).

TLDR пост1 и пост2: SGR пишет ответ через «поля» и якоря [благодаря чему, приводит к более предсказуемым и верным ответам], но в чистом виде легко размывает семантику tool-calling (если мы ее задействуем): в истории появляются вызовы инструментов, которых не было в объявленном наборе и не передались в чат-темплейт, а если неаккуратно обрабатывать вызовы - нас ждёт еще больше проблем. И всё это расходится с практиками провайдеров и публичными бенчмарками по агентости.

Что я сделал:
Я вынес рассуждение в отдельный инструмент generate_reasoning и заставляю модель вызывать его принудительно сразу после любого пользовательского сообщения с помощью управления tool_choice. Внутри reasoning используется SGR: цель, план, ограничения, проверка предпосылок, сигналы о том, нужно ли звать инструменты и какие именно. Далее "агент", опираясь на получившееся рассуждение, вызывает только те функции, которые явно объявлены в tools, строго через нативный механизм вызовов.

Ключевые свойства подхода:
1. Никакого «динамического tools из воздуха». Всё, чем пользуется модель, заранее объявлено; в истории нет инструментов, которых нет в tools. Контроль с помощью tool_choice.
2. История сообщений валидна и читаема: отдельно видно этап рассуждения и отдельно - действия и финальный ответ.
3. Совместимость с практиками провайдеров и бенчами: снижается риск tool-hallucination, корректнее проходит проверка релевантности функций.
4. Контроль внимания вместо хаоса: сначала гарантированное рассуждение, потом действия. Это делает маршрутизацию детерминированной и устойчивой. Тк много трейновых датасетов, как и в каких ситуациях вызывать тулы, мы используем очень много компьюта в свою пользу: не только будущая корректная оценка цепочек ризонинга (для метрик), но и адаптивный выбор тулов.

Почему это устойчивее, чем «SGR-only»:
- Нативные tool_calls, а не эмуляция вызовов через content (да, можно этого избежать, подкладывая вызов SGRв tool_calls, но не решается следующий пункт:
- Меньше неожиданностей для модели: нет сценария «ответил JSON -> внезапно прилетел tool», когда tools пусты.
- Проще поддерживать качество: reasoning становится обычным шагом workflow. Его вообще можно вынести на значительно более мощные модели или наоборот, более слабые. Позволяет нам давать больше контроля.

Получается стабильный и интерпретируемый паттерн: чат-темплейт согласован с историей, вызовы инструментов не идут «против шерсти», а модель ведёт себя предсказуемо.

Рекомендую попробовать гибрид SGR + Tools на своих задачках

линк на код

поддержите реакциями ❤️
🐸 Python для аналитика

90% задач аналитик решает в SQL. Но остаются те самые 10%, где без Python никак 👩‍💻

Я собрал Google Colab, где в одном месте покрыта большая часть методов (практические все), которые реально нужны аналитику: от базовых конструкций (строки, списки, словари) до pandas/numpy, работы с API, визуализации, Spark и Airflow и др.

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

👉 Colab дублирую еще тут

Ставьте 🐳, если хотите поскорее получить такую базу знаний. И пишите, что ещё добавить в шпаргалку!
Please open Telegram to view this post
VIEW IN TELEGRAM