VoiceScanner

und

Neuronal Network Builder And Simulator Engine
NNBASE


von Michael Jahn (HTW8878)
eMail: Michael.Jahn@web.de
Homepage: http://members.tripod.de/htw8878/




VoiceScanner

VoiceScanner ist ein Programm zur Demonstration der Erkennung gesprochener Sprache mit Hilfe neuronaler Netzwerke.
Es handelt sich dabei nicht um eine professionelle Lösung, sondern vielmehr um einen Ansatz zu Realisierung von Problemen in der Spracherkennung. Es lassen sich jedoch schon Sprachbeispiele recht erfolgreich mit dieser Software erkennen.

Nähere Erläuterungen und Beschreibungen sind bitte der Dokumentation des Programms zu entnehmen.
Die Grundlagen sind hier nachlesbar.

Downloads:

VoiceScanner (EXE-Datei und Dokumentation)

WAV Beispiele zum Testen

Screenshot

VoiceScanner Startdialog


Grundlagen - Voicescanner


1. Analog - Digital Wandlung
2. Merkmalsextraktion
2.1 Preemphase-Filter und Fensterfunktionen
2.2 Fourieranalyse
2.3 Kurzzeitsignalanalyse
2.4 Weiterführende Analyseschritte
3. Erkennen gesprochener Sprache mit Hilfe neuronaler Netze
3.1 Neuronale Netze - Allgemein
3.2 Neuronale Netze des Voicescanners


1. Analog - Digital Wandlung

Jedes Geräusch, jedes Wort, also alles was ein Mensch hören kann, ist grundsätzlich ein analoges Signal in Form einer komplexen Welle. Diese Wellen versetzen eine Membran im menschlichen Gehör in Schwingungen. Diese Schwingungen werden über ein ausgeklügeltes System bis an das Gehirn weitergegeben, um dort analysiert und verarbeitet zu werden.
Abbildung der Wellenform des Wortes "Fünf" (WAV-Datei: recognize_fuenf.wav)
Grafik von SpectraLAB
www.SoundTechnology.com

Leider ist es dem Computer ohne spezielle Hardware nicht möglich, Audiosignale in analoger Form zu verarbeiten. Aus diesem Grund muß die analoge Wellenform in eine gleichbedeutende digitale Form überführt werden. Dazu wird das Signal in sehr kurzen Abständen abgetastet und die Größe der Amplitude zum Abtastzeitpunkt bestimmt. Dadurch ergibt sich eine Folge von Zahlen, aus denen sich die analoge Ausgangsform wieder bilden läßt. Der Bereich der Zahlen ist üblicherweise ein vorzeichenbehafteter, 16 Bit großer Zahlenraum. Vor allem in den Anfängen der digitalen Audioverarbeitung waren auch kleinere Zahlenräume, meist 8 Bit groß, verwendet wurden. Jedoch wird die Qualität der Umwandlung um so schlechter, je kleiner der Zahlenraum ist.
Das zweite Kriterium, welches die Qualität der Abtastung bestimmt, ist die sogenannte Abtastrate. Dieser Wert gibt an, wie oft das analoge Signal pro Sekunde abgetastet wird. Gängige Werte hierfür sind zum Beispiel: 11025 Hertz (Telefonqualität), 22050 Hertz (Radioqualität) und 44100 Hertz (CD-Qualität). Es werden auch häufig höhere Werte 48000 Hertz aufwärts verwendet. Jedoch sind solche hohen Werte nur dann erforderlich, wenn das abgetastete Signal noch sehr oft weiterverarbeitet werden soll, wobei sich Qualitätsverluste ergeben. Bei dem Programm VoiceScanner werden 22050 Hertz verwendet, da dieser Wert ausreichend für eine Analyse ist. Dadurch ergeben sich 22050 Abtastpunkte pro Sekunde, was bedeutet, daß 22050 Amplitudenwerte ermittelt werden.
Das dritte Qualitätsmerkmal eines digitalen Audiosignals ist die Anzahl der abgetasteten Kanäle. Wenn man die digitale Surround-Technik außen vor läßt, ergibt sich noch das Verwenden eines Audiokanals (mono) oder zwei Kanäle (stereo). Die Anzahl der Kanäle hat direkten linearen Einfluß auf die Größe der Datenrate, die verarbeitet werden muß.
Schematische Darstellung des Abtastens eines analogen Audiosignals
Grafik von SpectraLAB
www.SoundTechnology.com

Aus den Werten für Samplerate (8 Bit oder 16 Bit), Abtastrate (11025 Hertz, ...) und Anzahl der Kanäle ergibt sich eine Formel, zur Berechnung der Datenrate, die von einem Programm verarbeitet werden muß:


Die gesamte Digitalisierung eines analogen Audiosignals übernimmt heute komplett eine eingebaute Soundkarte. Jede Standard-Soundkarte sollte somit ausreichen, um die benötigten Daten für VoiceScanner aufzunehmen. Als Merkmale der aufgenommen Datei, setzt das Programm folgende Werte voraus: Samplerate: 16 Bit - dadurch ergeben sich gut differenzierbare Werte der Amplituden Abtastrate: 22050 Hz - dieser Wert ist vollkommen ausreichend für ein qualitativ gutes Signal Kanäle: 1 (mono) - da die Sprache meist von einem Mikrofon aufgenommen wird, welches sowieso nur einen Kanal hat, ist mono völlig ausreichend. Dadurch ergibt sich nach obiger Formel eine Datenrate von 44100 Byte.

2. Merkmalsextraktion

Nach der Umwandlung des analogen Signals in digitale Werte müssen aus der Sprache die relevanten Teile extrahiert werden. Die normale Wellenform ist zu komplex, um diese direkt auszuwerten. Es werden also diejenigen Merkmale benötigt, die am besten das gesprochene Wort repräsentieren. Um diese Werte zu erhalten, wird das Signal einer Segmentierung (auch Fensterung genannt) mit einem vorhergegangenen optionalen Preemphase-Filter und nachfolgender Spektralanalyse (auch Fourieranalyse genannt) unterzogen. Die daraus entstandenen Spektralwerte können direkt zu Erkennung genutzt oder weiterführenden Analyseschritten unterzogen werden.

2.1 Preemphase-Filter und Fensterfunktionen

Als erster Schritt der Merkmalsanalyse kann ein Preemphase-Filter auf das zu erkennende Muster angewendet werden. Dies stellt jedoch einen optionalen Schritt dar, der darauf zielt, die Tiefpasscharakteristik der Sprache auszugleichen. Die Formel dazu lautet:


Mit dieser Formel wird aus dem vorhergehenden Amplitudenwert der aktuelle Wert berechnet. Der Wert α nimmt dabei meist Werte zwischen 0,80 und 0,97 an.
Der zweite Schritt der Vorverarbeitung ist das Herausschneiden von Abschnitten aus dem gesamten Signal. Das Signal wird nicht auf einmal in der vollen Länge weiterverarbeitet, sondern es werden Bereiche mit einer typischen Länge von etwa 10 - 20 Millisekunden nacheinander analysiert. Zum Herausschneiden der Abschnitte können verschiedene Funktionen zum Einsatz kommen, um an den Schnittstellen einen möglichst weichen Übergang zu erreichen. Die einfachste Fensterfunktion ist das Rechteckfenster:


Die wohl bekannteste und auch hier im Programm standardmäßig verwendete Funktion ist das Hamming - Fenster:


Es existieren noch weitere Funktionen, die hier kurz genannt werden sollen. Alle Funktionen unterscheiden sich hauptsächlich im Dämpfungswert des Signals. Hanning-Fenster (Abwandlung des Hamming-Fensters):


Gauß-Fenster:


Parabel-Fenster:


Die Werte der verwendeten Fensterfunktion können für die Größe des ausgeschnittenen Segmentes vorberechnet werden. Dadurch bekommt man ein Feld von Faktoren, welche mit den Amplitudenwerte durch folgende Formel kombiniert werden:


Das so vorverarbeitete Signalfenster kann jetzt der Fourieranalyse unterzogen werden.

2.2 Fourieranalyse

Die Fourieranalyse dient der Zerlegung eines Signals in dessen Anteile an Sinus- und Cosinusschwingungen. Die Historie der Analyse geht zurück bis zu D. Bernoulli (1700-1782), der schon damals die Auffassung vertrat, das jede Schwingung einer Saite auf eine Überlagerung von einer Grundschwingung mit der Kreisfrequenz und Oberschwingungen mit dem Frequenzvielfachen zurückzuführen ist. Der französische Mathematiker Jean Baptiste Joseph Fourier (1768-1830) verwendete 1807 die später nach ihm benannten trigonometrischen Reihen zur Darstellung von Lösungen der Wärmeleitungsgleichung. Wie fast jede neue Idee und Anschauung war auch diese Darstellung stark diskutiert und stieß auf Vorbehalte und Bedenken. Erst der Mathematiker P. Lejeune Dirichlet (1805-1859) fand wichtige Grundbegriffe im Umgang mit der Fourieranalysis und führte zu vielen wichtigen Impulsen in der Mathematik. Die Darstellung von Funktionen durch harmonische Schwingungen stand am Beginn der Mengenlehre G. Cantors (1845-1918) und war Ausgangspunkt der Integrationstheorie von B. Riemann (1826-1866) und H. Lebesgue (1875-1941).

Da in der Praxis, wie auch in dem vorliegenden Problem, kein kontinuierliches Signal vorliegt, sonder nur diskrete Werte, wird die Diskrete Fourier Transformation (DFT) verwendet. Sowohl die Fourier- als auch die Diskrete Fourier Transformation sind komplexe Funktionen, die aufgrund der großen Anzahl von Multiplikationen und Additionen nur sehr aufwendig zu berechnen sind. Deshalb ist man schon immer auf der Suche nach effizienteren Algorithmen, die den Speicher- und Zeitbedarf der Analyse senken. J.W. Cooley und J.W. Tukey veröffentlichten 1965 den sogenannten Fast Fourier Transformations Algorithmus. Durch die drastische Senkung benötigter Multiplikationsschritte konnte hierbei eine Steigerung der Verarbeitungsgeschwindigkeit erreicht werden. Die Grundidee aller FFT-Algorithmen besteht darin, eine DFT der Länge N für eine Faktorisierung N=n1n2...nk, (n1,n2,...,nk) rekursiv durch DFT's der kleineren Längen n1,n2,...,nk : DFTN = DFTnk(DFTnk-1(...(DFTn-1)...)) zu berechnen. Somit stellt die FFT ein schnelles Verfahren zur Berechnung der DFT dar. Einziger Nachteil der FFT ist, daß die Anzahl der Musterwerte ein Vielfaches von 2 sein muß.

Die Fourieranalyse ermittelt nun die Frequenzen und Amplituden der Sinusschwingungen, die bei einer Addition der Amplituden an einem bestimmten Zeitpunkt wieder annähernd das Ausgangssignal ergeben. Die Ergebnisse der Analyse lassen sich in einem Frequenzspektrum verdeutlichen.
Frequenzspektrum des Wortes "Fünf" an einem bestimmten Zeitpunkt (WAV-Datei: recognize_fuenf.wav)
Grafik von SpectraLAB
www.SoundTechnology.com

Hierbei wird auf der x-Achse die Frequenz einer beteiligten Schwingung und auf der y-Achse die Stärke (Amplitude) der Schwingung abgetragen. Diese Betrachtung erfolgt zu einem bestimmten Zeitpunkt t. Soll der zeitliche Verlauf des Signals mit in der Darstellung erkennbar sein, so werden zwei Methoden dafür am häufigsten verwendet. Bei der ersten Methode wird das Diagramm in die dritte Dimension erweitert. Die x-Achse trägt hierbei wiederum die Frequenzen, die y-Achse die Amplitude und auf der z-Achse wird die Zeit abgetragen. Die Verwendung läßt sich je nach eigenem Geschmack natürlich variieren, wird aber auf diese Art und Weise in der beispielhaften Darstellung verwendet. Zusätzlich wird für die Amplitudendarstellung noch eine Farbskala verwendet, um die Intensität der Frequenz noch besser darzustellen.
3-dimensionale Darstellung des Wortes "Fünf" (WAV-Datei: recognize_fuenf.wav)
Grafik von SpectraLAB
www.SoundTechnology.com

Die zweite Methode ist die Darstellung der Analyse als sogenanntes Spektrogram. Dabei wird auf der x-Achse der zeitliche Verlauf der Analyse und auf der y-Achse die Frequenzen abgetragen. Die Amplitude der Frequenz wird als grauer Punkt mit einem Farbwert zwischen Schwarz und Weiß. Je größer die Amplitude eines Signal, je mehr nähert sich der Punkt der Farbe Schwarz.
Spektrogram des Wortes "Fünf" (WAV-Datei: recognize_fuenf.wav)
Grafik von SpectraLAB
www.SoundTechnology.com

Durch die Fourier Transformation erhält man nun das Spektrum des Signals. Jedoch ist dieses noch zu komplex, um es als Merkmalsvektor nutzen zu können. Desweiteren ist eine solche detaillierte Darstellung zu anfällig für Rauschen. Somit wird das Frequenzspektrum in Bänder unterteilt. Es werden also Frequenzintervalle gleicher Breite festgelegt und das Spektrum gestuft.
Frequenzspektrum als Darstellung in Bändern (WAV-Datei: recognize_fuenf.wav)
Grafik von SpectraLAB
www.SoundTechnology.com

Dieses neue bandbezogene Spektrum kann nun bereits als Merkmalsvektor Verwendung finden. Es ist zwar noch recht komplex, kann jedoch bei den Entscheidungsfindungen mit herangezogen werden. Es ist jedoch vorteilhafter, noch weitere Analyseschritte folgen zu lassen, um bessere und kleinere Merkmalsvektoren zu ermitteln. Etwas genauer soll in diesem Zusammenhang die Kurzzeitsignalanalyse stehen, welche auch im Programm Anwendung findet. Kurz vorgestellt werden noch die Gewinnung der Merkmale aus dem Cepstrum und die Lineare Prädiktionsanalyse.

2.3 Kurzzeitsignalanalyse

Die Kurzzeitsignalanalyse ist eine Weiterführung aus dem Frequenzspektrum. Dazu wird das Betragsquadrat aus den Fourierkoeffizienten der FFT gebildet. Diese Betragsquadrate der einzelnen Bänder werden dann aufsummiert. Dadurch ergibt sich ein zweidimensional darstellbares Bild eines Sprachsignals. Dieses Abbild ist weniger stark sprecherabhängig, da alle Frequenzen zusammengelegt werden und zeigt für ein und dasselbe Wort eine sehr starke Ähnlichkeit. Es kann somit recht gut zur Erkennung genutzt werden. Außerdem wird der Merkmalsvektor extrem reduziert, was sich positiv auf die Erkennungsgeschwindigkeit und Lerngeschwindigkeit auswirkt. Die Ersparnis im Voicescanner beläuft sich auf den Faktor 16, da die 16 Bänder der FFT auf ein "Band" zusammengelegt werden.
Kurzzeitsignalenergie des Wortes "Sieben" (WAV-Datei: recognize_sieben.wav)
Grafik von WAVPlayer

2.4 Weiterführende Analyseschritte

An dieser Stelle sollen nur kurz drei weiterführende Analyseschritte vorgestellt werden, die im Programm nicht realisiert wurden.

Merkmale aus dem Cepstrum

Da das Spektrum eines Signals wieder periodische Struktur aufweist, lassen sich sogenannte Quefrenzen finden. Quefrenzen sind Schwingungen im Spektrum, die das Cepstrum bilden. Um dieses Cepstrum zu finden, wird der komplexe Logarithmus auf die komplexen Koeffizienten der FFT angewandt. Danach wird eine inverse Fourier Transformation durchgeführt. Im Cepstrum sind Anregungssignal und Impulsantwort des Vokaltraktes des Sprachorgans enthalten. Wird das Anregungssignal entfernt und der Rest zurück in das Spektrum transformiert, so erhält man ein bereinigtes logarithmiertes Spektrum. Mit diesem kann dann genauso verfahren werden, wie mit dem Originalspektrum.

Mel-Cepstrum-Koeffizienten

Die Mel-Cepstrum-Koeffizienten berücksichtigen sowohl das subjektive Lautstärkeempfinden, als auch die physiologische motivierte Tonhöhe der Sprache. Diese Analyse ist somit ein weiterer Schritt in Richtung einer sprecherunabhängigen Erkennung von gesprochener Sprache. Um die Koeffizienten zu ermitteln, wird das Signal wieder mit einer Fensterfunktion zerlegt und eine Fast Fourier Transformation durchgeführt. Die Werte des Ergebnisvektors werden dann mit Dreiecksfiltern gewichtet und addiert. Die Filter dienen zur Simulation der Mel-Skala, welche die Tonhöhe in einer physiologisch motivierten Größe mißt. Desweiteren gibt es auch Rechtecks- und Trapezfilter, jedoch haben sich Dreiecksfilter als besonders effektiv herausgestellt. Als nächster Schritt werden die erhaltenen Werte zusätzlich logarithmiert, um die Lautstärkeempfindung zu berücksichtigen. Der so gewonnene Mel-Frequenz-Koeffizientenvektor kann bereits als Merkmalsvektor verwendet werden. Jedoch werden meistens noch die Mel-Cepstrum-Koeffizienten daraus ermittelt, um die es sich in diesem Abschnitt dreht. Diese Koeffizienten werden mit Hilfe einer Cosinustransformation aus dem Mel-Frequenz-Koeffizientenvektor ermittelt.

Lineare Prädiktionsanalyse

Die lineare Prädiktionsanalyse stellt eine Approximation des Sprachsignals dar, bei welcher der nachfolgende Abtastwert mit Hilfe der vorhergegangenen vorhergesagt wird.


L1 bis Lp stellen dabei die Prädiktionskoeffizienten und p die Ordnung der Prädiktion dar. Für p wird meist 12 verwendet. Die Vorhersage ist meist nicht exakt, jedoch kann der Fehler durch die Koeffizienten L1 bis Lp minimiert werden.


Der Fehler E nimmt sein Minimum an, wenn alle partiellen Ableitungen Null sind. Die somit ermittelten Koeffizienten L1 bis Lp können dann als Merkmalsvektor verwendet werden.

3. Erkennen gesprochener Sprache mit Hilfe neuronaler Netze

Das Erkennen gesprochener Sprache durch neuronale Netze teilt sich in zwei Hauptschritte. Als erstes muß das neuronale Netz trainiert werden. Das bedeutet, es lernt, wie die verschiedenen Muster aufgebaut sind und welches Wort zugeordnet ist. Es versucht, diesen Aufbau zu abstrahieren, damit kein auswendig lernen der Muster eintritt. Der zweite Schritt ist die Erkennungsphase. Dazu wird ein dem Netz unbekanntes Muster vorgelegt und es muß anhand der Abstraktion der gelernten Muster das dazugehörige Wort erkennen.

3.1 Neuronale Netze - Allgemein

Das Erkennen gesprochener Sprache des Voicescanners basiert auf der Verwendung von neuronalen Netzen. Neuronale Netze sind der Versuch, das menschliche Gehirn im Computer nachzubilden. Um ein solches Netz aufzubauen, werden verschiedene Schichten von Neuronen angelegt. Mindestens vorhanden ist dabei eine Eingabeschicht und eine Ausgabeschicht. Desweiteren können sich noch versteckte Schichten zwischen der Ein- und Ausgabeschicht befinden. Die Neuronen werden untereinander verbunden. Das bedeutet, es werden die Synapsen des Gehirns zwischen den einzelnen Schichten angelegt. Jede dieser Verbindung bekommt ein Gewicht zugeordnet. Jedes Neuron hat wiederum einen Ausgabewert und einen Eingabewert.

Beispielaufbau eines neuronalen Netzes
Grafik von Neuronal Network Builder And Simulator Engine NNBASE

Wenn ein solches Netz verwendet wird, so wird an der Eingabeschicht ein Eingabemuster angelegt. Dieses Eingabemuster entspricht den Ausgabewerten jedes einzelnen Eingabeschicht-Neurons. Der Eingabewert eines jeden Neurons der nachfolgenden Schicht wird nun berechnet, indem der Ausgabewert der vorherigen Schicht mit dem Gewicht der Verbindung zwischen den zwei betrachteten Neuronen multipliziert wird. Jeder einzelne Wert, der für jede Verbindung des Neurons berechnet wird, wird aufsummiert und bildet den Nettoeingabewert des Neurons.
In dem Neuron wird der neue Ausgabewert für die darauffolgende Schicht mittels einer Aktivierungsfunktion berechnet. Danach geht es mit der nächsten Schicht genauso weiter, indem wieder der Netto-Input und der Output berechnet wird, bis man die Ausgabeschicht erreicht. Befindet man sich in einem Erkennungsprozeß des neuronalen Netzes, hat man nun das Ergebnis zur Verfügung. Im Lernprozeß jedoch wird das Ergebnis an der Ausgabeschicht mit einem erwartetem Ergebnis verglichen. Aus diesem Vergleich wird ein Fehlerwert berechnet, der angibt, wie weit das tatsächliche Ergebnis vom erwartetem Ergebnis abweicht. Mit Hilfe dieses Fehlerwertes werden die Gewichte aller Verbindnungen Stück für Stück angepaßt, bis das tatsächliche Ergebnis nur noch minimal vom erwartetem Ergebnis abweicht.

3.2 Neuronale Netze des Voicescanners

Im Voicescanner werden für jedes Erkennungsverfahren multilayer, feed-forward, Backpropagation-Netze eingesetzt. Dabei kommt eine Hiddenschicht zum Einsatz. Zahlreiche Tests haben herausgestellt, daß für die Erkennung auf Basis des Spektrums eine Anzahl von 4 Neuronen auf der Hiddenschicht gut geeignet ist. Bei der Erkennung anhand der Kurzzeitsignalenergie werden 6 Neuronen auf der versteckten Schicht benötigt, um gute Lern- und Erkennungsergebnisse zu erreichen, ohne die Muster auswendig zu lernen. Diese Werte können bei Verwendung des Programmes im Konfigurationsdialog nach belieben verändert werden.
Die Anzahl der Neuronen auf der Eingabe- und Ausgabeschicht sind durch die verwendeten Erkennungsmethoden vorgegeben. Durch die Verwendung von Sprachmuster von 1 Sekunde Gesamtlänge und einer Fenstergröße von 1024 Werten für die Fourier-Analyse werden 704 Eingabeneuronen bei der Erkennung durch das Spektrum des Musters benötigt. Die Kurzzeitsignalanalyse verwendet nur noch 44 Eingabewerte pro Muster, da hier die Spektralwerte der 16 Bänder auf einen Wert zusammengeführt werden.
Die Ausgabeschicht ist bei allen Erkennungsverfahren mit 10 Neuronen bestückt. Dabei stellt jedes Neuron ein Wort des Vokabulars dar.

Darstellung des neuronalen Netzes der Kurzzeitsignalanalyse
Grafik von Neuronal Network Builder And Simulator Engine NNBASE

Es ergeben sich somit folgende Topologien der Netze:
Spektrumanalyse: 704 - 4 - 10
Kurzzeitsignalanalyse: 44 - 6 - 10




Neuronal Network Builder And Simulator Engine NNBASE

NNBASE ist ein Programm zum Erstellen, Trainieren und Nutzen von "fullconnected" Multilayernetzwerken.
Dieses Programm ist parallel zur Entwicklung des VoiceScanners entstanden. Beide verwenden die gleiche, von mir entwickelte Netz-Engine.

Weitere Features, die Bedienung und anderes ist bitte der Dokumentation des Programms zu entnehmen.

Downloads:

NNBASE (EXE-Datei und Dokumentation)

Beispiel Netze und Musterdaten

Screenshot

NNBASE Startdialog

NNBASE Musterdialog