Обучение языковых моделей на примере сервиса протоколирования встреч AiGenda

Привет! Я Евгений Гутин, ML-инженер. 

Два года назад я захотел расширить свои компетенции в NLP и больших языковых моделях. Увидел, что ИТМО с Napoleon IT создал проектную магистратуру по ИИ, где можно получать знания от экспертов и преподавателей в процессе развития реального проекта. Эта идея мне понравилась, и я решил, что хочу поступить в AI Talent Hub и развивать себя как ML-инженера и AI Product-менеджера, работая над своим собственным стартапом.

Во время моего обучения родилась идея нового продукта — AiGenda, ML-сервиса, создающего краткое содержание созвонов на основе аудиозаписей. Хочу рассказать про то, как мы обучаем и дообучаем модели, какие метрики используем. 

А если вам интересно узнать, как набрать подобные навыки, то про обучение немного рассказал в конце статьи. 

Вводные

Задача по превращению видеовстречи с несколькими участниками в понятный протокол состоит из нескольких частей:  

  1. Распознавание речи. В качестве базовой модели я выбрал решение Whisper.

  2. Идентификация говорящего. Для определения временных промежутков активности говорящих выбрал модель «pyannote/speaker-segmentation» и модель ResNet34, обученная на наборе данных VoxCeleb, в качестве модели эмбедингов для кластеризации промежутков речи и выделения конечных временных отрезков активности спикеров.

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

  4. Обработка текста. Здесь нужна была мультиязычная модель, способная работать с длинным контекстом и эффективная в обучении и продакшене. Выбирал модели до 7 миллиардов параметров, обученные на контекстном окне не менее 8 тысяч токенов. Остановился на Mistral 7B: эта конфигурация оптимальна по качеству, скорости и потребляемым ресурсам.

Архитектура проекта

При планировании выделили следующие базовые требования к архитектуре:  

  • легкое масштабирование сервиса,  

  • безопасность для конечного пользователя,  

  • удобство быстрого изменения и доработки функционала,

  • отказоустойчивость. 

Всё это отвечало паттерну микросервисной архитектуры, поэтому взял этот подход за основу. 

Основные звенья цепочки взаимодействий: Backend, Frontend и ML. Backend получает запросы от интерфейса платформы и направляет их в ML, который обрабатывает и возвращает ответ через Backend на клиентскую часть. Это исключает прямое взаимодействие пользователя с моделью, что является плюсом при непредсказуемом поведении нейросети.

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

d65198e232b72df9032cd3cb306c4b22.png

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

ML Controller также взаимодействует с векторной базой данных, где хранятся эмбединги спикеров и текста. Основная база с пользовательскими данными изолирована от ML и Front-end, доступ к ней имеет только Back-end сервис. Back-end также управляет доступом к S3 хранилищу.

В итоговую архитектуру ещё включили дополнительный сервис записи видеоконференций, управляемый через Meeting Controller, который динамически выделяет ресурсы с помощью OpenStack API, минимизируя затраты. Предусмотрел и логирование в Grafana и отслеживание ошибок в Sentry.

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

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

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

Обучение моделей 

Несмотря на хорошие результаты Mistral 7B на большинстве тестовых наборов данных, модель в основном обучена на англоязычных данных. Это приводит к снижению качества работы с другими языками. А мы ориентированы на российскую аудиторию, и в ходе предварительных тестов на понимание языка были выявлены следующие проблемы:

  • Ошибки в склонении прилагательных и существительных, а также имен собственных.

  • Низкое качество следования русскоязычным промптам.

Требовалось дополнительное обучение моделей. 

Предварительное обучение языковой модели 

Для улучшения качества LLM требуется обширный набор данных. Нашей первой задачей стал сбор корпуса объёмом не менее 5 миллиардов токенов, включающего тексты для понимания языка и инструкции для выполнения задач.

Мы собрали русскоязычный датасет, состоящий из 5 миллиардов 350 миллионов токенов. В него вошли тексты, диалоги и инструкции из различных открытых источников, часть данных — машинный перевод с других языков.

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

После неудачи с LoRA тюнингом мы решили дообучить все веса модели, используя максимальное количество оптимизаций для экономии ресурсов. Для обучения выбрали библиотеку transformers от Hugging Face.

Мы применили следующие оптимизационные параметры:

  • Mixed Precision и bfloat16,

  • padding-free семплер для ускорения обучения до 10 раз,

  • Flash Attention 2 для ускорения обучения и уменьшения объёма видеопамяти,

  • ZeRO-2 оптимизацию с выгрузкой на CPU и включёнными continuous gradients для минимизации использования ресурсов.

Обучение модели проводилось на двух видеокартах Nvidia RTX A6000 (48GB). Логирование метрик и артефактов проводилось в wandb.ai благодаря бесплатному облачному плану с хранением до 100 GB.

Благодаря множеству оптимизационных техник нам удалось существенно сократить объём потребляемых ресурсов и успешно обучить модель всего на двух видеокартах.

35df530ebae0b06697031be6dbc9ae1b.png434614519850b423502c3611dfec31e8.png

Оценка качества обученной языковой модели 

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

Тестирование проводилось на сервере со следующей конфигурацией:

  • Операционная система: Ubuntu 20.04.6 LTS

  • Графический процессор: Nvidia RTX 4090 (24 GB VRAM)

  • Центральный процессор: 16 ядер Intel Ice Lake

  • Оперативная память: 32 GB RAM

  • Накопитель: 64 GB SSD

Сравнение AIGenda LLM на MERA

Сравнение AIGenda LLM на MERA

Наша модель существенно превосходит базовую модель Mistral 7b и показывает лучшие результаты на нескольких наборах данных по сравнению с GigaChat и MTS Chat:

  • LCS

  • PARus

  • SimpleAR

  • RuHumanEval

  • ruHH

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

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

Дообучение языковой модели 

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

Мы собрали мультиязычный набор диалоговых данных с инструкциями. Аннотации к данным были получены через ручную разметку и с помощью API модели GPT-4 от OpenAI. Итоговые данные включают задачи:

  • суммаризация,

  • выделение Action Items (задач),

  • выделение топиков.

4db73265fb79a07da5ff0c1e054cc8a5.png

Несмотря на разные параметры обучения и конфигурации LoRA, значительной разницы в результате мы не выявили.

8bbfc8a7e63ce8c01f433b496661819c.png

Оценка качества суммаризации 

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

e89fe04383067099917708c9d192656c.png

Дообучение модели распознавания речи 

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

  1. Лекции

  2. Конференции

  3. Интервью

Более 50% данных содержат русскоязычный контент. Разметка была проведена с помощью псевдолейблинга и полу-ручной правки транскрипций.

Для ускорения выявления ошибок в транскрипции использовался алгоритм сопоставления слов со словарем языка, который позволяет определить близкие к существующим слова с опечатками. Например, если модель предсказывает «ЭТМО» вместо «ИТМО», эта область подсвечивается для ручного контроля и исправления.

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

Оценка качества модели распознавания речи 

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

8db2da7693475b9709dbe4abfc258ad1.png

Планы на будущее

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

Напоследок про обучение

Еще несколько лет назад я бы и не подумал, что могу создать технический стартап. Во время обучения в магистратуре AI Talent Hub я участвовал во множестве проектов, например, разрабатывал систему детекции мошенничества на кассах самообслуживания магазинов, искал утопающих людей по камерам у бассейна, но основным проектом стал стартап AiGenda. Я смог погрузиться и в хардовый LLM, и дисциплины по AI Project Management систематизировали мои знания по тому, как нужно выстраивать процессы в компании, взаимодействовать с людьми, делать из сырого кода реальный бизнес и при этом не разориться.

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

В обучении планируются курсы:

  • по фундаментальным концепциям NLP, глубокому обучению с подробным разбором трансформ-архитектур (базовый курс, продвинутый курс);

  • «LLM from 0 to 1» с разбором принципов обучения и дообучения больших языковых моделей, мультимодальных LLM (текст, изображения, голос), инструменты LLMOps, оптимизация LLM;

  • безопасность AI-систем с LLM: Red team, prompt injection, разбор видов атак на LLM и способы противодействия, всё вокруг alignment;

  • мультиагентные LLM (разработка LLM-агентов, исследование алгоритмов и методов взаимодействия агентов, разработка программных решений и цифровых продуктов в мультиагентной парадигме)

и многое другое. 

В общем, находите новых друзей, слушайте умных экспертов и реализуйте полученные знания на практике. В AI Talent Hub всё это возможно. Если будут вопросы, задавайте — с удовольствием отвечу!

© Habrahabr.ru