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>.
Amir Ali Akbari
fonte
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.

indico
fonte
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.

Christopher Louden
fonte
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.

user1893354
fonte
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.

Vasyl Lyashkevych
fonte