В любой крупной компании данных всегда больше, чем понимания, что с ними делать. Они лежат в базах, логах, документах — огромный слабоструктурированный ресурс. Идея о том, что можно научить машину находить в этом хаосе полезные паттерны, когда-то казалась фантастикой, а сегодня это работа руководителя отдела машинного обучения Postgres Professional Савелия Батурина. Вместе с коллегами он на практике связывает мощь языковых моделей с СУБД, чтобы извлекать из данных реальную пользу, рассказывать, по каким граблям для этого пришлось пройти. 

Как начался мой путь в ML… в 16 лет 

В 2016 году, когда мне было 16 лет, начали появляться интересные подходы к компьютерному зрению: ResNet, VGG, YOLO. Они позволяли решать задачи классификации, детекции объекта и ориентирования в пространстве гораздо лучше, чем существовавшие до этого методы. Меня поразило, что с помощью алгоритмов роботы могут ориентироваться в мире, в котором я живу. 

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

Этот интерес привёл к выбору вуза, специальности и профессии. Я изучал прикладную математику в МИФИ, впоследствии это сильно помогло в понимании архитектуры и алгоритмов. 

Первым серьёзным проектом была рекомендательная система, для которой я модифицировал алгоритм FP-Growth и настроил рекомендации товаров. Этот кейс показал, насколько красивыми бывают практические применения математических абстракций, и начал формировать у меня общее понимание философии ML: всё начинается с данных и заканчивается ими, а посередине есть некие подходы, алгоритмы, архитектуры, которые можно тюнить и валидировать метриками.

Где заканчивается ИИ и начинается ML

ML — это множество алгоритмов, которые ищут закономерности в данных и делают выводы на основе выявленного. К этому большому множеству относится и подмножество алгоритмов, связанных искусственным интеллектом.

Обычно ML включают в ИИ, а не наоборот. Соответственно, под искусственным интеллектом подразумевают не ML-алгоритмы, а нечто вдохновлённое биологией, например нейронные сети, генетические алгоритмы, даже искусственно синтезированные нейронные клетки. Всё это относится к биологической интерпретации ИИ-систем.

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

В последнее время термин искусственного интеллекта популярен, потому что появились языковые модели — вероятностные системы, которые могут воспроизводить последовательности текстов, очень похожие на размышления человека. Отсюда и название «искусственный интеллект».

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

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

Кошка съела акулу, или Об абстракциях в ML

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

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

И поскольку LLM — это вероятностная модель языка, она генерирует конструкции на основе своих представлений о мире. Так что вероятность получить последовательность слов вроде «кошка съела акулу» низкая, а «кошка играет с мячиком» высокая, хотя и в той, и в другой правила языка соблюдены.

Как меняются подходы к обучению нейросетей 

Популярный раньше подход SFT (supervised fine-tuning) приводил к проблеме рекурсивной зависимости: когда новые модели обучались на данных, сгенерированных старыми, и качество падало. 

На смену подход приходит RL (reinforcement learning): модели обучаются не просто повторять ответ из разметки, а напрямую улучшать заданную целевую метрику, например пользовательские предпочтения или обратную связь от сложных систем, таких как интерпретаторы кода или СУБД. Именно это позволило ChatGPT добиться таких результатов. 

Одно из направлений исследований в рамках RL — как сделать модели меньше и сохранить качество, то есть улучшать без серьёзного увеличения объёма данных. В частности, для этого создаются агентные боты на базе языковых моделей, которые тоже учатся грамотно использовать инструменты для взаимодействия с внешними системами. Это позволяет изучать механизмы памяти моделей с целью определить, как им запоминать большие контексты и вычленять закономерности из полученных результатов.

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

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

От бизнес-задачи к ML: что нужно учесть 

Главная цель ML в бизнесе — извлекать из данных ценность: улучшать клиентский опыт, повышать метрики, оптимизировать процессы. Чтобы этого добиться, любую бизнес-проблему нужно сначала «перевести» на язык математики — в формальную ML-задачу. К счастью, подавляющее большинство таких задач сводится к одному из пяти основных типов:

  • классификация;

  • кластеризация;

  • регрессия;

  • выявление аномалий;

  • снижение размерности.

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

Эти примеры показывают потенциальный результат, но простого желания «улучшить рекомендации» недостаточно, чтобы начать писать код. Любой успешный ML-проект начинается не с выбора алгоритма, а с чёткой постановки задачи. Чтобы перейти от размытой бизнес-идеи к конкретному техническому плану, нужно заложить прочный фундамент. Он строится на ответах на три главных вопроса:

  1. Какую задачу мы решаем? Улучшаем рекомендации, кластеризуем клиентов, генерируем текст или SQL-запрос.

  2. Какая целевая бизнес-метрика? Это определит выбор алгоритма. Допустим, целевая метрика объёма продаж напрямую зависит от известного параметра, тогда подойдёт линейная регрессия. А если мы знаем, что зависимость нелинейная, можно попробовать полиномиальную регрессию или более сложные ансамблевые алгоритмы: бэггинг и бустинг.

  3. Какие есть данные? Сколько их? Какого они качества? Практически всегда данные изначально грязные, их нужно очищать. Когда данных недостаточно, можно делать аугментацию за счёт синтетических.

Для чего мы внедряем ML и с какими вызовами сталкиваемся

В Postgres Professional мы применяем ML, в частности языковые модели, в связке с СУБД PostgreSQL, чтобы добавлять новые возможности в продукт. Например, модель может суммаризировать большие объёмы информации из СУБД, векторизовать и ранжировать их для более качественного поиска. Также LLM можно использовать для генерации SQL, оптимизации параметров СУБД и плана исполнения конкретного запроса, генерации тестовых данных.

С помощью RL мы обучаем модель взаимодействовать с СУБД: выполнять SQL-запросы, оценивать результат и корректировать параметры.

Больше всего для наших задач подходят модели Qwen от Alibaba, и с каждым релизом они становятся всё лучше. Также мы используем модели на базе архитектуры BERT и их модификации, в частности BGE. А вот Gemma от Google, Llama от Meta* и другие, плохо работающие с русским языком, не справляются с нашими задачами.

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

Для оценки работы моделей мы используем опенсорс-платформу Langfuse, а также сервис мониторинга Sentry и уведомления в Telegram. Чтобы поддерживать актуальность данных, встраиваем пайплайны в Apache Airflow: отслеживаем обновление документации по таймеру, затем запускаем индексацию и векторизацию и бесшовно заменяем одну базу на другую.

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

Одно из эффективных решений для оптимизации инфраструктуры — RAG (retrieval-augmented generation) — индексация корпуса текстов, на основе которых модель даёт ответы. Также используется MCP (model context protocol) — универсальный протокол для описания инструментов: поиска в интернете, по статьям и прочее. Его можно использовать для разных языковых моделей и контекстов. Однако подход только начинает развиваться, и некоторые предпочитают ему кастомный tool calling: он стабильнее и более специализирован под конкретную задачу.

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

ML бывает разный: из чего выбирать


Степень погружения при работе с ML может различаться. ML-исследователь углубляется в каждый нейрон, оптимизирует архитектуру, придумывает новые алгоритмы обучения — всё это требует фундаментальных знаний в математике и программировании.

Есть возможность заниматься ML и на более высоком уровне абстракции: разбираться в подходах к обработке данных и обучению моделей, подбирать наиболее оптимальные решения для задач с учётом заданных метрик. Здесь потребуется гораздо меньше математики, важнее разбираться в инфраструктурных вопросах, MLOps и DevOps.



Есть и другие роли, например вызывающий много споров промпт-инженер. На мой взгляд, это неперспективное направление. Оно трансформируется в контекст-инженеринг, когда специалист не просто пишет текстовый запрос, а полностью формулирует контекст, на основе которого модель или целый ИИ-агент сможет выдавать хороший результат.

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

Как быть в курсе

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

  • Telegram-каналы и другие агрегаторы: новости, научные статьи, теория;

  • инфлюенсеры, которые двигают отрасль: Андрей Карпаты, Илья Суцкевер, Ян Лекун;

  • Хабр: новости, обзоры, подходы;

  • RSS-лента, которую можно собрать по выбранным источникам. 

Почему в ближайшее время нас не захватит Скайнет, но и всё доверять модели нельзя

Хотя модели уже сильно развиты, это далеко не уровень AGI/ASI, где возможна саморепликация и бесконечно автономное улучшение. До суперинтеллекта ещё пройдёт много лет.

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

* Организация Meta Platforms Inc. (владеющая Facebook и Instagram) официально признана экстремистской организацией на территории России по решению Тверского районного суда Москвы от 21 марта 2022 года, с немедленным запретом деятельности этих платформ

Комментарии (0)