Als Prüfer Programmcode oder Multiple-Choice-Fragen elektronisch auszuwerten ist nicht allzu schwer. Doch das Korrektursystem zur Linux-Vorlesung an der Hochschule Heidelberg versteht nicht nur vorformulierte Textbausteine, sondern auch Freitextantworten.
Übungsaufgaben einsammeln und nach ein bis zwei Wochen korrigiert zurückgeben ist im Grunde für Studierende und Dozenten unbefriedigend. Bis die Studenten die Ergebnisse sehen, ist die Erinnerung an die Übungsaufgabe bereits verblasst. Für die Lehrenden fällt viel Routinearbeit an.
Für die Übung zur Linux-Vorlesung an der Hochschule Heidelberg entstand daher im Jahr 2003 eine Software, die die lästige Korrekturarbeit übernahm. Ein Cron-gesteuerter Regressionstest nahm den von den Studenten geschriebenen Programmcode unter die Lupe. Als didaktischer Vorteil ergab sich für die Studenten eine unmittelbare Rückmeldung, sie erhielten die Ergebnisse, noch während sie im PC-Raum saßen.
Leider ließ sich diese maschinelle Bewertung für Verständnisfragen zunächst nur sehr beschränkt umsetzen. Die Software verstand lediglich kurze, exakt vordefinierte Antworten. Bei normalen, umgangssprachlichen Antworten führte kein Weg an der zeitraubenden Auswertung von Hand vorbei.
Einer der beiden Autoren, 2006 selbst Teilnehmer der Linux-Vorlesung, schlug schließlich vor, ein neuronales Netz [1] für die Auswertung der Antwortsätze einzusetzen. So entstanden eine plattformunabhängige C++-Software [2], die aus zwei Kommandozeilenprogrammen besteht, einem Trainingprogramm und einem Programm, das mit Hilfe eines neuronalen Netzes die Antwortsätze der Studenten analysiert. Abbildung 1 skizziert die Funktionsweise.

Abbildung 1: Vollautomatische Korrektur: Ein Cronjob holt die Dateien aus den Homes der Studenten. Je nachdem, ob es sich um Programmcode oder Antwortsätze in Deutsch oder Englisch handelt, wertet sie ein Regressionstest oder ein neuronales Netz aus. HTML-Seiten präsentieren die Ergebnisse.
In der Praxis
Um das neuronale Netz für eine Aufgabenstellung zu trainieren, sind in der Regel nur drei Textdateien anzupassen: Die Datei »right.txt« enthält Muster richtiger Antworten, »wrong.txt« ausgewählte falsche. Die Antworten sind darin normalerweise als ganze Sätze ausformuliert. Die Datei »dictionary.txt« schließlich übersetzt die Wörter der Antwortsätze in Bitketten, die sich an die Eingabeneuronen des Netzes anlegen lassen. Für jede gestellte Frage gibt es eigene Versionen dieser drei Dateien.
Ein Antwortsatz entspricht nicht immer einem grammatikalischen Satz, die Software kann auch Antworten verarbeiten, die aus mehreren Sätzen bestehen. Die Wörterbuchdatei definiert auch Synonyme, gleichbedeutende Wörter erhalten die gleiche Bitfolge.
Mit Synonymen lässt sich die Zahl der nötigen Mustersätze deutlich verringern. Sind zum Beispiel die Begriffe CPU und Prozessor als Synonyme festgelegt, dann versteht das neuronale Netz die Sätze “Die CPU führt die Berechnungen durch” und “Der Prozessor führt die Berechnungen durch” ohne zusätzlichen Trainingsaufwand.
Es liegt auf der Hand, dass die Synonyme auch Wörter aus Fremdsprachen beinhalten dürfen und damit eine Auswertung in verschiedenen Sprachen ohne zusätzliche Mustersätze erleichtern. Abbildung 2 gibt einen Überblick über den Aufbau des Spracherkennungsmoduls.

Abbildung 2: Maschinelle Spracherkennung: Ein Wörterbuch setzt eine Wortfolge in binären Code um. Das trainierte neuronale Netz erkennt, ob es sich um eine richtige oder eine falsche Antwort handelt.
Ohne Fleiß …
Je nach Komplexität der Fragestellung sind für das Erstellen der Musterantworten mehrere Stunden Arbeitszeit nötig. Für das eigentliche Training braucht das neuronale Netz jedoch keine weiteren Informationen. Finden sich unter den Antworten keine unerwarteten richtigen Lösungen, die ein Nachtraining erforderlich machen, so ist damit die Arbeit des Korrektors schon erledigt.
Tabelle 1 zeigt, wie die drei Dateien für die Frage “What is GNU?” aussehen könnten. Das Beispiel verdeutlicht auch den Umgang mit der Negation. Da das “not” in der richtigen Antwort vorkommt, erlernt das neuronale Netz es beim Training als sinnkonstitutives Element. Das dies auch wirklich geschieht, stellt der Satz “GNU is Unix” in der Datei »wrong.txt« sicher.
|
Tabelle 1: |
||
|---|---|---|
|
right.txt |
wrong.txt |
dictionary.txt |
|
GNU is not Unix |
GNU is Unix |
GNU |
|
GNU is an animal |
is |
|
|
I have no idea |
not |
|
|
GNU is not Linux |
Unix |
|
|
Linux |
||
Zirkeltraining
Nach dem Festlegen der richtigen und falschen Antworten sowie der Synonyme folgt das eigentlich Training des neuronalen Netzes. Das »backpropwrite«-Binary startet es und gibt alle 100 Trainingsschritte Daten über den Zustand des Netzes aus (Listing 1). Der Index »b[]« entspricht der laufenden Nummer des zu trainierenden Satzes, die Zahl hinter dem Gleichheitszeichen gibt den Wert des Ausgabeneurons beim gegenwärtigen Trainingszustand wieder. Die Null oder Eins am Ende der Zeile zeigt den Wert, den das neuronale Netz nach dem Training zurückgegeben soll, also eine Eins bei Sätzen aus »right.txt«, Null bei Sätzen aus »wrong.txt«. Die unterste Zeile zeigt die Zahl der bereits absolvierten Durchläufe sowie die Anzahl der noch nicht ausreichend trainierten Sätze, zum Beispiel Satz 1 in »b[1]«.
|
Listing 1: Lernstatus des |
|---|
01 b[0]=0.968987, 1 02 b[1]=0.572406, 1 03 b[2]=0.945500, 1 04 b[3]=0.963969, 1 05 b[4]=0.963049, 1 06 b[5]=0.911323, 1 07 b[6]=0.964996, 1 08 b[7]=0.894111, 1 09 b[8]=0.805639, 1 10 b[9]=0.122976, 0 11 b[10]=0.108387, 0 12 b[11]=0.538517, 0 13 b[12]=0.062868, 0 14 b[13]=0.072598, 0 15 Iteration: 800 errors: 6 |
Ein Trainingslauf der Software dauert einige Minuten, abhängig von der Anzahl der zu trainierenden Sätze. Auch die Anfangskonfiguration des Netzes, also die zufällige Gewichtung der Neuronenverknüpfungen vor dem Training, hat starken Einfluss auf die Trainingsdauer. Dauert das Training zu lange, kann es sinnvoll sein, abzubrechen und mit einer neuen Zufallsgewichtung der Neuronen neu zu starten. Die gegenwärtige Programmversion verzichtet jedoch zugunsten der Reproduzierbarkeit auf den Einsatz eines Random Seed. Sobald das Training beendet ist, speichert »backpropwrite« alle Gewichte in der Binärdatei »net1.bin«, »backpropread«, also die eigentliche Spracherkennungs-Engine, übernimmt das Einlesen.
Das Training läuft so lange, bis die Ausgaben für alle Sätze ein Delta zu ihrem Sollwert unterschreiten. Dieses im Quellcode einstellbare Delta liegt per Default bei 0,1. Von der ebenfalls im Quellcode einstellbaren Anzahl der Eingabeneuronen hängt es ab, wie viele signifikante Wörter eine zu überprüfende Antwort maximal enthalten darf: Jedes Wort benötigt 8 Bit, also acht Eingabeneuronen. Damit ergibt sich die Anzahl der maximal einzutrainierenden Wörter als das Achtfache der Anzahl der Wörter pro Satz. Voreingestellt sind 480 Eingabeneuronen, also 60 Wörter.
Sobald das Training abgeschlossen ist, ist »backpropread« bereit zur Auswertung von Antwortsätzen. Ein Delta-Wert entscheidet, ob der Wert am Ausgangsneuron des Netzes bedeutet, dass die geprüfte Antwort richtig oder falsch ist. Dieser Wert muss natürlich größer als der Delta-Wert im Training sein.
Außer der Bewertung “richtig” oder “falsch” gibt die Software auch den absoluten Zahlenwert am Ausgangsneuron des Netzes zurück, der eine Antwort als gut oder weniger gut klassifiziert. Für tendenziell richtige Antworten vergibt das Korrektursystem nur einen Teil der vollen Punktzahl. Die Ergebnisse fasst das System auf einer HTML-Seite zusammen (Abbildung 3).

Abbildung 3: In Sekundenschnelle eine Note geben: Das Korrektursystem erzeugt eine HTML-Seite mit den Übungsergebnissen der einzelnen Teilnehmer. Die Fragen 3 und 4 sind dabei mit dem neuronalen Netz ausgewertete natursprachliche Antworten.
Künstliches Gehirn
Die Technik, die hinter der Auswertung natursprachlicher Antworten steckt, ahmt die Struktur des menschlichen oder tierischen Gehirns nach. Neuronale Netze bestehen aus Knoten mit mehreren Eingängen (Abbildung 4). Ein Schwellenwert definiert, ab welchem an den Eingängen anliegenden Potenzial der Ausgang eines Neurons aktiv wird, also selbst ein Signal aussendet. Über die Eingänge ist jedes Neuron mit vielen anderen Neuronen verknüpft. Jede Verknüpfung hat ein bestimmtes Gewicht, das angibt, wie sensibel das Neuron auf ankommende Signale reagiert. In den Gewichtungen ist der Trainingsstatus, also das Wissen des neuronalen Netzes gespeichert.
Künstliche neuronale Netze kommen vor allem bei der Mustererkennung zum Einsatz. Eine typische Anwendung für künstliche neuronale Netze ist Optical Character Recognition (OCR).
Das in diesem Artikel vorgestellte Korrektursystem nutzt ein so genanntes Backpropagation-Netz. Dieser Netztyp ordnet die Neuronen in Schichten an. In der Regel gibt es drei Schichten: eine Eingabeschicht, eine, manchmal auch mehrere verborgene Zwischenschichten sowie eine Ausgabeschicht. Jedes Neuron einer Schicht ist mit allen Neuronen der nächsthöheren Schicht verbunden (Abbildung 5).

Abbildung 5: Ein Backpropagation-Netz verknüpft jedes Neuron mit allen Neuronen der nächsthöheren Schicht.
Beim Training verändern sich die Gewichte der Neuronenverknüpfungen. Anders als beim Gehirn, dessen Neuronen entweder feuern oder inaktiv sind, senden die Neuronen in Backpropagation-Netzwerken kontinuierliche Werte zwischen null und eins aus. Ziel des Trainings ist es, dem neuronalen Netz ein Verhaltensmuster aufzuprägen, sodass es zu jeder möglichen Aufgabenstellung die richtigen Ausgabewerte liefert. Um mehrere Muster einzutrainieren, sind mehrere aufeinanderfolgende Trainingsdurchläufe erforderlich.
Das neuronale Netz des Korrektursystems hat nur ein Ausgabeneuron. Liefert es den Wert null zurück, so gilt der an den Eingabeneuronen anliegende Satz als falsch, bei eins gilt er als richtig. Das neuronale Netz gibt aber bei nicht ganz falschen oder fast richtigen Sätzen auch Zwischenwerte zurück. An den Eingangsneuronen liegt das Bitmuster an, das den Satz nach Durchlauf des Wörterbuchs repräsentiert.
Vom Chaos zum Kosmos
Zu Beginn des Trainings tragen die Gewichtungen der Neuroneneingänge zufällige Werte. Für das Training kommen Paare von gültigen Eingabewerten und gewünschten Ausgabewerten zum Einsatz. Aus der Differenz zwischen dem richtigen und dem beim gegenwärtigen Trainingszustand vom Netz gelieferten Wert erfolgt vom Ausgang des Netzes her eine Anpassung der Gewichtungen. Das Training mit unterschiedlichen Ein- und Ausgabewert-Paaren läuft so lange, bis die Differenz zwischen Ist- und Sollwert ein festgelegtes Minimum unterschreitet. Damit gilt das Netz als für die Aufgabenstellung ausreichend trainiert.
Das beim Korrektursystem verwendete Netz aus 480 Eingabeneuronen, 80 Neuronen in der verborgenen Schicht und einem Ausgangsneuron enthält über 38 000 Verbindungen und Gewichte. Diese hohe Anzahl an Parametern ist für einen Menschen nicht mehr überschaubar. Neuronale Netze wirken daher von außen wie eine Blackbox: Sie reagiert nach dem Training auf eine Eingabe mit einer bestimmten Ausgabe. Was im Inneren des Netzes passiert, ist jedoch nicht nachvollziehbar.
Vorarbeit
Bevor das neuronale Netz sie zu sehen bekommt, übersetzt das Wörterbuch die Wörter der Antwortsätze in so genannten Gray-Code (Abbildung 6). Bei diesem Kodierungssystem unterscheiden sich im Wörterbuch aufeinanderfolgende Einträge nur um 1 Bit. Folgen im Wörterbuch sinnverwandte Wörter aufeinander, dann erhalten sie bei der Übersetzung ähnlichen Bitcode. Unter Umständen erleichtert es das Lernen des neuronalen Netzes, wenn bei ähnlichen Bedeutungen ähnliche Bitmuster am Eingang anliegen.

Abbildung 6: Trainingsplan: Die Software übersetzt alle Mustersätze gemäß Wörterbuch in Bitketten und präsentiert sie dem Neuronetz zum Training.
Allerdings gibt es auch Fälle, bei denen das Netz sinnverwandte Wörter in einem speziellen Kontext völlig unterschiedlich bewerten muss. Die Umsetzung von sinnverwandten Wörtern in ähnliche Bitketten ist auch nicht Voraussetzung für das Funktionieren des neuronalen Netzes. Das Korrektursystem nutzt sie als zusätzliche Erleichterung beim Trainieren des Netzes. Tabelle 2 zeigt den Gray-Code im Wörterbuch für die Frage “What is GNU?” mit der richtigen Antwort “GNU is not Linux”. Tabelle 3 zeigt den Bitcode für den Satz “GNU is not a Unix”. Der Artikel a fällt unter den Tisch, da er nicht im Wörterbuch steht.
|
Tabelle 2: |
|
|---|---|
|
Wort |
Bitcode |
|
GNU |
0001 |
|
is |
0011 |
|
not |
0010 |
|
Unix |
0110 |
|
Linux |
0111 |
|
Tabelle 3: |
||||
|---|---|---|---|---|
|
1. Wort |
2. Wort |
3. Wort |
– |
4. Wort |
|
GNU |
is |
not |
a |
Unix |
|
0001 |
0011 |
0010 |
– |
0110 |
Optimierung
In der Regel sollte das Wörterbuch möglichst kompakt ausfallen, statt vieler Muster-Antwortsätze sollten lieber Synonyme zum Einsatz kommen. Je mehr unterschiedliche richtige Antworten in »right.txt« stehen, desto flexibler wertet allerdings das Netz sie aus.
Die Anzahl der für das Training nötigen falschen Antworten bleibt meist überschaubar, sinnvollerweise befindet sich jedoch stets ein leerer Satz darunter. Im Beispiel übernimmt dies der Satz “I have no idea”, da sich keines seiner Wörter im Wörterbuch befindet. Ein Fantasiewort wie “qwertz” würde den gleichen Zweck erfüllen. Ohne den leeren Satz in »wrong.txt« könnte es passieren, dass das neuronale Netz eine Antwort, die kein Wort aus dem Wörterbuch enthält, als richtig klassifiziert.
Einige weitere Einstellungen erfolgen direkt im Quelltext des Programms. Dort legt der Prüfer Zeichen fest, die das Präprozessing vor der Übergabe an das neuronale Netz herausfiltert. Meist sind dies Sonder- und Satzzeichen. Sinnvoll kann es auch sein, alle Satzzeichen in Punkte zu verwandeln, statt sie auszusortieren. Die Software kennt die Option, den Punkt wie ein Wort zu werten. Das Netz berücksichtigt dann, aus wie vielen Sätzen oder Satzteilen die Antwort besteht. Per Default ist diese Funktion jedoch ausgeschaltet. Eine weitere Option ist, Wörter eines Satzes alphabetisch zu sortieren, sodass das neuronale Netz Sätze mit unterschiedlicher Wortreihenfolge immer gleich bewertet.
Die in Bitketten umgewandelten Mustersätze sind die Grundlage für das Training. Jedes Bit der Zeichenkette liegt dabei an einem eigenen Eingabeneuron des Netzes an (Abbildung 2). Das Training legt die richtigen und falschen Mustersätze dem Netz so oft vor, bis es sie mit akzeptabler Toleranz richtig klassifiziert. Für jede einzutrainierende Eingabe passt das neuronale Netz die Gewichte an, um letztlich alle Eingaben korrekt als richtig oder falsch zu erkennen.
Nachhilfe gefragt
Die so genannte Lernkonstante bestimmt, wie stark sich die Gewichte des neuronalen Netzes bei einem Trainingszyklus verändern. Von ihr hängt es also ab, wie schnell das Netz lernt. Bei einer zu hohen Lernkonstante kann es allerdings passieren, dass das Netz an der optimalen Konfiguration vorbeidriftet. Es konvergiert dann nie, lernt also die richtigen und falschen Antworten nicht mit akzeptabler Toleranz zu unterscheiden. Ein vernünftiger Wert für die Lernkonstante ist 0,5. Liegt sie unnötig niedrig, braucht das neuronale Netz zum Lernen länger, scheitert deswegen aber nicht.
Endergebnis
Der Ablauf beim Bewerten der Studentenantworten ist ähnlich wie beim Training (Abbildung 7). Die Software wandelt den Antwortsatz gemäß Wörterbuch um, lädt die Datei »net1.bin«, die Trainingsdaten für die zu bearbeitende Frage, und legt den Bitcode an die Eingabeneuronen an. Am Ausgabeneuron liegt dann nach kurzer Zeit ein Wert zwischen null (falsch) und eins (richtig) an.

Abbildung 7: Ähnlich wie beim Training: Die Software kodiert einen zu prüfenden Antwortsatz Wort für Wort anhand des Wörterbuchs in Bitfolgen, die es an die Eingabeneuronen des Netzes weiterleitet.
Die Interpretation des Potenzials am Netzausgang liegt nun bei der Auswertungssoftware. Bei entsprechender Einstellung vergibt sie umso mehr Punkte, je höher dieser Wert ist. Da die Auswertung der Frage nur Millisekunden dauert, kann die Software dem Prüfling, wenn dies didaktisch erwünscht ist, einen Tipp geben, wie “heiß” oder “kalt” seine Antwort ist. In der Übungsklausur darf der Prüfling nachbessern.
Training und Zusammenstellen der Mustersätze für neue Übungsfragen sind erfahrungsgemäß oft iterative Prozesse. Wenn die Übungsteilnehmer richtige, aber unerwartet formulierte Antworten geben, muss der Kursleiter nachträglich die Mustersätze erweitern und das Netz neu trainieren. Manchmal genügt aber auch das Einfügen weiterer Synonyme ins Wörterbuch, was ein weiteres Training erspart. Das Einrichten einer neuen Frage nach dem Trial-and-Error-Prinzip dauert oft länger als eine Stunde. Danach läuft das Korrektursystem aber fast ohne Zutun, sodass sich der Arbeitsaufwand beim Trainieren lohnt.
Voraussetzung für ein erfolgreiches Training ist die Auswahl geeigneter Mustersätze für die Extremwerte “völlig richtig” und “völlig falsch”. Vor allem die Positivmuster sind dabei wichtig. Vorliegende Antworten der Studenten aus der Zeit vor der Einführung des neuronalen Netzes erwiesen sich dabei als sehr nützlich. Stehen diese nicht zur Verfügung, ist die Fantasie gefragt, um das Spektrum der möglichen richtigen Antworten zu erfassen.
Als hilfreich hat es sich erwiesen, gleich bei der Erstellung der Fragen eine Liste von zu erwartenden Antworten anzulegen. Zeigt sich, dass diese zu komplex ausfallen und mehrere Sachverhalte umfassen, ist es besser, die Frage in mehrere Teilfragen aufzuteilen. Sind die Positivmuster und Negativmuster festgelegt, wandern alle Bedeutung tragenden Wörter ins Wörterbuch (siehe Kasten “Mustersätze”). Unwichtige Wörter wie Artikel und Füllwörter bekommt das neuronale Netz gar nicht zu sehen.
|
Mustersätze |
|---|
|
Das Korrektursystem soll Antworten auf die Frage “Wozu dient das Programm Rsync?” auswerten. Zu erwartende Antworten der Stunden wären etwa:
Als Musterlösung (»right.txt«) eignet sich die folgende Liste. Wörter, die keine Bedeutung tragen, fehlen, daher entstehen auch keine vollständigen Sätze:
Die Datei »wrong.txt«, die dem Netzwerk dabei hilft, falsche oder unvollständige Antworten auszusortieren, enthält:
Das Wörterbuch, das dazu dient, die Wörter in Bitcode umzusetzen und unwichtige Wörter auszufiltern, hat folgenden Inhalt. Mehrere kommaseparierte Wörter in einer Zeile definieren Synonyme:
|
Beinahe menschlich
Gegenüber einer reinen Suche nach bestimmten Stichwörtern zeichnet sich das neuronale Netz dadurch aus, dass es auch solche Antworten bearbeiten kann, die den Mustern in »right.txt« nur ähneln, aber nicht exakt mit ihnen übereinstimmen. Es verhält sich also fehlertolerant.
Auch Kombinationen mehrerer richtiger Mustersätze gehen in die Bewertung ein. Dafür sorgen die charakteristischen Eigenschaften eines neuronalen Netzes zusammen mit der Kodierung der Wörter im Gray-Code. Da im Wörterbuch nahe beieinanderstehende Wörter ähnliche Kodierungen aufweisen, betrachtet das Netz sie als bedeutungsverwandt. Die Reihenfolge der Einträge im Wörterbuch hat also einen wichtigen Einfluss auf das Lernverhalten.
Manchmal konvergiert das Netz im Training sehr langsam oder gar nicht. Hilft auch die Erhöhung der Lernkonstante nicht, dann könnte dies daran liegen, dass sich ein positiver Mustersatz zu sehr mit einem Negativmuster überschneidet. Im Deutschen können auch die verschiedenen grammatikalisch möglichen Wortstellungen die Auswertung durch das Netz erschweren.
Das Korrektursystem wirkt dem mit einer zuschaltbaren Sortierfunktion entgegen, die die Wörter dem Netz – unabhängig von ihrer Stellung im Satz – immer zum Beispiel in alphabetischer Reihenfolge präsentiert. Nur in den Fällen, in denen die Wortstellung in einem Antwortsatz zwischen falsch und richtig entscheidet, hat dies negative Auswirkungen. Zusammen mit dem Einsatz von Synonymen erlaubt es die Sortierfunktion, viele Antwortvarianten auf einen einzigen Mustersatz zurückzuführen.
Gelegentlich konnten Übungsteilnehmern bei eingeschalteter Sortieroption das neuronale Netz überlisten, indem sie einfach viele potenziell richtige Begriffe aneinanderreihten. Nicht zutreffende Wörter filterte dabei das Wörterbuch heraus, sodass das Netz die Antworten positiv bewertete. Da jedoch der Student dabei zumindest Vorwissen über die Funktionsweise neuronaler Netze braucht und beim Austricksen des Systems eine Menge lernt, ist dieser Nachteil zumindest bei Informatik-Übungen nicht ganz so schwerwiegend.
Polyglott
Das Korrektursystem ist darauf ausgelegt, deutsche und englische Antworten zu verarbeiten. Es wurde für den Einsatz im deutschsprachigen Informatikstudium und in den englischen Masterstudiengängen konzipiert. Eine Möglichkeit, dem neuronalen Netz beide Sprachen beizubringen, wäre, es mit einem kompletten Satz deutscher und englischer Lösungen zu trainieren. Zumindest bei einfachen Fragen reicht jedoch auch der gezielte Einsatz von Synonymen aus. Die Wörterbuchdatei in Tabelle 4 genügt, um die Beispielfrage “What is GNU?/Was ist GNU?” in Deutsch und in Englisch zu trainieren.
|
Tabelle 4: |
|
|---|---|
|
Einträge |
Synonyme |
|
GNU |
|
|
is |
ist |
|
not |
nicht |
|
Unix |
|
|
Linux |
|
Für das neuronale Netz sehen dann die Sätze “GNU is not unix” und “GNU ist nicht Unix” gleich aus, aber auch ein Kauderwelsch wie “Gnu ist not Unix”. Natürlich ist es auch möglich, mehr als zwei Sprachen zu verwenden. Für jede weitere Sprache kommen einfach die entsprechenden Synonyme hinzu. In vielen Fällen macht die Mehrsprachigkeit weniger Mühe als Umlaute, Deklinationen sowie Singular oder Plural im Deutschen. Wird die Sortieroption des neuronalen Netzwerks eingeschaltet, stört auch die – grammatikalisch bedingte – unterschiedliche Wortreihenfolge in verschiedenen Sprachen nicht mehr.
Schwieriger zu trainieren sind allerdings zusammengesetzte deutsche Wörter, die im Englischen aus zwei getrennten Wörtern bestehen, zum Beispiel “Schleifenzähler” und “loop counter”. Der Synonym-Mechanismus auf Wortbasis greift hier nicht mehr. Die Lösung, zwei Musterantwortsätze zu verwenden, ist nicht ideal. Das Korrektursystem bietet daher die Möglichkeit, “loop counter” im Präprozessing in “loopcounter” umzuwandeln.
Eine andere Möglichkeit bestünde darin, eines der Teilwörter nicht in das Wörterbuch aufzunehmen und es damit bei der Auswertung durch das neuronale Netz zu ignorieren. Selbst die französische Verneinung “ne … pas” lässt sich auf diese Weise ohne Probleme verarbeiten.
Eingebunden
Die Einbindung des neuronalen Netzwerks in das Korrektursystem, also das Preprocessing und ein Postprocessing, übernimmt ein Shellskript. Das Preprocessing ersetzt unzulässige Zeichen wie in »./configure«, die das neuronale Netzwerk nicht verarbeiten kann. Außerdem wandelt es “loop counter” in “loopcounter” um oder entfernt den Bindestrich in Wörtern wie “Schleifen-Zähler”.
Hilfreich für die Erkennungsgenauigkeit des neuronalen Netzes wäre es, im Preprocessing Plural, Deklinationen und Umlaute zu vereinheitlichen. Diese keineswegs triviale Funktion ist aber noch nicht implementiert. Probleme mit der Deklination lassen sich bisher nur über Synonyme im Wörterbuch lösen.
Besonders Umlaute machen bei den Programmierübungen immer wieder Probleme. Manche Teilnehmer benutzen ISO-kodierte Umlaute, andere UTF-8, wieder andere stellen ihre Tastaturen auf ein US-Layout um und ersetzen “ü” durch “ue”. Wörter wie “zuerst” erschweren es, diese umschriebenen Umlaute im Präprozessing zu ersetzen. Leichter geht es, umgekehrt alle Umlaute durch die Umschreibung mit “e” zu ersetzen. Beim Zusammenstellen des Wörterbuchs dürfen sich dann allerdings nicht versehentlich Wörter mit Umlauten einschleichen, da das Korrektursystem sie sonst ignorieren würde.
Das Präprozessing nimmt unter Umständen bereits einfache Wertungen vor. Es könnte ungenaue Antworten daran erkennen, dass sie zu kurz sind oder bei unerwünschten Wörtern wie “vielleicht” Punkte abziehen oder von der Fragestellung her zu erwartende Zeichenketten wie “cd ..” mit Punkten belohnen.
Schließlich begrenzt das Preprocessing zu lange Antworten auf jene maximal 60 Wörter, die das neuronale Netzwerk verarbeiten kann. Das Preprocessing sortiert dazu die Wörter der Antwort mit »sort -u«, um Duplikate zu entfernen. Hat das Wörterbuch nicht mehr als 60 Einträge, dann überschreiten die Antworten nach dem Präprozessing die zulässige Länge nicht mehr.
Das Postprocessing setzt das Potenzial am Ausgabeneuron des Netzes in eine Punktezahl um. Es greift dabei die Fuzzy Logic des neuronalen Netzes auf: Es lässt sich so konfigurieren, dass es für teilweise richtige Antworten die halbe Punktzahl vergibt, für fast richtige acht von zehn Punkten.
Eine Schwellenwertfunktion übernimmt die Punkteverteilung (Abbildung 8), sie interpoliert linear zwischen einem oberen und einem unteren Schwellenwert. Für Werte unter- und oberhalb des zulässigen Wertbereichs vergibt das System null Punkte beziehungsweise volle Punktzahl.

Abbildung 8: Eine Schwellenwertfunktion setzt das Potenzial am Ausgangsneuron des Netzes in eine Punktezahl für die Antwort des Studenten um.
Machmal ist es sinnvoll, die Schwellen asymmetrisch zu platzieren, um eine unerwünschte Tendenz des neuronalen Netzes zu kompensieren. Werte von 0,2 und 0,7 haben sich als günstiger Ausgangswert erwiesen. Bei einem wenig scharf differenzierenden Netz hilft es, die Schwellen bei 0,4 und 0,6 enger zusammenzulegen.
Fazit
Seit der Integration des neuronalen Netzes zur Bewertung natursprachlicher Antworten arbeitet das Korrektursystem nach einer Einarbeitungsphase vollständig autonom. Durch die minutenschnelle Rückmeldung der Übungserfolge an die Studenten stieg die Lernmotivation deutlich. Als zunächst unbeabsichtigter Nebeneffekt entwickelte sich bei den Übungen ein richtiger Wettlauf um die höchste Punktzahl. Trotz ihres frühen Entwicklungsstadiums funktioniert die Spracherkennung im praktischen Vorlesungsbetrieb schon sehr gut.
Bisher ist diese Spracherkennung innerhalb des Korrektursystems die einzige Anwendung für das vorgestellte Spracherkennungsmodul. Bereits in Planung ist der Einsatz zur Kategorisierung der Dokumente in einem Knowledge-Managementsystem. Auch der Einsatz in Spamfiltern zum Kategorisieren von E-Mails wären denkbar. (pkr)
|
Infos |
|---|
|
[1] Andreas Romeyke, “Neuronale Netze mit der Libfann”: Linux-Magazin 7/07, S. 106 [2] Quelltext des neuronalen Netzes: [http://www.fh-heidelberg.de/forschung/NN] |
|
Die Autoren |
|---|
|
Dr. Dieter Homeister arbeitete nach dem Informatikstudium als Hard- und Software-Entwickler, meist mit Unix und Linux. Seit 2002 ist er Professor für Informatik an der Hochschule Heidelberg. Simon Ziegler studierte Informatik an der Hochschule Heidelberg und schloss 2007 mit dem Master ab. Seit 2008 ist er Doktorand am Universitätsklinikum Heidelberg. |






