Wie kommentiere ich Textdokumente mit Metadaten?

18

Welche Möglichkeiten gibt es, Textdokumente (in natürlicher Sprache, unstrukturiert) mit semantischen Metadaten zu versehen? Betrachten Sie zum Beispiel ein kurzes Dokument:

I saw the company's manager last day.

Um Informationen daraus extrahieren zu können, müssen sie mit zusätzlichen Daten versehen werden, damit sie nicht mehr eindeutig sind. Das Auffinden solcher Metadaten ist nicht in Frage, nehmen wir also an, dass dies manuell erfolgt. Die Frage ist, wie diese Daten so gespeichert werden können, dass eine weitere Analyse bequemer und effizienter durchgeführt werden kann.

Ein möglicher Ansatz ist die Verwendung von XML-Tags (siehe unten), die jedoch zu ausführlich erscheinen. Vielleicht gibt es bessere Ansätze / Richtlinien zum Speichern solcher Metadaten in Textdokumenten.

<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
quelle
Eines der Hauptziele von SGML (dasselbe gilt für seine Nachkommen, XML) war die Bereitstellung der Mittel zum Kennzeichnen von Textdokumenten (POS- und semantische Tags).
Deer Hunter
Könnte genauer / restriktiver sein, welche Art von Metadaten Sie hinzufügen möchten? An Ihren beiden Beispielen bezweifle ich, dass es eine weniger ausführliche Methode gibt, die dieselbe generische Aussagekraft wie XML-Tags hat.
Ojdo
@ojdo Die meisten Metadaten dienen entweder der Disambiguierung (wie die relativen Zeiten) oder der Angabe spezieller Entitäten (dh FKs).
Amir Ali Akbari
2
Ich habe brat.nlplab.org in der Vergangenheit benutzt. Es gibt eine schöne Oberfläche für viele verschiedene Arten von Anmerkungen. Die Anmerkungen werden in einer separaten .annot-Datei gespeichert, die eine Liste der mit Anmerkungen versehenen Wörter und ihre Position im Dokument enthält.
user1893354
@ user1893354 Sehr hilfreich! Insbesondere das von ihm verwendete " Brat-Standoff-Format " scheint für meine Bedürfnisse sehr geeignet zu sein. Ich schlage vor, eine Antwort zu schreiben, wenn Sie möchten.
Amir Ali Akbari

Antworten:

15

Persönlich würde ich dafür eintreten, etwas zu verwenden, das sowohl für das NLP-Gebiet nicht spezifisch ist, als auch etwas, das allgemein genug ist, dass es auch dann noch als Werkzeug verwendet werden kann, wenn Sie anfangen, über diese Metadatenebene hinauszugehen. Ich würde insbesondere ein Format auswählen, das unabhängig von der Entwicklungsumgebung verwendet werden kann und das eine grundlegende Struktur beibehält, wenn dies relevant wird (wie Tokenisierung).

Es mag seltsam erscheinen, aber ich würde ehrlich vorschlagen JSON. Es ist extrem gut unterstützt, unterstützt viel Struktur und ist flexibel genug, dass Sie sich nicht davon entfernen müssen, um nicht leistungsfähig genug zu sein. Für Ihr Beispiel ungefähr so:

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

Der einzige große Vorteil, den Sie gegenüber NLP-spezifischen Formaten haben, ist, dass JSONsie in jeder Umgebung analysiert werden können. Da Sie Ihr Format wahrscheinlich trotzdem bearbeiten müssen, bietet sich JSON für sehr einfache Bearbeitungen an, die Ihnen eine kurze Distanz bieten zu anderen Formaten.

Sie können Tokenisierungsinformationen auch implizit speichern, wenn Sie Folgendes möchten:

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

BEARBEITEN: Um die Zuordnung von Metadaten zu verdeutlichen, ist ziemlich offen, aber hier ist ein Beispiel:

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

Hoffe das hilft, lass es mich wissen, wenn du weitere Fragen hast.

indico
quelle
Als Webentwickler erscheint mir JSON völlig vernünftig, aber können Sie das genaue Format der Zuordnung von Wörtern zu Entitäten erläutern?
Amir Ali Akbari
@AmirAliAkbari Die Antwort wurde aktualisiert und enthält nun weitere Details.
Indico
7

Im Allgemeinen möchten Sie keine XML-Tags verwenden, um Dokumente auf diese Weise zu kennzeichnen, da sich Tags überlappen können.

UIMA , GATE und ähnliche NLP-Frameworks kennzeichnen die vom Text getrennten Tags. Jeder Tag, wie Person, ACME, Johnusw. als die Position gespeichert , dass der Tag beginnt und die Position , dass es endet. Für das Tag ACMEwürde es also so gespeichert, dass es an Position 11 beginnt und an Position 17 endet.

Christopher Louden
quelle
7

Das Brat-Annotation-Tool könnte laut meinem Kommentar für Sie nützlich sein. Ich habe viele von ihnen ausprobiert und dies ist das Beste, was ich gefunden habe. Es hat eine schöne Benutzeroberfläche und kann eine Reihe von verschiedenen Arten von Anmerkungen unterstützen. Die Anmerkungen werden in einer separaten .annot-Datei gespeichert, die jede Anmerkung sowie ihren Speicherort im Originaldokument enthält. Ein Wort der Warnung: Wenn Sie die Anmerkungen letztendlich in einen Klassifikator wie das Stanford NER-Tool einspeisen möchten, müssen Sie einige Manipulationen vornehmen, um die Daten in ein Format zu bringen, das akzeptiert wird.

user1893354
quelle
1

Es ist eine sehr schwierige Aufgabe, alle vorhandenen Daten zu beschreiben, aber wir können ein Datenmodell verwenden: http://schema.org/ , wobei es sich um strukturelle Typen der Informationen handelt. Die vorherige Ausführung war auf die Implementierung der MarkUp-Technologie ausgerichtet, daher scheint sie für Ihre Aufgabe nützlich zu sein.

Vasyl Lyashkevych
quelle