Come annotare documenti di testo con metadati?


18

Avendo molti documenti di testo (in linguaggio naturale, non strutturato), quali sono i modi possibili per annotarli con alcuni metadati semantici? Ad esempio, considera un breve documento:

I saw the company's manager last day.

Per poter estrarre informazioni da esso, devono essere annotate con dati aggiuntivi per essere meno ambigue. Il processo di ricerca di tali metadati non è in discussione, quindi supponiamo che sia fatto manualmente. La domanda è: come archiviare questi dati in modo tale da poter effettuare ulteriori analisi su di essi in modo più conveniente / efficiente?

Un possibile approccio consiste nell'utilizzare i tag XML (vedi sotto), ma sembra troppo dettagliato e forse ci sono approcci / linee guida migliori per la memorizzazione di tali metadati su documenti di testo.

<Person name="John">I</Person> saw the <Organization name="ACME">company</Organization>'s
manager <Time value="2014-5-29">last day</Time>.

Uno degli scopi principali di SGML (lo stesso vale per la sua progenie, XML) era quello di fornire i mezzi per etichettare i documenti di testo (POS e tag semantici).
Deer Hunter,

Potrebbe essere più specifico / restrittivo riguardo al tipo di metadati che desideri aggiungere? Con i tuoi due esempi, dubito che esista un modo meno dettagliato con la stessa espressività generica dei tag XML.
ojdo,

@ojdo La maggior parte dei metadati è per chiarimento delle ambiguità (come i tempi relativi) o per specificare entità speciali (es. FK).
Amir Ali Akbari,

2
Ho usato brat.nlplab.org in passato. C'è una bella interfaccia per molti diversi tipi di annotazioni. Le annotazioni sono memorizzate in un file .annot separato che è un elenco delle parole che sono annotate e la loro posizione nel documento.
user1893354

@ user1893354 Molto utile! In particolare, il " formato di monotonia " usato da esso sembra molto adatto alle mie esigenze. Suggerisco di pubblicare una risposta, se lo desideri.
Amir Ali Akbari,

Risposte:


15

Personalmente suggerirei di utilizzare qualcosa che non sia specifico per il campo della PNL e qualcosa di sufficientemente generale da poter essere ancora utilizzato come strumento anche quando hai iniziato a muoverti oltre questo livello di metadati. Sceglierei in particolare un formato che può essere utilizzato indipendentemente dall'ambiente di sviluppo e uno che può mantenere una struttura di base se diventa rilevante (come la tokenizzazione)

Potrebbe sembrare strano, ma suggerirei onestamente JSON. È estremamente ben supportato, supporta molta struttura ed è abbastanza flessibile da non dover passare da esso per non essere abbastanza potente. Per il tuo esempio, qualcosa del genere:

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

L'unico grande vantaggio che hai rispetto a qualsiasi formato specifico della PNL qui è quello JSON può essere analizzato in qualsiasi ambiente, e poiché probabilmente dovrai comunque modificare il tuo formato, JSON si presta a modifiche molto semplici che ti danno una breve distanza in altri formati.

Puoi anche implicitamente archiviare informazioni di tokenizzazione se vuoi:

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

EDIT: per chiarire la mappatura dei metadati è piuttosto aperto, ma ecco un esempio:

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

Spero che ti aiuti, fammi sapere se hai altre domande.


Essendo uno sviluppatore web, JSON mi sembra del tutto ragionevole, ma puoi approfondire l'esatto formato di mappatura delle parole alle entità?
Amir Ali Akbari,

@AmirAliAkbari Risposta aggiornata per includere ulteriori dettagli.
indico,

7

In generale, non si desidera utilizzare i tag XML per taggare i documenti in questo modo perché i tag potrebbero sovrapporsi.

UIMA , GATE e framework NLP simili denotano i tag separati dal testo. Ogni tag, come Person, ecc. ACME, JohnViene memorizzato come posizione in cui inizia il tag e in cui termina. Quindi, per il tag ACME, verrebbe memorizzato come inizio di una posizione 11 e fine in posizione 17.


7

Lo strumento di annotazione monello potrebbe esserti utile secondo il mio commento. Ne ho provati molti e questo è il migliore che ho trovato. Ha una bella interfaccia utente e può supportare diversi tipi di annotazioni. Le annotazioni sono memorizzate in un file .annot separato che contiene ciascuna annotazione e la sua posizione all'interno del documento originale. Un avvertimento, tuttavia, se alla fine si desidera inserire le annotazioni in un classificatore come lo strumento NER di Stanford, è necessario effettuare alcune manipolazioni per ottenere i dati in un formato che accetteranno.


1

Descrivere tutti i dati esistenti è un compito così difficile, ma possiamo usare un modello di dati: http://schema.org/ , dove sono i tipi strutturali delle informazioni. L'esecuzione precedente era mirata all'implementazione della tecnologia MarkUp, quindi sembra che possa essere utile per il tuo compito.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.