Как настроить файлы шаблонов обучения и функций для NER?- CRF ++ - PullRequest
0 голосов
/ 12 июня 2018

Для проблемы распознавания именованных сущностей,

После того, как вы разбили предложения на предложения, как вы настраиваете столбцы?похоже, что один столбец в документации - это POS-тег, но откуда они?Я должен сам пометить POS или есть инструмент для их генерации?

Что представляет собой следующий столбец?Класс, как ЧЕЛОВЕК, МЕСТО и т. Д.?и это должно быть в каком-то конкретном формате?

Есть ли пример завершенного учебного файла и шаблона для NER?

1 Ответ

0 голосов
/ 13 июня 2018

Пример тренировочных и тестовых данных вы можете найти в репозитории crf ++ здесь .Данные обучения для фрагментирования имен существительных выглядят следующим образом:

Confidence NN B
in IN O
the DT B
pound NN I
is VBZ O
widely RB O
expected VBN O
... etc ...

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

Хотя в различные столбцы может входить что угодно, одно соглашение, которое вы должны знать, это IOBФормат .Чтобы иметь дело с потенциально мульти-токенными сущностями, вы помечаете их как Внутри / Снаружи / Начало.Может быть полезно привести пример.Представьте, что мы обучаем классификатор обнаружению имен - для компактности я напишу это в одной строке:

John/B Smith/I ate/O an/O apple/O ./O

В столбчатом формате это будет выглядеть так:

John B
Smith I
ate O
an O
apple O
. O

С этимитеги, B (начало) означает, что слово является первым в сущности, I означает, что слово находится внутри сущности (оно идет после тега B), а O означает, что слово не является сущностью,Если у вас есть несколько типов сущностей, обычно используются метки типа B-PERSON или I-PLACE.

Причиной использования тегов IOB является то, что классификатор может узнать различные вероятности перехода для начальных, продолжающихся и конечных объектов.Поэтому, если вы изучаете названия компаний, вы поймете, что Inc./I-COMPANY обычно переходит на метку O, потому что Inc. обычно является последней частью названия компании.

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


Чтобы ответить на комментарий к моему ответу, вы можете сгенерировать POS-теги, используя любой POS-тегер.Вам даже не нужно предоставлять POS-теги, хотя они обычно полезны.Другие метки могут быть добавлены вручную или автоматически;Например, вы можете использовать список известных существительных в качестве отправной точки.Вот пример использования spaCy для простого детектора имен:

import spacy
nlp = spacy.load('en')
names = ['John', 'Jane', etc...]
text = nlp("John ate an apple.")
for word in text:
    person = 'O' # default not a person
    if str(word) in names:
        person = 'B-PERSON'
    print(str(word), word.pos_, person)
...