Глобальные стандарты в этой области — библиотеки PyTorch Lightning или TensorFlow. Обычные пользователи, как правило, не разрабатывают собственные библиотеки для обучения нейросетей. Прежде всего необходимо обладать знаниями высшей математики и иметь полное понимание принципов построения архитектуры нейросети и ее обучения. Собственный пайплайн обучения может быть основан на цикличном анализе нейросети, однако такой метод подходит для простых задач и может занимать много времени.
Используя масштабные фреймворки для машинного обучения, можно не только значительно ускорить процесс обучения искусственной нейронной сети, но и провести серию экспериментов по оптимизации гиперпараметров, таких как скорость обучения, выбор оптимизатора, функция ошибки и параметры регуляризации. Все классические фреймворки позволяют легко выполнять эти манипуляции и строить собственный дизайн-эксперимент.
Как я создал робота-помощника для кол-центра
В моей практике был опыт создания робота-помощника для кол-центра. Главная часть такого помощника — модель NLP. Именно она позволяет распознавать, оценивать и классифицировать обращения клиента. В целом процесс такой системы можно представить в виде следующего пошагового алгоритма:
- Перевод записанного голоса абонента в текст.
- Анализ текста.
- Озвучивание ответа.
Анализ помогает определить тему и цель звонка и даже эмоциональный окрас обращения.
В разработке этой системы принимала участие большая команда специалистов. Со стороны ML работа была выстроена следующим образом:
- Изучение моделей анализа речи с открытым исходным кодом, лучшим вариантом на тот момент времени являлась модель SOVA ASR.
- Вторым этапом была разработка пайплайна общения с моделью, подготовка эндпоинтов и оптимизация процесса общения.
- Следующим этапом мы провели дообучение модели. Так называемый тюнинг модели для нашего конкретного случая. Заказчик передал нам более 10 часов записей работы сотрудников. Каждую запись транскрибировали (составили текст по речи) и направили в обучающее множество выбранной модели.
- Также подготовили и описали сам процесс подготовки данных для обучения и запуска процесса тренировки, чтобы заказчик в будущем сам мог делать модель умнее.
- Для решения задач определения тематики диалога, эмоционального окраса и цели звонка мы использовали более простые алгоритмы машинного обучения. Используя несколько библиотек нейролингвистического программирования, такие как NLTK и Stanza, а также заранее подготовленные сценарии общения, мы выстроили пайплайн анализа диалога. Пайплайн, построенный таким образом, не имеет особой гибкости, но обладает высокой производительностью, что в нашем случае являлось решающим фактором принятия решения.
Разработка такого решения, представленного в пяти основных пунктах, заняла у нашей команды шесть месяцев. Обучение модели анализа речи является трудоемким процессом, но результат стоит затраченных усилий.
Как создать генератор изображений на основе Diffusion Models
Создать собственный генератор изображений на данный момент не составляет труда. Достаточно обратиться к открытым ресурсам моделей Hugging Face. При отсутствии ресурсов для развертывания модели локально с целью использования или обучения можно использовать облачные ресурсы, например Google Colab. На текущий модель существует достаточно большой выбор моделей с открытой лицензией, высоким качеством работы и низким уровнем потребляемых ресурсов. Получив в руки такую модель, остается лишь придать ей уникальности, для этого нужно провести ее обучение.
Для быстрого и несложного обучения можно воспользоваться алгоритмом LoRa. Данный метод обучения не использует большого количества ресурсов и позволяет в короткие сроки получить надстройку над моделью, обладающую новыми знаниями, к примеру художественный стиль, которого модель не знала ранее. При этом новые знания привязываются к токену (ключевой фразе), задаваемой при обучении.
В компании Fabula AI была использована данная технология с целью создания цифрового аватара. А точнее, создания аватарок — портретов пользователей в различных стилях. Диффузионные модели знают множество художественных стилей и персонажей кино и мультивселенных, но не имеют представления, как выглядит человек, который к ней обращается. Для решения этой проблемы мы и использовали алгоритм обучения LoRa. Используя всего 5–7 фотографий пользователя, мы проводили обучение модели, результатом которого является адаптер для диффузионной модели, обладающий знаниями, как выглядит конкретный человек. После чего нам оставалось только указать токен (ключевое слово) в промпте, чтобы модель создала изображение с его портретом.
Как дообучить языковую модель под конкретную область
Для тонкой настройки языковых моделей придумали несколько способов. Одним из таких является использование контекстного окна. Если нам нужна модель, которая обладает знаниями в конкретной области или организации, можно просто дать ей их в момент запроса пользователя и попросить ее опираться в первую очередь на них.
Данный принцип лежит в основе RAG-системы. Это вопросно-ответная система, в сердце которой расположена LLM-модель, в которую передаются знания. Передаваемые знания при этом определяются относительно вопроса (вопрос классифицируется, определяется область знаний, которая близка к вопросу). Обучать такую систему вовсе и не нужно, достаточно грамотно составить базу знаний и предоставить к ней доступ. В итоге всего за несколько дней плодотворной работы можно получить уникальную языковую модель, обладающую знаниями в узкой области.
Примером использования такой системы является бот-аналитик компании. Чат-бот под руководством RAG-системы способен с высокой скоростью находить данные в БД и формировать на их основе легкочитаемый текст. Также на основе данных, получаемой RAG-системой может быть сформировано даже графическое представление знаний. Чтобы это реализовать, нужно поместить в языковую модель запрос на написание кода формирования графика по запросу с использованием заданного языка программирования, например Python. После чего останется только его запустить.
Вторым ярким примером использования RAG-системы является создание умных ботов техподдержки. Такой бот не просто идет по заранее подготовленному сценарию и не может ответить на вопрос, немного отвлеченный от темы, а точно понимает, о чем идет речь, и предоставляет самую актуальную информацию в вежливой форме.
Как я обучал собственную нейросеть
Одна из первых задач, в которой потребовалось обучить собственную нейронную сеть, — это задача обнаружения автомобилей на парковочном пространстве, чтобы оценить, занято ли оно. Для решения этой задачи лучше всего подходят модели семантической сегментации. Скорость анализа изображения такой модели сопоставима с работой в реальном времени. Первым шагом, конечно же, было составление выборки данных и разделение ее на тестовое и валидационное множества. Важно произвести разбиение по парковкам, чтобы выборки были максимально независимыми, что позволяет достоверно оценить эффективность модели.
Следующим этапом стал выбор фреймворка машинного обучения, и я выбрал Segmentation Models PyTorch. Этот фреймворк сегментации изображений имеет хорошую документацию, предоставляет большой выбор архитектурных решений, а также примеры кода для решения популярных задач компьютерного зрения. При выборе архитектуры я руководствовался следующими принципами: выбрать легковесные модели (с минимальным временем анализа), тяжеловесные модели и что-то среднее, чтобы сравнить их эффективность по метрикам качества и скорости и подобрать для себя оптимальный вариант.
Для настройки гиперпараметров я спроектировал эксперимент с помощью библиотеки визуализации данных Weights & Biases (Wandb). Эта библиотека не только позволяет эффективно настроить параметры, но и построить многомерные графики зависимости параметров от точности модели. Детальный анализ полученных результатов позволил выбрать наиболее подходящую для решения поставленной задачи модель сегментации парковочного пространства. Ее конечная точность по метрике качества Dice — 94,84%. Эта нейросетевая модель показывает отличные результаты на протяжении уже трех лет, и на ее основе работает приложение Spot.