Интеграция Prodigy для разметки данных: Active Learning и spaCy

Что даёт интеграция Prodigy

Направления AI-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    998
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1267
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1006

Что даёт интеграция Prodigy

Ваша команда тратит недели на ручную разметку NER-датасетов, а качество всё равно хромает? Мы сталкивались с этим десятки раз. Один из наших клиентов — финтех-компания — тратил 3 месяца на разметку 10 000 юридических документов для извлечения сущностей. После внедрения Prodigy с active learning тот же объём занял 3 недели, а F1-мера выросла на 12%. Интеграция Prodigy с активным обучением сокращает время разметки в 2-3 раза и повышает полноту аннотаций.

Prodigy — профессиональный инструмент от создателей spaCy, оптимизированный для NLP: распознавание сущностей, классификация текста, семантическое сходство. Встроенный active learning направляет аннотатора на самые информативные примеры — те, где модель наименее уверена. Active learning сокращает объём разметки на 60–70% по сравнению со случайным отбором.

Пример конфигурации рецептаprodigy ner.teach my_ner_dataset ru_core_news_lg texts.jsonl --label PERSON,ORG

Как Prodigy ускоряет разметку с Active Learning?

Active learning работает по циклу: модель обучается на небольшом начальном датасете, затем Prodigy отбирает примеры с высокой неопределённостью (например, энтропия >0.5). Аннотатор размечает их, модель дообучается — и цикл повторяется. Это позволяет достичь целевого качества на 60–70% меньше размеченных данных. Встроенные рецепты покрывают типовые задачи: ner.teach, textcat.teach, pos.teach. Для нестандартных сценариев мы пишем кастомные рецепты на Python.

Почему Prodigy эффективнее ручной разметки?

Ручная разметка страдает от утомления аннотаторов и неравномерного распределения сущностей. Prodigy решает это через active learning: он предъявляет только те примеры, где модель неуверена, тем самым концентрируя усилия на сложных случаях. Дополнительно предлагаются подсказки из уже обученной модели, что ускоряет аннотацию ещё на 20–30%.

Какие задачи NLP можно решить с Prodigy?

  • NER: разметка персоналий, организаций, локаций, продуктов. По умолчанию поддерживаются многоязычные модели spaCy.
  • Классификация текста: тональность, тематика, интенты. Рецепт textcat.manual.
  • Семантическое сходство: обучение sentence-transformers на парах предложений.
  • Разметка отношений: связи между сущностями (например, WORKS_AT, LOCATED_IN).

Мы реализовали 50+ проектов по разметке данных, включая датасеты для fine-tuning LLM и кастомных NER-моделей. Опыт — более 5 лет в NLP.

Пример из практики: разметка юридических документов

Для финтех-клиента потребовалось выделить 15 типов сущностей (названия судов, номера дел, истцы, ответчики, суммы исков) в 10 000 PDF-документах. Исходный пайплайн: spaCy ru_core_news_lg с ручной разметкой — давал F1=0.68 после 2 месяцев работы. Мы развернули Prodigy с рецептом ner.teach, использовали активное обучение по энтропии и добавили пре-аннотацию через регулярные выражения. Результат: через 3 недели аннотаторы размеченные 10 000 документов с F1=0.81. Экономия времени — 75%.

Процесс работы

  1. Анализ задачи — определяем домен, типы сущностей, объём, метрики качества.
  2. Проектирование рецептов — пишем конфиги, выбираем стратегию active learning, настраиваем бэкенд (PostgreSQL, Redis).
  3. Реализация — развёртываем Prodigy, интегрируем с пайплайном (spaCy, Hugging Face, PyTorch), экспортируем данные в нужном формате.
  4. Итеративное тестирование — запускаем пилотную разметку, корректируем рецепты, добиваемся target F1.
  5. Деплой и передача — документация, обучение аннотаторов, поддержка 2 недели.
Этап Длительность Результат
Анализ 1-2 дня Техническое задание, план разметки
Проектирование 2-4 дня Рецепты, конфиги, интеграционные тесты
Реализация 3-5 дней Рабочий инстанс, экспорт/импорт данных
Пилот 2-3 дня Отчёт по качеству, корректировки
Деплой 1 день Документация, обучение, передача

Что входит в работу

  • Настройка Prodigy (инстанс, БД, рецепты)
  • Интеграция с вашим пайплайном (spaCy, Hugging Face, PyTorch)
  • Кастомные рецепты под нестандартные задачи
  • Экспорт размеченных данных в форматы .spacy, JSON, Hugging Face Dataset
  • Документация и обучение команды (1-2 созвона)
  • Поддержка на этапе пилотной разметки

Сравнение Prodigy с альтернативами

Критерий Prodigy Label Studio Doccano
Active learning Встроенный, несколько стратегий Через плагины, сложнее Отсутствует
Интеграция со spaCy Нативная, одним кликом Через API Через экспорт/импорт
Готовые рецепты NLP NER, текст. классиф., сходство, отношения Только базовые шаблоны NER, классиф.
Производительность аннотации Высокая (shortcuts, suggestions) Средняя Низкая

Prodigy выигрывает в скорости настройки и качестве разметки за счёт active learning.

Типичные ошибки и как их избежать

  • Разметка без active learning — все примеры подряд. Решение: используйте ner.teach вместо ner.manual.
  • Слишком большое число меток — модель путается. Оптимум — 5-10 меток на задачу.
  • Плохие начальные данные — модель не может выбрать информативные примеры. Начинайте хотя бы с 50 качественно размеченных записей.

Свяжитесь с нами для консультации. Закажите интеграцию Prodigy — получите качественные датасеты в 2-3 раза быстрее.

pip install prodigy # требует лицензионный ключ prodigy ner.teach my_ner_dataset ru_core_news_lg texts.jsonl --label PRODUCT,FEATURE 

Экспорт для обучения spaCy:

prodigy data-to-spacy ./train ./dev --ner my_ner_dataset python -m spacy train config.cfg --output ./model 
# Конвертация в HuggingFace dataset from prodigy.components.db import connect db = connect() examples = db.get_dataset("my_ner_dataset") from datasets import Dataset hf_dataset = Dataset.from_list([ {"tokens": ex["tokens"], "labels": convert_spans_to_bio(ex)} for ex in examples if ex["answer"] == "accept" ]) 

Закажите интеграцию Prodigy — получите качественные датасеты в 2-3 раза быстрее.