AI на дровах 🪵
237 subscribers
77 photos
19 videos
1 file
131 links
Привет! Меня зовут Семён, я работаю в сфере ML и аналитики данных, пишу в блог nerdit.ru статьи о своем опыте и том, что может пригодиться начинающим в начале их пути изучения больших данных.

👾HSE ML Unit Head⚡️
❤️Litres DS Team
Download Telegram
🔥 Автоматизация создания базы знаний с помощью LLM

Привет, друзья! Сегодня расскажу, как мы автоматизировали процесс создания базы знаний, интегрировав генерацию контента с помощью LLM. Основная идея – взять данные из Confluence, дополнить их сгенерированными описаниями и сохранить в виде структурированных записей. Ниже описаны ключевые моменты нашего подхода:

1. Определение структуры данных

Мы задаём структуру записи базы знаний с помощью TypedDict, чтобы гарантировать единообразие данных. Пример:
from typing import TypedDict

class KnowledgeBaseEntry(TypedDict):
ticket_key: str
title: str
question: str # Пользовательский запрос, сформулированный по содержанию
content: str
instruction_text: str # Подробная инструкция
keywords: str
usefulness_score: float # Оценка полезности (от 0 до 1)
components: str # Компонент, о котором идёт речь
page_link: str # Ссылка на документ в Confluence
updated: str # Дата обновления (например, "YYYY-MM-DD")


2. Генерация краткого описания (summary)

Используем LLM для создания краткого описания каждой страницы. Промт формируется с учетом заголовка, контента и контекста родительской страницы:
def generate_summary_with_llm(title: str, content: str, parent_summary: str = "") -> str:
prompt = f"""
У нас есть страница (или чанк) из Confluence.

- Заголовок: "{title}"
- Содержание (HTML или Markdown):
{content}

Ниже приводится краткое описание родительской страницы (для контекста):
{parent_summary}

Задача: сделай короткое (1-2 предложения) summary для этой страницы,
дополняющее родительский контекст (если нужно).
Верни ТОЛЬКО текст summary.
"""
# Отправляем запрос к LLM и возвращаем сгенерированный текст


Ключевой момент – учитывать родительский контекст, чтобы summary было максимально информативным.

3. Генерация недостающих полей

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

def generate_missing_fields_with_llm(
title: str,
content: str,
components: str,
parent_summary: str = ""
) -> dict:
prompt = f"""
У нас есть информация о статье (или инструкции) из Confluence.
- Заголовок: "{title}"
- Содержание (HTML/Markdown):
{content}

Краткое описание родительской страницы (для контекста):
{parent_summary}

Прошу сгенерировать JSON со следующими полями:

1) "question":
- Формулировка в стиле реального пользовательского запроса,
- Вопрос должен быть сформулирован с учётом компонента "{components}".

2) "instruction_text":
- Подробное и структурированное описание (или пошаговая инструкция).

3) "keywords":
- Ключевые слова (не более 5-7), через запятую, отражающие основную суть.
- Последним элементом добавь {components}.

4) "usefulness_score":
- Число от 0 до 1 (1 — максимально полезно).

5) "updated":
- Реальная дата, если указана, иначе "неизвестно".

Ответ верни в формате JSON без лишнего текста.
"""
# Выполняем запрос к LLM, парсим ответ и возвращаем словарь с полями


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

4. Рекурсивное получение родительского summary
👍1
Чтобы добавить контекст, мы рекурсивно получаем summary для родительских страниц:
def get_summary(page_id: str, visited: set = None) -> str:
if not page_id:
return ""
if visited is None:
visited = set()
if page_id in visited:
return ""
visited.add(page_id)
if page_id not in data_map:
return ""
if page_id in summary_map:
return summary_map[page_id]

page_data = data_map[page_id]
payload = page_data.get("payload", {})
parent_id = payload.get("parent_id", "")
parent_summary = get_summary(parent_id, visited)

title = payload.get("title", "")
content = payload.get("content", "")
summary_text = generate_summary_with_llm(title, content, parent_summary)

summary_map[page_id] = summary_text
return summary_text


5. Обработка JSON-файлов и сбор итоговой базы

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

Такой подход позволяет автоматизировать создание базы знаний и значительно ускорить процесс документирования инструкций и статей. Если у вас есть вопросы – пишите в комментариях!
🤔 Чем это круче классического подхода при формировании базы в RAG?

- LLM-based подход: Не нужно вручную парсить и аннотировать документы — LLM сделает большую часть работы.

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

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

- Гибкость: Изменились требования? Легко перенастроить промты, и база данных адаптируется под новые условия.

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

Надеюсь, мой опыт будет вам полезен 😎
🚀 Сегодня я хочу рассказать вам про Structured Outputs — очень удобную вещь, которая здорово облегчает работу с искусственным интеллектом.

Structured Outputs — это подход, когда модель искусственного интеллекта выдает результаты не просто в виде текста или чисел, а в виде чётко организованных структур данных: JSON, XML, таблицы или даже графы.

Почему это важно лично для меня? Потому что это делает работу с ИИ-проектами намного проще. Например, вместо того, чтобы вручную разбирать текстовые ответы модели, я сразу получаю готовые данные, которые легко интегрировать в другие приложения.

Например, если я спрашиваю у модели:
«Какой прогноз погоды в Москве на завтра?»

То она возвращает мне вот такой структурированный ответ:
{
"intent": "weather_forecast",
"entities": {
"location": "Москва",
"date": "2025-03-08"
}
}


Теперь мне не нужно гадать, что именно имелось в виду — информация чётко структурирована и готова к использованию.

Кроме того, Structured Outputs значительно ускоряют аналитику и отчётность. Данные уже разбиты по категориям и готовы к агрегации и визуализации.

Если вы ещё не используете Structured Outputs в своих AI-проектах — советую попробовать.
Это сэкономит вам массу времени и нервов!

#StructuredOutputs #AI #МашинноеОбучение #Автоматизация #AI #JSON #API #DataScience #Интеграция #Технологии
Привет, друзья! Хочу поделиться с вами новыми возможностями @summ_youtube_bot бота 🚀.

Теперь бот умеет преобразовывать YouTube видео в адаптивные образовательные материалы с учетом современных педагогических принципов 🎓.

Вот что нового:

Образовательное видео.
Бот создает структурированные учебные материалы, включающие:

- Учебные цели 📌 — что вы узнаете из материала
- Ключевые концепции 📚 — основные идеи с подробными объяснениями
- Концептуальная карта 🗺 — визуальное представление связей между идеями
- Подробный разбор 🔍 — организованное объяснение содержания
- Резюме 📝 — краткий обзор важнейших моментов
- Применение ⚙️ — как использовать знания на практике
- Самооценка — вопросы для проверки понимания

Подписывайтесь и используйте бота: https://t.iss.one/summ_youtube_bot
🔥2
🤖 Давно не делился новыми статьями в блоге – пора исправляться! 📢

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

📌 Что такое Structured Outputs?
Как модели машинного обучения могут выдавать не просто числа, а сложные структурированные данные? Разбираем этот важный концепт!
🔗 Читать →

📌 Pandas за 10 минут
Если вам нужно быстро освежить в памяти основы Pandas или освоить его с нуля – этот краткий гайд поможет вам разобраться!
🔗 Читать →

📌 Подготовка к собеседованию на позицию ML-инженера
Какие темы стоит повторить? Какие задачи вас могут ждать?
Вопросы и ответы по теме.
🔗 Читать →

📌 SMOTE: объяснение алгоритма с примерами на Python
Боремся с несбалансированными данными в ML: разбираем алгоритм SMOTE и показываем, как применять его на практике.
🔗 Читать →

📚 Надеюсь, эти статьи окажутся полезными!
Пишите, какие темы вас интересуют – будем разбирать их в следующих статьях. 🚀
🤖 LLM-агенты: хайп или новая реальность? 📦

В этом году вокруг LLM-агентов особенно много хайпа. Все говорят, что вот-вот автономные агенты на базе GPT и других моделей заменят целые команды людей. Но на самом деле мы пока далеки от полноценного «коробочного» решения, которое можно просто поставить и забыть.

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

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

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

А что думаете вы? 🚀 Верите ли в скорое появление автономных коробочных решений или считаете, что это очередной технологический хайп без реального продолжения?
👍3
А ещё тут ChatGPT обновился и версия 4.5 теперь вот так может 👍:
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍2
💡 Ян Лекун: AGI — это миф. Встречайте AMI

Ян Лекун — лауреат премии Тьюринга, один из отцов глубокого обучения и главный ИИ-учёный в Meta — считает, что термин AGI (Artificial General Intelligence) пора отправить в архив.

🧠 Почему? AGI предполагает создание интеллекта, который справляется с любыми задачами не хуже (или лучше) человека. Но Лекун указывает: человеческий интеллект сам по себе вовсе не "general". Он состоит из набора специализированных механизмов, наточенных эволюцией под конкретные типы задач. Мы не универсальны — мы просто хорошо приспособлены к определённому контексту.

⚙️ Вместо AGI, Лекун и его команда продвигают другой термин — AMI: Advanced Machine Intelligence. Это направление сфокусировано на создании систем, которые будут по-своему интеллектуальны — способные к обучению, планированию, восприятию и действию — но не обязаны повторять или копировать человеческий ум.

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

🤖 Возможно, AMI — это и есть реальное будущее ИИ, без мифов и футуристических фантомов.
👍3
Бесплатный дизайн-проект 👌

Продолжаю исследовать возможности генерации картинок через llm. В этот раз загрузил фото участка и попросил GPT4.5 придумать вариант благоустройства.

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

В какое интересное время живем, не правда ли? ☀️
🔥8👍41
Тут в соседнем канале запостили про https://tv.garden решил поделиться, сам тв не смотрю, но тут исследовательский интерес 🙃

Можно "попутешествовать" по телеканалам разных (похоже всех) стран и посмотреть, что сейчас показывают, например в Индии 🇮🇳
👍2🔥1
Почти всё последнее время варюсь в задаче мультиклассовой классификации тестовых данных.

Хочу поделиться инсайтом
(хотя, может, для кого-то это и очевидно).

🔑 Самое важное в любой ML-задаче — это данные. Чем лучше вы подготовите исходный датасет, тем лучше и стабильнее будет обучаться модель. Очистка — это только первый шаг. Тут важно учитывать особенности самой модели: cased/uncased, максимальная длина токенов, распределение классов и прочие нюансы.

Но один из самых недооценённых этапов — оптимизация датасета. Особенно, если у вас не 10к строк, а, скажем, как у меня — почти 200к.

💡 Что я сделал: применил кластеризацию KMeans на эмбеддингах, чтобы "сжать" датасет и отобрать наиболее репрезентативные примеры. Конкретно:

- Разбил данные на кластеры по эмбеддингам;

- Для каждого класса взял по 5000 наиболее типичных примеров (ближайших к центру кластера);

- Ввёл score threshold = 0.5, чтобы отсеять шумные и нетипичные точки.

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

Если кто-то использует похожие подходы — делитесь, интересно будет сравнить идеи 👇
👍2
🛠 Как я организовал оркестрацию данных с помощью Airflow

Недавно собрал пайплайн на Apache Airflow для автоматизации обработки батчей данных. Вот как это устроено:

📦 Каждый батч (например, 2025_01, 2024_12 и т.д.) проходит через три стадии:

- Extract — тянем данные
- Preprocess — подготавливаем к сохранению
- Save — сохраняем в хранилище

⚙️ После завершения всех батчей запускаются финальные таски:

- optimize_clickhouse_table — оптимизация таблицы в ClickHouse
- cleanup_tmp_files — очистка временных файлов

Airflow отлично справляется с зависимостями и параллелизмом — как видно на скрине, задачи исполняются по мере готовности данных.

Теперь мониторинг и управление всем пайплайном занимает минуты, а не часы. Люблю, когда система работает за тебя! 💻⚡️

📲 Все алерты по фейлам летят мне в Telegram через кастомный callback + Telegram API. Уведомления чёткие — сразу вижу, на каком таске упало и с каким exception.

#DataEngineering #Airflow #ClickHouse #ETL #Automation
🔥5👍2
Обучение моделей можно сравнить с выводом ракет на орбиту 🚀🚀🚀
Не так подкрутил параметр и вышел на орбиту плато не в том месте.
👍2🔥2
🔥 Метод HIGGS теперь доступен для квантования больших языковых моделей!

Исследователи из Яндекса, НИУ ВШЭ, MIT, KAUST и ISTA представили новый алгоритм квантования больших языковых моделей (LLM) — HIGGS (Hadamard-Input Gram-Gauss-Seidel).

Что важно знать:
⚡️ Zero-shot подход — метод не требует дополнительного обучения модели после квантования.
🚀 Позволяет эффективно запускать мощные LLM прямо на смартфонах и ноутбуках без потери точности.
🎯 Уже поддерживаются модели Llama 3 (70B, 405B) и Gemma 2 (8B, 27B).

Метод доступен разработчикам и исследователям на:
🤖 Hugging Face
💻 GitHub
📚 arXiv

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

Подробнее о разработке на сайте НИУ ВШЭ: https://www.hse.ru/news/science/1034477704.html

#HIGGS #ИИ #LLM #НИУВШЭ #Яндекс #AI #HuggingFace #GitHub
👍2
AI на дровах 🪵
Почти всё последнее время варюсь в задаче мультиклассовой классификации тестовых данных. Хочу поделиться инсайтом (хотя, может, для кого-то это и очевидно). 🔑 Самое важное в любой ML-задаче — это данные. Чем лучше вы подготовите исходный датасет, тем лучше…
Всем привет! 🖖

Давно не писал, решил немного рассказать, как дела)
Работаю над проектом, где с помощью ML помогаем техподдержке — и вот что неожиданно оказалось самым непростым:

Обучить модель — это ещё полбеды. Куда сложнее сделать так, чтобы она сама дообучалась без участия человека.

Подумав-подумав, выбрал такой стек:

- MinIO — храним датасеты и обученные модели.
- Airflow — управляет пайплайнами и следит за процессами.
- MLflow — метрики, версии моделей, история экспериментов.
- FastAPI — API для дообучения на GPU.
- Grafana — мониторим модели и инфраструктуру.

🔍 Как определяем лучшую модель?

Каждое обучение завершается валидацией на данных, которых модель не видела. Считаем метрики (точность, F1, recall), сохраняем их в MLflow.

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

🤖 Что делает модель?

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

🗂 Откуда берутся данные?

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

Отдельно хочу выделить Airflow.

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

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

Если всё хорошо — новая модель уходит в прод. Логи пайплайнов и ошибок отправляются в Telegram, плюс часть мониторинга реализована через Grafana.

🧠 Какая модель используется?

В основе — кастомный классификатор на базе pretrained BERT. Перед этим модель была дообучена на задаче masked language modeling (MLM), чтобы лучше понимать специфичный язык и стиль обращений из нашей предметной области. Затем мы дообучаем её под категории тикетов и типичные формулировки пользователей, дообучаем под специфические категории и стиль обращений. Используем transfer learning, чтобы быстрее адаптироваться к новым данным.

🛡 Как не допустить плохую модель в прод?

Если метрики хотя бы на немного хуже — модель остаётся в тесте. Только стабильно лучшие проходят дальше. Дополнительно есть защита от случайного деплоя через ручную валидацию ключевых изменений.

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

💬 Если среди подписчиков есть коллеги с ML-пайплайнами — поделитесь своим подходом. Будет интересно сравнить!

#machinelearning #mlops #airflow #mlflow #bert #techsupport #automation #fastapi #grafana #minio #deeplearning #mlpipeline
🔥5
📍 AI на дровах: смена концепции

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

Так вот, всё это время я пытался вести канал "по уму": серьёзные заметки, технические подробности, немного ML-евангелизма.
Но на самом деле - это не мой стиль и таких каналов уже целая кучка.

Меняю концепцию канала, теперь "AI на дровах" 🪵

Будет лес, логика и логит.
AI на дровах - это не про романтику. Это про правду жизни ML-инженера, у которого рядом топор, ноут и баг в логах.

Если ты когда-то запускал обучение и варил гречу одновременно - тебе сюда.
Если нет - тоже 🤗
2🔥8
Проект выходного дня: Нейросеть в лесу 🌲🤖

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

Так появился проект под названием "Нейросеть в лесу".

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

⚙️ Конкретная цель проекта - обучить TinyML-модель, которая будет распознавать пение птиц. Микрофон будет записывать звуки, на их основе будет строиться спектрограмма, которую нейросеть будет анализировать. Распознанные голоса птиц будут автоматически записываться в журнал наблюдений.

На следующем этапе я хочу строить аналитику: как часто и какие птицы появляются в зависимости от времени суток, температуры и влажности. Получится своего рода мини-экологическая станция с интеллектом.

🧠 Оказалось, что новый микроконтроллер ESP32 версии S3 заточен как раз под запуск TinyML моделей и простых нейросетей прямо на устройстве. Кажется, это будет интересный опыт - попробовать собрать нейросетевую станцию практически на коленке.

На старте:
- микрофон, климатический сенсор, ESP32 и немного python
- лесной датасет
- цель: собрать первые фрагменты лесной реальности и научить ИИ их распознавать

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

Наверное, я даже заведу Git-репозиторий, куда буду скидывать данные, код-реализацию и, возможно, примеры моделей. Хочется, чтобы всё было прозрачно и воспроизводимо, вдруг кому-то пригодится 🤷‍♂️

Ну а пока - жду, когда приедут все комплектующие)

Кому интересно, в комментариях, примерная схема сборки проекта 👇

#нейросетьвлесу #tinyml #esp32 #iot #ml
🔥5👍4👏2