Почему пользовательский NER может быть лучшим вариантом, когда вы имеете дело с конкретными данными из-за его компромисса между производительностью и эффективностью.

Оглавление

  • Введение
  • Сбор данных
  • Выбор модели
  • Обучение моделей
  • Эффективность модели
  • Стоимость вычислений

Введение

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

Модели NER — это классификаторы, которые кодируют текст в n-мерном пространстве (где похожие слова будут появляться рядом друг с другом), а затем применяют слой классификации, чтобы сопоставить каждое закодированное слово с его категорией. В настоящее время существует множество предварительно обученных моделей NER с различной архитектурой для этапа кодирования, таких как word2vec, tok2vec или transformer. Двумя примерами простых в использовании интерфейсов для предварительно обученных моделей являются SpaCy и 🤗 Hugging Face. Тем не менее, большинство из них обучаются на общих корпусах, извлеченных из Интернета (например, Википедия), а это означает, что если вы имеете дело с конкретными данными, эти модели могут работать хуже. Кроме того, по мере увеличения сложности моделей возникают новые ограничения, такие как потребность в вычислительных ресурсах, таких как графические процессоры.

Здесь, в Clarity AI, мы ежедневно имеем дело с более чем 100 000 бизнес-новостей и корпоративных отчетов, чтобы извлечь из них значимые данные и сопоставить их с более чем 30 000 различных компаний, которые есть у нас на нашей технологической платформе для инвестирования. Чтобы сделать это и не умереть в попытках, мы используем модели NER для выявления компаний в новостях и сопоставления их с портфелем Clarity.

Вначале мы использовали предварительно обученные модели SpaCy, такие как en_core_web_{size}, для этих задач, но поняли, что они не имеют ожидаемой производительности из-за сложности наших данных по отношению к обучающему корпусу. Одной из основных проблем была огромная зависимость от букв в регистре для предсказания некоторых объектов, таких как организации, которые были перепутаны с именами людей или местоположениями. Например:

По этой причине мы решили обучать собственные модели NER, и ниже я покажу вам, почему это того стоило.

Сбор данных

Набор данных был составлен из 1000 бизнес-новостей, вручную помеченных нашей командой DS с использованием Augmented AI от AWS:

Есть и другие хорошие инструменты для аннотаций, такие как Prodigy, LightTag и т. д., которые также могут быть отличным вариантом.

Чтобы измерить производительность моделей, метки были преобразованы в формат IOB2 (другие допустимые форматы — BILUO или IOB). Формат IOB2, сокращение от «внутри — снаружи — начало», состоит из добавления префикса «B-» перед сущностью, если это первая лексема, префикса «I-», если это не первая лексема сущности, и «0». ' без сущностей. Вот пример того, как выглядели необработанные данные:

Наконец, набор данных был случайным образом разделен на обучающий (80%), валидационный (10%) и тестовый (10%).

Выбор модели

Поскольку цель этой статьи — продемонстрировать, что обучение пользовательского NER превосходит предварительно обученные модели, я возьму архитектуру SpaCy tok2vec + NER с нуля и обучу ее с нашими помеченными данными. Затем я сравню его производительность с предварительно обученными моделями SpaCy в качестве обучающихся с нулевым выстрелом и с обоими преобразователями BERT и RoBERTa.

Эти модели можно разделить на 2 категории в зависимости от их архитектуры:

Tok2Vec + NER

  • en_core_web_sm от SpaCy (13 МБ)
  • en_core_web_md от SpaCy (45 МБ)
  • en_core_web_lg от SpaCy (774 МБ)
  • Пользовательский NER (831 МБ)

Трансформатор + НЭР

  • en_core_web_trf от SpaCy (460 МБ)
  • БЕРТ (450 МБ)
  • РОБЕРТа (470 МБ)

В настоящее время существуют другие модели NER, которые ближе к SOTA, такие как XLM-RoBERTa, но от них отказались из-за нехватки вычислительных ресурсов (как известно, по мере приближения к SOTA модели становятся все больше и больше).

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

Обучение моделей проводилось с использованием SpaCy v3, который позволяет обучать/тонко настраивать модели NER менее чем за 5 строк кода и импортировать модели из 🤗 Hugging Face Hub, где можно найти последние архитектуры НЛП. Ниже приведены шаги, чтобы сделать это:

  1. Преобразуйте тренировочные данные в двоичный формат SpaCy (.spacy)

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

Для преобразования данных SpaCy v3 имеет функцию конвертировать, которая позволяет нам получить двоичный формат из форматов SpaCy v2 json, .iob или .conllu (перейдите по этой ссылке для получения дополнительной информации):

2. Определите все настройки и гиперпараметры в файле config.cfg

Для его создания шаблон можно загрузить с https://spacy.io/usage/training, где вы можете выбрать язык ваших обучающих данных, компоненты пайплайна, ваше оборудование (CPU | GPU) и оптимизацию. цель.

Обратите внимание, что если вы выберете CPU, конвейер по умолчанию для задач NER будет tok2vec + NER, а если вы выберете GPU, tok2vec будет заменен архитектурой трансформатора. Основное отличие здесь заключается в том, что модель-трансформер уже предварительно обучена (по умолчанию будет загружена модель RoBERTa) и будет иметь хорошую производительность в качестве обучаемого с нулевым выстрелом. Однако для достижения хороших результатов tok2vec необходимо тренировать.

Этот шаблон загружает упрощенную версию файла конфигурации base_config.cfg с основными настройками. После того, как вы покрыли его значениями, подходящими для вашей задачи, вы можете заполнить файл расширенными настройками по умолчанию с помощью этой команды:

3.Запустите обучение из интерфейса командной строки.

Вот где проявляется магия. С помощью команды train и простого указания местоположения config.cfg и выходного пути мы можем обучить/настроить любую модель:

В этой статье вы можете найти шаг за шагом, как этого достичь.

Производительность модели

Поскольку задачи NER — это задачи классификации, мы можем использовать те же метрики, что и в количественных моделях. Однако определения точности и полноты немного меняются:

  • Точность: соотношение хорошо спрогнозированных сущностей.
  • Отзыв: предсказанное соотношение истинных сущностей.

Например. Если у нас есть 80 истинных сущностей, а наша модель предсказывает в общей сложности 60 сущностей, где 40 из них хорошо предсказаны, наша точность будет 66% (40/60), а наша полнота — 50% (40/80).

Для измерения производительности моделей я выбрал пакет seqeval, так как он сравнивает полные сущности, а не токены по отдельности. Кроме того, он поддерживает различные форматы данных, такие как IOB, IOB2 или BILUO. Следующий пример показывает, как это работает:

Несмотря на то, что предсказания сущностей MISC и DATE верны для некоторых токенов, из-за того, что полная сущность не совпадает, оценка, которую она получает, равна 0.

Вот полученные результаты:

Как видно из диаграммы, предварительно обученные модели SpaCy с архитектурой tok2vec далеки от хорошей производительности. Ни их отзыв, ни точность не превышают отметки 50%. Однако пользовательский NER, несмотря на то, что он также имеет архитектуру tok2vec, достиг производительности, аналогичной моделям-трансформерам. Лучшими показателями являются BERT по точности и RoBERTa по отзыву.

В этот момент вы можете догадаться: зачем мне обучать собственный NER, если у меня есть предварительно обученные преобразователи, которые превосходят его результаты? Что ж, ответ — вычислительные ресурсы и вычислительная стоимость. Модели-трансформеры, такие как BERT или RoBERTa, нуждаются в графическом процессоре для их точной настройки или прогнозирования. Более того, по мере увеличения сложности и производительности моделей увеличивается и время их выполнения.

Стоимость вычислений

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

Результаты измерения времени выполнения, затраченного на прогнозирование наших размеченных данных, показаны ниже:

Эта диаграмма поясняет корреляцию между сложностью и вычислительной стоимостью. Несмотря на очень хорошую производительность, архитектуры преобразования тратят почти в 2,5 раза больше времени на прогнозирование сущностей, чем архитектуры tok2vec.

По этой причине, когда мы обрабатываем большие объемы данных, интересно использовать индивидуальную NER вместо более сложных архитектур, поскольку она обеспечивает наилучшее соотношение между производительностью и вычислительными затратами.

Заключение

Если вы столкнулись с задачей NER, вы должны спросить себя, работает ли ваша модель должным образом. Поскольку большинство предварительно обученных моделей обучаются с помощью общих корпусов, извлеченных из Интернета (например, Википедии), если вы имеете дело с конкретными данными, ваш NER может быть хуже. Поэтому тренируйте свой собственный NER — это решение.

В этой статье я покажу, как пользовательский NER может превзойти предварительно обученные модели SpaCy и почему это отличный вариант при обработке больших объемов данных из-за его низкой вычислительной стоимости по сравнению со сложными моделями, такими как BERT или RoBERTa.

Я надеюсь, вам понравилась статья, если у вас есть какие-либо комментарии или предложения, не стесняйтесь обращаться ко мне.