Versuch 7: Suche und Suchparameter

In diesem Versuch sollen Sie mehr über die Möglichkeiten der Objekte für die Erkennung lernen. Da es bei der Erkennung darum geht, aus der unendlichen Anzahl möglicher Satzhypothesen die richtige herauszusuchen, sprechen wir in diesem Zusammenhang auch von der Suche.

Schauen Sie sich bitte in Ruhe den Script test.tcl an. Verändern Sie diesen Script bitte nicht (sondern nur Kopien). Dieser Script führt einen Suchlauf durch, macht danach ein lattice rescoring und berechnet die Wortakkuratheit für die erkannten Hypothesen.

Unser Testset von über 800 Sätzen ist zu umfangreich. Schneiden sie daher die ersten 10 Zeilen von ../step1/testIDs aus und schreiben Sie sie in testIDs.

 

Test mit Lattice Rescoring.

Um dafür zu kompensieren, dass das akustische Modell eine W'Dichte ist, das Sprachmodell aber eine W'Funktion, gibt es zwei Parameter, um die Scores des Sprachmodells an die des akustischen Modells anzupassen. Die Wortübergangsstrafe lp und das Sprachmodellgewicht lz. Ein höheres Sprachmodellgewicht gibt dem Sprachmodell mehr Einfluss, eine höhere Wortübergangsstrafe sorgt dafür, dass weniger Wörter erkannt werden. Das Sprachmodellgewicht wird über

 

 

     
svmap configure -lz xy

die Wortübergangsstrafe durch
        
svmap configure -wordPen xy

eingestellt.
Aufgabe 7.1:

Wortübergangsstrafe (wordPen): mögliche Werte sind positiv oder negativ. Wir fangen deshalb mit 0 an.

Gewichtung des Sprachmodels (lz): alle Werte sind positiv. Zudem sollte die Strafe vom Sprachmodel etwa in die Größenordnung des akustischen Scores für ein Wort fallen. Wir wählen deshalb 16 als Anfangswert für baseLp;

Testen Sie das 10-Sätze Testset mit dem Script test.tcl. Legen Sie dazu in Ihrem steps Verzeichnis ein Unterverzeichnis test an. Falls Dateien, die im Testscript verwendet werden, noch nicht erzeugt wurden (früherer Versuch, andere Tutorial-steps), tun Sie das jetzt.

Leiten Sie die Erkennerausgaben in eine Datei um, damit Sie sie in Ruhe anschauen und mit denen späterer Läufe vergleichen können:

time janus test.tcl >& logfile-1 &

Das Kommando time vor den Namen des Programms geschrieben gibt nach Ablauf des Programms an, wie lange der Test gelaufen ist. Lesen Sie die man-page zu timewährend der Test läuft (in einem anderen Fenster, damit Sie die Ausgabe von time nicht versehentlich überschreiben).

Fragen zur Aufgabe 7.1:

  1. wie lange ist der Test gelaufen ?
  2. was ist die Word Accuracy für den Suchlauf nach 10 Sätzen?
  3. was ist die Word Accuracy für das Latticerescoring nach 10 Sätzen?
  4. wo in der lz,lp-Matrix ist das beste lz,lp ?
  5. was ist die beste Word Accuracy in der lz,lp-Matrix ?

 

Einstellung der Gewichtung der Sprachmodelle

Aufgabe 7.2: Die mit Hilfe des Lattice-Passes gefundenen besten Werte für lz und lp passen oft besser als die ursprünglich für verwendeten Werte. Deshalb würde man vielleicht bessere Graphen bekommen, wenn man gleich mit diesen Werten testen würde. Also nehmen wir die besten lz und lp aus dem Lattice-Rescoring für einen weiteren Test.

Kopieren Sie sich test.tcl auf test-2.tcl, und verändern Sie test-2.tcl so, dass für den normalen Suchlauf lz=16 und wordPen=-8 ist.

Sinnvolle Werte für lzList sind nun {2 4 8 16 32 64 128} und für lpList {-32 -16 -8 -4 0}; verändern Sie bitte auch diese.

Starten Sie dann den nächsten Test:

time janus test-2.tcl >& logfile-2 &

Fragen zur Aufgabe 7.2:

  1. wie lange ist der Test gelaufen ?
  2. was ist die Word Accuracy für den normalen Suchlauf nach 10 Sätzen ?
  3. was ist die Word Accuracy für das Latticerescoring nach 10 Sätzen ?
  4. wo in der lz,lp-Matrix ist das beste lz,lp ?
  5. was ist die beste Word Accuracy in der lz,lp-Matrix ?

Normalerweise würde man noch mit feinerer Granularität weitersuchen, hat aber bei diesem Testset (nur 10 Sätze) wenig Sinn. Wenn der Abstand der Sprachmodellparameter des normalen Suchlaufs besten Paar in der lz,lp-Matrix sehr groß ist, sollte man die Sprachmodellparameter nicht direkt ersetzen, sondern einen Wert dazwischen ausprobieren (der Suchraum ist nicht sehr glatt).

 

Hinweise zum Einstellen der Sprachmodelle:

  1. Wenn man nur sehr wenig Sätze im Testset hat, ist die Matrix der Erkennungsergebnisse nicht sehr glatt. Die Ergebnisse sind dann statistisch nicht gut auf neue Daten übertragbar.
  2. Im Prinzip ist es nicht statthaft Parameter auf dem Testset anzupassen. Besser eignet sich hierzu eine Kreuzvalidierungs-Stichprobe, die weder im Training noch im Test verwendet werden sollte. Wir machen hier eine Ausnahme, weil sich bei diesem Praktikum sowieso Trainings- und Testmenge überschneiden.
  3. Die Stichprobe, die zum Einstellen von lz und lp (und später zum Einstellen der Beams) verwendet wird, sollte den echten Testbedingungen so nahe wie möglich kommen. Das bedeutet unter anderem, daß sie nicht aus der Trainingsmenge stammen soll, weil diese Daten für den Erkenner leichter zu erkennen sind und andere lz lp Parameter erfordern. Wir machen hier eine Ausnahme, weil die Testdaten hier auch aus den Trainingsdaten stammen.

 

Einstellen der Pruning-Beams: Anleitung

Es gibt viele Beams in Janus, um möglichst effiziente Systeme bauen zu können:
  • -morphBeam: Anzahl der aktiven morphologischen Instanzen
  • -stateBeam: Prunen der aktiven Zustände
  • -wordBeam: Prunen der aktiven Wordenden
  • -alphaBeam: Prunen beim Lattice rescoring

Zur leichteren Kontrolle können wir das Verhältnis des morph-, state-, und wordBeams einfach so lassen wie in den Voreinstellungen und die Werte linear skalieren.

topN gibt die Anzahl der Wortenden, die maximal zu einem Zeitpunkt aktiv sein dürfen; sinnvolle Werte liegen zwischen 10 und 30 für Vorführsysteme (schnell aber schlecht) und 50 bis 200 für Evaluationssysteme. Diese Werte hängen natürlich auch von der Anzahl der Wörter im Vokabular ab. Mehr als 10% der Vokabulargröße ist selten sinnvoll.

2 Faustregeln zur Einstellung von Beams:

  1. Wenn man die Bemas um ca 20-50% verkleinert und sich die Satzbewertungen nicht ändern, waren die Beams vorher zu groß.
  2. Wenn man die Bemas um ca 50% vergrößert und sich die Satzbewertungen oder gar die Inhalte der Hypothesen ändern, waren die Beams vorher zu klein.

Die Grobeinstellung dieser Werte kann man mit diesen beiden Regeln per Intervallschachtelung gut auf 10 Sätzen machen, die aber unterschiedlich schwierig und nach Möglichkeit von verschiedenen Sprechern sein sollten. Später sollte man gelegendlich ausprobieren ob die Beams gut eingestellt sind indem man 1) oder 2) auf einem vollen Testset ausprobiert.

 

Beams einstellen

Aufgabe 7.3: Erzeugen Sie aus dem Script secondTest-2.tcl den Script secondTest-3a.tcl, indem Sie die Werte für alle Beams halbieren, und den Script secondTest-3b.tcl, indem Sie die Werte für alle Beams vierteln.

Lassen Sie die neuen Tests laufen, und leiten Sie die Ausgaben in neue Dateien um. Vergleichen Sie die Erkennerausgaben mit denen von Aufgabe 7.2.

Fragen zu Aufgabe 7.3:

  1. wie lange ist der Test gelaufen ?
  2. Wird der Erkenner schneller ?
  3. Sind die doppelten Beams zu groß ? Warum ?
  4. Sind die geviertelten Beams zu klein ? Warum ?
  5. Was glauben Sie ist ein guter Beam?

Hand-In

Schicken Sie bis zum Abgabetermin die Antworten auf die Fragen von allen Aufgaben an Sebastian Stüker.