<tl;dr> Ich kann mit einfachsten Verfahren phantastische Ergebnisse erzielen – wenn ich diese nur richtig überprüfe.
Nach langer Zeit, in der ich vor allem an Dingen gearbeitet habe, die zu geheim, noch nicht spruchreif genug oder einfach zu langweilig für einen Blogpost waren, habe ich in dieser Woche endlich wieder ein lohnendes Thema gefunden. Es geht mal wieder um Statistik, diesmal allerdings mit konkretem Bezug zu einem Projekt, an dem ich gerade arbeite, aber auch zum letzten Post, den ich über das Thema verfasst habe (den über die Facebook-Likes-Studie).
Zur Zeit läuft bei uns das Nachfolgeprojekt zur Digitalen Rätoromansichen Chrestomathie, bei dem vorhandene lexikalische Ressourcen für die Annotation von bündnerromanischen Sprachdaten eingebunden werden sollen. Ich wurde mit der Evaluation beauftragt, inwieweit sich morphosyntaktische Informationen (bei Verben etwa Tempus, Numerus etc.) aus flektierten Wortformen ablesen lassen, deren Stammform sich eventuell gar nicht im Lexikon befindet. Zur Verfügung stehen mir dafür Listen über mehrere tausend Verben, die auf acht verschiedene Konjugationsklassen aufgeteilt sind. Auf Basis dieser Information sollte ich jetzt eine Art Ratespiel entwickeln, das für möglichst viele Verben die richtige Konjugationsklasse ermittelt.
Jetzt kann man sich vielerlei ausdenken, wie man die zur Verfügung stehende Information nutzt – spielt der erste Vokal, die Endung des Verbes, evtl. sogar seine Länge eine Rolle dafür, wie es konjugiert wird? Mein erster Gedanke war, genau solche Merkmale für die vorsortierten Verben zu ermitteln, um damit ein Modell zu trainieren, welches mir unbekannte Verben klassifiziert.
Zunächst wollte ich aber eine vernünftige Baseline haben – welche Ergebnisse liefert ein Verfahren, das nicht eigens entwickelt werden muss, sondern das ich direkt anwenden kann? Dafür bot sich ein n-Gramm-Rang-Modell an, das auch eingesetzt wird, um bei kurzen Texten zu erraten, in welcher Sprache sie verfasst sind. Dabei werden für möglichst viele Sprachen die Buchstabenfolgen bestimmter Länge (n-Gramme – bei Bigrammen zwei Buchstaben, bei Trigrammen drei usw.) nach ihrer Häufigkeit in Trainingstexten sortiert. Man spricht hier auch davon, dass ein Modell für die Sprache gebaut wird (auch wenn das hier ein sehr einfaches Modell ist). Das gleiche wird dann für den zuzuordnenden Text gemacht. Schießlich werden die Ränge der n-Gramme aus dem Testtext mit den Rängen aller Sprachmodelle verglichen - es gewinnt die Sprache, bei der der geringste Unterschied besteht, was auch erstaunlich gut funktioniert.
Dieses Verfahren habe ich nun auf mein Rateproblem bezogen. Dabei habe ich aus 90% der Verbformen in meinen Listen n-Gramm-Modelle für die acht Konjugationsklassen gebaut und versucht die restlichen 10% diesen Klassen zuzuordnen. Eigentlich hatte ich keine großen Erwartungen an das Verfahren, da mir die Daten als zu kurz (meist <12 Zeichen) und zu wenig (einige Klassen enthalten weniger als 100 Einträge) erschienen, um verwendbare Modelle zu bauen. Um statistisch valide zu arbeiten, habe ich die Daten der einzelnen Klassen gescrambelt und das Leave-One-Out-Kreuzvalidierungsverfahren eingesetzt.
Die Ergebnisse dieses einfachen Modells erstaunten mich dann doch, auch die Tatsache, dass sie umso besser wurden, je größer ich das n der n-Gramme werden ließ. Nach der Kreuzvalidierung lag bereits das Unigrammmodell (also einfaches Buchstabenzählen) in über 50% der Zuteilungen richtig, das Bigrammmodell in über 70%, das Trigrammmodell in über 75%, ab dem Tetragrammmodell pendelt sich der Wert bei über 80% ein (der Erwartungswert wäre jeweils 12,5% gewesen). Ich konnte die Ergebnisse noch verbessern, indem ich die Daten vorsortierte: Jeweils zwei der Klassen enden ihre Infinitivform auf -er bzw. -ir; drei der Klassen auf -ar. Wenn ich etwa für -er-Verben nur die betreffenden Klassen zur Auswahl stelle (also ausgehend von einem Erwartungswert 50%), habe ich bereits bei Trigrammen eine fast perfekte Zuordnung (99%), die dann ab Tetragrammen tatsächlich perfekt ist (100%). Bei -ar-Verben gilt das leider nicht in dem Umfang – mehr als 79% richtige Zuordnungen habe ich dabei nicht erreicht (Erwartungswert 33%). Naja, es sollte ja sowieso nur eine Baseline für ein elaborierteres Modell sein.
An dem Punkt erinnerte ich mich aber an die Studie, die behauptete, aus Facebook-Likes von Personen deren sexuelle Orientierung und noch einiges mehr ermitteln zu können. So sollten bspw. Personen mit homosexueller Orientierung vom System mit 88%iger Sicherheit erkannt werden. Allerdings wurde das in meinen Augen über eine etwas seltsame Methode evaluiert (ich schrieb drüber) – nämlich indem dem Algorithmus je eine Person mit homo- bzw. heterosexueller Orientierung präsentiert wurde und der dann nur noch entscheiden musste, welche Person zu welcher Gruppe gehört.
Ich habe jetzt diese Evaluation auch mal bei mir eingebaut, also jeweils Pärchen von Verben aus unterschiedlichen Klassen auf genau diese Klassen verteilen lassen. Auf einmal hatte ich jetzt nicht mehr knapp 80%, sondern über 99,9% Erfolgsquote bei der Zuteilung (33.748.628 korrekte Zuteilungen stehen 22722 falsche gegenüber). Aber halt – in der Facebook-Studie waren, wenn ich das richtig sehe, noch nicht einmal Trainings- und Testdaten getrennt (d.h. das Modell wurde mit den gleichen Daten trainiert, die hernach klassifiziert werden sollten). Dann hab ich mir die Kreuzvalidierung auch mal gespart – das Ergebnis: 3.377.132 richtige Zuteilungen, 3 falsche. Erfolgsquote 99,9999%. Dass diese Zahl so gut wie nichts mit Real-World-Anwendungen zu tun hat – geschenkt. Ich sollte wohl wirklich mal meine Skepsis zu fadenscheinigen Vorgehensweisen bei der Verwendung von Evaluationsmaßen über Bord werfen und ein paar Papers schreiben.