Что делает модель NER для поиска имен людей в резюме/резюме?

Я только начал с Stanford CoreNLP, я хотел бы создать пользовательскую модель NER для поиска лиц.

К сожалению, я не нашел хорошую модель для итальянской. Мне нужно найти эти объекты в документе резюме /CV.

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

CASE 1

- Name: John

- Surname: Travolta

- Last name: Travolta

- Full name: John Travolta

(so many labels that can represent the entity of the person i need to extract)

CASE 2

My name is John Travolta and I was born ...

В принципе, я могу иметь структурированные данные (с разными метками) или контекст, где я должен найти эти сущности.

Каков наилучший подход для такого рода документов? Может ли максимальная модель работать в этом случае?


EDIT @vihari-piratla

На данный момент я принимаю стратегию, чтобы найти шаблон, который имеет что-то слева и что-то справа, следуя этому методу, у меня есть 80/85%, чтобы найти объект.

Пример:

Name: John
Birthdate: 2000-01-01

Это означает, что у меня есть "Имя:" слева от шаблона и \n справа (пока не найдет \n). Я могу создать очень длинный список таких шаблонов. Я думал о шаблонах, потому что мне не нужны имена внутри "другого" контекста.

Например, если пользователь записывает другие имена внутри опыта работы, я не нуждаюсь в них. Потому что я ищу личное имя, а не другие. С помощью этого метода я могу уменьшить ложные срабатывания, потому что я буду рассматривать конкретные шаблоны не "общие имена".

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

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

Ответ 1

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

Я хотел бы сделать несколько предложений для случая-2.
Stanford NLP предоставляет отличное распознавание имен на английском языке, но, возможно, не сможет найти все имена людей. OpenNLP также обеспечивает достойную производительность, но намного меньше, чем в Стэнфорде. Для английского языка существует множество других распознавателей. Я сосредоточусь здесь на StanfordNLP, вот несколько вещей, которые следует учитывать.

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

  • Стэнфорд понимает объекты конструктивно. Если в документе признано имя "John Travolta", оно также получит "Travolta" в том же документе, даже если у него не было прежней идеи о "Travolta". Поэтому добавьте как можно больше информации в документ. Добавьте имена, распознанные в case-1, в знакомом контексте, например "Меня зовут Джон Траволта". если "Джон Траволта" признан по правилам, применяемым в случае-1. Добавление фиктивных предложений может улучшить отзыв.

Создание ориентира для обучения - очень дорогостоящий и скучный процесс; вы должны аннотировать в десятки тысяч предложений для достойной работы теста. Я уверен, что даже если у вас есть модель, прошедшая обучение по аннотированным данным обучения, производительность не будет лучше, чем когда вы выполнили два этапа выше.

@edit

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

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

  • SPIED - это программное обеспечение, которое использует описанную выше технику и доступно для загрузки и использования.
  • Sonal Gupta получил докторскую степень. по этой теме, ее диссертация доступна здесь.
  • Для краткого ознакомления с этой темой см. эти slides.

Спасибо

Ответ 2

Традиционный (и, вероятно, лучший) подход для случая 1 заключается в написании кода сегментации документов, тогда как в случае 2-го для большинства систем предназначены два варианта. Вы можете искать ученого Google для "сегментации документа", чтобы получить некоторые идеи для "наилучшего" подхода. Наиболее часто реализуемый (и самый простой способ) - просто использовать регулярные выражения, которые могут быть очень эффективными, если структура документа согласована. Другие подходы более сложны, но обычно необходимы, когда в структуре документов больше разнообразия.

Ваш трубопровод NER, как минимум, понадобится:

  • Предварительная обработка/токенизация текста. Начните с нескольких простых правила токенизации
  • Сегментация документа (двоеточия, тире, заголовки пятен, любые формы и т.д.). Я бы начал с регулярных выражений для этого.
  • Маркировка POS (желательно, используя что-то с полки, например TreeTagger, работающее с итальянским языком).
  • NER, модель MaxEnt будет работать, некоторые важные функции для этого - это капитализация, теги POS и, возможно, словарные функции (итальянская телефонная книга?). Вам понадобятся некоторые помеченные данные.

Ответ 3

вы можете использовать Stanford NLP. Например, здесь приведен код python, который использует библиотеки nltk и stanford mlp

docText="your input string goes here"

words = re.split("\W+",docText) 

stops = set(stopwords.words("english"))

#remove stop words from the list
words = [w for w in words if w not in stops and len(w) > 2]

str = " ".join(words)
print str
stn = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz') 
stp = StanfordPOSTagger('english-bidirectional-distsim.tagger') 
stanfordPosTagList=[word for word,pos in stp.tag(str.split()) if pos == 'NNP']

print "Stanford POS Tagged"
print stanfordPosTagList
tagged = stn.tag(stanfordPosTagList)
print tagged

это должно дать вам все собственные существительные во входной строке

Ответ 4

Если это документ типа CV/CV, о котором вы говорите, лучше всего построить корпус или начать со сниженной "точности" ожидания и построить корпус динамически, обучая систему, когда пользователи используют вашу систему. Может быть, это OpenNLP или StanfordNLP или любой другой. В рамках ограничений моих "обучения" NER недостаточно зрелы для документов типа Resume/CV для английского типа самостоятельно.