ToSoBaP - Dokumentation

Ein Studienprojekt von Susanne Haaf und Kai Bormann, anfängtlich begleitet von Philipp Scheffzek.
Gesamtarchiv des Projektes
Verzeichnis der Quellen
Weitere Informationen: http://www.cl.uni-heidelberg.de/~bormann/documents/tosobap/
Kontakt: bormann@cl.uni-heidelberg.de oder haaf@cl.uni-heidelberg.de

Towards Solving the Babel Problem

Das folgende Abstract beschreibt die zu Begin des Projektes angestrebten Ziele sowie die Motivation für das Projekt:

Die Bestimmung der Sprache eines Textes ist Grundvoraussetzung für viele computerlinguistische Anwendungen und Verfahren (z.B. maschinelle Übersetzung, Syntaxanalyse, ...). Das vorliegende Studienprojekt hat deshalb das Ziel ein Verfahren zu entwickeln, das diese Aufgabe möglichst effizient und vor allem korrekt bewältigt.
Ausgehend von einem einfachen Ansatz mit Unigrammen (unsere Baseline) sollen verschiedene linguistische und statistische Verfahren, sowie deren Kombinationen implementiert und evaluiert werden. In einem ersten Schritt sollen die Verfahren auf möglichst viele Sprachen mit lateinischen Schriftzeichen angewandt werden und hierzu einzel-sprachliche Korpora, sowie ausführliche Testläufe erstellt werden. Die Ausweitung auf andere Schriftsysteme sollte aber ohne weiteres möglich sein.

Auf seinem aktuellen Stand verügt ToSoBaP über Implementierungen folgender Ansätze: Unigramme, Bigramme, Trigramme, kurze Wörter, Stopwörter, Wortlänge. Darüber hinaus in ein automatisches Evaluationsmodul in Ansätzen vorhanden.

Benutzung von ToSoBaP

Das Modul tosobap ist ein Programm zur  Sprachidentifikation. Es beinhaltet konkrete Modelle aller dem Programm bekannten Sprachen in einer bestimmten Methode und mit einer gemeinsamen Filtereinstellung.

Der einfachste Fall: auszuwertender Text wird mit -t übergeben
> python tosobap.py -t "Finde raus in welcher Sprache ich bin"
    (0.53182149908671261, 'de')
   
Über den Parameter -v erhält man die Ergebnisdaten für alle Sprachen:
> python tosobap.py -v -t "Finde raus in welcher Sprache ich bin"
    [(0.53182149908671261, 'de'), (0.42759318388988588, 'en'), (0.385443165 ...

Hierbei wurde automatisch ein serialisiertes Bigrammodell verwendet. Andere serialisierte Modelle können über den Schalter -d (deserialize) verwendet werden:
> python tosobap.py -d "trigram.toso" "Finde raus in welcher Sprache ich bin"
    (0.26615897497267732, 'de')

Es können selbstverständlich auch neue Modelle erzeugt werden. Hierzu dient der Schalter -m - gültige Werte sind zur Zeit unigram, bigram, trigram, shortwords, stopwords und wordlength. Achtung: Die erzeugung eines Modelles kann etwas Zeit in Anspruch nehmen, es empfielt sich daher öfter benötigte Modelle zu serialisieren. Dies ist über die Option -s möglich:
> python tosobap.py -m "trigram" -s "trigram.toso"

Ab jetzt kann das Trigrammodell über die Option -d "trigram.toso" benutzt werden, ohne dass es jedes mal neu aus den Korpusdaten erzeugt werden muss.

Die weiteren Parameter können wie folgt angezeigt werden:
> python tosobap.py -h

Ergänzung um weitere Sprachen

Eigene Sprachen bzw. Sprachvarianten können sehr einfach zu ToSoBaP hinzugefügt werden:
Zum Dauerhaften entfernen einer Sprache kann das entsprechende Verzeichnis gelöscht werden.

Eine Besonderheit ist die Datei stopwords.txt, die in jedem Sprachverzeichnis liegen kann. Sie sollte eine Liste von Stopwörtern der Sprache enthalten und wird vom Stopword-Modell verwendet. Alle andere Methoden ignorieren diese Datei.
Verfügt eine Sprache nicht über eine stopwords.txt Datei kann sie vom Stopword-Modell nicht berücksichtigt werden.

Automatische Evaluation

Die Klasse evaluator.py ist derzeit leider nicht wie ursprünglich geplant nutzbar.
Es war angedacht, dass automatisch eine ausfürliche Evaluation nach einem vorgegebenen Testplan durchgeführt wird. Hierbei sollte evaluator.py dem Testplan entsprechend immer wieder neue Instanzen von ToSoBaP mit verschiedenen Parametern erzeugen und diese im Anschluss einer Evaluation unterziehen.
Angedacht ist der folgende Ablauf
Sobald durch eine gründliche Evaluation das "beste" (korrekteste, schnellste, mit den wenigesten Daten auskommendste, ...) Modell mit den passenden Parametern ermittelt wurde könnte ein sehr einfaches ToSoBaP-Modul erzeugt und distributiert werden, dass dann nur noch die Identifikation der Sprache der Eingabedaten -ohne weitere Wahlmöglichkeiten- übernimmt.

Programmstruktur

ToSoBaP gliedert sich in die folgenden Module. Hier soll kurz ihre Funktion sowie ihre wichtigsten Methoden erläutert werden. Für weitergehende Informationen sei an die embedded documentation verwiesen.

models/*.py

In diesem Ordner befinden sich die Implementierungen der einzelnen Sprachidentifikationsmodelle. In der Regel sind die folgenden Funktionen vorhanden:

tosobap.py

Dies ist das zentrale Modul, das in der Regel vom Endbenutzer verwendet werden soll. Die Verwendung ist weiter oben in dieser Dokumentation erläutert.
Die Hauptaufgabe liegt in der Analyse der passenden Sprache zu einem Eingabetext. Hierzu werden für alle bekannten Sprachen (von fileIO->corpusScanner() ermittelt) ein jeweiliges Model erzeugt. Danach wird die Ähnlichkeit eines jeden dieser Modelle zum Eingabetext ermittelt und per default die wahrscheinlichste Sprache ausgegeben.
Per Kommandozeile lassen sich diverse Parameter übergeben, die unter anderem steuern was für ein Modell erzeugt werden soll oder dass z.B. ein vorher serialisiertes Modell wieder verwendet werden soll.
Neben der init()-Methode stehen noch
zur Verfüfung.

fileIO.py

Übernimmt alle Aufgaben aus dem Breich Datenein- und Ausgabe. Insbesondere:

language.py

Realisiert eine einzelne Sprache und enthält einen passenden DataReader (siehe fileIO), der allen Moduelen die mit Sprachobjekten arbeiten benutzt wird um an passende Trainings- und Testdaten zu gelangen. Außerdem werden hier die Namen der einzelnen Sprache verwaltet.

filters.py

Enthält einige Filter, die auf die Eingabedaten angewendet werden können. Unter anderem alles groß schreiben, alles klein schreiben, Sonderzeichen außerhalb ASCII rauswerfen, ...

evaluator.py

Angedachte Evaluationsklasse, in ihrer jetzigen Version leider nicht sinnvoll nutzbar.

Literatur


last change: 20070310 by Kai Bormann