Structured News, Monat 2: Faktenextraktion, Normalisierung temporaler Ausdrücke, einfache Suchabfragen
– Im zweiten Teil der Serie beschreibe ich die Informationsextraktion simpler Fakten. Dabei unerlässlich ist die möglichst geschickte Umformung in eine Standardform, damit einmal gewonnene Informationen vergleichbar, sortierbar und damit durchsuchbar werden.
Im ersten Teil bin ich bereits auf den Aufbau der Zitatesammlung eingegangen, die als Musterexemplar für alle weiteren Datentypen dann auch allen technischen Unterbau für die Verarbeitung natürlichsprachlicher Texte motivierte.
Projektmonat 2 fügt viele weitere Datentypen hinzu für Faktendaten aller Art, die sich in digitalen Texten verbergen können.
Faktenextraktion
Text referenziert in vielen Fällen wertvolle Kerninformationen. Etwa:
- Datums- und Zeitbeschreibungen in unterschiedlichsten Darstellungsformen,
- Geldbeträge nebst Währung,
- Prozentangaben,
- Mengenangaben nebst Maßeinheit,
- diverse Zahlwörter.
Zudem treten diese Angaben in verschiedenster Gestalt auf:
- absolut ("65 Minuten lang") oder
- relativ ("gestern Abend", "50 Kilometer weiter", "vor zwei Jahren", "ein Jahr nach Einführung"),
- exakt ("fünf Jahre") oder
- ungenau ("einige Eigentümer"),
- Grundzahlen ("zwei Listen"),
- Ordnungszahlen ("bei jedem dritten Mietspiegel"),
- Bruchzahlen ("ein Viertel", "drei von vier Kommunen", "nach einem halben Jahrhundert"),
- Intervalle ("vorige Woche", "nach dem 1.10.2014", "maximal 5 Jahre", "Rente mit 63"),
- usw. usf.
Wie das menschliche Auge können wir Parsing-Algorithmen dazu trainieren, derartige Textstrukturen zu identifizieren:
Weiß der Mensch diese Informationen noch augenblicklich in einen Kontext zu stellen, kann das Elektronenhirn hingegen oftmals nicht von selbst beurteilen, ob seine Ergebnisse plausibel sind. Wahrscheinlichkeiten geben daher den Grad an Gewissheit an.
Normalisierung temporaler Ausdrücke
Tauchen im Text zeitliche Angaben wie "gestern Abend" oder "vorige Woche" auf, müssen wir sie relativ zu einem Referenzdatum auffassen: in aller Regel dem Veröffentlichungsdatum des Artikels, manchmal wiederum in Bezug zu einem bekannten Ereignis ("ein Jahr nach Einführung") oder eines vorher genannten Objekts ("50 Kilometer weiter").
Letztlich wollen wir, wenn ein bestimmtes Ereignis zu einem nur umschriebenen Zeitpunkt stattfand, dieses Ereignis in kanonischer Form und mit möglichst spezifischen Zeitkoordinaten in unserer Faktendatenbank ablegen. Nach "gestern Abend" können wir nicht universell suchen, nach Ereignissen in einem bestimmten Zeitraum hingegen schon.
Einfache Suchabfragen
Das Extrahieren von Fakten lässt sich natürlich auch als Aufgabe zum Auffüllen von Wissens-Slots auffassen. Wollten wir beispielsweise für eine Wissensbasis den Slot ("Mietpreis", "2014", "Kreuzberg", ?) füllen, können wir unseren Textkorpus nach Textstellen absuchen, die eben diesen Kontext ("2014", "Kreuzberg") erfüllen. (In Monat 5 kommt dafür noch Relation Extraction ins Spiel.)
Mittelfristig sollen mächtigere Suchoperatoren wie "near: Context" und "between: Num1 and: Num2" es ermöglichen, relevante Treffer über sogenannte Fuzzy Queries auch in schwammiger Umgebung zu finden, wo starre Suchkriterien nur ins Nichts führen würden.