Como anotar documentos de texto com metadados?


18

Tendo muitos documentos de texto (em linguagem natural, não estruturados), quais são as maneiras possíveis de anotá-los com alguns metadados semânticos? Por exemplo, considere um pequeno documento:

I saw the company's manager last day.

Para poder extrair informações dele, ele deve ser anotado com dados adicionais para ser menos ambíguo. O processo de encontrar esses metadados não está em questão, portanto, assuma que seja feito manualmente. A questão é como armazenar esses dados de forma que análises adicionais possam ser feitas de maneira mais conveniente / eficiente?

Uma abordagem possível é usar tags XML (veja abaixo), mas parece muito detalhada, e talvez haja melhores abordagens / diretrizes para armazenar esses metadados em 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>.

Um dos principais objetivos da SGML (o mesmo para seus descendentes, XML) era fornecer os meios para marcar documentos de texto (POS e tags semânticas).
Deer Hunter

Pode ser mais específico / restritivo sobre que tipo de metadados você deseja adicionar? Com seus dois exemplos, duvido que exista uma maneira menos detalhada que tenha a mesma expressividade genérica que as tags XML.
ojdo

@ojdo A maior parte dos metadados é para desambiguação (como os tempos relativos) ou para especificar entidades especiais (por exemplo, FKs).
Amir Ali Akbari

2
Eu usei brat.nlplab.org no passado. Existe uma interface agradável para muitos tipos diferentes de anotações. As anotações são armazenadas em um arquivo .annot separado, que é uma lista das palavras que são anotadas e sua posição no documento.
user1893354

@ user1893354 Muito útil! Especialmente o " formato de brat standoff " usado por ele parece muito adequado às minhas necessidades. Sugiro postar uma resposta, se quiser.
Amir Ali Akbari

Respostas:


15

Pessoalmente, eu recomendaria o uso de algo não específico ao campo da PNL e de algo suficientemente geral que ainda possa ser usado como uma ferramenta, mesmo quando você começar a ultrapassar esse nível de metadados. Eu escolheria especialmente um formato que possa ser usado independentemente do ambiente de desenvolvimento e um que possa manter alguma estrutura básica se isso se tornar relevante (como a tokenização)

Pode parecer estranho, mas eu sinceramente sugeriria JSON. É extremamente bem suportado, suporta muita estrutura e é flexível o suficiente para que você não precise sair dela por não ser suficientemente poderoso. Para o seu exemplo, algo como isto:

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

A única grande vantagem que você tem sobre todos os formatos específicos de PNL aqui é que JSONpode ser analisada em qualquer ambiente e, como você provavelmente precisará editar seu formato de qualquer maneira, o JSON se presta a edições muito simples que permitem uma curta distância para outros formatos.

Você também pode armazenar implicitamente informações de tokenização se desejar:

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

EDIT: Para esclarecer o mapeamento de metadados é bastante aberto, mas aqui está um exemplo:

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

Espero que ajude, deixe-me saber se você tiver mais alguma dúvida.


Sendo um desenvolvedor web, o JSON parece completamente razoável para mim, mas você pode elaborar o formato exato de mapear palavras para entidades?
Amir Ali Akbari

@AmirAliAkbari Resposta atualizada para incluir mais detalhes.
indico

7

Em geral, você não deseja usar tags XML para marcar documentos dessa maneira, pois elas podem se sobrepor.

As estruturas UIMA , GATE e NLP semelhantes indicam as tags separadas do texto. Cada etiqueta, tais como Person, ACME, Johnetc é armazenado como a posição de que a etiqueta começa e a posição que ele termina. Portanto, para o tag ACME, ele seria armazenado como iniciando uma posição 11 e terminando na posição 17.


7

A ferramenta de anotação de pirralho pode ser útil para você de acordo com meu comentário. Eu tentei muitos deles e este é o melhor que encontrei. Ele possui uma ótima interface de usuário e pode suportar vários tipos diferentes de anotações. As anotações são armazenadas em um arquivo .annot separado, que contém cada anotação e sua localização no documento original. Uma palavra de aviso, no entanto, se você quiser, em última análise, alimentar as anotações em um classificador como a ferramenta NER de Stanford, terá que fazer alguma manipulação para colocar os dados em um formato que eles aceitem.


1

Para descrever todos os dados existentes, é uma tarefa tão difícil, mas podemos usar um modelo de dados: http://schema.org/ , onde são os tipos estruturais das informações. A execução anterior foi direcionada para implementar a tecnologia MarkUp, portanto, parece que pode ser útil para sua tarefa.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.