¿Cómo anotar documentos de texto con metadatos?

18

Teniendo muchos documentos de texto (en lenguaje natural, no estructurado), ¿cuáles son las posibles formas de anotarlos con algunos metadatos semánticos? Por ejemplo, considere un documento corto:

I saw the company's manager last day.

Para poder extraer información de él, debe anotarse con datos adicionales para que sea menos ambiguo. El proceso de búsqueda de estos metadatos no está en duda, por lo tanto, suponga que se hace manualmente. La pregunta es cómo almacenar estos datos de manera que se puedan realizar análisis adicionales de manera más conveniente / eficiente.

Un posible enfoque es usar etiquetas XML (ver más abajo), pero parece demasiado detallado, y tal vez haya mejores enfoques / pautas para almacenar dichos metadatos en documentos de texto.

<Person name="John">I</Person> saw the <Organization name="ACME">company</Organization>'s
manager <Time value="2014-5-29">last day</Time>.
Amir Ali Akbari
fuente
Uno de los principales propósitos de SGML (lo mismo vale para su descendencia, XML) era proporcionar los medios para etiquetar documentos de texto (POS y etiquetas semánticas).
Deer Hunter
¿Podría ser más específico / restrictivo sobre qué tipo de metadatos desea agregar? Con sus dos ejemplos, dudo que haya una forma menos detallada que tenga la misma expresividad genérica que las etiquetas XML.
ojdo
@ojdo La mayoría de los metadatos son para desambiguación (como los tiempos relativos) o para especificar entidades especiales (es decir, FK).
Amir Ali Akbari
2
He usado brat.nlplab.org en el pasado. Hay una buena interfaz para muchos tipos diferentes de anotaciones. Las anotaciones se almacenan en un archivo .annot separado que es una lista de las palabras anotadas y su posición en el documento.
user1893354
@ user1893354 ¡Muy útil! Especialmente el " formato de separación de mocoso " utilizado por él parece muy adecuado para mis necesidades. Sugiero publicar una respuesta si lo desea.
Amir Ali Akbari

Respuestas:

15

Personalmente, recomendaría usar algo que no sea específico para el campo de PNL, y algo que sea lo suficientemente general como para que pueda usarse como herramienta, incluso cuando haya comenzado a moverse más allá de este nivel de metadatos. Especialmente elegiría un formato que se pueda utilizar independientemente del entorno de desarrollo y uno que pueda mantener una estructura básica si eso se vuelve relevante (como la tokenización)

Puede parecer extraño, pero honestamente sugeriría JSON. Está extremadamente bien soportado, es compatible con una gran cantidad de estructura y es lo suficientemente flexible como para que no tenga que moverse de él por no ser lo suficientemente poderoso. Para su ejemplo, algo como esto:

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

La gran ventaja que tiene sobre cualquier formato específico de PNL aquí es que JSONse puede analizar en cualquier entorno, y dado que probablemente tendrá que editar su formato de todos modos, JSON se presta a ediciones muy simples que le brindan una corta distancia a otros formatos.

También puede almacenar implícitamente información de tokenización si desea:

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

EDITAR: Para aclarar el mapeo de metadatos es bastante abierto, pero aquí hay un ejemplo:

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

Espero que ayude, avíseme si tiene más preguntas.

indico
fuente
Al ser un desarrollador web, JSON me parece completamente razonable, pero, ¿puede explicar el formato exacto de asignación de palabras a entidades?
Amir Ali Akbari
@AmirAliAkbari Respuesta actualizada para incluir más detalles.
indico
7

En general, no desea utilizar etiquetas XML para etiquetar documentos de esta manera porque las etiquetas pueden superponerse.

Los marcos UIMA , GATE y NLP similares denotan las etiquetas separadas del texto. Cada etiqueta, tales como Person, ACME, Johnetc. se almacena como la posición que comienza la etiqueta y la posición que se acaba. Entonces, para la etiqueta ACME, se almacenaría como comenzando una posición 11 y terminando en la posición 17.

Christopher Louden
fuente
7

La herramienta de anotación mocoso podría ser útil para usted según mi comentario. He probado muchos de ellos y este es el mejor que he encontrado. Tiene una interfaz de usuario agradable y puede admitir varios tipos diferentes de anotaciones. Las anotaciones se almacenan en un archivo .annot separado que contiene cada anotación, así como su ubicación dentro del documento original. Sin embargo, una advertencia: si finalmente desea alimentar las anotaciones en un clasificador como la herramienta NER de Stanford, entonces tendrá que hacer alguna manipulación para obtener los datos en un formato que acepte.

usuario1893354
fuente
1

Describir todos los datos existentes es una tarea muy difícil, pero podemos usar un modelo de datos: http://schema.org/ , donde se encuentran los tipos estructurales de la información. La ejecución previa tenía como objetivo implementar la tecnología MarkUp, por lo que parece ser útil para su tarea.

Vasyl Lyashkevych
fuente