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

В учебном проекте 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
Обновите пакет, проверьте каждую конфигурацию и установите нужных вам тренеров:
pip install --upgrade potato-annotation
potato validate config.yaml --strict
pip install "potato-annotation[train]"Обучение моделей — с него стоит начать, а Что нового перечисляет остальное в выпуске.