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

В этом блоге рассказывается о области обработки естественного языка (NLP) и информационного поиска (IR), называемой распознаванием именованных сущностей, и о том, как мы можем применить ее для автоматического создания резюме резюме, извлекая только основные сущности, такие как имя, образование, навыки и т. Д.

Что такое распознавание именованных сущностей?

Распознавание именованных объектов (NER) (также известное как идентификация объекта, фрагментирование объекта и извлечение объекта ) - это подзадача извлечения информации, которая направлена ​​на поиск и классификацию названных объектов в тексте по заранее определенным категориям, таким как имена лиц, организаций, местоположения, выражения времени, количества, денежные значения, проценты, и т.п.

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

Современные модели NER

СПАСИБО Модель NER:

Будучи бесплатной библиотекой с открытым исходным кодом, spaCy значительно упростила расширенную обработку естественного языка (NLP) в Python.

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

Архитектура модели:

Статистические модели в spaCy разработаны по индивидуальному заказу и обеспечивают исключительное сочетание производительности и скорости, и точности. Текущая используемая архитектура еще не опубликована, но в следующем видео дается обзор того, как эта модель работает, с основным упором на модель NER.

Stanford Named Entity Recognizer:

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

Архитектура модели:

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

Первые модели CRF были впервые предложены Лафферти, МакКаллумом и Перейрой (2001); Пожалуйста, обратитесь к Саттон и МакКаллум (2006) или Саттон и МакКаллум (2010) для подробного и понятного введения.

Примеры использования моделей NER

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

Автоматическое суммирование резюме:

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

Оптимизация алгоритмов поисковых систем:

Для разработки алгоритма поисковой системы, вместо поиска введенного запроса в миллионах статей и веб-сайтов в Интернете, более эффективным подходом было бы однократное выполнение модели NER для статей и постоянное хранение связанных с ними сущностей. Затем ключевые теги в поисковом запросе можно сравнить с тегами, связанными со статьями веб-сайта, для быстрого и эффективного поиска.

Питание рекомендательных систем:

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

Упрощение поддержки клиентов:

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

Мы подробно описываем обобщение резюме с использованием моделей NER в следующих разделах.

NER для подведения итогов

Набор данных:

Первой задачей, конечно же, является создание вручную аннотированных обучающих данных для обучения модели. Для этого было загружено 220 резюме с онлайн-платформы вакансий. Эти документы были загружены в онлайн-инструмент аннотации Dataturks и аннотированы вручную.

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

Снимок набора данных можно увидеть ниже:

Вышеупомянутый набор данных, состоящий из 220 аннотированных резюме, можно найти здесь. Мы обучаем модель на 200 данных резюме и тестируем ее на 20 данных резюме.

Использование модели spaCy в Python для обучения пользовательской модели:

Формат набора данных:

Пример сгенерированных данных в формате json, созданных инструментом аннотации Dataturks, который предоставляется коду, выглядит следующим образом:

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

Мы используем модуль python spaCy для обучения модели NER. Модели spaCy являются статистическими, и каждое принимаемое ими «решение» - например, какой тег части речи назначить или является ли слово именованным объектом - является предсказанием . Этот прогноз основан на примерах, которые модель видела во время обучения.

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

При обучении модели мы не просто хотим, чтобы она запоминала наши примеры - мы хотим, чтобы она выдвигала теорию, которую можно обобщить на других примерах. В конце концов, мы не просто хотим, чтобы модель узнала, что этот единственный экземпляр «Amazon» прямо здесь является компанией - мы хотим, чтобы она узнала, что «Amazon» в контекстах подобных этому является скорее всего компания. Чтобы настроить точность, мы обрабатываем наши обучающие примеры партиями и экспериментируем с minibatch размерами и показателями отсева.

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

Еще один способ улучшить результаты обучения - установить коэффициент отсева, коэффициент, с которым случайным образом «отбрасываются» отдельные функции и представления. Это затрудняет запоминание модели обучающих данных. Например, 0.25dropout означает, что вероятность отбрасывания каждой функции или внутреннего представления составляет 1/4. Мы обучаем модель для 10 эпох и сохраняем коэффициент отсева равным 0,2.

Вот фрагмент кода для обучения модели:



Результаты и оценка модели spaCy:

Модель тестируется на 20 резюме, и прогнозируемые обобщенные резюме сохраняются в виде отдельных файлов .txt для каждого резюме.

Для каждого резюме, в котором тестируется модель, мы вычисляем показатель точности, точность, отзывчивость и f-балл для каждой сущности, которую распознает модель. Значения этих показателей для каждой сущности суммируются и усредняются, чтобы получить общий балл для оценки модели на тестовых данных, состоящих из 20 резюме. Ниже представлены результаты оценки с точки зрения организации. Замечено, что полученные результаты были предсказаны с похвальной точностью.

Ниже приведен пример резюме невидимого резюме сотрудника с сайта Indeed.com, полученного путем прогнозирования с помощью нашей модели:

Использование Стэнфордской модели NER в Java для обучения пользовательской модели:

Формат набора данных:

Данные для обучения должны быть переданы в виде текстового файла, чтобы каждая строка содержала пару слово-метка, где слово и тег метки разделялись пробелом табуляции «\ t». Для текстового документа, как и в нашем случае, мы преобразуем документы в слова и добавляем по одной строке для каждого слова и соответствующего тега в обучающий файл. Чтобы указать начало следующего файла, мы добавляем пустую строку в обучающий файл.

Вот образец входного обучающего файла:

Примечание: обязательно включать метку / тег для каждого слова. Здесь для слов, которые нам не важны, мы используем нулевой ярлык «0».

Файл свойств:

Stanford CoreNLP требует файл свойств, в котором указаны параметры, необходимые для построения пользовательской модели. Например, мы можем определить способы извлечения функций для обучения и т. Д. Ниже приводится пример файла свойств:

# location of the training file
trainFile = ./standford_train.txt
# location where you would like to save (serialize) your
# classifier; adding .gz at the end automatically gzips the file,
# making it smaller, and faster to load
serializeTo = ner-model.ser.gz
# structure of your training file; this tells the classifier that
# the word is in column 0 and the correct answer is in column 1
map = word=0,answer=1
# This specifies the order of the CRF: order 1 means that features
# apply at most to a class pair of previous class and current class
# or current class and next class.
maxLeft=1
# these are the features we'd like to train with
# some are discussed below, the rest can be
# understood by looking at NERFeatureFactory
useClassFeature=true
useWord=true
# word character ngrams will be included up to length 6 as prefixes
# and suffixes only
useNGrams=true
noMidNGrams=true
maxNGramLeng=6
usePrev=true
useNext=true
useDisjunctive=true
useSequences=true
usePrevSequences=true
# the last 4 properties deal with word shape features
useTypeSeqs=true
useTypeSeqs2=true
useTypeySequences=true
#wordShape=chris2useLC
wordShape=none
#useBoundarySequences=true
#useNeighborNGrams=true
#useTaggySequences=true
#printFeatures=true
#saveFeatureIndexToDisk = true
#useObservedSequencesOnly = true
#useWordPairs = true

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

Главный класс в Stanford CoreNLP - это CRFClassifier, который обладает реальной моделью. В коде, представленном в репозитории Github, ссылка на который была прикреплена ниже, мы предоставили код для обучения модели с использованием обучающих данных и файла свойств и сохранения модели на диск, чтобы избежать затрат времени на обучение каждый раз. В следующий раз, когда мы будем использовать модель для прогнозирования невидимого документа, мы просто загружаем обученную модель с диска и используем ее для классификации.

Первый столбец в выходных данных содержит входные токены, в то время как второй столбец относится к правильной метке, а третий столбец - это метка, предсказанная классификатором.

Вот фрагмент кода для обучения модели и сохранения ее на диск:



Результаты и оценка Стэнфордской модели NER:

Модель тестируется на 20 резюме, и прогнозируемые обобщенные резюме сохраняются в виде отдельных файлов .txt для каждого резюме.

Для каждого резюме, в котором тестируется модель, мы вычисляем показатель точности, точность, отзывчивость и f-балл для каждой сущности, которую распознает модель. Значения этих показателей для каждой сущности суммируются и усредняются, чтобы получить общий балл для оценки модели на тестовых данных, состоящих из 20 резюме. Ниже представлены результаты оценки с точки зрения организации. Замечено, что полученные результаты были предсказаны с похвальной точностью.

Ниже приведен пример резюме невидимого резюме сотрудника с сайта Indeed.com, полученного путем прогнозирования с помощью нашей модели:

Сравнение моделей spaCy, Stanford NER и современных моделей:

Подавляющее большинство токенов в реальных документах резюме не являются частью названий организаций, как обычно определяется, поэтому базовая точность и отзыв чрезвычайно высоки, обычно ›90%; Следуя этой логике, значения точности отзыва сущностей обеих моделей достаточно хороши.

Судя по оценке моделей и наблюдаемых результатов, spaCy превосходит Stanford NER в задаче обобщения резюме. Обзор F-баллов для субъектов, идентифицированных обеими моделями, выглядит следующим образом:

Вот набор резюме с тегами NER.

Код Python для вышеупомянутого проекта для обучения модели spaCy можно найти здесь в репозитории github.

Код Java для вышеупомянутого проекта для обучения модели Stanford NER можно найти здесь в репозитории GitHub.

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