Распознавание объектов с помощью пользовательской модели NER Spacy

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

Но сначала, ЧТО ТАКОЕ NER?

NER расшифровывается как Named Entity Recognition. Давайте познакомимся с NER интересным образом.

Поздравляем!!! вы получили это письмо.

Уважаемый мистер Джон Доу!
Мы рады сообщить вам, что вы приняты в Школу магии и иллюзий Мерлина. К письму прилагается список всех необходимых книг и предметов на семестр, начинающийся 15 января. Мы ждем вашего подтверждения не позднее 31 декабря.
С уважением,
Джейн Браун, директор

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

Как вас зовут?
Кто отправил вам это письмо?
Где вы были приняты?
Какова дата начала срока
Какова дата окончания подтверждения?

Когда вы читаете это письмо, ваш мозг автоматически обрабатывает текст и понимает, что получателем ИМЯ является Джон. Это письмо пришло из КОЛЛЕДЖА Школы магии и иллюзий Мерлина, ДИРЕКТОРОМ Джейн Браун. Начало срока DATE 15 января. И они хотят, чтобы вы подтвердили до ДАТА 31 декабря. Слова, выделенные выше ЗАГЛАВНЫМИ БУКВАМИ, являются Сущностями, которые присутствуют в вашем письме, а значениями являются фактические имена, название колледжа и даты.

Как же заставить наши компьютеры научиться этому? Ответ — распознавание именованных объектов, которое является частью обработки естественного языка.

На рынке NLP есть несколько хороших готовых вариантов NER, таких как NLTK, Spacy, StanfordNER и т. д. Обычно они довольно крутые, однако могут потерпеть неудачу в сложных сценариях.

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

Теперь, как нам обучить нашу собственную модель NER, которая специфична для наших собственных данных и работает очень хорошо. Ответ: Пользовательская модель NER. Давайте посмотрим, как это работает!

Еще раз напомню, что мои данные — это электронные письма в текстовых файлах, и требование состоит в том, чтобы идентифицировать и извлечь информацию об отправителе, такую ​​как имя отправителя, адрес, телефон, обозначение.

Наш технологический процесс идет, как указано в следующих шагах:

Шаг 1. Сбор данных мы используем общедоступный набор данных электронной почты. Электронные письма читаются в текстовом формате.

Шаг 2: Извлечение текста для подписи электронной почтыИз приведенного выше электронного письма нам нужно извлечь только информацию об отправителе. Таким образом, у нас будет список только текста подписи.

Шаг 3: Распознавание сущностей и создание набора данных для обучения Spacy требует, чтобы входные данные для обучения были в определенном формате вложенного словаря, поэтому мы будем использовать данные из шага 2 и преобразовать его в словарь словарей с двумя первичными ключами 'content' и 'annotation'. Ключ Content содержит текст подписи, а Annotation — это другой словарь с ключами 'label' и 'points. ' . Метка содержит тег для каждого слова в Содержимом, точка содержит слово с его начальной и конечной позицией.

Шаг 4: Загрузить пустую модель SpaCySpacy предоставляет функцию «загрузки», которая позволяет нам создать пустой объект модели на английском языке. Теперь мы можем добавить трубу NER и метки к этому пустому объекту модели.

Шаг 5: Обучение моделиТеперь, когда у нас есть готовые пользовательские данные и модель, мы можем обучать модель партиями.

Шаг 6. Вывод модели После того, как модель будет готова, мы можем сохранить ее и использовать для прогнозирования новых данных о выходе.

Custom_NER_Predictionфункция принимает текст электронной почты в качестве входных данных, извлекает информацию о выходе и выдает результат NER. Здесь мы замечаем, что все сущности распознаются отлично.

Давайте протестируем больше сценариев!

Что делать, если какая-либо сущность отсутствует, сможет ли модель правильно распознавать сущности??? Что, если мы удалим «Адрес»

Похоже, модель знает свои сущности! Что, если мы удалим «Имя»

хм… он все еще работает как шарм!! А что если оставить только «Адрес» и «Номер телефона»?

Ого! Эта нестандартная модель великолепна. Теперь, почему бы нам просто не удалить все объекты и оставить только «Имя» или почему бы просто не подчеркнуть это, указав только «Имя»

ВАУ!! Оказывается да! Наша модель умеет правильно распознавать все доступные сущности!!! Поздравляю! вы успешно создали со мной пользовательскую модель NER!