Как аннотировать текстовые документы с метаданными?

18

Имея много текстовых документов (на естественном языке, неструктурированных), каковы возможные способы аннотирования их некоторыми семантическими метаданными? Например, рассмотрим короткий документ:

I saw the company's manager last day.

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

Возможный подход заключается в использовании тегов XML (см. Ниже), но он кажется слишком многословным, и, возможно, существуют лучшие подходы / рекомендации для хранения таких метаданных в текстовых документах.

<Person name="John">I</Person> saw the <Organization name="ACME">company</Organization>'s
manager <Time value="2014-5-29">last day</Time>.
Амир Али Акбари
источник
Одна из основных целей SGML (то же самое относится и к его потомкам, XML) состояла в том, чтобы предоставить средства для маркировки текстовых документов (POS и семантические теги).
Охотник на оленей
Может быть более конкретным / ограничительным в отношении того, какие метаданные вы хотите добавить? С вашими двумя примерами я сомневаюсь, что есть менее подробный способ, который имеет ту же общую выразительность, что и теги XML.
Ojdo
@ojdo Большая часть метаданных предназначена либо для устранения неоднозначности (например, относительного времени), либо для указания специальных объектов (например, FK).
Амир Али Акбари
2
Я использовал brat.nlplab.org в прошлом. Есть хороший интерфейс для множества различных типов аннотаций. Аннотации хранятся в отдельном файле .annot, который представляет собой список аннотированных слов и их положение в документе.
user1893354
@ user1893354 Очень полезно! Специально используемый « формат противостояния », кажется, очень подходит для моих нужд. Я предлагаю опубликовать ответ, если хотите.
Амир Али Акбари

Ответы:

15

Лично я бы рекомендовал использовать что-то, что не является специфичным для области НЛП, и что-то достаточно общее, чтобы его можно было использовать в качестве инструмента, даже если вы начали выходить за рамки этого уровня метаданных. Я бы особенно выбрал формат, который можно использовать независимо от среды разработки, и тот, который может сохранить некоторую базовую структуру, если она станет актуальной (например, токенизация)

Это может показаться странным, но я бы честно предложил JSON. Он очень хорошо поддерживается, поддерживает много структур и достаточно гибок, поэтому вам не нужно отказываться от него, потому что он недостаточно мощный. Для вашего примера, что-то вроде этого:

{'text': 'I saw the company's manager last day.", {'Person': [{'name': 'John'}, {'indices': [0:1]}, etc...]}

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

Вы также можете неявно хранить информацию о токенизации, если хотите:

{"text": ["I", "saw", "the", "company's", "manager", "last", "day."]}

РЕДАКТИРОВАТЬ: чтобы уточнить отображение метаданных довольно открыто, но вот пример:

{'body': '<some_text>',
 'metadata': 
  {'<entity>':
    {'<attribute>': '<value>',
     'location': [<start_index>, <end_index>]
    }
  }
}

Надеюсь, это поможет, дайте мне знать, если у вас есть еще вопросы.

Indico
источник
Будучи веб-разработчиком, JSON кажется мне вполне разумным, но не могли бы вы уточнить точный формат отображения слов в сущности?
Амир Али Акбари
@AmirAliAkbari Обновленный ответ, чтобы включить больше деталей.
индик
7

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

UIMA , GATE и аналогичные структуры NLP обозначают теги отдельно от текста. Каждый тег, такой как Person, ACMEи Johnт. Д. Сохраняется как позиция, в которой начинается тег, и позиция, в которой он заканчивается. Таким образом, для тега ACMEон будет храниться как начальная позиция 11 и заканчивающаяся позицией 17.

Кристофер Лоуден
источник
7

Инструмент аннотации Brat может быть полезен для вас согласно моему комментарию. Я перепробовал многие из них, и это лучшее, что я нашел. Он имеет приятный пользовательский интерфейс и может поддерживать множество различных типов аннотаций. Аннотации хранятся в отдельном файле .annot, который содержит каждую аннотацию, а также ее местоположение в исходном документе. Однако, предупреждающее слово: если вы в конечном итоге захотите подать аннотации в классификатор, такой как инструмент NER в Стэнфорде, вам придется сделать некоторые манипуляции, чтобы получить данные в формате, который они примут.

user1893354
источник
1

Для описания всех существующих данных это очень сложная задача, но мы можем использовать модель данных: http://schema.org/ , где представлены структурные типы информации. Предыдущее выполнение было нацелено на реализацию технологии MarkUp, поэтому она может оказаться полезной для вашей задачи.

Василий Ляшкевич
источник