Versuch 5: Ein erster Spracherkenner

Am fünften Versuchstag wollen wir einen ersten Janus Spracherkenner basteln. Wir werden lernen, welche Objekte dafür benötigt werden und wie sie erzeugt und verwendet werden. Da es sich hierbei um einen sehr kleinen Beispielerkenner handelt, wird es nicht möglich sein, live hineinzusprechen und das Gesprochene zu erkennen. Wir werden aber trotzdem anhand der Tutorial-Datenbasis einige Aufnahmen erkennen und die Erkennung auswerten.

In diesem Versuch bleibt der Spracherkenner noch untrainiert und wird nur sehr einfache kontextunabhängige akustische Modelle verwenden, die von einem anderen Erkenner bereits trainiert worden sind.

Es mag sein, daß es in diesem Versuch viel zu lesen gibt, dafür wird Ihre Kreativität nicht zu sehr beansprucht. Es geht diesmal weniger darum, daß Sie selbst etwas entwickeln, als vielmehr, daß Sie die Verwendung der JANUS-Script-Sprache kennenlernen und den Aufbau eines klitzekleinen Erkenners quasi "mitverfolgen".

 

Score-Berechnung

 

Führen Sie sich nochmal die Formel für die multinomiale multivariate Normalverteilung zu Gemüte.

 


Aufgabe 5.1: Erzeugen Sie ein kleines Codebuch und eine Mixturgewichteverteilung sowie einen Mustervektor und berechnen Sie den Wert der multinomialen Normalverteilung für diesen Mustervektor. Wie Sie vorzugehen haben, finden Sie in Aufgabe 5.1.

 

Verständnisfragen

 

Aufgabe 5.2:Veranschaulichen Sie sich noch einmal, welche wichtigen Objekte es in Janus gibt und welchen Zweck sie erfüllen und wie sie voneinander abhängen. Fragen Sie dazu andere Praktikumsteilnehmer oder Mitarbeiter des Lehrstuhls oder lesen Sie ein paar Beispiel-Scripten. Beantworten Sie dann die Fragen von Aufgabe 5.2.

 

Tip: Gibt man nur den Namen eines Objektes gefolgt von einem Punkt ein, so werden alle eindeutigen Unterobjekte angezeigt. Und wenn man den Namen gefolgt von einem Doppelpunkt eingibt, werden alle Namen der Unterobjekte, die in der Standardliste des Objektes enthalten sind, ausgegeben.

 

Eine Erste Umgebung

 

Lesen Sie die Beschreibung von Schritt 1 und Schritt 2 des Tutoriums durch und führen Sie die Schritte in den dafür erzeugten Verzeichnissen ~/step1 und ~/step2 durch.

 

Übung:
  1. Schauen Sie sich das initCI.tcl Script an und behaupten Sie gegenüber Ihren Gruppenpartnern, Sie hätten es verstanden. Falls jemand sagt, sie/er hätte es verstanden, dann fordern Sie sie/ihn auf, es Ihnen zu erklären.
  2. Führen Sie das Script im Verzeichnis step2 aus und sehen Sie sich die erzeugten Dateien an. Interpretieren Sie deren Inhalte.
  3. Zeichnen Sie sich mit Papier und Bleistift auf, wie der Topologie-Baum aussieht.

 

Initiale Gewichte / Erster Viterbi

 

Lesen Sie die Beschreibung von Schritt 3 des Tutoriums durch. und führen Sie die darin beschriebenen Kommandos im Verzeichnis step3 interaktiv aus. Probieren Sie ruhig auch ein paar Alternativen wie z.B. andere Parameter ansehen oder Viterbi für andere Sätze als die vorgeschlagenen durchführen.

 

Tip: Wenn Sie sich immer wieder vertippen und von vorne anfangen wollen, dann legen Sie sich am besten ein Script zu, in dem der gesamte "Hochfahrvorgang" steht, dann können Sie statt jedes mal die Einzelnen Zeilen mit der Maus abzuclicken einfach das Script "sourcen".

 

Erstes Erkennungsexperiment

 

Lesen Sie die Beschreibung vom für das Praktikum modifizierten Schritt 7 des Tutoriums durch, und führen Sie die folgenden Dinge durch:

 

Aufgabe 5.3: Recyclen Sie Ihr Tcl-Script von Aufgabe 2a vom ersten Versuch, mit dem Sie Bigramme erzeugt haben. Modifizieren Sie es so, daß es ein Language-Model File ausgibt, das der NIST Syntax entspricht. Sehen Sie sich das Ergebnis an und prüfen Sie es auf Plausibilität.
Frage: Welches Bigramm hat die größte Wahrscheinlichkeit?

 

Übung:Führen Sie die in Schritt 7 beschriebenen Kommandos zum Erzeugen der benötigten Such-Objekte aus. Testen Sie alle Sätze, die zum Testset gehören. Hierbei könnte Ihnen das Vorhandensein eines Hochfahr-Scriptes aus der obigen Übung gelegen kommen.

 

Aufgabe 5.4: Verwenden Sie folgende Tcl Prozedur zum Berechnen der Fehler in einer Hypothese:
proc errors { corr hypo } {
   set ali [align $corr $hypo] 
   return [expr [llength [lindex $ali 2]] + [llength [lindex $ali 3]] + [llength [lindex $ali 4]]] 
} 

Schreiben Sie ein Janus-Script, das alle Test-Sätze testet und am Ende die gesamte Wortakkuratheit in Prozent (d.h. 100%-Fehlerrate) ausgibt.. Entfernen Sie vor der Fehlerberechnung alle (, $ und ) aus den Hypothesen, denn diese Stille-Markierer sollen nicht als Fehler gerechnet werden.

Ja, ist ja recht. Sie brauchen nicht zu schmollen weil Sie gezwungen wurden, ein Fehlermeßskript zu schreiben, wo es doch ein fertiges JANUS-Kommando dafür gibt. Es war ja auch nur zur Übung gedacht.

 

Hand-In

 

Schicken Sie bis zum Abgabetermin den Wert der multinomalen Gaußverteilung für ein Codebuch mit den beiden Mittelwertvektoren (1,3) und (2,4) die mit 0.3 bzw. 0.7 gewichtet werden für den Mustervektor (2,2) ensprechend Aufgabe 5.1 an Sebastian Stüker.

 

Schicken Sie bis zum Abgabetermin die Antworten auf die Fragen von Aufgabe 5.2 und 5.3 an Sebastian Stüker.

 

Schicken Sie bis zum Abgabetermin die Werte für die Wortakkuratheit für die den Erkenner aus Aufgabe 5.4 an Sebastian Stüker.