Spracherkennung mit dem Atari, Teil 3

Die Möglichkeiten einer einfachen Spracherkennungssoftware haben wir schon ausprobiert. Aber wie funktioniert TASS? Was kann verbessert werden und wo sind mögliche Anwendungen?

Nachdem Sie Ihrem Computer die menschliche Sprache etwas näher gebracht haben, durchleuchten wir in der letzten Kursfolge die Arbeitsweise von TASS (Bild 2). Den Anfang macht natürlich die Aufnahme (»Sampling«) des Sprachsignals. Da die Routine im Interrupt läuft (Timer A des MFP), ist gewährleistet, daß sie auf allen Rechnern gleich schnell arbeitet. Hinge die Samplerate (normalerweise 7680 Hz) vom Rechner ab, so wäre ein auf dem ST trainierter Wortschatz für einen TT unbrauchbar, weil einige Erkennungskriterien auch die Wortlänge in Bytes einbeziehen. Die Sample-Routine ist auch der einzige Teil von TASS, der aus Geschwindigkeitsgründen in Assembler programmiert sein muß und am Betriebssystem vorbei geht. Mit einem Falcon sähe das natürlich alles anders aus. Eine andere Einschränkung dieses Programmteils ist, daß der Anwender die Aufnahme »von Hand« starten muß und TASS eine feste Bytezahl (20000) digitalisiert. Für eine echte ASE-Anwendung ist solch eine Vorgehensweise kaum geeignet, doch dazu später mehr.

Aufbereitung

Im nächsten Schritt bereiten wir das Sample für die nachfolgende Analyse auf. Dafür sucht TASS zunächst nach dem Anfang eines Wortes im Sample-Speicher. Unter der Annahme, daß außer dem Sprachsignal keine weiteren Geräusche vorliegen, stehen vor und hinter dem Wort nur Nullen im Speicher. Folglich ist der Wortanfang dort, wo das erste Byte ungleich Null ist, das Ende wird vom letzten Byte ungleich Null markiert. Diese Annahme erweist sich in der Praxis allerdings als nicht haltbar; das Radio läuft, der Lüfter rauscht und auch der D/A-Wandler ist nicht vor Fehlern sicher. Aus diesem Grund geht TASS etwas toleranter vor.

Zum einen betrachten wir nicht nur echte Nullbytes als solche, sondern alle Bytes deren Betrag kleiner als 5 (Variable »sl_tol«) ist. Außerdem entscheidet nicht das erste Byte, das diese Toleranzschwelle überschreitet, über den Anfang des Samples, sondern erst das zwanzigste (»sl_dauer«). So wird vermieden, daß kurze Störungen die Ergebnisse verfälschen. Analog hierzu dient das letzte Byte mit einem Wert >= 5 als Ende-Markierung. Findet TASS keinen Anfang, wird das Signal mit einer entsprechenden Meldung zurückgewiesen. Übrigens entsprechen die Nullbytes in Wirklichkeit einem Byte mit dem Wert 128, da bei einem 8-Bit-Sampler 127 positive und 128 negative Amplitudenwerte unterschieden werden.

Nachdem nun der relevante Teil lokalisiert ist, muß noch die Lautstärke normiert werden, denn schließlich sollte es egal sein, ob ein Wort laut oder leise gesprochen wird. TASS verstärkt das Signal, so daß der Amplitudenbereich voll ausgeschöpft wird - ohne stark zu übersteuern. Standardmäßig ist der Verstärkungsfaktor so gewählt, daß maximal 2% (»define PROZENT 2«) des Signals übersteuert sind. Ist der Verstärkungsfaktor zu groß (Signal zu leise) oder zu klein (Signal zu laut), so wird das Wort abgelehnt.

Hierin liegt auch der Grund, warum eine leichte Übersteuerung, die ja immerhin das Signal verzerrt, sinnvoll ist. Ohne diese Toleranz würde bereits ein einziger Vollausschlag genügen, um TASS zu der Annahme zu verleiten, das Wort sei optimal ausgesteuert. Den Bereich des Verstärkungsfaktors stellen Sie in der Parameterbox ein.

Merkmalsbestimmung

Jetzt beginnt die eigentliche Arbeit, nämlich das Extrahieren der Erkennungsmerkmale aus dem Sample. Das erste Merkmal, »Länge in Bytes«, wird zwar gratis geliefert, weil Anfang und Ende ja schon bekannt sind, ist dafür aber sehr unzuverlässig.

Beim »Amplitudenverlauf« ist der Aufwand schon erheblich größer. Es soll festgestellt werden, wie sich die Durchschnittslautstärke mit der Zeit ändert. Dafür teilen wir das Signal in eine feste Anzahl von Zeitintervallen - normalerweise 12 (Parameterbox), wobei das letzte nie gewertet wird, da es über das Ende hinausragen kann - und berechnen für jedes die Durchschnittslautstärke. Beim Rückblick auf die »dynamische Programmierung« fällt auf, daß dieses Verfahren hier nicht anwendbar ist, weil eben nicht die Intervaldauer sondern die Intervalzahl konstant ist. Deshalb sind auch die Datensätze mit einer unterschiedlichen Anzahl von Zeitintervallen inkompatibel.

Unser drittes Merkmal hängt mit dem Frequenzverlauf zusammen. Wie vorher unterteilen wir das Wort in eine konstante Zahl von Abschnitten, zählen aber jetzt die durchschnittliche Anzahl der Bytes zwischen zwei Nulldurchgängen. Obwohl dieses Verfahren weder im Aufwand noch in der Aussagekraft mit dem Herausfiltern einzelner Frequenzbänder vergleichbar ist, läßt es Rückschlüsse auf die Grundfrequenz zu.

Die »Werteverteilung« ist wieder einfacher zu ermitteln. TASS zählt einfach, wie oft jeder Lautstärkewert (also 0 bis 128, da nur die Beträge interessant sind) vorkommt und macht daraus die Wertetabelle mit 129 Einträgen. Damit lassen sich globale Aussagen über die Lautstärkeverteilung treffen.

Ganz anders berechnet TASS die »Sprüngeverteilung«. Hier ist für jedes Byte die Differenz zu seinem Vorgänger von Bedeutung; der sogenannte »Amplitudensprung«. Die zugehörige Tabelle umfaßt 256 Einträge (kleinster Sprung: 0, größter Sprung: von - 128 nach + 127 = 255). Die Häufigkeit und Stärke, mit der das Signal »zappelt« läßt wieder Rückschlüsse auf den Frequenzgang zu. Sowohl die Werteverteilung als auch die Sprüngeverteilung sind von der Lautstärkenormierung abhängig. Ist beispielsweise der Verstärkungsfaktor drei, so treten in der Wertetabelle nur Vielfache von drei auf. Darum ist es für die Ähnlichkeitsanalyse zweckmäßig, die miteinander zu vergleichenden Tabellen in Bereiche (Parameterbox) einzuteilen und nur die Gesamtsummen der Bereiche gegenüberzustellen. Da jedoch im Speicher und auf Diskette alle 129 bzw. 256 Tabelleneinträge vorhanden sind, dürfen wir die Anzahl der Bereiche ohne Kompatibilitätsverlust verändern.

Ähnlichkeitsanalyse

Obige Merkmale dienen natürlich zur Bestimmung der Ähnlichkeit zwischen dem Eingangssignal und den trainierten Wörtern. Im ersten Teil erfuhren Sie bereits vom »euklidischen Abstand«, der mit Merkmalsvektoren arbeitet. TASS verfährt allerdings etwas anders. Sie berechnet die Abweichungen zunächst für jedes Merkmal einzeln, wobei sich fünf Ähnlichkeitswerte pro trainiertem Wort ergeben. Leider liegt es in der Natur der Sache, daß einige Merkmale prinzipiell größere Ähnlichkeitswerte ergeben als andere; erstere würden sich also bei der Summenbildung für die Gesamtähnlichkeit stärker niederschlagen. Um das zu vermeiden, multipliziert TASS die Merkmale Länge, Nulldurchgänge, Werteverteilung und Sprüngeverteilung jeweils mit einem Faktor, der so berechnet ist, daß die Summe jedes Merkmals über alle trainierten Wörter gleich der entsprechenden Summe des Amplitudenverlaufs ist. Abschließend addieren wir die fünf Ähnlichkeitswerte multipliziert mit ihren Gewichtungen aus der Analysebox.

Übrigens sind die Abweichungen der einzelnen Erkennungskriterien auch nur durch simple Differenzbildung ermittelt worden. Beim Amplitudenverlauf zum Beispiel errechnet TASS für jedes Zeitintervall die Differenz zwischen dem dazugehörigen Wert des gesprochenen und aller trainierten Wörter. Die Beträge dieser Differenzen für jedes Wort summiert ergeben dann den »Ähnlichkeitswert«. Je besser die Übereinstimmung, um so weniger »Punkte« hat das Wort. Im Gegensatz zum »euklidischen Abstand« betont dieses Verfahren die größeren Abweichungen nicht überproportional. Anhand des endgültigen Ähnlichkeitswerts sortiert TASS die Wörter. Damit - zum besseren Vergleich - das ähnlichste Wort immer einen Wert von 1000 hat, multiplizieren wir alle Werte noch mit einem passenden Faktor. Bei einer echten Anwendung müßte jetzt das System eine dem erkannten Wort entsprechende Aktion ausführen.

Analysedatei Parameterdatei
W: Zeitintervalle W: Zeitintervalle
W: Wortzahl W: Zahl de Wertebereiche
25B: Wortname (nullterminierter String) W: Zahl der Sprüngebereiche
L: Länge in Bytes W: Timerteiler (bestimmt Samplefrequenz)
W: Variantenzahl (so oft wurde das Wort schon trainiert) L:Recordlänge in Bytes
99L: Amplitudenverlauf (nur Zeitintervalle - 1 Einträge sind benutzt). W: SI_tol (Toleranzschwelle für Wordlokalisierung)
99w: Nulldurchgänge (siehe Amplitudenverlauf) W: maximaler Verstärkungsfaktor * 100
128W: Werteverteilung W: minimaler Verstärkungsfaktor * 100
256W: Sprüngeverteilung W: Gewichtungsfaktor für Länge * 100
  W: Gewichtungsfaktor für Amplitudenverlauf
Der Block wiederholt sich »Wortzahl«-mal W: Gewichtungsfaktor für Nulldurchgänge * 100
  W: Gewichtungsfaktor für Werteverteilung * 100
  W: Gewichtungsfaktor für Sprüngeverteilung * 100
B=Byte W=Word L=Longword
Bild 1. Platz f+r Eigeninitiative: Die Dateiformate von TASS

Bild 1. Platz für Eigeninitiative: Die Dateiformate von TASS

Verbesserungen und Anwendungen

TASS ist sicherlich nicht das Nonplusultra sondern eher ein Programm zum Austesten der Effizienz verschiedener Methoden. Was kann also noch verbessert werden? Kern des Ganzen sind natürlich die Erkennungsmerkmale, bei denen sich Amplitudenmerkmale und Frequenzmerkmale unterscheiden lassen. Prinzipiell sind zwar beide Merkmalsarten vorhanden, doch läßt sich gar nicht so genau sagen, was nun eigentlich berechnet wird. Eine exakte Frequenzanalyse mittels Fourier-Transformation oder digitaler Filter ist ebenso hilfreich wie aufwendig. Ebenfalls entscheidend ist die Art der Merkmalsspeicherung und -verarbeitung. Beim Amplitudenverlauf kann einerseits, wie bei TASS realisiert, die absolute Durchschnittslautstärke für jedes Intervall gespeichert werden, andererseits ist es denkbar, nur die prozentualen Änderungen zum vorherigen Intervall zu merken. Letztere Methode ist nicht nur allgemeiner, sondern macht darüber hinaus die Lautstärkenormierung für dieses Merkmal überflüssig.

Ganz anders bei den Nulldurchgängen. Zur Zeit berechnet TASS nur die durchschnittliche Zahl der Bytes zwischen zwei Nulldurchgängen. Sie ist demnach von der Tonlage des Sprechers und der Samplefrequenz abhängig. Die Abhängigkeit von der Samplefrequenz läßt sich eliminieren, indem man die Bytezahl durch die Wortlänge in Bytes teilt. Um das Ergebnis auch noch von der Tonlage unabhängiger zu machen, berechnen wir den Durchschnittswert über alle Intervalle und geben dann die Werte der einzelnen Intervalle relativ zu diesem an. Bei der Auswertung können natürlich die bereits erwähnten Verfahren des »euklidischen Abstandes« und der »dynamischen Programmierung« die Erkennungsrate verbessern.

Für die Praxis auf den Ataris stellt sich die Frage, ob eine Spracherkennung in GEM eingebunden werden kann. Dafür müßte permanent das Eingangssignal gesamplet werden, um dann die interessanten Stellen herauszuschneiden und zu analysieren. Das Erkennungsergebnis schickt dann die Spracherkennung, beispielsweise als GEM-Message an ein anderes Programm. Übrigens läßt sich die Größe des Wortschatzes einfach vergrößern, indem man ihn in Ebenen aufteilt. Die oberste Ebene enthält neben den häufigsten Befehlen einige Schlüsselwörter, die den Wortschatz umschalten. In der neuen Ebene liegen weitere Befehlswörter, aber auch Wörter, die wieder »zurückschalten« oder eine Ebene tiefer verzweigen.

Resumee

Wenn man sich nur ein wenig mit dem Thema Spracherkennung beschäftigt, werden zwei Dinge schnell deutlich. Erstens: Die ASE bietet eine Unmenge von Möglichkeiten, Computer besser einzusetzen, auch in Bereichen, in denen sie bisher ungeeignet waren. Zweitens: Wir erleben gerade die Zeit, in der Computer genügend Leistung bekommen, um mit ihnen vernünftige ASE-Anwendungen zu verwirklichen. Das Ziel für die nähere Zukunft heißt also »ASE«. Wer zuerst kommt, mahlt zuerst. Atari hat mit dem Falcon alle Chancen, ganz vorne dabei zu sein. (ah)


Arno Oesterheld
Aus: TOS 03 / 1993, Seite 64

Links

Copyright-Bestimmungen: siehe Über diese Seite