Привет, Хабр! Меня зовут Федор Горбунов, руковожу в Doubletapp направлением автоматизации бизнес-процессов с помощью LLM. В статье расскажу, как мы помогли клиенту автоматизировать одну из операций в производственной цепочке, как эта автоматизация ускорила поставку итогового продукта, уменьшила количество ошибок за счет сокращения ручного труда и в конечном итоге сэкономила заказчику деньги.

О чем текст:

Кодовые датасеты для обучения больших языковых моделей (LLM): как клиент работал до нас

Люди пахать, а мы руками махать.

Клиент занимался созданием датасетов для обучения больших языковых моделей (Large Language Models, LLM). Эти модели применяются программистами: они находят ошибки в коде, предлагают готовые решения, помогают обучать новичков и повышают эффективность опытных разработчиков, автоматизируя рутинные задачи.

Для дообучения генеративных языковых моделей через специфическое дообучение — SFT (подробнее об этом здесь) или методы с подкреплением — RLHF (статья про это), требуется качественный датасет. Он состоит из пар запросов и ответов, созданных экспертами. Для создания таких датасетов клиент привлекал аутсорсинговые компании, которые выполняли генерацию и верификацию диалогов.

Почему верификация данных критически важна?

Думай к вечеру, а делай поутру.

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

  • Дорогим;

  • Медленным;

  • Низкого качества.

Среднестатистический сотрудник подрядчика мог проверить лишь два диалога в час, что составляло менее 0,1% от общего объема данных. К тому же около 70% диалогов требовали доработки. Такой процесс замедлял создание датасетов и увеличивал их себестоимость.

Как автоматизация улучшила верификацию диалогов для больших языковых моделей

Мы предложили клиенту внедрить систему автоматической проверки с использованием готовых LLM. Этот инструмент позволил:

  • Снизить время на обработку диалогов в цепочке производства;

  • Улучшить качество верификации;

  • Уменьшить затраты на подготовку датасетов.

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

  • Сократить до 8000 человеко-часов ежемесячно;

  • Снизить стоимость верификации датасетов на 60%.

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

Автоматизируем процесс: что и как мы делали?

Была бы охота, а впереди ещё много работы.

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

Evaluate the following JSON-formatted dialogue based on the specified criteria and provide a JSON-formatted response, considering each criterion. Minor issues should not lead to disqualification unless they critically undermine the dialogue's quality or there are numerous minor issues that collectively impact the dialogue's quality.
Apply assessment criteria only to the sections that correspond to them. Give an assessment for each criterion from 1 to 5, where 5 corresponds completely, and 1 does not correspond at all. Give specific examples of significant mistakes in detailed_issues field.

Некоторые из ключевых критериев, составленных на основе запросов заказчиков:

  • Correctness: Проверка кода на наличие ошибок.

  • Relevance: Соответствие ответа запросу.

  • Efficiency and Standards: Оптимизация и соблюдение лучших практик.

  • Code Comments: Наличие объяснений для сложных частей кода.

Далее мы проверили две гипотезы, чтобы определить наилучший подход к верификации диалогов. Мы протестировали два подхода: первый заключался в разделении диалога на части для отдельной оценки каждой из них, второй — в оценке всего диалога целиком. Оба варианта сравнили с результатами ручной проверки. Тестирование показало значительное улучшение качества: расхождение между эталонной ручной верификацией и верификацией нашим инструментом по отдельным частям диалога не превышало 20%, в то время как при оценке диалога целиком этот показатель достигал 33%. На основе этих результатов мы разбили диалоги на части.

Процесс работы включал следующие этапы:

  1. Мы берем диалог из Argilla.

  2. Диалог делится на отдельные части.

  3. Эти части асинхронно отправляются в нашу LLM с соответствующими промптами.

  4. Каждая часть диалога получает оценку по заранее заданным критериям и сохраняется в формате JSON.

  5. На основе этих оценок проводится финальная проверка диалога. Если количество оценок ниже «2» или «3» превышает установленные пороги, диалог признается невалидным.

Пример JSON-ответа:

{
  "id": "15012002", 
  "valid": false, 
  "assessments": { 
    "translation": { 
      "question": { 
        "Adequacy": 2, 
        "Naturalness": 2
      }, 
      "answer": { 
        "Executable Code": 3, 
        "Relevance": 5, 
        "Error Free": 3, 
        "No Nonsense": 5, 
        "Efficiency and Standards": 4, 
        "Code Comments": 3, 
        "Comprehensiveness": 5, 
        "Neutrality": 1 
      }, ...

Послушай товарищ отличный совет: где нет технадзора, там качества нет.

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

На каждом этапе мы анализировали различия между автоматической и ручной проверкой и в зависимости от этих различий вносили изменения в промпт. После 3–4 итераций мы достигли нужных показателей качества в виде 10% расхождения с эталонной ручной верификацией, что позволило инструменту надежно заменить ручную верификацию.

Результат в цифрах

Какова работа, таков и результат, какова палка, таков и удар.

После внедрения автоматической верификации диалогов мы смогли уменьшить количество брака на 40%, сократили в два раза время прохождения задач по цепочке производства, появилась возможность дважды оценить и переработать одну и ту же задачу, цикл обратной связи стал быстрее в 2 раза, уменьшилось количество ручной работы на 8000 человеко-часов в месяц и на 60% снизилась стоимость проверки датасетов. На данный момент через автоматическую проверку уже прошло 35 000 диалогов.

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


  1. niccolo2019
    24.12.2024 14:24

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


    1. raigfp0 Автор
      24.12.2024 14:24

      Датасет измеряелся в сотнях тысячах диалогов, поэтому заказчику вышло дешево


  1. Oleg_P_7
    24.12.2024 14:24

    Я думал, что производство производит что то материальное...

    И каким боком тут технадзор?