Распознавание именованных сущностей (Named Entity Recognition, NER) — это одна из самых востребованных задач в обработке естественного языка (NLP). Чтобы создать качественную модель для NER, требуется тщательно размеченная обучающая выборка, а процесс её создания может занять много времени и ресурсов. В этой статье я расскажу о своём пути разметки данных, начиная с использования Open Source инструментов и переходя к Prodigy, профессиональному инструменту для создания обучающих наборов данных.

Почему мы выбрали NER

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

Всё началось с задачи автоматизации HR-процессов, где от модели требовалось распознавать специфические сущности, такие как место работы, должность и длительность опыта. Задача оказалась нетривиальной, поскольку требовала не только создания меток, но и грамотной разметки текстов на русском и английском языках. Мы начали с Open Source решений, чтобы протестировать основные подходы и понять, какой инструмент лучше подойдет для наших задач.


Шаг 1. Разметка с помощью Open Source инструментов

На старте мы выбрали Open Source инструменты, такие как Label Studio и Doccano, которые предоставляют удобные веб-интерфейсы для разметки данных.

Выбор инструмента

Для начала мы протестировали несколько Open Source решений и остановились на Label Studio, поскольку он предлагал следующие преимущества:

  • Поддержка различных типов разметки — от выделения сущностей до разметки классов.

  • Гибкость в настройке интерфейса — можно адаптировать под свои нужды.

  • Поддержка интеграции с Python — позволяет легко экспортировать разметку в формате, совместимом с библиотеками, такими как spaCy.

Основные этапы работы с Label Studio

Мы выбрали Label Studio за его простоту настройки и поддержку пользовательских меток для специфичных сущностей.

  1. Установка и настройка. Установка была достаточно простой, благодаря Docker. Мы также настроили кастомные теги для нужных нам категорий — место работы, должность, опыт.

  2. Импорт данных. Наша текстовая база данных включала резюме и описания вакансий. Мы добавили её в Label Studio, чтобы приступить к разметке.

  3. Процесс разметки. Интерфейс позволял удобно выделять и помечать текстовые блоки, соответствующие нужным нам сущностям.

  4. Экспорт данных. Мы экспортировали разметку в формат JSON, что позволило безболезненно интегрировать разметку в пайплайн обработки данных.

Преимущества и ограничения Open Source решений

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

  • Ограниченная производительность — при увеличении количества данных интерфейс становился медленнее.

  • Отсутствие функции Active Learning — разметка всех данных вручную заняла бы слишком много времени.

    Пример разметки OpenSource инструментом (на синтетических данных)
    Пример разметки OpenSource инструментом (на синтетических данных)

Шаг 2. Переход на Prodigy

На этом этапе мы перешли к использованию Prodigy — платного инструмента для разметки данных, разработанного командой spaCy. Prodigy обладает рядом преимуществ, которые особенно полезны для NER-задач, таких как Active Learning и удобная интеграция с моделями на базе spaCy.

Почему Prodigy?

В Prodigy есть возможность быстро разметить большой объём данных, применяя Active Learning и предсказания от текущей модели, что позволяет разметчику фокусироваться на сложных случаях. Более того, Prodigy поддерживает кастомизацию и легко интегрируется в пайплайны машинного обучения.

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

Установка и настройка

Prodigy требует платной лицензии, но установка проходит быстро, особенно если вы уже работаете со spaCy. После установки мы настроили рабочую среду, добавив наши метки и загрузив уже размеченные данные для доработки.

Основные этапы работы с Prodigy

  1. Настройка Active Learning. Мы настроили Prodigy для использования предварительно обученной модели spaCy, которая помогала автоматически выделять сущности, предлагая разметчику только случаи, в которых модель не была уверена. Это значительно сократило время на ручную разметку.

  2. Разметка данных. Используя Active Learning, мы могли сосредоточиться на более сложных и неоднозначных примерах. Например, при разметке должностей система могла автоматически распознавать многие примеры, предлагая на проверку только те, где была нужна ручная корректировка.

  3. Экспорт и интеграция с пайплайном. Prodigy поддерживает удобный экспорт данных в формате, готовом для использования с моделями spaCy. Это позволило нам сразу использовать размеченные данные для обучения модели NER.

Пример использования Active Learning в prodigy
Пример использования Active Learning в prodigy

Преимущества работы с Prodigy

Использование Prodigy дало следующие преимущества:

  • Скорость разметки: Active Learning позволил нам сократить время разметки почти в два раза.

  • Гибкость настройки: Prodigy позволил легко настраивать метки и интегрировать разметку в наш ML-пайплайн.

  • Поддержка сложных сценариев: В отличие от Open Source инструментов, Prodigy позволил нам настраивать более сложные сценарии для разметки.

Визуализация результатов: сравнение Open Source и Prodigy

На графике ниже показано, насколько использование Prodigy сокращает время разметки по сравнению с Open Source инструментами. Чем больше данных, тем значительнее разница:

По кривым регрессионного анализа можно сделать вывод, что по мере увеличения объёма данных экономия времени будет только расти. Уже на данном этапе можно сказать, что Prodigy позволяет сократить трудозатраты на разметку в задачах NLP более, чем в 3 раза.

Регрессионный анализ трудозатрат на разметку
Регрессионный анализ трудозатрат на разметку

Основные уроки, которые мы извлекли

Работа с Prodigy научила нас, что выбор инструмента для разметки данных зависит от объёма данных и уровня сложности. Open Source решения — отличный выбор для старта, однако для больших задач и постоянной интеграции с ML-пайплайном лучше подходят профессиональные инструменты вроде Prodigy.


Важно иметь в виду, что Prodigy поддерживает самые разные форматы данных для использования в рамках задач разметки: фото- видео- аудио-файлы.

Также попросил коллегу, работающего с CV-задачами, оценить изменение трудозатрат в задаче разметки строительных объектов. Результат ниже

Заключение

Наш путь разметки данных для NER помог нам глубже понять и оптимизировать процесс создания обучающих наборов данных. Благодаря Prodigy мы достигли значительного ускорения и смогли сфокусироваться на более сложных случаях, оставив типовые примеры на обработку модели. В конечном счете, этот опыт позволил нам разработать высококачественную NER-модель, соответствующую потребностям нашего проекта.

Благодарим всех разработчиков Open Source инструментов за их вклад в сообщество, а также команду spaCy за их мощный инструмент для аннотирования данных.

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