Распознавание именованных сущностей (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 за его простоту настройки и поддержку пользовательских меток для специфичных сущностей.
Установка и настройка. Установка была достаточно простой, благодаря Docker. Мы также настроили кастомные теги для нужных нам категорий — место работы, должность, опыт.
Импорт данных. Наша текстовая база данных включала резюме и описания вакансий. Мы добавили её в Label Studio, чтобы приступить к разметке.
Процесс разметки. Интерфейс позволял удобно выделять и помечать текстовые блоки, соответствующие нужным нам сущностям.
Экспорт данных. Мы экспортировали разметку в формат JSON, что позволило безболезненно интегрировать разметку в пайплайн обработки данных.
Преимущества и ограничения Open Source решений
Open Source решения были хорошим стартом, но по мере роста объёмов данных и требований к разметке стало очевидно, что требуются более мощные и гибкие инструменты. Проблемы, с которыми мы столкнулись:
Ограниченная производительность — при увеличении количества данных интерфейс становился медленнее.
-
Отсутствие функции Active Learning — разметка всех данных вручную заняла бы слишком много времени.
Шаг 2. Переход на Prodigy
На этом этапе мы перешли к использованию Prodigy — платного инструмента для разметки данных, разработанного командой spaCy. Prodigy обладает рядом преимуществ, которые особенно полезны для NER-задач, таких как Active Learning и удобная интеграция с моделями на базе spaCy.
Почему Prodigy?
В Prodigy есть возможность быстро разметить большой объём данных, применяя Active Learning и предсказания от текущей модели, что позволяет разметчику фокусироваться на сложных случаях. Более того, Prodigy поддерживает кастомизацию и легко интегрируется в пайплайны машинного обучения.
Prodigy стал настоящей находкой благодаря своей способности активно учиться на разметке и тем самым ускорять процесс аннотирования
Установка и настройка
Prodigy требует платной лицензии, но установка проходит быстро, особенно если вы уже работаете со spaCy. После установки мы настроили рабочую среду, добавив наши метки и загрузив уже размеченные данные для доработки.
Основные этапы работы с Prodigy
Настройка Active Learning. Мы настроили Prodigy для использования предварительно обученной модели spaCy, которая помогала автоматически выделять сущности, предлагая разметчику только случаи, в которых модель не была уверена. Это значительно сократило время на ручную разметку.
Разметка данных. Используя Active Learning, мы могли сосредоточиться на более сложных и неоднозначных примерах. Например, при разметке должностей система могла автоматически распознавать многие примеры, предлагая на проверку только те, где была нужна ручная корректировка.
Экспорт и интеграция с пайплайном. Prodigy поддерживает удобный экспорт данных в формате, готовом для использования с моделями spaCy. Это позволило нам сразу использовать размеченные данные для обучения модели NER.
Преимущества работы с 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 за их мощный инструмент для аннотирования данных.