Перейти к содержимому
Анонсы8 мин чтения

Potato 2.14: обучение моделей на вашей собственной разметке

Potato 2.14 обучает модели на метках исследования с помощью 38 тренеров, оценивает каждый запуск на отложенных объектах и показывает предсказания разметчикам как предварительные метки.

Potato Team

Potato 2.14 обучает модели на собственной разметке исследования. Запуск подгоняет одного из 38 тренеров под метки, поставленные разметчиками, оценивает модель на объектах, отложенных от обучения, и записывает предсказания модели обратно в объекты как предварительные метки, которые разметчики подтверждают или исправляют. В версии 2.13.1 был один тренер, sklearn-text. Выпуск также импортирует файлы диаризации RTTM, экспортирует исправленные реплики дикторов, запускает WhisperX для локальной транскрипции и исправляет несколько ошибок, которые меняли показатели согласованности и экспорты, поэтому прочитайте заметки об обновлении до установки.

bash
pip install --upgrade potato-annotation

Заметки об обновлении

Сначала выполните potato validate config.yaml --strict для каждой конфигурации. Следующие изменения могут повлиять на то, как ведёт себя работающее исследование 2.13:

  • assignment_strategy: llm_confidence теперь упорядочивает очередь. Стратегия выдаёт сначала наименее уверенную предварительную метку, затем объекты без предварительной метки. Прежние выпуски принимали это значение и назначали объекты случайно.
  • model_training проверяется при валидации и запуске. Неизвестный ключ под writeback или auto_retrain, выборка с именем, отличным от train, val или test, и запись writeback.schemas, не являющаяся схемой, — это ошибки, которые останавливают сервер.
  • Страница Training показывает оценку на отложенных объектах. Столбец оценки раньше показывал точность на обучающих данных. Оценка запуска 2.13 несопоставима с оценкой на отложенных объектах из 2.14.
  • Связи, цепочки и события попадают в экспорты. Ответы span_link, coreference и event_annotation отсутствовали во всех экспортах, а CSV и TSV теперь добавляют столбцы <scheme>._links и <scheme>._events.
  • Potato больше не указывает ujson в install_requires. Вашему собственному скрипту, который импортирует ujson из окружения Potato, нужна команда pip install ujson.

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

Обучение моделей предназначено для исследования, где объектов больше, чем разметчики разметят, и модель, обученная на первых метках, может предложить остальные. Цикл состоит из трёх шагов. Сначала запуск сводит метки каждого объекта в один ответ и делит объекты на train, val и test. Затем тренер обучает модель на выборке train в отдельном процессе, а запуск оценивает модель на объектах val и test. Наконец, обратная запись показывает предсказания модели разметчикам как предварительные метки, и ответы, которые сохраняют разметчики, становятся метками для следующего запуска.

Чтобы включить цикл в исследовании со схемой sentiment, добавьте этот блок в конфигурацию исследования:

yaml
model_training:
  enabled: true
  writeback:
    schemas: [sentiment]
    include_unlabeled: true
    min_confidence: 0.6

Разметчики ничего не видят от запуска, пока схема не названа в writeback.schemas. Параметр include_unlabeled: true предсказывает для объектов, которые никто не разметил, а min_confidence не пускает на страницу предсказания ниже 0,6. Перезапустите сервер, откройте /admin/training с админским ключом, выберите тренера и схему и нажмите Train now.

Страница Training после одного запуска sklearn-text: форма запуска, таблица Runs с оценкой на отложенных объектах и список тренеров

В учебном проекте Potato examples/ai-assisted/model-training/ есть 160 отзывов о товарах, и он запускает sklearn-text, которому не нужны ни GPU, ни что-либо сверх обычной установки. В документации по обучению моделей описан один запуск на этом проекте: на 120 размеченных отзывах он дал 0,84 macro-F1 на отзывах для проверки и записал 80 предварительных меток. Новый разметчик затем видит каждый из этих отзывов с уже выбранным ответом модели:

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

Руководство Обучите свою первую модель проводит этот пример шаг за шагом.

Тренеры для каждого вида разметки

Страница Training предлагает для каждой схемы только тренеров, которые к ней подходят. Каталог тренеров перечисляет всех 38 тренеров с командами установки, а список ниже называет основные группы:

  • Текст. hf-text-classification, setfit и sklearn-text классифицируют объекты. hf-token-classification размечает фрагменты, hf-relation связывает фрагменты в связи, события и цепочки кореференции, а byt5-gloss разбивает слова на морфемы и глоссирует их для интерлинеарных глосс.
  • Изображения. torchvision-detect и ultralytics-detect обучают детекторы, а torchvision-segment, ultralytics-segment и cellpose обучают сегментаторы. Запуски детекции и сегментации нарезают целые слайды и большие изображения на плитки и обучаются на плоскостях микроскопии и картах GeoTIFF. volume-unet сегментирует 3D-объёмы, layoutlmv3 размечает макеты страниц, а vlm-sft дообучает визуально-языковую модель на подписях, привязке и шагах GUI.
  • Аудио и видео. whisper-asr дообучает Whisper на исправленных репликах транскрипта, diarization обучает модель дикторов на репликах дикторов, hf-audio-tagger размечает сегменты аудио, а video-track отслеживает объекты по кадрам.
  • LLM и агенты. llm-sft дообучает на свободных текстовых ответах, llm-dpo — на парных предпочтениях, reward-model — на парных, ранжированных и best-worst ответах, а prm-reward — на оценках шагов трасс агентов.
  • Наука. rdkit-property предсказывает ответы о молекулах, peak-cnn предсказывает положения пиков на спектрах, signal-cnn размечает интервалы временных рядов, а episode-model размечает эпизоды роботов.

Тренеры ultralytics распространяются под AGPL-3.0, а веса LayoutLMv3 имеют лицензию CC BY-NC-SA 4.0. Запуск любого из них сначала просит принять лицензию. Команда pip install "potato-annotation[train]" ставит всё, что нужно текстовым, графическим, аудио- и LLM-тренерам, а каталог называет отдельные установки.

Оценки на отложенных объектах и предварительные метки

Каждый запуск оценивает свои предсказания на объектах val и test метрикой, подходящей схеме, например macro-F1 для меток, mAP50 для рамок, долей ошибочных слов для транскриптов и Dice для объёмов. Объект с меткой и без предсказания считается ошибкой, а показатель покрытия сообщает долю объектов, получивших предсказание. Объекты выборки train предварительных меток не получают, а объект, который исправил проверяющий, всегда попадает в выборку train следующих запусков.

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

Обучение на GPU-сервере или кластере

Запуск выполняется на бэкенде. Бэкенд local обучает на сервере Potato и выбирает CUDA, Metal от Apple или процессор. Бэкенд ssh запускает обучение на GPU-сервере, до которого Potato может добраться, и передаёт обратно ход обучения и модель. Бэкенд slurm отправляет запуск на вычислительный узел командой sbatch с головного узла и требует только sbatch, squeue и scancel. Бэкенд agent обслуживает машину, до которой Potato не дотянуться: она запускает potato training agent и опрашивает сервер в поисках задач. Перед запуском на бэкенде ssh команда potato training check <backend> config.yaml сообщает удалённый Python, удалённые GPU и недостающие обучающие пакеты. Руководство Обучение на GPU-сервере, кластере SLURM или машине за NAT настраивает каждый бэкенд.

Выбор того, что спрашивать дальше

hf-text-classification и hf-image-classification принимают параметр acquisition, который записывает оценку на каждое предсказание по margin, энтропии, BALD или расстоянию core-set. Затем assignment_strategy: llm_confidence выдаёт первым объект с наибольшей оценкой. auto_retrain по умолчанию запускает новое обучение после каждых 25 новых аннотаций, и каждый запуск заново оценивает неразмеченные объекты. Активное обучение сравнивает этот цикл с блоком active_learning в Potato.

Модели, которые у вас уже есть

Пять тренеров ничего не обучают и оценивают модель, работающую в другом месте: label-studio-ml для бэкенда Label Studio ML, openai-vlm-boxes для визуально-языковой модели за OpenAI-совместимым API, hf-inference для Hugging Face Inference Endpoint, roboflow и cvat-nuclio для бессерверной функции CVAT. Предсказания этих моделей получают ту же оценку на отложенных объектах, обратную запись и проверку, что и предсказания обученной модели. Руководство Предварительные метки и оценки на отложенных объектах от модели, которую вы уже запускаете описывает каждый мост.

Публикация модели

Страница запуска отправляет модель на Hugging Face Hub вместе с карточкой модели, где названы тренер, базовая модель, схемы, размеры выборок и оценка на отложенных объектах. Название репозитория вводится дважды, репозиторий по умолчанию приватный, а токен берётся из переменной окружения на сервере. Предсказания и обучающие данные остаются на сервере. Та же страница сохраняет выборку запуска и человеческие метки этой выборки как версию датасета, чтобы сравнивать последующие модели на тех же объектах.

Транскрипты, импорт и экспорт

  • WhisperX. Команда potato transcripts --transcribe использует WhisperX, если WhisperX установлен, с временем слов из принудительного выравнивания при --asr-word-timestamps, а иначе переходит на faster-whisper. Запуск whisper-asr записывает копию дообученной модели в формате CTranslate2, которую загружает --asr-model.
  • Импорт RTTM. Команда potato import -f rttm превращает файл диаризации или папку файлов диаризации в один объект на запись с репликами дикторов для исправления. Параметр --speaker-map переименовывает дикторов.
  • Экспорт segments. Формат записывает одну строку JSONL на аудио- или видеосегмент и файл RTTM на разметчика.
  • Зависимости CoNLL-U. HEAD и DEPREL берутся из направленной схемы span_link поверх экспортируемых фрагментов. Раньше оба столбца всегда содержали _.

Исправления, влияющие на результаты

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

  • Ничья в ранжировании, записанная как B,D=A,C, читалась как один объект с именем D=A, поэтому тау Кендалла и футрула Спирмена исключали оба объекта в ничьей.
  • Предварительные метки ползунка, мягкой метки и парной шкалы сохранялись как ответ разметчика при загрузке страницы, поэтому объект считался выполненным ещё до чьего-либо ответа. Открытие объекта grounding_eval сохраняло объект таким же образом.
  • /admin/iaa перечислял кореференцию, связи фрагментов и события как фрагменты без оценки. Теперь отчёт оценивает эти три типа по средней попарной F1.
  • Слияние или разделение кода в кодбуке не перенаправляло кодирования, потому что ничто не связывало сохранённую разметку с идентификаторами кодов.
  • Манифесты снимков фиксировали пустые показатели согласованности, а теперь записывают каппу и процент согласия.
  • Проверка модели считала вердикт reject промахом, а не отнесённым к предварительной метке, которую вердикт снял, и точность в отчёте проверки получалась неверной. Пара из отложенного разметчика и объекта также сохраняла поле обратной записи в данных объекта, когда writeback.field отличалось от pre_annotation.field, а теперь данные объекта для такой пары не содержат обоих полей.

Установка 2.14

Обновите пакет, проверьте каждую конфигурацию и установите нужных вам тренеров:

bash
pip install --upgrade potato-annotation
potato validate config.yaml --strict
pip install "potato-annotation[train]"

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