Dez 22 2009

UIMA – eine Einführung

Veröffentlicht by . Filed under: Doktorarbeit

Im Rahmen meiner Doktorarbeit habe ich mir inzwischen eine Reihe unterschiedlichster Systeme zur Verarbeitung von Texten (NLP Tools) angeschaut. Hier gibt es inzwischen auch eine ganze Reihe freier Implementierungen, am bekanntesten sind sicherlich folgende:

  • Natural Language Toolkit: eine Sammlung von python-Modulen
  • Weka: An sich eher ein Data-Mining-System, das aber auch “einfache” Module für Text-Verarbeitung anbietet. Scheitert aber sehr schnell an der Datenmenge (wir haben allein im Vektorraum-Model schnell Dimensionen > 70.000)
  • Open NLP: eine recht interessante Sammlung an NLP Bibliotheken

Sicher gibt es noch eine große Anzahl anderer “Insellösungen”. Das Problem ist nur, dass sie in der Praxis kaum zu verwenden sind. Hauptsächlich liegt es daran, dass den Systemen eine saubere Basisarchitektur für sehr große Datenmengen fehlt. Und hier kommt UIMA ins Spiel.

UIMA steht für “Unstructured Information Management Architecture” und wurde ursprünglich von IBM entwickelt. Wie der Name schon sagt ist es eigentlich kein System zur Text-Verarbeitung, sondern eine Architektur, mit der sich beliebige unstrukturierte Daten – also auch Bilder und Sound – verarbeiten lassen.

UIMA stellt dem Entwickler eine sehr einfaches System zur Verfügung, mit dem in einem linearen Prozess Daten aus einer beliebigen Datenquelle eingelesen, verarbeitet und wieder gespeichert werden können. Somit besteht eine UIMA-Architektur immer aus drei Hauptkomponenten:

  • Reader: liest die Daten ein.
  • Processor: verarbeitet die Daten. In der Regel werden mehrere Prozessoren – im UIMA-Jargon Annotatoren genannt – hintereinander geschaltet.
  • Consumer: schreibt die Daten wieder raus.

Die Aufgabe des Programmierers ist nun, diese drei Komponenten mit Leben zu füllen. Dazu bietet UIMA schon sehr nützliche Basisklassen an, die einfach erweitert werden können. Der Gedanke dahinter ist: jede Klasse erfüllt genau eine Aufgabe. Sie muss nichts anderes als den Text, den es verarbeiten soll, wissen. Wir haben also praktisch ein Multiagentensystem vorliegen, das man am besten mit Fließbandarbeitern vergleichen kann. Eine Beispielanwendung könnte z.B. zur Füllung eines Lucene-Datenindexes so aussehen:

  • CSV-Reader (Reader)
  • Tokenizer (Annotator)
  • Spelling-Correction (Annotator – benötigt die Informationen vom Tokenizer-Annotator)
  • Lucene-Consumer

Natürlich ist man in der Lage, für die einzelnen Agenten wieder öffentliche Bibliotheken zu verwenden, man nutzt aber dabei bereits die – meiner Meinung nach – sehr ausgereifte und flexible Basisarchitektur. Die einzelnen Agenten können dabei sehr flexibel über eine XML-Datei konfiguriert und im Ablauf auch verändert werden. Damit sind die Methoden sehr gut wiederverwendbar. Gerade im Rahmen von Forschungsarbeiten sehr nützlich!

Wer also unstrukturierte Daten irgendwie verarbeiten will, sollte sich dieses Framework auf jeden Fall mal ansehen. Für mich war die Umstellung einer selbst entwickelten Architektur auf dieses System sehr lohnenswert.

No responses yet

1 Star2 Stars3 Stars4 Stars5 Stars
Loading ... Loading ...
^

Trackback URI | Comments RSS

Hinterlasse eine Antwort