Подтвердить что ты не робот

Как создать хорошую модель обучения NER в OpenNLP?

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

Чтение документа здесь http://opennlp.apache.org/documentation/1.5.3/manual/opennlp.html#tools.namefind Я вижу этот простой текст для обучения модели:

<START:person> Pierre Vinken <END> , 61 years old , will join the board as a nonexecutive director Nov. 29 .
Mr . <START:person> Vinken <END> is chairman of Elsevier N.V. , the Dutch publishing group .
<START:person> Rudolph Agnew <END> , 55 years old and former chairman of Consolidated Gold Fields PLC ,
    was named a director of this British industrial conglomerate .

Вопросы: два:

  • Почему мне нужно указывать имена людей в текстовом (фразовом) контексте? Почему бы не написать имя человека по одному для каждой строки? как:

    <START:person> Robert <END>
    
    <START:person> Maria <END>
    
    <START:person> John <END>
    
  • Как я могу добавить дополнительную информацию к этому имени? Например, я хотел бы сохранить информацию Male/Female для каждого имени.

(Я знаю, что есть системы, которые пытаются понять это, прочитав последнюю букву, например "a" для Женский и т.д., но я бы хотел добавить ее сам)

Спасибо.

4b9b3361

Ответ 1

Ответ на ваш первый вопрос заключается в том, что алгоритм работает над окружающим контекстом (токенами) в предложении; это не просто простой механизм поиска. OpenNLP использует максимальную энтропию, которая является формой многомерной логистической регрессии для построения ее модели. Причина этого заключается в том, чтобы уменьшить "двусмысленность смысла слова" и найти сущности в контексте. Например, если мое имя - апрель, я легко смущаюсь с апрелем, и, если меня зовут Май, я смущаюсь с майским месяцем, а также глаголом. Во второй части первого вопроса вы можете составить список имен, которые известны, и использовать эти имена в программе, которая просматривает ваши предложения, и автоматически комментирует их, чтобы помочь вам создать учебный набор, однако, составив список имен в одиночку без контекста не будет готовить модель достаточно или вообще. Фактически, для этого используется аддон OpenNLP, называемый "addbuilder-конструктор": вы даете ему файл имен, и он использует имена и некоторые ваши данные (предложения) для обучения модели. Если вы ищете конкретные имена вообще не двусмысленных сущностей, вам может быть лучше использовать список и что-то вроде регулярного выражения для обнаружения имен, а не NER.

Что касается вашего второго вопроса, есть несколько вариантов, но в целом я не думаю, что NER - отличный инструмент для определения чего-то вроде пола, однако с достаточным количеством предложений для обучения вы можете получить приличные результаты. Поскольку NER использует модель, основанную на окружающих токенах, в вашей тренировке предложений, устанавливающей существование именованного объекта, она не может многое сделать с точки зрения определения пола. Возможно, вам лучше найти все имена людей, а затем указать индекс имен, которые, как вы знаете, являются мужчинами или женщинами, чтобы получить соответствие. Кроме того, некоторые имена, такие как Пэт, являются как мужчинами, так и женщинами, и в большинстве текстовых данных не будет никаких указаний на то, что оно ни для человека, ни для машины. При этом вы могли бы создать модель для мужчин и женщин отдельно, или вы могли бы создать разные типы сущностей в одной и той же модели. Вы могли бы использовать аннотацию, подобную этой (используя разные имена типов сущностей male.person и female.person). Я никогда не пробовал это, но это могло бы сделать нормально, вам придется проверить его на ваших данных.

<START:male.person> Pierre Vinken <END> , 61 years old , will join the board as a nonexecutive director Nov. 29 .
Mrs . <START:female.person> Maria <END> is chairman of Elsevier N.V. , the Dutch publishing group

NER = Именованное распознавание сущностей

НТН