Anhang E – ETHZ-Handschrifterkenner

Dieser Anhang stellt die Installation des ETHZ-Handschrifterkenners am IAM vor und erläutert dessen Benutzung zur Erkennung von Handschrift aus Online-Daten. Daher ist dieser Text sehr technisch und auf die praktische Nutzung des Erkenners ausgelegt. Wer an den Konzepten und Ideen des ETHZ-Handschrifterkenners interessiert ist, findet in [Sch95], [SGH95], [Amm96, Seiten 83 – 89] und [SSE96] die entsprechenden Informationen.

Erstellung von Online-Daten für den ETHZ-Erkenner

Die Text-Version der Online-Daten für den ETHZ-Handschrifterkenner bestehen aus mehreren Textzeilen. Die erste Zeile enthält die Anzahl Worte, welche in dieser Datei enthalten sind. Danach folgen nacheinander alle Worte. Hierzu wird zuerst das zu erkennende Wort in Anführungszeichen aufgeführt und dann folgen die Tripel (x-Koordiante, y-Koordinate, Zeitpunkt) mit den Online-Daten für dieses Wort. Bei den Online-Daten der ETHZ sind nur Stiftpositionen zu den Zeitpunkten aufgeführt, an denen der Stift auf dem Papier abgesetzt war. Die genaue Syntax der Online-Daten – dargestellt in EBNF (1) – kann Bild 103 entnommen werden.

Online-Daten = Wortzahl { Wort }

Wortzahl = Integer

Wort = `"` ASCII-Wort `"` `[` { Tripel } `]`

Tripel = `[` x-Koordinate y-Koordinate Zeitpunkt `]`

x-Koordinate = Integer

y-Koordinate = Integer

Zeitpunkt = Integer

Bild 103: Syntax der ETHZ-Online-Daten

Die Online-Daten im ETHZ-Format werden vom Programm points2ethz erzeugt. Dieses Programm liest die rohen Online-Daten, wie sie von mpeg2points (vgl. Anhang B) erzeugt wurden, aus der Datei points.txt ein, interpoliert sie mittels der Klasse Interpolator (vgl. Kapitel 4) und schreibt sie im ETHZ-Format in die neue Datei points.ethz. Mit dem Parameter –interpolate können die Interpolationsparameter gesetzt werden. Der Parameter –word gibt die ASCII-Repräsentation der Online-Daten wieder. Die Quelldatei points.txt stammt aus dem Verzeichnis, welches nach dem Parameter –dir angegeben wird. Am gleichen Ort wird auch die Zieldatei points.ethz gespeichert.

In Textform können Online-Daten nach dieser Syntax z.B. so aussehen:

5345
"All"
[
[ 29 34 70 ]
[ 20 27 100 ]
[ 20 28 110 ]
[ 20 28 120 ]
[ 18 37 190 ]
[ 17 38 200 ]
u.s.w.
[ 49 39 1290 ]
[ 49 39 1300 ]
[ 50 40 1310 ]
]
"All"
[
[ 29 34 70 ]
[ 20 27 100 ]
[ 20 28 130 ]
u.s.w.

Der nachfolgende Programmaufruf

points2ethz –interpolate 5 8 3 –word All

–directory results/c_All/

liest die Datei results/c_All/points.ethz ein und interpoliert die darin enthaltenen Stiftpositionen. Dabei werden die Interpolationsparameter (intermin = 5, intermax = 8, intergap = 3) angewendet. In den Online-Daten wird der Text "All" als ASCII-Repräsentation abgelegt. Die Zieldatei wird unter dem Namen results/c_All/points.ethz gespeichert.

Um grössere Mengen an Online-Daten zu verarbeiten eignet sich dieses Programm nicht. Die zwei PERL-Programme testdata.pl und merge.pl dienen dem Sammeln und Zusammenführen von Online-Daten.

Das Programm merge.pl führt mehrere Dateien mit ETHZ-Online-Daten in eine neue Datei zusammen. Hierzu werden die Dateien hintereinandergehängt und die Anzahl der Worte in diesen Online-Daten nachgeführt. Der Programmaufruf

merge.pl zieldatei.ethz quelle1.ethz
quelle2.ethz quelle3.ethz

liest die drei Dateien quelle1.ethz, quelle2.ethz und quelle3.ethz ein, führt sie zusammen und speichert sie mit einer angepassten Wortzahl in der Datei zieldatei.ethz ab.

Das PERL-Programm testdata.pl erstellt für Konfigurationsdateien (Endung cfg, vgl. Anhang B – HTMLreport.pl) eine Sammlung von Test- und Trainingsdaten im Online-Format der ETHZ. Alle beim Programmaufruf angegeben Konfigurationsdateien enthalten die Parameter mit denen ein Wort erfasst wurde. Wenn der Benutzer die fürs Auge optimalen Interpolationsparameter (intermin, intermax und intergap) dort auch nachgetragen hat, steht der Erstellung sinnvoller Test- und Trainingsdaten nichts mehr im Wege. Für jedes Wort werden zuerst die ETHZ-Online-Daten mit dem Programm points2ethz und den optimalen Interpolationsparametern erstellt. Diese Datei wird unter dem Namen der Konfigurationsdatei mit der Endung test abgespeichert. Danach werden Abwandlungen der optimalen Online-Daten erstellt. Durch Angabe des Parameters –relative beim Aufruf des Programms testdata.pl werden die abgewandelten Interpolationsparameter in der Umgebung der optimalen Parameter gewählt. Die Grösse dieses Umfelds wird im Programm testdata.pl in den Zeilen 10-12 durch die Konstanten $dmin, $dmax und $dgap bestimmt. Wenn (intermin, intermax und intergap) die optimale Kombination der Interpolationsparameter für ein Wort ist, dann werden für jedes Tripel

die entsprechenden Online-Daten des aktuellen Worts erstellt. Sollte eine Variante dieser Online-Daten mit den Online-Daten der optimalen Kombination übereinstimmen, wird sie nicht zum Nachtrainieren verwendet. All diese Trainingsdaten werden in einer einzigen Datei mit dem Namen der Konfigurationsdatei und der Endung train abgespeichert. Durch den Programmaufruf

testdata.pl –relative ethz/ c_All.cfg t_All.cfg

werden die beiden Konfigurationsdateien c_All.cfg und t_All.cfg verarbeitet. Jede Konfigurationsdatei entspricht der Erfassung eines Worts in Online-Daten und hat eine Test- und eine Trainingsdatei zur Folge. Die vier Dateien c_All.test, c_All.train, t_All.test und t_All.train werden im Verzeichnis ethz/ abgespeichert. Zudem wird pro Konfigurationsdatei noch eine Textdatei mit zusätzlichen Informationen abgespeichert.

Beim Programm testdata.pl besteht auch die Möglichkeit, die Abwandlungen der Interpolationsparameter innerhalb fester Werte durchzuführen. Hierzu muss anstelle –relative der Parameter –absolute angegeben werden. Der Bereich der Abwandlungen ist im Programm testdata.pl in den Zeilen 4-6 durch die Konstanten @mins, @maxs und @gaps bestimmt. Diese Art der Verarbeitung hat sich aber nicht als sinnvoll erwiesen.

Sollen gleich mehrere Konfigurationsdateien auf einmal verarbeitet werden, so können sog. Wildcards der UNIX-Shell verwendet werden. Durch den Aufruf

testdata.pl –relative ethz/ [ct]_*.cfg

werden alle Konfigurationsdateien die mit c_ oder t_ beginnen und die Endung .cfg haben verarbeitet. Um diese Menge an Test- und Trainingsdaten wieder in je eine Datei zusammenzuführen, ist das Programm merge.pl sehr nützlich. Mittels den Aufrufen

merge.pl ethz/train.ethz ethz/*.train

merge.pl ethz/test.ethz ethz/*.test

werden alle Trainingsdaten in der Datei ethz/train.ethz und alle Testdaten in der Datei ethz/test.ethz zusammengezogen.

Installation des ETHZ-Erkenners am IAM

Die Dateien des ETHZ-Erkenners stammen von einer CD-ROM der ETHZ mit dem Titel "ETHZ Handschrifterkenner, Online und Offline, 12.8.1997". All diese Dateien wurden am IAM ins Verzeichnis /home/fkistat/ETHZ/ kopiert. Zur Nutzung dieses Systems unter SUN Solaris 2.5 (oder höher) waren einige Anpassungen und spezielle zusätzliche UNIX Shell-Skripts notwendig. Diese Skripts befinden sich beim Quellcode dieser Diplomarbeit. Alle weiteren aufgeführten Verzeichnisangaben beziehen sich auf das Basisverzeichnis des ETHZ-Erkenners – bei der Installation am IAM also auf /home/fkistat/ETHZ/.

Das Skript test/make-db dient der Erstellung von LISP-Datenbanken aus textuellen Online-Daten. Das Skript HANDDEMO/testbed wird bei der Erkennung aufgerufen. Bei dieser Datei wurde im Vergleich zur CD-Version nur die Zeile zur Manipulation der Umgebungsvariable DEMO_PATH angepasst. Mittels des Skripts tests/testrun wird die Handschrifterkennung von Online-Daten gestartet. Als Parameter werden der Name der Testdaten und der Name der vorhandenen, trainierten Datenbank gefordert. Der Skript-Aufruf

testrun thomas cursive-4L-26-1111

führt einen Test mit den Testdaten thomas und der Datenbank cursive-4L-26-1111 aus. Die Testdaten müssen unter dem Namen thomas-script.db im Verzeichnis HANDDEMO/data-bases/ vorliegen. Es hat sich als nützlich erwiesen, einen symbolischen Link von tests/data-bases/ nach HANDDEMO/data-bases/ zu erstellen. Die Datenbank muss unter dem Namen cursive-4L-26-1111.net im Verzeichnis HANDDEMO/touch-users/ gespeichert sein. Die Resultate werden direkt auf den Bildschirm ausgegeben.

Die Verzeichnisse THOMAS/, THOMAS/neuro-simul/ und THOMAS/Databases/ enthalten die notwendigen Dateien und Skripts, um bestehende Datenbanken weiter zu trainieren. Die Verwendung wird im letzten Abschnitt dieses Anhangs beschrieben.

Handschrifterkennung anhand von Online-Daten

Die Online-Daten im ETHZ-Format, welche nach den Anweisungen im ersten Abschnitt dieses Anhangs erstellt wurden, müssen zur Verwendung in ein spezielles Datenbankformat der Programmiersprache LISP konvertiert werden. Dies kann komfortabel vom Skript tests/make-db erledigt werden. Dieses Skript erwartet als einzigen Kommandozeilenparamter den Namen der Textdatei (ohne Erweiterung) mit den Online-Daten. Der nachfolgende Skript-Aufruf

make-db chrigi

konvertiert die Textdatei chrigi.ethz in die LISP-Datenbank chrigi.db. Die Verarbeitungsinformationen werden in der Log-Datei make-db_chrigi.log gespeichert. Diese Datei sollte dann ins Verzeichnis tests/data-bases (symbolischer Link auf HANDDEMO/data-bases) kopiert werden und dort in chrigi-script.db umbenannt werden.

Zum Erkennen dieser Online-Daten muss das Skript tests/testrun gestartet werden. Als Parameter müssen dabei der Name der Online-Daten und die zu verwendende Datenbank angegeben werden. Der Programmaufruf

testrun chrigi cursive-4L-26-1111

startet die Handschrifterkennung der Online-Daten tests/data-bases/chrigi-script.db unter Berücksichtigung der trainierten Datenbank HANDDEMO/touch-users/cursive-4L-26-1111.net.

Die Ausgabe der Resultate erfolgt unmittelbar auf dem Bildschirm. Die Verarbeitung eines Worts bei falscher Erkennung kann z.B. folgendermassen aussehen:


*** Record 1, true label: "AND"
off-line-recognizer cursive-4L-26-1111 ...
Entropy found: 2.478665
Free guess: RMA
GUESS-LIST-LENGTH 5
0 RNA 331.06 4.36
1 RCA 334.38 4.40
2 MA 341.74 4.50
3 IRMA 335.82 4.42
4 AMA 342.32 4.50
FOUND: RMA (4.35) DICT: RNA (4.36) CHOOSE: RNA
GOOD DICT COST: RMA RNA AND 0.71 0.01 0.00
Found RMA cost 330.35 4.35
Dict RNA (lev 1) cost 331.06 4.36
True AND (lev 3) cost 348.51 4.59
# Without dico error, found RMA
# With dico error, found RNA

In diesem Beispiel wurde ohne Verwendung des Wörterbuchs die Zeichenfolge "RMA" erkannt. Unter Zuhilfenahme der fünf wahrscheinlichsten Wörter aus dem Wörterbuch wurde das Resultat auf "RNA" korrigiert. Zudem wird noch angegeben wie stark das Resultat vom richtigen Wort entfernt ist. Beim nachfolgenden Beispiel wurde das Wort mit der Hilfe des Wörterbuchs richtig erkannt. Ohne Wörterbuch wurde noch die Zeichenfolge "TEABLET" erkannt, welche aber durch das richtige Wort ersetzt werden konnte.


Rec 94 true label: TABLET
Free guess: TEABLET
GUESS-LIST-LENGTH 4
TRUE-IS-IN-LIST
0 TABLET 79.5877
1 TENABLE 89.3842
2 TABLE 80.3590
3 LEAFLET 110.3131

Alle Resultate werden am Schluss in zwei Tabellen zusammengefasst. Die erste Tabelle zeigt die Ergebnisse ohne Verwendung eines Wörterbuchs:


=============> TEST WITHOUT DICTIONARY

NUMBER of LETTER ANY 1 2 3 4 5 6 7 8 9 10 >10
Total Words (TW) [ 104 0 19 27 16 18 12 8 2 0 2 0]
Well recognized words [ 38 0 11 13 4 6 3 1 0 0 0 0]
in ratio TW [ 36.5 NaN 57.9 48.1 25.0 33.3 25.0 12.5 0.0 NaN 0.0 NaN]
Missed Words (MW) [ 66 0 8 14 12 12 9 7 2 0 2 0]
in ratio TW *** [ 63.5 NaN 42.1 51.9 75.0 66.7 75.0 87.5 100.0 NaN 100.0 NaN]
Too-long words [ 34 0 5 5 7 3 7 3 2 0 2 0]
Too-short words [ 12 0 1 3 3 3 0 2 0 0 0 0]
Levensthein distance [ 130 0 12 20 18 26 16 23 4 0 11 0]
in ratio TW [125.0 NaN 63.2 74.1 112.5 144.4 133.3 287.5 200.0 NaN 550.0 NaN]
in ratio char in TW *[ 29.7 NaN 31.6 24.7 28.1 28.9 22.2 41.1 25.0 NaN 55.0 NaN]
in ratio char in MW [ 42.6 NaN 75.0 47.6 37.5 43.3 29.6 46.9 25.0 NaN 55.0 NaN]

 

Wenn ein Wörterbuch verwendet wird, dann sieht obige Tabelle folgendermassen aus:


=============> TEST WITH DICTIONARY

NUMBER of LETTER ANY 1 2 3 4 5 6 7 8 9 10 >10
Total Words (TW) [ 104 0 19 27 16 18 12 8 2 0 2 0]
Well recognized words [ 55 0 11 16 12 8 5 2 1 0 0 0]
in ratio TW [ 52.9 NaN 57.9 59.3 75.0 44.4 41.7 25.0 50.0 NaN 0.0 NaN]
Missed Words (MW) [ 49 0 8 11 4 10 7 6 1 0 2 0]
in ratio TW *** [ 47.1 NaN 42.1 40.7 25.0 55.6 58.3 75.0 50.0 NaN 100.0 NaN]
Too-long words [ 7 0 3 2 0 0 1 1 0 0 0 0]
Too-short words [ 29 0 3 8 4 5 2 4 1 0 2 0]
Levensthein distance [ 89 0 10 16 6 20 11 16 2 0 8 0]
in ratio TW [ 85.6 NaN 52.6 59.3 37.5 111.1 91.7 200.0 100.0 NaN 400.0 NaN]
in ratio char in TW *[ 20.4 NaN 26.3 19.8 9.4 22.2 15.3 28.6 12.5 NaN 40.0 NaN]
in ratio char in MW [ 39.2 NaN 62.5 48.5 37.5 40.0 26.2 38.1 25.0 NaN 40.0 NaN]

Wichtig zur Interpretation der Resultate ist v.a. die Worterkennungsrate, welche in der Kreuzung der Spalte "ANY" mit der Zeile "Well recognized words in ratio TW" aufgeführt ist.

Nachtraining des Systems

Zur Verbesserung der Erkennungsrate kann der ETHZ-Erkenner nachtrainiert werden. Das Nachtraining basiert auf einem neuronalen Netz (Datei mit der Endung .net aus dem Verzeichnis HANDDEMO/touch-users/). Zum Training wird eine LISP-Datenbank mit Online-Daten verwendet. Das Training mit dieser Datenbank wird mehrmals mit einem bestimmten Lernfaktor für das neuronale Netz ausgeführt. Je kleiner dieser Faktor ist, desto kleinere Optimierungsschritte werden ausgeführt. Das Training kann also besser werden, doch es sind mehr Trainingsschritte nötig, was seine Zeit dauert. Die Resultate dieser Diplomarbeit (vgl. letzter Abschnitt in Kapitel 5) wurden zuerst zehnmal mit dem Faktor 0.2, dann zehnmal mit dem Faktor 0.1 und schliesslich noch zehnmal mit dem Lernfaktor 0.05 nachtrainiert. Die grösste Verbesserung wurde bereits mit dem ersten Trainingsdurchgang erreicht.

Alle notwendigen Skripts zum Nachtrainieren der neuronalen Netze befinden sich im Verzeichnis THOMAS/. Das Skript THOMAS/mixed-online konfiguriert und startet das Nachtraining. Dabei werden die Trainingsdaten zuerst trainiert und danach wird das Ergebnis mit den Testdaten geprüft. Alle Resultate werden in einem Log-File gespeichert. Am Ende des Quellcodes des Skripts mixed-online werden wichtige Parameter des Nachtrainings gesetzt. Der Funktionsaufruf, der mit "(cont-simul db-path net-path" beginnt, startet das eigentliche Training des neuronalen Netzes. Als weitere Parameter werden das zu trainierende Netz, der Lernfaktor, die Anzahl Trainingsschritte und das Wörterbuch, welches beim Test verwendet werden soll, angegeben. Der exakte Funktionsaufruf lautet also

(cont-simul db-path net-path Netzwerk Lernrate cf Schritte Wörterbuch).

Durch den nachfolgenden Funktionsaufruf

(cont-simul db-path net-path "mixed-on-70-2211L.net"
0.2 cf 10 "THOMAS/tvs_small.dict")

wird das bestehende Netzwerk mixed-on-70-2211L.net im Verzeichnis THOMAS/neuro-simul/ trainiert. Dabei werden 10 Schritte mit einem Lernfaktor von 0.2 ausgeführt. Zum Testen des trainierten Netzwerks wird bei der Erkennung der Testdaten das Wörterbuch THOMAS/tvs_small.dict verwendet. Das neue, nachtrainierte Netzwerk wird im Verzeichnis THOMAS/neuro-simul abgespeichert.

Die Test- und Trainingsdaten, welche beim Nachtrainieren verwendet werden, gibt man direkt in der LISP-Quelldatei THOMAS/online.l an. Bei der Deklaration der Funktion open-the-dbs muss der Dateiname rel27.db durch die aktuelle Trainingsdatei und der Dateiname test_all.db durch die aktuelle Testdatei ersetzt werden. Diese Datenbanken müssen natürlich im Verzeichnis THOMAS/Databases im LISP-Datenbankformat (wird durch make-db erstellt) vorliegen.

Das Nachtraining ist eine langwierige Angelegenheit. Es ist also ratsam das Skript mixed-online durch den Programmaufruf

nohup mixed-online &

zu starten. Hiermit kann sich der Benutzer vom System abmelden und das Programm läuft im Hintergrund ungestört weiter. Um den Fortschritt zu kontrollieren kann die Log-Datei von mixed-online gesichtet werden. Diese Log-Datei hat einen Dateinamen der Form mixed-online_dd-mm-yy.log. Die Zeichen dd-mm-yy werden durch das aktuelle Datum beim Start des Skripts ersetzt. Durch den Aufruf

tail –f mixed-online_dd-mm-yy.log

wird immer das Ende der Log-Datei angezeigt. Hierdurch kann die aktuelle Verarbeitung verfolgt werden. Die zwei Programmaufrufe

grep "Data " mixed-online_dd-mm-yy.log | wc –l
grep "Rec " mixed-online_dd-mm-yy.log | wc -l

zählen die Anzahl trainierter resp. getesteter Worte. Sie verschaffen also einen schnellen Überblick über den aktuellen Stand der Verarbeitungen. Die Resultate der Tests werden in der Log-Datei protokolliert. Diese Protokolle weisen die gleiche Form auf wie die, welche beim Skripts testrun im vorhergehenden Abschnitt bereits beschrieben wurden.


Fussnoten:

Erweiterte Backus-Naur-Form. In EBNF werden Begriffe mit Begriff = Definition definiert. Wenn eine Definition A aus zwei sich folgenden Begriffen B und C besteht, wird A=BC geschrieben. Wenn A aus B oder C besteht, wird A=B|C geschrieben. Runde Klammern dienen zur Gruppierung von Termen und Faktoren. Mit eckigen Klammer kann der Inhalt null- bis einmal aufgeführt werden; A=B[C] kann A=B oder A=BC bedeuten. Mit geschweiften Klammer kann der Inhalt ein- bis unendlichmal aufgeführt werden; A={B} kann A=B, A=BB, A=BBB etc. bedeuten.