29.01.2014 Aufrufe

Belegarbeit (.pdf - 2.3 MB) - Technische Universität Dresden

Belegarbeit (.pdf - 2.3 MB) - Technische Universität Dresden

Belegarbeit (.pdf - 2.3 MB) - Technische Universität Dresden

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

TECHNISCHE UNIVERSITÄT DRESDEN<br />

FAKULTÄT INFORMATIK<br />

INSTITUT FÜR SOFTWARE- UND MULTIMEDIATECHNIK<br />

PROFESSUR FÜR COMPUTERGRAPHIK UND VISUALISIERUNG<br />

PROF. DR. STEFAN GUMHOLD<br />

Großer Beleg<br />

Spracheingabe für VR Anwendungen<br />

Jan Richter<br />

(Mat.-Nr.: 2928921)<br />

Betreuer: Prof. Dr. Stefan Gumhold<br />

<strong>Dresden</strong>, 28. Juli 2008


Aufgabenstellung<br />

In gängigen VR Umgebungen interagiert der Benutzer mit Eingabegeräten, die für die Eingabe von dreidimensionalen<br />

Parametern wie Position und Orientierung geeignet sind. Für die Navigation in graphischen<br />

Benutzungsschnittstellen sind diese Eingabegeräte jedoch nicht optimal geeignet. Eine mögliche<br />

Problemlösung ist der Einsatz von Spracheingabe für die Bedienung graphischer Benutzungsschnittstellen<br />

in VR-Umgebungen. Ziel der <strong>Belegarbeit</strong> ist es, den Stand der Technik von Spracherkennungssystemen<br />

zu ermitteln und frei verfügbare Lösungen für den Einsatz in VR Umgebungen zu evaluieren. Im<br />

speziellen sind die folgenden Punkte zu erarbeiten:<br />

• Vergleichende Zusammenstellung existierender Spracherkennungs- und Spracheingabesysteme<br />

• Evaluation und Vergleich von frei verfügbaren Lösungen in Bezug auf:<br />

– Einbindung in eine Echtzeitumgebung, d.h. wie ist die Aufnahme von Audiodaten in Echtzeit<br />

gelöst<br />

– Latenzzeiten bei der Erkennung<br />

– Art und Flexibilität der Programmierschnittstelle<br />

• Abstraktion der Schnittstelle zur Integration von Spracherkennungssystemen in C++<br />

• Implementierung der Schnittstelle für ein ausgesuchtes Spracherkennungssystem<br />

• Optional sollen die Bibliotheken zum Steuern der graphischen Schnittstellen im C++-Framework<br />

des Lehrstuhls für Computergraphik und Visualisierung integriert werden und an einer Beispielanwendung<br />

getestet werden.


1<br />

Inhaltsverzeichnis<br />

1 Einleitung 6<br />

2 Allgemeine Angaben zu Spracheingabesystemen 7<br />

2.1 Systemarten und Anwendungsgebiete . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />

2.1.1 Einzelworterkenner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />

2.1.2 Spracherkenner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />

2.1.3 Sprechererkenner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />

2.2 Anforderungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />

2.2.1 Wortschatz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />

2.2.2 Realisierung der Spracheingabe . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />

2.2.2.1 diskrete Sprache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />

2.2.2.2 kontinuierliche Sprache . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />

2.<strong>2.3</strong> Erkennen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />

2.<strong>2.3</strong>.1 sprecherabhängiges Erkennen . . . . . . . . . . . . . . . . . . . . . . 11<br />

2.<strong>2.3</strong>.2 sprecherunabhängiges Erkennen . . . . . . . . . . . . . . . . . . . . 11<br />

<strong>2.3</strong> Realisierung der Spracheingabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />

<strong>2.3</strong>.1 Spracheingaben erkennen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />

<strong>2.3</strong>.1.1 Push to Talk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />

<strong>2.3</strong>.1.2 Sprachsignal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />

<strong>2.3</strong>.2 Mikrofon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />

<strong>2.3</strong>.2.1 stationäre Mikrofone . . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />

<strong>2.3</strong>.2.2 mobile Mikrofone . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />

3 Allgemeiner Aufbau eines Spracherkenners 14<br />

3.1 Signalaufbereitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />

3.1.1 Formale Vorverarbeitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />

3.1.2 Spezielle Vorverarbeitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16<br />

3.2 Analyse und Merkmalsableitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17


2<br />

3.2.1 Analyseverfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17<br />

3.2.2 Merkmalableitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />

3.3 Klassifikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19<br />

3.3.1 Lineare Streckung/Stauchung . . . . . . . . . . . . . . . . . . . . . . . . . . . 19<br />

3.3.2 Dynamic Time Warping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />

3.3.3 Hidden Markov Modell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />

3.4 Interpretation und Reaktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22<br />

4 Erhältliche Programme 23<br />

4.1 freie Anwendungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />

4.1.1 Microsoft Agent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />

4.1.2 CVoiceControl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24<br />

4.1.3 XVoice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25<br />

4.2 kommerzielle Anwendungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25<br />

4.2.1 Dragon Naturally Speaking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25<br />

4.2.2 iListen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26<br />

4.<strong>2.3</strong> ViaVoice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26<br />

4.2.4 VoiceIt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27<br />

5 Frei verfügbare Spracherkenner 28<br />

5.1 Sphinx-4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />

5.1.1 Allgemeines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />

5.1.2 Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />

5.1.3 Funktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />

5.1.3.1 Front End . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />

5.1.3.2 Liguist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31<br />

5.1.3.3 Decoder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33<br />

5.2 Microsoft Speech API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34<br />

5.2.1 Allgemeines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34<br />

5.2.2 Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35<br />

5.<strong>2.3</strong> Funktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35<br />

5.3 jlab Speech Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36<br />

5.3.1 Allgemeines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36<br />

5.3.2 Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36<br />

5.3.3 Funktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37


3<br />

5.3.4 Vokabular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />

5.3.5 Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38<br />

6 Tests 41<br />

6.1 Worterkennungsrate für Sprachsteuerung . . . . . . . . . . . . . . . . . . . . . . . . . . 41<br />

6.1.1 Sphinx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41<br />

6.1.2 JLab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42<br />

6.1.3 SAPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43<br />

6.1.4 Vergleich . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44<br />

6.2 Worterkennungsrate für Diktieranwendungen . . . . . . . . . . . . . . . . . . . . . . . 46<br />

7 Auswahl eines Spracherkenners 47<br />

8 Entwicklung einer Schnittstelle auf Basis der Microsoft Speech API 50<br />

8.1 Anforderungen an die Schnittstelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50<br />

8.2 Begriffserklärungen im Zusammenhang mit der Schnittstelle . . . . . . . . . . . . . . . 51<br />

8.2.1 Die Grammatik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51<br />

8.2.2 Regeln und Menüs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51<br />

8.<strong>2.3</strong> Der Befehl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />

8.2.4 Das Vokabular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />

8.3 Eine Beispielanwendung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55<br />

8.3.1 Vokabular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55<br />

8.3.2 Navigation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55<br />

8.3.3 Programmieren der Beispielanwendung . . . . . . . . . . . . . . . . . . . . . . 55<br />

8.3.3.1 main() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56<br />

8.3.3.2 ExecuteCommand() . . . . . . . . . . . . . . . . . . . . . . . . . . . 59<br />

8.3.3.3 exit() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59<br />

8.4 Test der Schnittstelle mit Hilfe der Beispielanwendung . . . . . . . . . . . . . . . . . . 59<br />

9 Abschließende Betrachtungen 63<br />

9.1 Resümee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63<br />

9.2 Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64<br />

10 Glossar 67<br />

Literaturverzeichnis 72


4<br />

Abbildungsverzeichnis 75<br />

Tabellenverzeichnis 76


5<br />

Selbstständigkeitserklärung<br />

Hiermit erkläre ich, dass ich diese Arbeit selbstständig erstellt und keine anderen als die angegebenen<br />

Hilfsmittel und Quellen verwendet habe.<br />

Jan Richter


1. EINLEITUNG 6<br />

1 Einleitung<br />

’Ich konnte Sie leider nicht verstehen! Bitte wiederholen Sie Ihre Aussage.’ So oder so ähnlich klingt es<br />

wenn die freundliche Computerstimme am anderen Ende des Telefons, mich zum wiederholten mal nicht<br />

verstanden hat, obwohl ich doch extra deutlich gesprochen habe. Ein bekanntes Szenario und sicher auch<br />

einer der Gründe warum Dialogsysteme und Spracheingabesysteme im Allgemeinen in der Vergangenheit<br />

nicht ernst genommen wurden.<br />

Heutige Spracheingabesysteme arbeiten genauer, schneller und haben immer seltener mit derartigen Probleme<br />

zu kämpfen. Ihr Anwendungsgebiet ist weitläufig und beinhaltet unter anderem die Sprachsteuerung,<br />

das Lernen von Fremdsprachen, das Diktieren von Texten oder sogar Nutzerverifikation. Auch<br />

wenn Herstellerangaben wie 99Prozent Worterkennungsrate mit Vorsicht zu genießen sind, da sie häufig<br />

nur unter optimalen Testbedingungen erreicht werden, können Spracheingabesysteme eine große Arbeitserleichterung<br />

darstellen.<br />

In dieser Arbeit wird zunächst vorgestellt welche Arten von Spracherkennern existieren, welche Anforderungen<br />

bestehen und wie die Eingabe am besten zu realisieren ist. Danach wird der allgemeine Aufbau<br />

eines Spracherkenners beschrieben und seine einzelnen Elemente näher betrachtet. Später werden kurz<br />

einige kommerzielle und frei verfügbare Programme und ihre Anwendungsbereiche vorgestellt. Im Anschluss<br />

daran wird näher auf drei frei verfügbare Spracherkennungssysteme eingegangen, mit deren Hilfe<br />

man eigene Spracherkennungssoftware erstellen kann. Im drauf folgenden Kapitel werden diese Systeme<br />

hinsichtlich ihrer Erkennungsqualitäten getestet und eines davon für eine Schnittstelle ausgewählt. Im<br />

letzten Kapitel wird die Implementation diese Schnittstelle dokumentiert und eine Beispielanwendung<br />

beschrieben. Darauf folgt ein Test der Schnittstelle und es werde Vergleiche zu den früheren Testergebnissen<br />

gezogen.


2. ALLGEMEINE ANGABEN ZU SPRACHEINGABESYSTEMEN 7<br />

2 Allgemeine Angaben zu Spracheingabesystemen<br />

In diesem Kapitel wird zunächst ein Überblick über die verschiedenen Anwendungsgebiete für Spracheingabesysteme<br />

gegeben. Im zweiten Teil werden die verschiedenen Anforderungen an solche Systeme noch<br />

einmal näher betrachtet.<br />

2.1 Systemarten und Anwendungsgebiete<br />

2.1.1 Einzelworterkenner<br />

Einzelworterkenner gehören zu den einfacheren Spracherkennern. Sie realisieren nur ein sehr kleines<br />

Vokabular und die Spracheingabe erfolgt dabei diskret und meist sprecherunabhängig. Sie finden Anwendung<br />

bei Notschaltern, Ein- oder Ausschalter oder in einfachen Menüsteuerung.<br />

2.1.2 Spracherkenner<br />

Spracherkenner bilden das Hauptfeld der Spracheingabesysteme. Zu ihnen gehören Dialogsysteme, Diktiersysteme<br />

und Übersetzer, Sprachtrainer aber auch komplexe Steuerungssysteme.<br />

Dialogsysteme finden häufig im Dienstleistungssektor Anwendung. In Telefondiensten verschiedenster<br />

Firmen werden sie zum Beispiel genutzt, um etwas über das Anliegen des Anrufers herauszufinden,<br />

bevor man ihn zur entsprechenden Abteilung durch stellt. Da diese Systeme mit einer Vielzahl unterschiedlichster<br />

Personen und damit mit zum Teil sehr unterschiedlichen Aussprachen zurecht kommen<br />

müssen, sind sie sprecherunabhängig realisiert. Durch den Dialog werden die Antwortmöglichkeiten des<br />

Kunden und somit das mögliche Vokabular so gering wie möglich gehalten. Der Nutzer kann intuitiv mit<br />

dem System interagieren, wodurch sehr viele Antwortmöglichkeiten zustande kommen. Der Erkenner<br />

selbst sucht innerhalb der Aussage des Kunden jedoch nur nach einigen wenigen Signalwörtern, die er<br />

zu interpretieren weiß. Aus diesem Grund sind Dialogsysteme nicht fest, entweder bei diskreten oder<br />

den kontinuierlichen Erkennern, einzuordnen.


2. ALLGEMEINE ANGABEN ZU SPRACHEINGABESYSTEMEN 8<br />

Diktiersysteme arbeiten generell mit kontinuierlicher Spracheingabe und zeichnen sich durch einen sehr<br />

großen Wortschatz aus. Dadurch soll jede Art von Diktat realisierbar sein ohne das der Nutzer das Gefühl<br />

hat er wird durch die Spracheingabe behindert. Damit die Worterkennungsrate möglichst hoch ist, werden<br />

derartige Systeme meist sprecherabhängig trainiert. In der Vergangenheit waren dazu zum Teil recht<br />

lange Trainingssitzungen nötig, bevor man mit der Arbeit beginnen konnte. Die modernsten Diktiersysteme<br />

kommen heute allerdings schon völlig ohne vorheriges Training aus, passen sich aber trotzdem noch<br />

während der Arbeit an und bleiben damit weiterhin sprecherabhängige Systeme. Neben den allgemeinen<br />

Diktiersysteme gibt es von einigen Anbietern auch spezielle Erkenner für einzelne Fachgebiete wie zum<br />

Beispiel Medizin oder Jura. Auch Übersetzer gehören in diese Kategorie, da sie das Diktat nur noch um<br />

eine Stufe erweitern.<br />

Sprachlernsysteme beziehen sich in diesem Zusammenhang nicht nur auf Fremdsprachen sondern bieten<br />

auch tauben oder gehörgeschädigten 1 Menschen die Möglichkeit ihre Aussprache zu trainieren. Dabei<br />

wird die Eingabe des Nutzers analysiert und ihm daraufhin Hinweise zur richtigen Betonung gegeben.<br />

Dies lässt sich auch mit diskreter Spracheingabe realisieren, um einzelne Wörter zu trainieren. Kontinuierliche<br />

Spracheingabe ist aber dennoch von Vorteil, da sich die richtige Betonung im Zusammenspiel<br />

mit anderen Wörtern oftmals ändert. Sprachlernsysteme kommen jedoch ohne Lernphase aus, da sich in<br />

diesem Fall der Nutzer anpassen soll und nicht das System.<br />

Komplexe Steuerungssysteme sind für Anwendungen gedacht, in denen ein Einzelworterkenner nicht<br />

mehr ausreicht. Dies geschieht zum Beispiel wenn man einen natürlichen Umgang der Nutzer mit dem<br />

System erreichen will. Dementsprechend wird die Spracheingabe hier kontinuierlich erfolgen und das<br />

System reagiert auf enthaltene Befehlswörter oder deren Kombination. Außerdem wird es nicht nur einen<br />

einzigen möglichen, sondern mehrere Sprachbefehle für eine Aktion geben, damit der Nutzer möglichst<br />

intuitiv mit dem System umgehen kann. Wenn es das Einsatzgebiet erfordert kann der Spracherkenner<br />

zusätzlich noch sprecherunabhängig realisiert werden.<br />

1 Altersschwerhörigkeit zum Beispiel, schränkt den Hörbereich von oben her ein. Das heißt höherfrequente Töne sind zuerst<br />

betroffen. Heute Hörgeräte versuchen das natürlich wieder auszugleichen. Wenn die Einschränkung des Hörbereichs sogar<br />

den Teil der menschlichen Sprache erreichte, war es früher jedoch häufig so, das bei älteren Menschen die Zischlaute mit<br />

der Zeit immer dumpfer klangen, einfach weil sie selbst ihre Aussprache nicht mehr richtig wahrnehmen konnten.


2. ALLGEMEINE ANGABEN ZU SPRACHEINGABESYSTEMEN 9<br />

2.1.3 Sprechererkenner<br />

Sprechererkennung soll in verschiedensten Anwendungen die Sicherheit erhöhen indem sie normale<br />

Logins und Passwörter erweitern oder ersetzen. Die Stimme dient dabei als ein einzigartiges Erkennungsmerkmal.<br />

Bei der Sprecherverifikation muss der Nutzer einen Login verwenden und das System<br />

überprüft nur ob die Spracheingabe zum Login passt. Bei der Sprecheridentifikation weiß das System<br />

nicht, wer sich gerade anmelden will und muss aus einer großen Menge von möglichen Nutzern den<br />

richtigen herausfinden. In beiden Fällen muss dem System vorher jedoch eine Sprachprobe des Nutzers<br />

nehmen. Für Sprechererkennung reicht diskrete Spracheingabe aus. Der Wortschatz sollte in diesem Fall<br />

recht groß gewählt werden 2 .<br />

2.2 Anforderungen<br />

2.2.1 Wortschatz<br />

Der Wortschatz spiegelt die Gesamtmenge aller Wörterbucheinträge wieder und verdeutlicht damit, wie<br />

viele Wörter das Programm versteht. In Tabelle 2.1 wird, mittels einer kleinen Beispielrechnung verdeutlicht,<br />

wie viele Einträge für einen halbwegs ausreichenden Wortschatz in deutsch und englisch mindestens<br />

nötig sind. In Tabelle 2.2 werden die benötigten Wortschätze für verschiedene Anwendungen<br />

gegenüber gestellt. 3 Sprache Basiswortschatz Wortformen Gesamtwortschatz<br />

deutsch 4.000 10 40.000<br />

englisch 800 4 3.200<br />

Tabelle 2.1: Mindestwortschatz einer Diktieranwendung in deutsch und englisch nach [1]<br />

Große Wortschätze sind sehr gut geeignet um beinahe jede Art von Spracheingabe zu realisieren. Umso<br />

größer der Wortschatz jedoch wird, desto schwerer wird es für den Erkenner die Eingabe zu analysieren.<br />

2 Ein besonders ausgereiftes System könnte sicher aus einem einzigen Wort, das jeder Nutzer aussprechen muss, genau bestimmen<br />

um welchen Nutzer es sich handelt. Aus Sicherheitsgründen ist dies jedoch nicht sehr ratsam. Eine böswillige<br />

Person könnte sich sonst mit Hilfe einer Sprachaufzeichnung als jemand anderes ausgeben. Daher ist es besser einen sehr<br />

großen Wortschatz zu verwenden und den Nutzer dazu auffordern ein zufällig gewähltes Wort auszusprechen.<br />

3 Diese Angaben erscheinen sehr gering, wenn man bedenkt, dass der vollständige Wortschatz im Deutschen, je nach Quelle,<br />

300.000-500.000 und im Englischen reichlich 300.000 Wörter enthält. Diese Wortfülle wird jedoch meist nicht einmal<br />

annähernd ausgeschöpft. So beinhaltet der deutsche Basiswortschatz im alltäglichen Gebrauch nur etwa 400-800 Wörter<br />

und erst versierte Redner nutzen einen Basiswortschatz von 4.000 bis 10.000 Wörtern. Weiter Informationen dazu finden<br />

sich auch unter http://de.wikipedia.org/wiki/Wortschatz


2. ALLGEMEINE ANGABEN ZU SPRACHEINGABESYSTEMEN 10<br />

Anwendung<br />

benötigter Wortschatz<br />

Notstop-Schalter 1<br />

Ja/Nein 2<br />

Ziffernfolge 10<br />

Menü- oder Gerätesteuerung 20-300<br />

einfacher Auskunftsdialog 500-2.000<br />

Alltagssprache 8.000-20.000<br />

Diktiergerät 20.000-50.000<br />

Deutsch ohne Fremdwörter ca. 300.000<br />

Tabelle 2.2: Wortschatz für verschiedene Anwendungen nach [18]<br />

Die Antwortzeit steigt und Verwechslungsfehler treten häufiger auf. Ein großes Problem dabei sind Homophone,<br />

dass heißt Wörter mit unterschiedlichen Bedeutungen aber gleichem Klang. Ein Beispiel dafür<br />

sind ’mehr’ und ’Meer’. Ohne zusätzliche Analysemechanismen sind Homophone für den Computer nur<br />

sehr schwer zu unterscheiden. Aus diesem Grund ist es für die Sprachsteuerung nötig eine gute Balance<br />

zwischen einem möglichst kleinen aber dennoch umfassenden Befehlswortschatz zu finden. [1]<br />

2.2.2 Realisierung der Spracheingabe<br />

2.2.2.1 diskrete Sprache<br />

Bei diskreter Spracheingabe muss der Nutzer zwischen den Eingaben künstliche Pausen einfügen. Wenn<br />

es darum geht, einzelne Befehlsworte oder Wortgruppen zur Steuerung des Computers zu verwenden, ist<br />

diskrete Spracheingabe durchaus praktikabel. Leider wird dem Nutzer mitunter der Eindruck vermittelt,<br />

dass er durch die Spracheingabe ausgebremst wird. [1]<br />

2.2.2.2 kontinuierliche Sprache<br />

Bei kontinuierliche Spracheingabe hingegen kann der Nutzer viel natürlicher Sprechen und muss sein<br />

Sprechtempo nicht an die Maschine anpassen. Dies ist besonders für Diktierfunktionen vorteilhaft. [1]<br />

2.<strong>2.3</strong> Erkennen


2. ALLGEMEINE ANGABEN ZU SPRACHEINGABESYSTEMEN 11<br />

2.<strong>2.3</strong>.1 sprecherabhängiges Erkennen<br />

Sprecherabhängiges Erkennen hilft dem Computer dabei die verschiedenen Worte besser auseinander<br />

zu halten. Das ist besonders bei großen Wortschätzen von Vorteil. Der Nachteil besteht allerdings darin,<br />

dass jeder neue Nutzer bevor er mit dem Spracheingabesystem arbeiten kann, erst eine oder mehrere Trainingsphasen<br />

durchlaufen muss. Dabei wird für jeden Nutzer ein neues Sprecherprofil angelegt. Dieses<br />

Vorgehen ist besonders bei häufig wechselnden Nutzern ungeeignet. Bei einer etwas schnellere Variante<br />

des sprecherabhängigen Erkennens muss vor der Arbeit nur kurz das Geschlecht und die Altersgruppe<br />

des Nutzers ausgewählt werden. Das ist zwar nicht so effektiv wie eine ganze Trainingsphase, dafür aber<br />

bedeutend schneller und erhöht die Worterkennungsrate schon deutlich. [1] Die neusten Systeme kommen<br />

sogar völlig ohne vorheriges Training aus, legen aber dennoch ein Nutzerprofil an und verfeinert es<br />

während der Arbeit.<br />

2.<strong>2.3</strong>.2 sprecherunabhängiges Erkennen<br />

Sprecherunabhängiges Erkennen ist nur bei einem begrenzten Wortschatz einsetzbar. Da der Spracherkenner<br />

nicht auf einen bestimmten Sprecher geprägt wird, steigt die Verwechslungswahrscheinlichkeit<br />

mit jedem zusätzliche Wort stark an. [1] Durch immer besser werdende Erkenner wird diese Einschränkung<br />

aber mehr und mehr aufgehoben.<br />

<strong>2.3</strong> Realisierung der Spracheingabe<br />

<strong>2.3</strong>.1 Spracheingaben erkennen<br />

Bei einer Spracheingabe fällt es dem Computer schwer, zwischen einem normalen Gespräch und einem<br />

Sprachbefehl zu unterscheiden. Am einfachsten ist es natürlich, den Spracherkenner immer nur dann<br />

einzuschalten, wenn man einen Sprachbefehl geben will. Dies ist aber recht umständlich und teilweise<br />

auch nicht möglich, da man zum Beispiel die Hände nicht frei hat, zu weit vom Computer entfernt ist<br />

oder aber das Starten des Spracherkenners einfach zu lange dauert. Um dies zu vereinfachen gibt die<br />

Möglichkeit den Computer darauf hinzuweisen, das in kürze eine Eingabe erfolgt.<br />

<strong>2.3</strong>.1.1 Push to Talk<br />

Dabei handelt sich um eine sehr bekannte und praktikable Variante. Der Nutzer betätigt eine Taste um<br />

die Eingabe zu signalisieren. Damit das ganze für den Nutzer komfortabler abläuft, kann das ’Betätigen


2. ALLGEMEINE ANGABEN ZU SPRACHEINGABESYSTEMEN 12<br />

der Taste’ in eine natürlichere Handlung eingebettet werden. Zum Beispiel in das Einschalten eines<br />

Laserpointers. [1]<br />

<strong>2.3</strong>.1.2 Sprachsignal<br />

Auch Spracheingaben kann man wiederum durch Sprachsignale ankündigen. Die einfachste Variante ist<br />

ein exotisches Befehlswort, von dem man annehmen kann, dass es im allgemeinen sehr selten verwendet<br />

wird. Der Computer hört sozusagen die ganze Zeit mit, wird aber erst aktiv wenn er das exotische<br />

Befehlswort erkennt. [1] Das Ganze lässt sich noch dadurch erweitern, dass der Computer nur bei einer<br />

bestimmten Betonung des Signalwortes aktiv wird. Man hat sogar herausgefunden, dass allein aufgrund<br />

der Betonung schon eine 80 prozentige Erkennungsrate erreicht wird. Dadurch ist es nicht einmal mehr<br />

nötig ein besonders exotisches Signalwort zu wählen. Unter diesen Bedingungen wird der Satz: ’Ich werde<br />

gleich nach dem Speichern den Computer ausschalten’ nicht dazu führen, dass die gesamte Tagesarbeit<br />

verloren geht. Wohingegen das besonders betonte ’COMPUTER ausschalten’ umgehend ausgeführt<br />

wird.<br />

<strong>2.3</strong>.2 Mikrofon<br />

Bei der Spracheingabe ist die wichtigste Schnittstelle zwischen Mensch und Maschine das Mikrofon.<br />

Billige Modelle fügen dem Sprachsignal mitunter einen beachtlichen Rauschanteil hinzu oder helfen<br />

nicht dabei Störgeräusche zu vermindern. Beides ist jedoch sehr wichtig um dem Spracherkenner bestmögliche<br />

Eingangssignale zu liefern und damit die Worterkennungsrate zu verbessern. Aus diesen Grund<br />

ist es besonders wichtig qualitativ hochwertige Mikrofone zu verwenden. Im Folgenden wird noch kurz<br />

auf die Mikrofonposition eingegangen.<br />

<strong>2.3</strong>.2.1 stationäre Mikrofone<br />

Ein, an einer festen Position installiertes Mikrofon bietet dem Benutzer vollständige Bewegungsfreiheit<br />

und Komfort. Leider steigt dadurch der störende Einfluss von Umgebungsgeräuschen sehr stark an. Dies<br />

wiederum erhöht den Anspruch, der an das Spracherkennungssystem gestellt wird. Es wird eine bessere<br />

Vorverarbeitung und Analyse des Eingangssignals benötigt und damit eine um ein vielfaches höhere<br />

Rechenleistung beansprucht. [1]


2. ALLGEMEINE ANGABEN ZU SPRACHEINGABESYSTEMEN 13<br />

<strong>2.3</strong>.2.2 mobile Mikrofone<br />

Ein mobiles Mikrofon, wie zum Beispiel in einem Headset verringert durch seine extrem kurze Distanz<br />

zum Sprecher den Einfluss von Störgeräuschen enorm. Dadurch wird die Spracherkennung im Vergleich<br />

zu stationären Mikrofonen deutlich verbessert. Der einzige Vorteil stationärer Mikrofone, nämlich die<br />

Bewegungsfreiheit, wird durch heutige wireless Technologie vollständig aufgehoben. Damit sind mobile<br />

Mikrofone den stationären im Allgemeinen überlegen. [1]


3. ALLGEMEINER AUFBAU EINES SPRACHERKENNERS 14<br />

3 Allgemeiner Aufbau eines Spracherkenners<br />

Dieses Kapitel beschäftigt sich mit dem allgemeinen Aufbau eines Spracherkenners. Abbildung 3.1 zeigt<br />

das Grundmodell eines solchen Systems 1 .<br />

Abbildung 3.1: Allgemeiner Aufbau eines Spracherkenners<br />

In den Teilkapiteln werden die einzelnen Bestandteile näher betrachtet.<br />

Außerdem sei noch zu erwähnen, dass zwei grundlegende Ansätze existieren nach denen Erkenner funktionieren.<br />

Beim Mustererkennungsansatz (Abbildung 3.2) wird ein einzelnes Muster aus dem Signal<br />

gewonnen, dieses mit allen Referenzmustern verglichen und letztendlich das passendste Muster ausgewählt<br />

oder das Muster des Signals zurückgewiesen. Dem gegenüber steht der Akustisch-phonetische<br />

Ansatz (Abbildung 3.3). Hier wird aus dem Signal eine Menge von Merkmalen extrahiert, verknüpft und<br />

danach mit Hilfe des Hypothesentesters mit dem Vokabular verglichen.[9]<br />

1 Mit Signal ist hier bereits das digitalisierte Sprachsignal gemeint. Damit beim digitalisieren keine Informationen verloren<br />

gehen, muss die Abtastrate dabei mindestens das Doppelte der größten Frequenz des Sprachsignals entsprechen. Im Fall der<br />

menschliche Sprache sind das 8kHz, was zu einer minimalen Abtastrate von 16kHz führt. Es gibt natürlich Ausnahmefälle.<br />

Bei Telefonsignalen wird zum Beispiel nur noch ein Bereich von 0,3-3,4kHz übertragen, also wäre hier eine Abtastrate von<br />

nur 8kHz vollkommen ausreichend.[8]


3. ALLGEMEINER AUFBAU EINES SPRACHERKENNERS 15<br />

Abbildung 3.2: Mustererkennungsansatz<br />

Abbildung 3.3: Akustisch-phonetischer Ansatz<br />

3.1 Signalaufbereitung<br />

Die Signalaufbereitung ist eng mit der Analyse verbunden. Ihr Ziel besteht darin, die Schwankungen<br />

und Störungen im Signal zu reduzieren und dadurch den späteren Analyseaufwand zu minimieren. Umso<br />

besser die Aufbereitung also ist, desto besser können später die Merkmale aus dem Signal abgeleitet<br />

werden. Es existieren verschiedene Schritte der Signalaufbereitung, die sich noch einmal in die formale<br />

und die spezielle Vorverarbeitung unterteilen lassen. Abbildung 3.4 zeigt den möglichen Aufbau einer<br />

Signalaufbereitungskomponente.<br />

Abbildung 3.4: Aufbau der Signalaufbereitung<br />

3.1.1 Formale Vorverarbeitung<br />

Vorfilterung:<br />

Die Vorfilterung unterdrückt, mit Hilfe von Bandsperren und verschiedenen Filtern, Störsignale. Da die


3. ALLGEMEINER AUFBAU EINES SPRACHERKENNERS 16<br />

menschliche Sprache einen Frequenzbereich von 50Hz bis 8kHz umfasst, ist es zum Beispiel sinnvoll<br />

alle darunter und darüber liegenden Frequenzanteile des Signals zu entfernen.<br />

Grenzdetektion:<br />

Bei einem eintreffenden Signal muss es sich allerdings nicht zwangsläufig ein Sprache handeln. Mit<br />

Hilfe der Grenzdetektion soll nun herausgefunden werden wo der Sprachteil beginnt beziehungsweise<br />

endet. Dazu existieren zwei Verfahren. Das Erste arbeitet im Zeitbereich. Es wertet die Energiesumme<br />

des Signals über einen bestimmten Zeitraum aus um eine Grenzdetektion vornehmen zu können. Wird<br />

ein Schwellwert überschritten muss es sich um ein Sprachsignal handeln. Beim analytischen Verfahren<br />

hingegen werden bestimmte Merkmale aus dem Eingangssignal extrahiert und mit Hilfe verschiedener<br />

Entscheidungsregeln wird überprüft, ob die Merkmale des Eingangssignals mit den Merkmalen eines<br />

Sprachsignals übereinstimmen.[2]<br />

Normierung, Pegelanpassung:<br />

Damit die spätere Mustererkennung erheblich einfacher ablaufen kann wird das Signal zusätzlich angepasst,<br />

sprich normiert. Der größte Pegel des Signals wird dabei auf einen vordefiniert Maximalwert<br />

gesetzt und alle anderen Pegel im Verhältnis zu dieser Änderung angepasst.[3]<br />

3.1.2 Spezielle Vorverarbeitung<br />

Quellenlokalisation und -verfolgung:<br />

Dieses Verfahren dient wie die Vorfilterung dazu Umgebungslärm auszufiltern. Dabei wird versucht den<br />

sogenannten Cocktailparty-Effekt 2 nachzubilden. Anstelle eines einzelnen Mikrofons und eines sehr<br />

komplexen Lärmfiltersystems werden bei diesem Verfahren mehrere Mikrofone verwendet. Dadurch entstehen<br />

unterschiedliche Aufnahmen des Signals, mit deren Hilfe man verschiedene Schallquellen voneinander<br />

unterscheiden, Echos kompensieren und Störungen unterdrücken kann.[9]<br />

Segmentierung:<br />

Die Segmentierung ist der letzte Schritt der Vorverarbeitung. Das gefilterte und normierte Sprachsignal<br />

wird hierbei in Segmente gleicher Länge aufgeteilt. Sie haben eine Dauer von 10ms bis 25ms, werden<br />

mit Hilfe einer Fensterfunktion, wie zum Beispiel dem Hamming-Fenster, gewonnen und können einan-<br />

2 Cocktailparty-Effekt bezeichnet die Fähigkeit des menschlichen Gehörs, sich bei vielen Signalquellen auf ein einzelnes<br />

Signal zu konzentrieren und alle anderen auszublenden.


3. ALLGEMEINER AUFBAU EINES SPRACHERKENNERS 17<br />

der überlappen.[2]<br />

3.2 Analyse und Merkmalsableitung<br />

3.2.1 Analyseverfahren<br />

Linear Predictive Coding<br />

Beim Linear Predictive Coding wird die menschliche Sprache vereinfacht als ein Anregungs-/ Bewertungsmodell<br />

dargestellt. Die Öffnung zwischen den Stimmbändern liefern die Anregungimpulse, die<br />

dann durch den Rachenraum und Mund bewertet werden. Dies wird in Abbildung 3.5 für einen Vokal<br />

dargestellt. Die Häufigkeit der Anregung F 0 (Bild (a)) ist dabei 1/T 3 0 (Bild (b)). In Bild (c) der Abbil-<br />

Abbildung 3.5: Anregung und Bewertung für einen Vokal[17]<br />

dung 3.5 ist die zugehörige Bewertungsfunktion zu sehen. Sie zeigt die vorhandene Signalenergien für<br />

die einzelnen Frequenzen an. Frequenzanteile, die im Verhältnis zu ihrer Umgebung relativ viel Energie<br />

3 T 0 bezeichnet die Zeitdauer zwischen zwei Anregungen.


3. ALLGEMEINER AUFBAU EINES SPRACHERKENNERS 18<br />

besitzen nennt man Formanten. Diese ermöglichen es, das Signal zu identifizieren und sind als F1 bis F4<br />

eingetragen. Diese Merkmale jedoch im Echtzeitbetrieb aus einem Signal zu extrahieren dauert zu lange.<br />

Beim Linear Predictive Coding werden diese Merkmale deshalb nur beim Erstellen eines Eintrags,<br />

für das Referenzmusterspeicher, extrahiert. Dies verringert zunächst nur den Speicheraufwand für das<br />

Vokabular. Während des tatsächlichen Betriebs des Erkenners werden diese Merkmale dazu genutzt das<br />

ursprüngliche Signal eines Vokabulareintrags wieder herzustellen, was wesentlich schneller funktioniert.<br />

Das ursprüngliche Signal wird dann mit Hilfe der Kreuzkorrelationsfunktion mit dem eingehenden Signal<br />

verglichen. Das Ergebnis gibt an, wie ähnlich sich die zwei Signale sind. [17]<br />

cepstrale Glättung<br />

Auch hier wird ein Anregungs-/Bewertungsmodell als Grundlage verwendet. Das Cepstrum (c (n)) ist<br />

die inverse Fourier-Transormation (IDFT) des Logarithmus des Spektrums (X (k)) eines Sprachsignals<br />

(x (n)).<br />

c (n) = IDF T {log|X (k) |}<br />

Nach dieser Transformation sind der Anregungs- und der Bewertungsteil zeitlich getrennt. Der unerwünschte<br />

Anregungsteil kann nun einfach subtrahiert werden. Danach wird das ganze wieder Fouriertransformiert<br />

und entlogarithmiert um letztendlich das Spektrum (Bild (d) der Abbildung 3.5) des Bewertungsteils<br />

zu erhalten. [17]<br />

Frequenz-Zeit-Transformation<br />

Das Eingangssignal wurde während der Vorbereitung in Segmente unterteilt. Die Segmente werden so<br />

kurz gewählt, das man davon ausgehen kann, dass das Signal in einem Segment gleich bleibt. Jedes<br />

Segment wird mit Hilfe der Fouriertransformation vom Zeit- in den Frequenzbereich überführt. So erhält<br />

man zu jedem Segment das zugehörige Spektrum. Wenn man diese Spektren zeitlich verknüpft folgt<br />

daraus das Gesamtspektrum des Eingangssignals.<br />

3.2.2 Merkmalableitung<br />

Differentiation<br />

Die Differenziation erfasst Unterschiede erster und zweiter Ordnung, zwischen Teilobjekten die einander<br />

folgen.<br />

1. Ordnung: x ′ i = x i+1 − x i<br />

2. Ordnung: x ′′<br />

i = x′ i+1 − x′ i


3. ALLGEMEINER AUFBAU EINES SPRACHERKENNERS 19<br />

Merkmalselektion<br />

Um die Gesamtanzahl der zu speichernden Information zu reduzieren, werden redundate Merkmale beseitigt.<br />

Vektorquantisierung<br />

Um die Anzahl der Merkmalsvektoren zu reduzieren werden ähnliche Vektoren zu einem einzelnen Vektor<br />

zusammengefasst.<br />

Psychisch motivierte Verfahren<br />

Bei psychisch motivierten Verfahren werden für den Menschen tatsächlich wahrnehmbare Größen als<br />

Merkmale genutzt. In der Akustik handelt es sich dabei um die Phoneme. Die kleinsten bedeutungstragenden<br />

Einheiten der Sprache. Eintreffende Sprachsignale werden in ihre Phonemfolge zerlegt.<br />

Heuristische Verfahren<br />

Aus verschiedenen Signalen werden aussagekräftige Merkmale aufgrund von Expertenwissen extrahiert.<br />

Diese Merkmale können später genutzt werden, um bereits untersuchte Signale wieder zu erkennen.<br />

3.3 Klassifikation<br />

In diesem Schritt werden die abgeleiteten Merkmale mit den Daten aus einem oder mehreren Referenzmusterspeichern<br />

verglichen. Danach wird das ähnlichste Muster als erkanntes Ergebnis weiter gegeben.<br />

Natürlich kann es sein, dass tatsächlich garkeine Eingabe erfolgte. Aus diesem Grund darf der Unterschied<br />

zwischen Eingabesignal und zugeordnetem Referenzmuster einen voreingestellte Rückweisungsschwelle<br />

nicht überschreiten. Um die Klassifikation durchzuführen gibt es verschiedene Verfahren.<br />

3.3.1 Lineare Streckung/Stauchung<br />

Da man das selbe Wort nur sehr selten exakt gleich schnell ausspricht muss das Eingangsmuster zeitlich<br />

an das Referenzmuster angepasst werden. Ein einfaches Verfahren dazu passt die Gesamtdauer des<br />

Eingangssignals durch linear Streckung oder Stauchung an das Referenzmuster an. Danach wird ein direkter<br />

Vergleich zwischen dem Muster des Eingangssignals und dem entsprechenden Referenzmuster<br />

durchgeführt. Dies wird für alle Referenzmuster wiederholt und das passendste ausgewählt.


3. ALLGEMEINER AUFBAU EINES SPRACHERKENNERS 20<br />

3.3.2 Dynamic Time Warping<br />

Hierbei handelt es sich um verbessertes Verfahren zur zeitlichen Anpassung. Es wird nicht nur auf die<br />

Gesamtdauer des Eingabemusters eingegangen, sondern auch Geschwindigkeitsschwankungen innerhalb<br />

eines Musters beachtet. Die Werte des Eingabemusters werden, wie in Abbildung 3.6 zu sehen, den<br />

Werten des Referenzmusters zugeordnet, denen sie am ehesten entsprechen. Dabei sind allerdings einige<br />

Randbedingungen einzuhalten. Die beiden Anfangs und Endpunkte der Signale müssen jeweils einander<br />

zugeordnet sein. Die zeitliche Abfolge muss beibehalten werden und man darf keine Werte auslassen.<br />

Abbildung 3.6: Dynamic Time Warping<br />

Da bei diesem Verfahren mehrere Ergebnisse möglich sind, wird mit Hilfe einer rekursiven Gleichung<br />

der optimale Weg durch die aufgespannte Ebene gesucht. Auch dieses Verfahren wird wieder für alle


3. ALLGEMEINER AUFBAU EINES SPRACHERKENNERS 21<br />

Referenzmuster durchgeführt und das am besten passende gesucht. [7]<br />

3.3.3 Hidden Markov Modell<br />

Das Hidden Markov Modell (HMM) versucht Sprachsignale durch ihre statistischen Eigenschaften zu<br />

beschreiben. Zu jedem Eintrag im Vokabular wird ein statistisches Modell erstellt. Dabei wird jeder<br />

Eintrag in seine Phoneme zerlegt und die entsprechenden Wahscheinlichkeiten ermittelt. Abbildung 3.7<br />

stellt dieses Modell für das Wort ’haben’ dar. Im oberen Teil sind die Übergangswahrscheinlichkeiten für<br />

die einzelnen Zustände zu sehen. Im unteren Teil werden die Wahrscheinlichkeiten dafür gegeben, im<br />

entsprechenden Zustand die angegebene Beobachtung gemacht zu haben. Die zeitlichen Unterschiede<br />

zwischen Eingabe und Referenz werden dadurch beglichen, das auch die Wahrscheinlichkeiten dafür<br />

gegeben sind ob ein Zustand weiterhin anhält oder ob ein Übergang stattfindet.<br />

Abbildung 3.7: Hidden Markov Modell für das Wort ’haben’ nach [7]<br />

Später wird die Wahrscheinlichkeit, dass die Beobachtete Phonemfolge tatsächlich zu einer Referenz<br />

gehört, durch folgende Formel berechnet:<br />

P (Y ) = ∑ X<br />

P (Y |X) P (X)<br />

Wobei Y die beobachtete Phonemfolge ist und X der Phonemfolge einer Referenz entspricht. Auch hier<br />

wird zum Schluß die wahrscheinlichste Referenz als Ergebnis zurückgegeben oder die gesamte Eingabe<br />

als ’nicht erkannt’ verworfen. [7]


3. ALLGEMEINER AUFBAU EINES SPRACHERKENNERS 22<br />

3.4 Interpretation und Reaktion<br />

Nachdem das Eingangssignal nun einem Eintrag des Vokabulars zugeordnet wurde kann es interpretiert<br />

werden. Bei einer Diktieranwendung erfolgt nun eine Textausgabe des Ergebnisses, bei einem Steuerungssystem<br />

würde der entsprechende Menüpunkt aufgerufen oder eine Aktion ausgeführt. Bei einer<br />

weitaus komplexeren Interaktion könnte auch die gesamte Eingabe analysiert und nach Signalwörtern<br />

und ihren Zusammenhängen durchsucht werden um darauf basierend zu reagieren. Im konkreten Fall<br />

könnte dies bedeuten, dass die Aussage: ’Den roten Ball zu der Kiste legen!’ in einer komplexen Szene<br />

dazu führt, dass ein rotes kugelförmiges Objekt gesucht wird und in die Nähe eines Quaders plaziert<br />

wird oder aber dass in einer Rückmeldung nachgefragt wird, welches der roten kugelförmigen Objekte<br />

gemeint ist.


4. ERHÄLTLICHE PROGRAMME 23<br />

4 Erhältliche Programme<br />

Zur Spracheingabe und Spracherkennung sind einige Programme erhältlich. In Tabelle 4.1 werden frei<br />

verfügbaren Programme aufgelistet, Tabelle 4.2 gibt einen kurzen Überblick über kommerziell erhältliche<br />

Software.<br />

Software Hersteller Grundlage Betriebssystem Plattform<br />

Microsoft Agent Microsoft Microsoft Speech API Windows PC<br />

CVoiceControl Daniel Kiecza - Linux PC<br />

XVoice David Z. Creemer IBMViaVoice Linux PC<br />

Tom Doris<br />

Brian Craft<br />

Tabelle 4.1: Frei verfügbare Spracheingabesoftware<br />

Software Hersteller Betriebssystem Plattform<br />

Dragon Naturally Speaking Nuance Win PC<br />

iListen MacSpeech Inc OS X Mac<br />

Via Voice IBM Win PC<br />

Voice*It VoiceIt Technologies - PC, PDAMobil<br />

Tabelle 4.2: Kommerzielle Spracheingabesoftware<br />

An dieser Stelle wird kurz auf die verschiedenen Produkte eingegangen. Was die jeweilige Software kann<br />

entspricht dabei den Herstellerangaben.<br />

4.1 freie Anwendungen<br />

4.1.1 Microsoft Agent<br />

Der Microsoft Agent ist eine Software Technologie, die es Entwicklern ermöglicht Spracheingabe, Sprachsteuerung<br />

und Text to Speech (TTS) in Form verschiedener animierter Charaktere, in ihre Anwendungen


4. ERHÄLTLICHE PROGRAMME 24<br />

zu integrieren. Microsoft bietet vier Standardcharaktere an. Man hat allerdings zusätzlich die Möglichkeit,<br />

eigene zu erstellen oder weitere Charaktere von Fremdanbietern zu erhalten. Die Basis für den<br />

Microsoft Agent ist die Microsoft Speech API 4.0. Sie muss in jedem Fall installiert werden um, mit<br />

dem Agent zu arbeiten. Wird der Agent in einem Programm aktiv, führt die vom Entwickler definierten<br />

Aktionen aus. Zum Beispiel kann er dem Anwender mit Hilfe der verschiedenen TTS Engines Hinweisen<br />

geben oder auf Spracheingaben reagieren. Für TTS werden unter anderen Engines für U.S. Englisch,<br />

britisches Englisch, Französisch, Deutsch und Italienisch geboten. Die Spracheingabe wird jedoch nur<br />

für U.S. Englisch unterstützt. Alle Downloads finden sich unter [13], zusätzliche TTS Fremdanbieter<br />

unter [12]. Weiter Informationen zur genaueren Funktionsweise der SAPI sind in Kapitel 5.2 zu finden.<br />

4.1.2 CVoiceControl<br />

CVoiceControl ist ein Spracherkennungssystem von Daniel Kiecza. Es ermöglicht dem Linuxanwender<br />

Sprachbefehle mit Unix Kommandos zu verknüpfen. Es erkennt automatisch Spracheingaben mittels<br />

Mikrofon. Falls diese Eingaben korrekt erkannt werden, führt CVoiceControl die zugehörigen Kommandos<br />

aus. Damit die Eingabe erkannt werden kann muss mindestens ein Sprechermodell angelegt werden.<br />

Einen entsprechenden Editor gehört schon zu CVoiceControl. In einem Sprechermodell befindet sich<br />

je Sprachkommando eine Beschreibung dessen, was gesagt wird, das auszuführende Kommando selbst<br />

und Vergleichswerte für den Erkenner. Bei den Vergleichswerten handelt es sich um Sprachaufnahmen<br />

des Kommandos, die man selbst anfertigen muss. Da direkt die Ähnlichkeit zwischen dem eintreffenden<br />

Sprachsignal und den Vergleichswerten berechnet wird ist es vorteilhaft mehrere Vergleichswerte pro<br />

Kommando aufzunehmen. Die vorgegebene Mindestzahl beträgt dabei vier. Da der Erkenner die Amplitude<br />

des eintreffenden Sprachsignals nicht anpasst, muss man bei der Spracheingabe darauf achten, dass<br />

die Entfernung zwischen Mund und Mikrofon sowie die Aussprachelautstärke konstant bleiben. Indem<br />

man Vergleichswerte nicht nur in verschiedenen Betonungen sondern auch in verschiedenen Lautstärken<br />

aufnimmt, kann hier möglicherweise Abhilfe geschaffen werden. Leider ist dazu nichts im Online<br />

Handbuch zu finden. [10] CVoiceControl bietet damit einen sprecherabhängigen Spracherkenner. Das<br />

Training des Erkenners wird hier durch das anlegen der Vergleichswerte erledigt. Es ist nur diskrete<br />

Spracheingabe möglich. Dies ist für die Eingabe einzelner Befehlswörter oder Befehlswortgruppen aber<br />

vollkommen ausreichend. Wie in Kapitel 2.2.1 gesagt, sollte das Vokabular des Erkenners so klein wie<br />

möglich gehalten werden, um die Rechenzeit zu sparen und Verwechslungsfehler auszuschließen. Dies<br />

ist in CVoiceControl gegeben, indem man mehrere Sprechermodelle für verschiedene Anwendungen<br />

anlegt und immer nur das benötige Modell lädt.


4. ERHÄLTLICHE PROGRAMME 25<br />

4.1.3 XVoice<br />

XVoice ermöglicht durchgängige Spracheingabe und Sprachsteuerung unter Linux. Um die Spracheingaben<br />

in Text umzuwandeln wird IBMs ViaVoice benötigt. ViaVoice ist allerdings weder gemeinsam<br />

mit XVoice erhältlich, noch kostenlos. [5] Des weiteren wird ViaVoice nicht mehr von IBM betreut oder<br />

angeboten. Weitere Informationen zu ViaVoice sind im Abschnitt 4.<strong>2.3</strong> zu finden. In XVoice kann der<br />

Nutzer verschiedene Sprachkommandos mit Aktionen verbinden. Dazu muss er diese Kommandos in Vokabularen<br />

zusammenfassen. Diese wiederum können dann mit unterschiedlich Anwendungen oder Modi<br />

verknüpft angewandt oder aber dauerhaft verwendet werden. In einem Übersichtsfenster zeigt XVoice<br />

die aktiven Vokabulare und die letzten Spracheingaben an. Falls eine Spracheingabe einem Kommando<br />

sehr ähnelte, aber XVoice sich nicht sicher genug ist, wird dies im Übersichtsfenster grau unterlegt angezeigt.<br />

Eine Aktion wird aber nicht ausgeführt. Innerhalb einer Anwendung ist XVoice in einem von vier<br />

Zuständen. Im Kommandomodus wird nur auf Befehle aus dem Vokabular reagiert. Im Diktiermodus<br />

werden nur generelle Kommandos beachtet, ansonsten wird jede Spracheingabe einfach aufgeschrieben.<br />

Im Untätig-Modus werden nur generelle Befehle ausgeführt. Im vierten, dem Diktier- und Kommandomodus<br />

werden beide Modi kombiniert. Um in diesem Modus Kommandos zu erkennen muss vor und<br />

nach jedem Kommando eine Pause gelassen werden.[21] Zusammenfassend kann man sagen, das XVoice<br />

durch die verschiedenen Modi sowohl kontinuierliche wie auch diskrete Spracheingabe unterstützt.<br />

Gleichzeitig kann, durch die Modi einerseits ein möglichst kleines, auf die jeweilige Anwendung abgestimmtes<br />

Vokabular verwendet werden und andererseits mit Hilfe des umfangreiches Vokabulars die<br />

Texteingabe realisiert werden. Die Spracherkennung erfolgt dabei sprecherabhängig. Um bestmögliche<br />

Ergebnisse zu erzielen sollte ViaVoice, auf dem XVoice basiert, vor der Arbeit trainiert werden.<br />

4.2 kommerzielle Anwendungen<br />

4.2.1 Dragon Naturally Speaking<br />

Dragon Naturally Speaking wird von Nuance entwickelt. Es bietet Spracheingabe, Sprachsteuerung<br />

und fließende Sprachausgabe von Texten in einem. Die Spracheingabe bietet die Möglichkeit Texte<br />

auf Deutsch oder Englisch zu diktieren. Dies soll laut Hersteller dreimal schneller als mit der Tastatur<br />

funktionieren. Dabei kann eine Erkennungsrate von bis zu 99Prozent erreicht werden. Der Spracherkenner<br />

muss vor Beginn der Arbeit nicht trainiert werden. Während der Arbeit legt das Programm<br />

allerdings automatisch ein Nutzerprofil an und verfeinert es fortlaufend, um die Fehlerrate zu senken.<br />

Zusätzlich zur Diktierfunktion sollen mit Dragon Naturally Speaking auch die meisten Windows XP<br />

und 2000 Anwendungen und die Maus per Spracheingabe steuerbar sein. Außerdem kann der Nutzer


4. ERHÄLTLICHE PROGRAMME 26<br />

weitere Sprachbefehle selbst erstellen.[14] Die Unterscheidung zwischen Befehl und Diktat soll dabei<br />

automatisch erfolgen.[16] Damit liefert Dragon Naturally Speaking sowohl kontinuierliche Spracheingabe,<br />

mit einem umfassenden Vokabular, für längere Texte, als auch diskrete Spracheingabe für Befehle.<br />

Da während der Arbeit ein Nutzerprofil angelegt wird ist nur sprecherabhängiges Erkennen möglich.<br />

4.2.2 iListen<br />

Hierbei handelt es sich um ein Produkt von MacSpeech. Die aktuelle Version ist 1.8 für Mac OS X.<br />

Zu Beginn der Arbeit mit iListen ist eine kurze Trainingsphase von maximal fünf Minuten nötig. Bei<br />

der Arbeit mit iListen hat der Nutzer schon während des Diktats die Möglichkeit, den Text zu formatieren.<br />

Auch Korrekturen sind per Spracheingabe realisierbar. iListen soll in allen Anwendungen nutzbar<br />

sein. Während der Arbeit passt sich iListen schnell an die Sprechweise des Nutzers an. Dadurch, dass<br />

mehrere Benutzerprofile angelegt werden können, ist iListen von mehreren Personen nutzbar. Man hat<br />

die Möglichkeit Anwendungen wie zum Beispiel den Browser oder den Desktop per Spracheingabe<br />

zu steuern. Außerdem können auch eigene Steuerbefehle erstellt werden. Zusätzlich zu iListen werden<br />

noch Sprachpakete benötigt. Sie werden in Deutsch, Italienisch, Spanisch und Englisch angeboten. Die<br />

Sprachsteuerung soll für nahezu alle Anwendungen möglich sein. Wie bei anderen Programmen, muss<br />

man dafür jedoch viele eigene Sprachbefehle definieren. Allerdings werden von MacSpeech so genannte<br />

ScriptPak’s angeboten, um die grundlegenden Befehle für verschiedenste Anwendungen zu liefern. Solche<br />

Pak’s stehen in Englisch und Italienisch zur Verfügung. Ein großer Nachteil ist, dass alle Teile und<br />

Updates zusätzlich gekauft werden müssen. [11] iListen bietet ein umfangreiches Vokabular für Diktate,<br />

eine kontinuierliche Spracheingabe und verwendet dazu sprecherabhängiges Erkennen.<br />

4.<strong>2.3</strong> ViaVoice<br />

ViaVoice wurde 1997 von IBM veröffentlicht. [6] Im laufe der Jahre wurde es immer mehr verbessert.<br />

2003 hat IBM die Vertriebsrechte für ViaVoice an ScanSoft abgegeben. Im Jahr 2005 wurde ScanSoft von<br />

Nuance übernommen. Seit dem besitzt Nuance auch die Vertriebsrechte an IBM ViaVoice. Die aktuelle<br />

Version ist IBM ViaVoice 10.5. [23] Via Voice bietet wie iListen eine Diktiersoftware für kontinuierliche<br />

Spracheingabe, mit einem umfangreichen Vokabular und die Möglichkeit, das Diktierte per Sprachsteuerung<br />

zu überarbeiten und formatieren. Mit der Pro USB Edition können zusätzlich noch verschiedene<br />

andere Anwendungen gesteuert werden. Auch ViaVoice arbeitet sprecherabhängig. Vor Beginn der Arbeit<br />

ist wieder eine kurze Trainingsphase nötig. Das daraus resultierende Nutzerprofil wird während der<br />

Arbeit weiter angepasst.[15]


4. ERHÄLTLICHE PROGRAMME 27<br />

4.2.4 VoiceIt<br />

Von VoiceIt Technologies kommen verschiedene Programme um Anwendungen per Stimme zu steuern.<br />

In Tabelle 4.3 ist dargestellt auf welchen Betriebssysteme die verschiedenen Produkte von VoiceIt laufen.<br />

Für die mit * gekennzeichnet Betriebssysteme soll die entsprechende Software bald verfügbar sein.<br />

Software<br />

Betriebssystem<br />

VoiceNavIt Windows* Windows Mobile Palm OS Symbian*<br />

VoiceSecureIt Windows* Windows Mobile Palm OS Symbian*<br />

VoicePlayIt<br />

Palm OS<br />

VoiceDailIt Palm OS Symbian*<br />

Tabelle 4.3: Übersicht über VoiceIt Sofware und die unterstützten Betriebssysteme nach [25]<br />

Da alle Programme zur Steuerung oder Sicherung gedacht sind, besitzen sie eingeschränkte Vokabulare.<br />

Die diskreten Spracheingaben werden nur sprecherabhängig erkannt. In einer einleitenden Trainingssitzung<br />

müssen alle Sprachbefehle also zunächst vorgesprochen werden. Bei VoicePlayIt handelt es sich<br />

dabei um vordefinierte Befehle, bei allen anderen können die Spracheingaben sowie die daraus folgenden<br />

Aktionen individuell festgelegt werden. [25]


5. FREI VERFÜGBARE SPRACHERKENNER 28<br />

5 Frei verfügbare Spracherkenner<br />

Im vorherigen Kapitel wurde ein Überblick über schon vorhandene Sprachsteuerungssoftware gegeben.<br />

In diesem Kapitel hingegen werden drei Systeme vorgestellt, die dem Programmierer die Möglichkeit<br />

geben Sprachsteuerung in eigene Anwendungen zu integrieren. Es wird gezeigt, dass diese Systeme sehr<br />

unterschiedliche Eigenschaften besitzen. Eines der Systeme erkennt die deutsche Sprache, wohingegen<br />

die anderen für die englische Sprache entwickelt wurden. Außerdem erkennt eines der Systeme nur<br />

sprecherabhängig, was wiederum mit sprecherunabhängigem Erkennen nur schwer zu vergleichen ist.<br />

5.1 Sphinx-4<br />

5.1.1 Allgemeines<br />

Sphinx-4 wurde von der Sphinx Gruppe an der Carnegie Mellon <strong>Universität</strong>, Mitsubishi Electric Research<br />

Labs, Sun Microsystems Laboratorien und Hewlett Packard entwickelt. Dabei wurden sie von der<br />

<strong>Universität</strong> von Kalifornien in Santa Cruz und dem Massachusetts Institut of Technologie unterstützt.<br />

Bei Sphinx-4 handelt es sich um ein Spracherkennungssystem, das komplett in Java geschrieben wurde.<br />

[4]<br />

5.1.2 Aufbau<br />

Die Abbildung 5.1 zeigt den Aufbau der Architektur von Sphinx-4. Sphinx-4 wurde sehr flexibel und<br />

modular entworfen. Jeder der beschriebenen Teile kann einfach ausgetauscht werden ohne das dafür an<br />

den anderen Systemteilen Veränderungen vorgenommen werden müssen.<br />

Es existieren die drei Hauptmodule Front End, Decoder und Liguist. Das Front End nimmt ein oder<br />

mehrere Eingangssignale und zerlegt diese in eine Folge von Features (Merkmalsvektoren). Der Liguist<br />

erstellt aus dem Language Model, den Ausspracheinformationen aus dem Dictionary und den strukturellen<br />

Informationen aus einem oder mehreren Acoustic Models einen Search Graph. Der Search Manager<br />

arbeitet innerhalb des Decoders. Er nutzt den Search Graph um aus den Features, die er vom Front End<br />

erhält, die Eingabe zu entschlüsseln und das Ergebnis zu generieren. Dabei kann die Anwendung jeder-


5. FREI VERFÜGBARE SPRACHERKENNER 29<br />

Abbildung 5.1: Aufbau von Sphinx-4 nach [26]<br />

zeit Kontrollanweisungen an die verschiedenen Module senden und somit auf den Erkennungsprozess<br />

Einfluss nehmen. Sphinx-4 besteht aus vielen einstellbaren Teilen. Um diese Einstellungen vor zu nehmen<br />

wird der Configuration Manager genutzt. Außerdem können mit seiner Hilfe, Module dynamisch<br />

während der Laufzeit geladen oder verändert werden. Zusätzlich werden dem Nutzer viele Werkzeuge<br />

geboten. Mit ihrer Unterstützung können verschiedenste Statistiken, wie zum Beispiel über die Wortfehlerrate<br />

oder die Speichernutzung erstellt werden.<br />

5.1.3 Funktion<br />

Sobald der Erkenner gestartet wird, richtet er das Front End, den Decoder und den Linguist ein. Dabei<br />

werden die Spezifikationen des Nutzers beachtet. Diese Komponenten wiederum legen ihre eigenen<br />

Unterkomponenten an. Der Liguist lädt das Acoustic Model, das Dictionary und das Language Model.<br />

Aus diesen Teilen wird danach ein passender Search Graph konstruiert. Der Decoder erstellt den Search<br />

Manager, der wiederum den Scorer, den Pruner und die Active List anlegt.<br />

Die meisten dieser Komponenten sind Java Interfaces. Für sie existieren verschiedene Implementationen.<br />

Welche Implementation tatsächlich genutzt wird legt der Nutzer in einer Konfigurationsdatei fest. Sie<br />

basiert auf XML und wird vom Configuration Manager geladen. In ihr können auch Eigenschaften wie<br />

zum Beispiel die Sample Rate der eintreffenden Sprachdaten festgelegt werden.<br />

Um ein Eingabesignal richtig zu erkennen wird der Search Graph genutzt. Innerhalb des Graphen gibt


5. FREI VERFÜGBARE SPRACHERKENNER 30<br />

es verschiedene Wege um zum richtigen Ergebnis zu gelangen. In Sphinx-4 wird ein Token-Algorithmus<br />

implementiert. Jedes mal wenn ein neuer Zustand im Search Graph erreicht wird, wird ein neuer Token<br />

erstellt. Er zeigt auf den vorherigen Token und den nächsten Zustand im Graph. In der Active List werden<br />

alle Pfade durch den Search Graph verfolgt, die im Moment aktiv sind. Dazu wird der letzte Token jedes<br />

Pfads gespeichert.<br />

Die Anwendung möchte nun, dass der Recognizer eine Erkennung durchführt. Dazu fordert der Search<br />

Manager den Scorer auf, jeden Token der Active List mit dem nächsten Feature (Merkmalsvektor), der<br />

vom Front End kommt, auszuwerten. Dabei entsteht eine Auswertung für jeden aktiven Pfad. Mit Hilfe<br />

dieser Bewertung und bestimmten heuristischen Methoden wird der Pruner verschiedene Token verwerfen.<br />

Jeder übrige Pfad wird um den nächsten Zustand erweitert. Für jeden Zustand wird ein neuer Token<br />

erstellt. Dieser Vorgang wird wiederholt, bis keine weiteren Merkmalsvektoren mehr vom Front End eingehen.<br />

Das bedeutet im Normalfall, dass keine weitere Spracheingabe erfolgte. An dieser Stelle werden<br />

alle Pfade, die den Endzustand erreicht haben, verglichen. Der Pfad mit der höchsten Bewertung wird als<br />

Ergebnis an die Anwendung zurück geschickt.[4]<br />

5.1.3.1 Front End<br />

Die Aufgabe des Front End ist es, Eingangssignale in eine Folge von Merkmalen zu zerlegen. Wie in<br />

Abbildung 5.2: Das Sphinx-4 Front End nach [26]<br />

Abbildung 5.2 dargestellt, umfasst das Front End eine oder mehrere parallele Ketten von signalverarbeitenden<br />

Modulen. Den so genannten Data Processors. Dadurch, dass mehrere Ketten unterstützt werden,<br />

können gleichzeitig verschieden Merkmale für ein einzelnes oder verschiedene Eingangssignale berechnet<br />

werden. Jede Ausgabe eines Data Processors kann einem anderen Data Processor wieder als Eingabe<br />

dienen. Dadurch werden beliebig lange Ketten ermöglicht. Der letzte Data Processor jeder Kette ist dafür<br />

verantwortlich, dass aus den verschiedenen Signalparametern ein Datenobjekt, der Merkmalsvektor,<br />

erstellt wird. Dieser kann dann vom Decoder weiter verarbeitet werden. [26]


5. FREI VERFÜGBARE SPRACHERKENNER 31<br />

5.1.3.2 Liguist<br />

Der Liguist erstellt den Search Graph. Dieser wird während der Suche vom Decoder genutzt. Natürlich<br />

ist auch der Linguist austauschbar und lässt sich dynamisch konfigurieren. Um den Search Graph<br />

zu erstellen nutzt der Linguist typischerweise die Sprachstruktur, die im Language Model angegeben<br />

wird und die topologische Struktur des Acoustic Model. Zusätzlich wird noch ein Dictionary oder Aussprachelexikon<br />

genutzt. Es bildet Worte aus dem Language Model auf Sequenzen von Elementen des<br />

Acoustic Model ab. Im Folgenden werden die drei Unterkomponenten des Liguist noch einmal näher<br />

beschrieben.[26]<br />

Language Model<br />

Das Language Model des Linguist bietet eine ’word-level’ Sprachstruktur. Das heißt, es arbeitet auf der<br />

Basis von ganzen Wörtern. Diese kann von einer Vielzahl auswechselbarer Implementationen dargestellt<br />

werden. Die Implementationen fallen in eine von zwei Kategorien, eine graphgesteuerte Grammatik<br />

oder ein stochastisches N-Gram Modell. Die Graphgesteuerte Grammatik repräsentiert einen gerichteten<br />

’Wort-Graphen’. Dabei steht jeder Knoten für ein Wort und jede Kante für die Wahrscheinlichkeit, dass<br />

dieser Übergang statt findet. Das stochastische N-Gram Model gibt an, wie wahrscheinlich ein Wort<br />

folgt, wenn die vorherigen n-1 Wörter beobachtet wurden. [26]<br />

Dictionary<br />

Das Dictionary liefert die Aussprache für Wörter die im Language Model vertreten sind. Die Aussprache<br />

teilt Wörter in Folgen kleinerer ’unter Worteinheiten’ auf, die im Acoustic Model aufgeführt sind.<br />

Das Dictionary ermöglicht es auch, die einzelnen Wörter zu klassifizieren. Dabei ist es Wörtern erlaubt<br />

zu mehrere Klassen zu gehören. Je nach Bedarf kann das Dictionary unterschiedlich optimiert und implementiert<br />

werden. Eine Möglichkeit währe zum Beispiel, das gesamte Vokabular zu laden, sobald das<br />

System initialisiert wird. Eine andere Möglichkeit besteht darin die Aussprachen immer erst bei Bedarf<br />

zu liefern. [26]<br />

Acoustic Model<br />

Das Acoustic Model liefert die Abbildung einer Spracheinheit auf ein Hidden Markov Modell (HMM).<br />

Dieses HMM kann mit Merkmalsvektoren verglichen werden, die vom Front End kommen. Dabei werden<br />

auch Kontextinformationen wie die Wortposition einbezogen. Im Fall von sogenannten Triphonen<br />

bedeutet Kontext, die einzelnen Phoneme links und rechts von einem betrachteten Phonem. Die Wortposition<br />

würde dann aussagen, ob das Triphon am Anfang, in der Mitte oder am Ende eines Wortes<br />

steht oder selbst ein Wort ist. Welche Kontextinformationen genau in Betracht gezogen werden, wird<br />

von Sphinx-4 nicht vorgegeben. Normalerweise teilt der Linguist jedes Wort des aktiven Vokabulars in<br />

Folgen kontextabhängiger Untereinheiten. Diese Einheiten und ihr Kontext werden dann an das Acou-


5. FREI VERFÜGBARE SPRACHERKENNER 32<br />

stic Model weiter gegeben. Daraus entstehen die HMM-Graphen der jeweiligen Einheiten. Danach wird<br />

aus diesen HMM-Graph, in Verbindung mit dem Language Model, der Search Graph konstruiert. Der<br />

Sphinx-4 HMM-Graph ist einfach ein gerichteter Objektgraph ohne feste Strukturen. Jeder Knoten korrespondiert<br />

mit einem HMM-Zustand und jede Kante gibt die Übergangswahrscheinlichkeit an. Dadurch<br />

können ganz einfach verschiedenste HMM’s mit unterschiedlichen Topologien geliefert werden. Es gibt<br />

keine Einschränkung bei der Anzahl der Zustände, der Anzahl der Übergänge oder ihrer Richtung. Ein<br />

HMM-Zustand kann die Bewertung für ein beobachtetes Feature erstellen. Was dabei genau berechnet<br />

wird, steht im HMM-Zustand selbst und wird vor dem System versteckt. Wie alles andere, kann auch<br />

das Acoustic Model an die Bedürfnisse des Nutzers angepasst werden. [26]<br />

Search Graph<br />

Der Linguist kann auf viele verschiedene Arten implementiert werden und die Topologien des von ihm<br />

generierten Suchraums variieren sehr. Trotzdem wird der Suchraum immer als Search Graph dargestellt.<br />

Der in Abbildung 5.3 gezeigte Search Graph stellt die primäre Datenstruktur dar, die für den Erkennungsprozess<br />

genutzt wird. In diesem gerichteten Graph steht jeder Knoten für einen festen oder fließenden<br />

Abbildung 5.3: Der Sphinx-4 Search Graph für ’one’ und ’two’ nach [26]<br />

Zustand. Fließende Zustände werden mit eintreffenden Features verglichen. Feste Zustände repräsentieren<br />

sprachliche Konstrukte auf einer höheren Ebene, wie Wörter und Phoneme. Diese werden nicht direkt<br />

mit eintreffenden Features verglichen. Die Kanten repräsentieren die möglichen Zustandsübergänge und<br />

ihre Wahrscheinlichkeit. Der Search Graph kann auf verschiedene Arten implementiert werden. Je nachdem<br />

wie er implementiert wurde, beeinflusst dies die Erkennungsgenauigkeit, die Geschwindigkeit und<br />

den Speicherbedarf. [26]


5. FREI VERFÜGBARE SPRACHERKENNER 33<br />

Implementation<br />

Es gibt verschiedene Implementationen für den Linguist.<br />

• Der Flat Liguist passt besonders bei Erkennungsaufgaben mit kontextfreien Grammatiken, finitestate<br />

Grammatiken, finite-state Wandlern und kleinen N-Gram Sprachmodellen. Alle diese externen<br />

Sprachmodelle werden in interne Grammatikstrukturen umgewandelt. Dabei entsteht ein<br />

gerichteter Wortgraph. Jeder Konten steht für ein Wort, jede Kante für die Übergangswahrscheinlichkeit.<br />

Aus der internen Grammatikstruktur wird direkt der Search Graph erzeugt und vollständig<br />

in den Speicher geladen. Dadurch ist der Flat Linguist zwar sehr schnell, hat aber Probleme bei<br />

Grammatiken mit hohem Verzweigungsgrad.[26]<br />

• Der Dynamic Flat Linguist ist dem Flat Linguist sehr ähnlich und damit auch für ähnliche Aufgaben<br />

geeignet. Der Hauptunterschied ist dabei, dass der Search Graph, je nach Bedarf, dynamisch<br />

konstruiert wird. Dadurch ist es zwar möglich mit weit komplexeren Grammatiken umzugehen,<br />

gleichzeitig wird aber die Erkennungsgeschwindigkeit reduziert.[26]<br />

• Der Lex Tree Linguist ist passend für alle Erkennungsaufgaben die große Vokabulare und N-Gram<br />

Sprachmodelle nutzen. Die Wörter werden in sogenannten Lex Trees organisiert. Dabei handelt<br />

es sich um eine kompakte Methode große Vokabulare darzustellen. Aus diesen Lex Trees werden<br />

dynamische ’Suchzustände’ generiert. So können sehr große Vokabulare bei nur mäßigem Speicheraufwand<br />

genutzt werden.[26]<br />

5.1.3.3 Decoder<br />

Die Hauptaufgabe des Decoders besteht darin, die Features, die vom Front End kommen, mit dem Search<br />

Graph des Linguist zu verknüpfen. Daraus generiert er dann Annahmen über das Ergebnis. Der Decoder<br />

umfasst einen austauschbaren Search Manager und anderen Code, der dabei hilft die Arbeit für die Anwendung<br />

zu vereinfachen. Der interessanteste Teil des Decoders ist der Search Manager. Der Decoder<br />

sendet ihm einfach die Anweisung, eine Anzahl von Features zu erkennen. In jedem Schritt des Erkennungsprozesses<br />

generiert der Search Manager ein Ergebnisobjekt. Es beinhaltet alle Pfade die einen<br />

finalen Zustand erreicht haben. Um das Ergebnis zu verarbeiten bietet Sphinx-4 Utilities. Mit ihrer Hilfe<br />

können Konfidenzmaße für die einzelnen Ergebnisse berechnet werden. Dabei wird der Anwendung die<br />

Möglichkeit gegeben, am Erkennungsprozess teil zu haben.<br />

Der Search Manager wird nicht auf eine bestimmte Implementation beschränkt. Jeder Search Manager<br />

nutzt einen Token-Algorithmus. Ein Sphinx-4 Token ist ein Objekt das mit einen Zustand innerhalb des<br />

Erkennungsprozesses in Zusammenhang steht. Es beinhaltet die gesamte akustische und sprachliche Be-


5. FREI VERFÜGBARE SPRACHERKENNER 34<br />

wertung eines Pfades an einem bestimmten Punkt innerhalb des Search Graph, eine Referenz auf den<br />

aktuellen Zustand, eine Referenz auf das eingegebene Merkmal und andere nützliche Informationen.<br />

Durch den Zustand kann der Search Manager einen Token mit seinem dazugehörigen Zustandsverlauf,<br />

den kontextabhängigen phonetischen Einheiten, Aussprachen, Wörtern und Grammatikzuständen in Verbindung<br />

bringen. Jede Teilannahme endet an einem aktiven Token.<br />

Sphinx-4 bietet ein sub-framework das Search Manager unterstützt die aus Active List, Pruner und Scorer<br />

bestehen. Die Active List wird aus allen, im Moment aktiven Token generiert. Dabei wird die Anzahl<br />

der aktiven Token reduziert, indem der Pruner Token löscht, die sich in einem Endzustand befinden,<br />

obwohl noch weitere Merkmalsvektoren eintreffen. Der Search Manager kommuniziert auch mit dem<br />

Scorer. Wenn eine Bewertung vom Scorer angefordert wird, bekommt dieser Zugriff auf den aktuellen<br />

Merkmalsvektor und führt darauf Berechnungen aus. [26]<br />

5.2 Microsoft Speech API<br />

5.2.1 Allgemeines<br />

Die Speech API wurde von Microsoft entwickelt um Spracherkennung und Sprachsynthese in Windows<br />

Anwendungen nutzbar zu machen. Alle Versionen wurden so entworfen, dass Software Entwickler nach<br />

belieben Anwendungen dafür schreiben können. Dazu wird ein standardisiertes Interfaces genutzt, auf<br />

das mit vielen verschiedenen Programmiersprachen zugegriffen werden kann. Außerdem können Fremdfirmen<br />

ihre eigenen Spracherkenner und TTS Engines erstellen oder existierende anpassen, um mit der<br />

SAPI zu arbeiten. Solange diese Engines konform zu den von Microsoft unterstützten sind, können sie<br />

auch an deren Stelle treten. Die Speech API ist frei weitergebbar und kann mit jeder Windows Anwendung<br />

vergeben werden, die Sprachtechnologien nutzen will. [24]<br />

Hier ein kurzer Überblick über Anwendungen, die die SAPI nutzen:<br />

• Microsoft Narrator in Windows 2000 und höher<br />

• Microsoft Office XP<br />

• Microsoft Windows XP für Tablet PC<br />

• Microsoft Agent<br />

• Microsoft Speech Server<br />

• Microsoft Voice Command<br />

• Microsoft Plus! Voice Command für den Windows Media Player


5. FREI VERFÜGBARE SPRACHERKENNER 35<br />

• Bonzi Buddy<br />

• Dragon Naturally Speaking<br />

• Adobe Reader<br />

[24]<br />

5.2.2 Aufbau<br />

Die SAPI verfügt über Spracherkennung und Sprachsynthese. Im Rahmen dieser Arbeit soll nur auf die<br />

Spracherkennung eingegangen werden. Die Abbildung 5.4 zeigt den Aufbau des Spracherkenners der<br />

Speech API.<br />

Abbildung 5.4: Aufbau des Speech API Spracherkenners nach [19]<br />

5.<strong>2.3</strong> Funktion<br />

Die Spracheingabe des Nutzers wird zunächst digitalisiert. Diese Audiodaten werden dann im Frequenzanalysemodul<br />

in ein passenderes Format umgewandelt. Dies beinhaltet einen Großteil der Signalverarbeitung.<br />

Die größte Herausforderung besteht darin, die nützlichen Informationen aus dem Audiosignal<br />

zu extrahieren. Als nächstes werden die umgewandelten Daten durch das Phonemerkennungsmodul in<br />

Phoneme zerlegt. Dazu durchsucht das Modul eine ’Sound to Phonem’ Datenbank nach einem Phonem,<br />

das am ehesten dem Eingegebenen entspricht. Jeder Datenbankeintrag beinhaltet ein Template. Es beschreibt<br />

wie dieses Phonem klingt. Da das Vergleichen vieler Phoneme sehr lange dauern kann, gibt es<br />

das Phonemvorhersagemodul. Es reduziert die Anzahl der möglichen folgenden Phoneme in Bezug auf


5. FREI VERFÜGBARE SPRACHERKENNER 36<br />

den vorhandenen Kontext. So gibt es zum Beispiel Phoneme die nur sehr selten an Wortanfängen stehen<br />

oder Phoneme die nie oder nur selten aufeinander folgen. Trotz dieser Verbesserung dauert die Spracherkennung<br />

noch zu lange. Um die Liste der möglichen Phonemkandidaten weiter zu verkleinern gibt es<br />

zusätzlich die Wortvorhersagedatenbank. Mit ihrer Hilfe werden Phoneme eliminiert, die keine gültigen<br />

Wörter ergeben. Indem man das Vokabular zusätzlich noch auf die Wörter beschränkt, die man wirklich<br />

benötigt, kann man die Erkennungsgeschwindigkeit weiter erhöhen. Sobald Phoneme erkannt sind,<br />

werden sie in Wörter geparst, in Text Strings umgewandelt und an die Anwendung weiter gegeben.[19]<br />

5.3 jlab Speech Server<br />

5.3.1 Allgemeines<br />

Der jlab Speech Server wurde im Jahre 2003 am Institut für Akustik und Sprachkommunikation (IAS)<br />

der TU <strong>Dresden</strong> entwickelt und seit dem immer weiter verbessert. Obwohl jlab unter frei verfügbare<br />

Spracherkenner aufgeführt ist, darf er nur mit Genehmigung des IAS genutzt werden und ist nur dort erhältlich.<br />

Der Erkenner arbeitet ausschließlich auf deutsch. Die Erkennung läuft sprecherunabhängig ab,<br />

wodurch ein zeitraubendes Eingangstraining für den Nutzer entfällt. Dadurch ist der jlab Speech Server<br />

ist immer sofort einsetzbar. Um die Erkennungsrate zu verbessern, sollten Wörterbücher mit den Sprachkommandos<br />

so klein wie möglich gehalten werden, so dass immer nur das minimal nötige Vokabular<br />

geladen ist. Damit keine Verzögerungen auftreten ermöglicht der jlab Speech Server einen schnellen<br />

Wechsel zwischen den Wörterbüchern.<br />

Auf Basis des jlab Speech Servers wurden unter anderem schon die Diplomarbeiten ’Sprachsteuerung<br />

eines Computerspiels - Untersuchungen zur Leistungsfähigkeit und Ergonomie’ [20] und ’Konzeption,<br />

Realisierung und Evaluation einer multimodalen Benutzungsoberfläche für PDA-basierte Software’ [22]<br />

verfasst, sowie eine Web-basierte Lernumgebung entwickelt. [27]<br />

5.3.2 Aufbau<br />

Der Grobaufbau des jlab Speech Server wird in Abbildung 5.5 gezeigt. Er kümmert sich um das Sitzungs-<br />

, Netzwerk- und Sicherheitsmanagement und bietet Dienste zur Sprachsynthese, Sprechererkennung und<br />

Spracherkennung. Im Folgenden wird es aber nur um die Spracherkennung gehen. Zum Speech Server<br />

gehört natürlich noch ein Client, der je nach Anwendung erstellt werden muss. Er ist dafür zuständig,<br />

beim Server eine neue Sitzung zu registrieren und das genutzte Vokabular, sowie alle Spracheingaben an<br />

den Server zu übermitteln. Außerdem muss er noch auf die Erkennungsergebnisse reagieren. [27]


5. FREI VERFÜGBARE SPRACHERKENNER 37<br />

Abbildung 5.5: Die jlab Speech Server Architektur nach [27]<br />

5.3.3 Funktion<br />

Bevor mit der Spracheingabe begonnen werden kann, muss der Client dem Server ein Vokabular übergeben.<br />

Darin finden sich die zu erkennenden Befehle und verschiedene Rückweisungswerte. Genauere<br />

Informationen zum Vokabular finden sich in Abschnitt 5.3.4. Aus dem Vokabular erstellt Server nun ein<br />

Erkennungsnetzwerk. Außerdem steht dem Erkenner das akustische Model der Eingabesprache zur Verfügung.<br />

Um nun eine Eingabe zu erkennen wird das Sprachsignal in einem ersten Schritt, durch verschiedene<br />

Filter analysiert. Dadurch entsteht eine Folge von Merkmalsvektoren, die das Signal beschreiben.<br />

Mit Hilfe des akustischen Models wird aus der Vektorfolge eine Netzwerk aus möglichen Phonemfolgen<br />

erstellt. Aus diesem Netzwerk wiederum, werden unter Zuhilfenahme des Erkennungsnetzwerks die<br />

Erkennungsergebnisse generiert. Außerdem werden Vertraulichkeitswerte berechnet, die angeben wie<br />

sicher sich der Erkenner bei den einzelnen Ergebnissen war. In einem letzten Schritt werden all diese<br />

Ergebnisse bezüglich ihres Vertraulichkeitswertes und der im Vokabular angegeben Rückweisungswerte<br />

ausgewertet. Am Ende wurden entweder alle Ergebnisse verworfen oder das endgültige Ergebnis an den<br />

Client gesandt. [27]<br />

5.3.4 Vokabular<br />

Vokabulare in jlab werden in einfachen txt-Dateien angegeben die je nach Bedarf in den Erkenner geladen<br />

werden. Ein Vokabular besteht dabei aus mehreren Befehlszeilen. Jede Zeile enthält an erster Stelle<br />

die orthographische Beschreibung des Befehls. Dieser Wert wird, neben verschiedenen statistischen Ergebnissen,<br />

vom Erkenner zurück geliefert. Er kann sich auch in mehreren Zeilen wiederholen, was als<br />

verschiedene Aussprachevarianten ein und des selben Befehls interpretiert wird. An zweiter Stelle wird


5. FREI VERFÜGBARE SPRACHERKENNER 38<br />

Abbildung 5.6: Vereinfachtes Ablaufschema nach [27]<br />

der Befehl oder die Befehlswortgruppe in Phonemschrift angegeben. Die entsprechende Übersetzungstabelle<br />

ist im Glossar zu finden. Das Übersetzen in Phonemschrift ist für ungeübte Personen jedoch recht<br />

schwierig und bedarf daher einiger Übung. Danach folgt das Wortgewicht, an dritter Stelle. Es ist optional<br />

und kann Werte von 0 bis 100 annehmen. Das Wortgewicht wird genutzt, wenn für einen tatsächlich<br />

eingegebenen Befehl mehrere Erkennungsergebnisse möglich währen. Das Ergebnis mit dem höchsten<br />

Wortgewicht wird zurückgegeben. Auch die Werte an den Stellen vier und fünf sind optional. Die hier<br />

angegebenen Wert müssen von einem möglichen Erkennungsergebnis unterboten werten, damit es akzeptiert<br />

wird. Für gute Ergebnisse sollte der vierte Wert (NAD) maximal 0.05 und der fünfte Wert (NED)<br />

maximal 0.5 annehmen. Genauere Angaben zu NAD und NED sind im Glossar zu finden. Abbildung 5.7<br />

zeigt den Aufbau eines solchen Vokabulars für jlab.<br />

5.3.5 Test<br />

In Kapitel 6 wird versucht, allen drei Erkenner mit Hilfe eines einheitlichen Tests zu vergleichen, soweit<br />

das möglich ist. In diesem Abschnitt hingegen wird ein speziell auf jlab zugeschnittener Test durchgeführt.<br />

Dazu wurde ein Vokabular aus 160 Befehlen zusammengestellt. Dieses Gesamtvokabular besteht<br />

aus 80 Befehlen die zur Steuerung der Benutzeroberfläche von Windows genutzt werden könnten und jeweils<br />

40 Befehlen mit denen ein Spiel kontrolliert oder ein Textverarbeitungsprogramm bedient werden<br />

könnte. Um den Erkenner dauerhaft unter gleichen Bedingungen testen zu können wurde eine Sprachbibliothek<br />

aufgenommen. Sie beinhaltet alle 160 Befehle jeweils ein mal von einem weiblichen und


5. FREI VERFÜGBARE SPRACHERKENNER 39<br />

Abbildung 5.7: Aufbau eines jlab Vokabulars<br />

männlichen Sprecher aufgenommen. Getestet wurde die Erkennungsrate und -geschwindigkeit. In den<br />

Abbildungen 5.8 und 5.9 sind die Ergebnisse für verschiedene akustische Modelle, die jlab unterstützt,<br />

zu sehen.<br />

Abbildung 5.8: Worterkennungsrate<br />

Aus den Ergebnissen geht hervor, dass jlab mit dem akustischen Modell 1_3_19 eine Worterkennungsrate<br />

von über 98Prozent erreicht. Dies entspricht einem sehr guten Ergebnis. Der zu diesem Wert gehörige<br />

Echtzeitfaktor von etwa 1,1 ist für kurze Befehlswörter geeignet. Bei längeren Befehlswortgruppen<br />

könnte es zu erkennbaren Verzögerungen kommen.


5. FREI VERFÜGBARE SPRACHERKENNER 40<br />

Abbildung 5.9: Der Echtzeitfaktor, bezogen auf die Dauer des Eingabesignals


6. TESTS 41<br />

6 Tests<br />

Alle drei Systeme in einem umfassenden Test zu vergleichen ist aufgrund ihrer gravierenden Unterschiede<br />

nicht einfach möglich. Normalerweise müsste man allen drei Erkennern das gleiche Vokabular<br />

vorgeben und sie mit den gleichen Sprachdaten testen. Ein Problem hierbei ist, dass nicht alle drei die<br />

selbe Sprache unterstützen. Durch die großen Unterschiede zwischen verschiedenen Sprachen und ihrer<br />

Repräsentation in den Spracherkennern ist ein einheitliches Vokabular nicht möglich. Auch die Tatsache<br />

das zwei der Systeme nur einzelne Befehlswörter oder Befehlswortgruppen erkennen und eines<br />

auch kontinuierliche Sprache unterstützt erschwert einen gerechten Vergleich. Kontinuierliche Sprache<br />

ist weitaus schwieriger als diskrete Spracheingabe zu erkennen. Zu guter Letzt ist eines der Systeme<br />

sprecherabhängig, was ihm einen Vorteil gegenüber den anderen Systemen verschafft. Trotz dieser Unterschiede<br />

werden hier einige Tests vorgenommen. Mit Hilfe der Testergebnisse sollen zunächst einige<br />

Vorteile und Nachteile der drei Systeme herausgefunden werden. Am Ende sollen, wo dies möglich ist,<br />

auch Vergleiche zwischen den einzelnen Systemen gezogen werden.<br />

6.1 Worterkennungsrate für Sprachsteuerung<br />

Die Worterkennungsrate für jedes System wird mit Hilfe einer der zugehörigen Beispielanwendungen<br />

getestet. Jede Eingabe wird dazu fünf mal wiederholt um die verschiedenen Aussprachegeschwindigkeiten<br />

und Betonungen mit in den Test einfließen zu lassen. An dieser Stelle noch der Hinweis, dass es<br />

sich in diesem Abschnitt eigentlich immer um Befehlswortgruppen und nicht um einzelne Befehlswörter<br />

handelt. Trotzdem wird weiterhin von Worterkennungsrate gesprochen und jede Befehlswortgruppe als<br />

ein einzelnes Wort angesehen.<br />

6.1.1 Sphinx<br />

Um Sphinx zu testen wird die mitgelieferte Sphinx-4 Dialog Demo genutzt. Es handelt sich hierbei um<br />

eine Menüsteuerung. Anstelle eines großen Gesamtvokabulars gehört zu jedem Menüpunkt ein einzelnes<br />

Vokabular. In Tabelle 6.1 ist dargestellt wie viele Einträge zu dem jeweiligen Menüpunkt gehören und


6. TESTS 42<br />

wie hoch die Worterkennungsrate in den einzelnen Menüs ist. Jeder Befehl wurde dazu fünf mal wiederholt.<br />

Außerdem wurden nur ein Teil der möglichen Menüpunkte ausgewählt, die geeignet sind, einen<br />

Überblick zu geben welche Erkennungsraten bei welcher Vokabulargröße zu erwarten sind. Natürlich<br />

Menüpunkt Anzahl richtig nicht verwechselt Worterkennungsrate<br />

der Befehle erkannt erkannt in Prozent<br />

Musik 31 90 24 40 58,06<br />

Anrufe 24 83 10 27 69,17<br />

Spiele 18 62 13 15 68,89<br />

eMail 13 58 3 4 89,23<br />

Hauptmenü 11 43 4 8 78,18<br />

Tabelle 6.1: Worterkennungsrate einiger Menüs der Sphinx-4 Dialog Demo<br />

sind diese Daten mit Vorsicht zu betrachten. Zunächst ist Sphinx für sprecherunabhängiges Erkenner gedacht.<br />

Darum wäre es von Vorteil gewesen noch die Daten von anderen Sprechern zu haben um objektive<br />

Werte zu erhalten. Außerdem versteht dieser Erkenner nur die englische Sprache. Ein Muttersprachler<br />

hätte somit wahrscheinlich noch eine etwas bessere Worterkennungsrate erzielen können. Des weiteren<br />

schient es, als ob der Erkenner besser damit zurecht kommt, wenn man die Pausen zwischen den<br />

einzelnen Wörtern einer Befehlswortgruppe etwas verlängert.<br />

6.1.2 JLab<br />

Im Kapitel 5.3.5 wurden schon einmal Testdaten von JLab gezeigt. Um einen besseren Vergleich mit<br />

Sphinx zu erreichen wurden im einige zusätzliche Vokabulare erstellt. Diese orientieren sich stark an den<br />

Befehlswörterbüchern der Sphinx-4 Dialog Demo. Der Zweck besteht darin, die Befehle in ihrer Länge,<br />

Anzahl und Ähnlichkeit untereinander, denen des Sphinx Tests anzugleichen. So soll trotz der unterschiedlichen<br />

Sprache ein möglichst guter Vergleich zustande kommen. In Tabelle 6.2 werden die Testergebnisse<br />

dargestellt. Auch in diesem Test wurde jeder Befehl fünf mal eingegeben. Der JLab Speech<br />

Server erreicht in fast allen Menügrößen deutlich bessere Erkennungsraten. Diese Werte sind jedoch<br />

nicht vollständig vergleichbar. Die eigenhändig erstellten Vokabulare für JLab sind nicht optimiert. Das<br />

heißt die Rückweisungsschwelle für die einzelnen Befehle ist so gering, das beinahe jede Eingabe am<br />

Ende auch wirklich als ein Befehl erkannt wird. Aus diesem Grund sind auch nur Verwechslungsfehler<br />

in der Tabelle zu finden. Das ist kein Problem wenn man den Erkenner nur einschaltet wenn man auch<br />

wirklich einen Befehl gibt (siehe Abschnitt <strong>2.3</strong>.1.1 Push to Talk). Es erschwert aber den Vergleich mit<br />

Sphinx, da dort versucht wird wirklich nur auf echte Befehle zu reagieren.


6. TESTS 43<br />

Menüpunkt Anzahl richtig verwechselt Worterkennungsrate<br />

der Befehle erkannt in Prozent<br />

Musik 31 127 28 81,94<br />

Anrufe 24 98 22 81,67<br />

Spiele 18 80 10 88,89<br />

eMail 13 56 9 86,15<br />

Hauptmenü 11 52 3 94,55<br />

Tabelle 6.2: Worterkennungsrate von JLab<br />

6.1.3 SAPI<br />

Um die Microsoft Speech API zu testen wurde die zugehörige Anwendung Dictation Pad genutzt. Sie<br />

ist ursprünglich für kontinuierliche Spracheingabe gedacht und nutzt ein sehr umfangreiches englisches<br />

Grundvokabular. Diese Anwendung wurde gewählt, da man dem Vokabular eigene Einträge hinzufügen<br />

kann. So ist zumindest gewährleistet, dass Testvokabular der Sphinx-4 Dialog Demo eins zu eins<br />

übernommen werden kann. Im ’erweiterten Vokabular’ des Dictation Pads war zu jeder Zeit nur das<br />

Vokabular eines der Menüpunkte aktiv um weiter störende Einflüsse zu vermeiden. Natürlich resultieren<br />

aus dieser Wahl auch Probleme auf die später eingegangen wird. In Tabelle 6.3 werden zunächst<br />

die Testergebnisse gezeigt. Wieder wurde jeder Befehl fünf mal gegeben. Aus den Testergebnissen ist<br />

Menüpunkt Anzahl richtig verwechselt Worterkennungsrate<br />

der Befehle erkannt in Prozent<br />

Musik 31 85 70 54,84<br />

Anrufe 24 107 13 89,17<br />

Spiele 18 86 4 95,56<br />

eMail 13 57 8 87,69<br />

Hauptmenü 11 50 5 90,91<br />

Tabelle 6.3: Worterkennungsrate des Dictation Pad (trainiert)<br />

ersichtlich, dass alle Fehler der SAPI auf Verwechslungen zurück zu führen sind. Die Ursache dafür ist<br />

allerdings nicht, wie bei JLab, eine zu niedrige Rückweisungsschwelle. Das Problem ist hier vielmehr,<br />

dass neben dem extra erstellten Wörterbucheinträgen, während des Tests auch noch alle anderen Wörter<br />

aus dem allumfassenden Sprachvokabular aktiv genutzt wurden. Besonders gravierend war dieser<br />

Einfluss im Untermenü ’Musik’. Durch die besonders langen Befehlswortgruppen kam es hier sehr häu-


6. TESTS 44<br />

fig zu Verwechslungen. In einer Umgebung in der nur das wirklich benötigte Vokabular genutzt wird,<br />

kann dem nach eine bedeutend höhere Worterkennungsrate erreicht werden. Ein weiteres Problem für<br />

den Vergleich besteht darin, dass die SAPI sprecherabhängig arbeitet. In diesem Fall war der Erkenner<br />

durch eine vorab Trainingszeit von insgesamt etwa 60 Minuten besonders auf meine Stimme trainiert<br />

und um einen neuen Vokabulareintrag hinzuzufügen musst dieser ebenfalls noch einmal eingesprochen<br />

werden. Das sollte dem Erkenner normalerweise einen Vorteil verschaffen. Eine interessante Frage besteht<br />

darin, welchen Einfluss die Sprecherabhängigkeit auf die Erkennungsrate hat. Im Folgenden wird<br />

der gesamte Test noch einmal mit einem Sprecher wiederholt, auf den Erkenner vorher nicht trainiert<br />

wurde. Erschwerend kommt hinzu, dass es sich nun um eine Sprecherin handelt, der Erkenner ist jedoch<br />

weiter auf einen männlichen Sprecher eingestellt. Das Ergebnis dieser Testreihe ist in Tabelle 6.4 zu sehen.<br />

Dabei hat der Erkenner in allen Bereichen deutlich schlechter abgeschnitten. Auch bei diesem Test<br />

Menüpunkt Anzahl richtig verwechselt Worterkennungsrate<br />

der Befehle erkannt in Prozent<br />

Musik 31 46 109 29,68<br />

Anrufe 24 37 83 30,83<br />

Spiele 18 71 19 78,89<br />

eMail 13 29 36 44,61<br />

Hauptmenü 11 33 22 60<br />

Tabelle 6.4: Worterkennungsrate des Dictation Pad (untrainiert)<br />

gibt es wieder einen besonders abweichenden Wert. Diesmal ist es die Erkennungsrate für den Menüpunkt<br />

Spiele, die eine deutlich bessere Erkennungsrate als alle anderen aufweist. Trotzdem wäre sie für<br />

einen Einsatz in Anwendungen nicht ausreichend. Aus den Ergebnissen kann man klar ablesen, dass die<br />

Sprecherabhängigkeit einen sehr großen Einfluss auf die Worterkennungsrate hat. Es macht also wenig<br />

Sinn zu versuchen eine Anwendung, die sprecherunabhängig sein soll, mit einen sprecherabhängigen<br />

Erkenner zu erstellen.<br />

6.1.4 Vergleich<br />

Um die verschiedenen Systeme noch einmal direkt gegenüber zu stellen werden in Tabelle 6.5 die einzelnen<br />

Worterkennungsraten und ein Durchschnittswert angegeben. Bei der Dialog Demo kann man gut die<br />

Abhängigkeit von Vokabulargröße und Worterkennungsrate erkennen. Der beste Wert von 89,23Prozent<br />

ist allerdings immernoch zu niedrig. Wenn man selbst eine Anwendung auf der Basis von Sphinx erstellt<br />

kann man daran aber noch Verbesserungen vornehmen. Der JLab Speech Server hingegen hält einen


6. TESTS 45<br />

Menüpunkt Sphinx4 JLAB Microsoft SAPI<br />

Dialog Demo Speech Server Dictation Pad<br />

Musik 58,06 81,94 54,84<br />

Anrufe 69,17 81,67 89,17<br />

Spiele 68,89 88,19 95,56<br />

eMail 89,23 86,15 87,69<br />

Hauptmenü 78,18 94,55 90,91<br />

Durchschnitt 72,71 86,5 83,63<br />

Tabelle 6.5: Worterkennungsraten aller drei Anwendungen in Prozent<br />

relativ konstante Worterkennungsrate über alle Vokabulargrößen. Das zeigt das er auch bei größeren Vokabularen<br />

noch gut funktioniert. Außerdem liefert er im Durchschnitt das beste Ergebnis ab. Für den Test<br />

stand leider nur die Version 1.3.5 des JLab Sprachmodells zur Verfügung. Mit der verbesserten Version<br />

1.3.19 könnte noch einmal eine kleine Verbesserung erreicht werden. Durch eine Optimierung des<br />

Vokabulars kann auch die Häufigkeit von Verwechslungen reduziert und somit die Worterkennungsrate<br />

gesteigert werden. Dies stellt das größte Verbesserungspotenzial dar, da am Testvokabular nur Standardwerte<br />

eingestellt waren. Dictation Pad belegt mit einer durchschnittlichen Worterkennungsrate von<br />

83,63Prozent in diesem Abschnitt zunächst den zweiten Platz. Wenn man die einzelnen Werte betrachtet<br />

fällt allerdings sofort die besonders schlechte Wertung im Menüpunkt Musik auf. In Anbetracht der der<br />

Tatsache, das es bei diesem Menüpunkt um sehr lange Befehlswortgruppen handelte und der Erkenner<br />

mit einem viel größeren Vokabular umgehen musste, besteht jedoch eine besonders hohe Verwechslungsgefahr.<br />

Lässt man diesen Ausreißer einmal außer Betracht erreicht Dictation Pad eine durchschnittliche<br />

Worterkennungsrate von 90,83Prozent. Wenn man eine eigene Anwendung auf Basis des Speech API<br />

erstellt, kann man auch eigene Vokabulare anlegen. Dadurch können Verwechslungsfehler im Vergleich<br />

zum Dictation Pad erheblich reduziert werden.<br />

Die Ergebnisse dieser Tests zeigen, dass man JLAB und SAPI bezüglich der Worterkennungsrate in etwa<br />

gleich stark einordnen kann und ihre Ergebnisse durch angesprochenen Verbesserungen noch ausbauen<br />

kann. Sphinx hingegen erhält eine schlechtere Bewertung. Dabei ist besonders der negative Einfluss der<br />

Vokabulargröße auf die Worterkennungsrate ein Problem.


6. TESTS 46<br />

6.2 Worterkennungsrate für Diktieranwendungen<br />

Für Sphinx und JLab ist an dieser Stelle kein Test möglich, da es sich ausschließlich um diskrete Spracherkenner<br />

handelt. Trotzdem ist dieser Test interessant um die tatsächliche Leistungsfähigkeit der Microsoft<br />

Speech API am Beispiel der Dictation Pad Anwendung besser beurteilen zu können. In diesem<br />

Test werden zwei etwa gleichlange Texte diktiert und die Worterkennungsrate gemessen. Bei dem ersten<br />

Text handelt es sich um einen der Trainingstexte der SAPI, bei dem zweite Text um fiktive Geschichte.<br />

Die Ergebnisse sind in Tabelle 6.6 zu sehen. Das für beide Texte etwa die gleiche Rate gemessen wur-<br />

Text Wortzahl nicht oder Worterkennungsrate<br />

falsch erkannt in Prozent<br />

Aesop’s Fabeln 864 260 69,91<br />

fiktive Geschichte 917 305 66,74<br />

Tabelle 6.6: Ergebnisse für die Diktieranwendung der SAPI<br />

de zeigt, das der Erkenner nach genügend Trainingszeit, bekannte wie unbekannte Texte gleichermaßen<br />

gut erkennt. Leider ist eine Erkennungsrate von maximal siebzig Prozent nicht annähernd ausreichend.<br />

Sicher könnte auch bei diesem Test ein Muttersprachler noch bessere Werte erzielen, aber selbst eine<br />

Worterkennungsrate von 90 oder 95 Prozent ist für eine Diktieranwendung noch zu wenig.


7. AUSWAHL EINES SPRACHERKENNERS 47<br />

7 Auswahl eines Spracherkenners<br />

In diesem Abschnitt werden noch einmal kurz die Vorteile und Nachteile der einzelnen Erkenner angesprochen.<br />

Auf dieser Basis wird einer von ihnen für die Implementation einer vereinfachten Schnittstelle<br />

ausgewählt.<br />

Bei CMU Sphinx handelt es sich um eine Arte Baukasten für Spracherkenner. Der Entwickler erhält<br />

so die Möglichkeit, einen eigenen Spracherkenner nach seinen Bedürfnissen zu erstellen. Dadurch ist<br />

das Ergebnis sehr flexibel in seiner Funktionalität. Man benötigt keine Trainingsphase bevor man beginnen<br />

kann damit zu arbeiten. So ist ein schneller Wechsel zwischen verschiedenen Nutzern und sogar<br />

die gleichzeitige Verwendung durch mehrere Nutzer möglich. Leider handelt es sich bei CMU Sphinx<br />

nicht um einen fertigen Spracherkenner, sondern wie schon erwähnt um eine Art Baukasten. Das heißt,<br />

man müsste den endgültigen Erkenner erst konzipieren und entwickeln, bevor man ihn in irgendeine andere<br />

Anwendung integrieren kann. Ein weiterer Nachteil besteht darin, dass auch bei den vorhandenen<br />

Beispielen die Erkennungsrate nicht besonders gut war.<br />

Die Microsoft Speech API ist schon ein fertiges System. In einer Vielzahl von Beispielanwendungen<br />

wird gezeigt, wie exakt der Erkenner arbeiten kann. Er wird sogar in einer Diktieranwendung genutzt,<br />

die freie Texte erkennt, also mit großen Vokabularen umgehen kann. Natürlich besteht die Möglichkeit in<br />

der eigenen Anwendung auch ein eigenes, kleineres Vokabular zu definieren, wodurch die Erkennungsrate<br />

noch verbessert werden kann. Standardmäßig unterstützt die SAPI 5.1 U.S. Englisch. Außerdem<br />

kann man noch Paket für verschiedene andere Sprachen nachladen. Zusätzlich zu den Beispielanwendungen<br />

bekommt man noch einige Tutorials geboten. In ihnen wird gezeigt, wie man die SAPI in die<br />

eigenen Anwendungen integriert. Der Nachteil der SAPI von Microsoft besteht allerdings darin, dass vor<br />

Beginn der Arbeit eine Trainingsphase für den Erkenner nötig ist. Je nachdem wieviel Zeit man sich dabei<br />

nimmt und wieviele der möglichen Trainingssitzungen man absolviert, wird die Wahrscheinlichkeit<br />

erhöht, dass die erkannten Worte auch die gesprochenen sind. Somit ist es nicht möglich sofort mit der<br />

Arbeit zu beginnen. Dazu kommt noch, dass die SAPI nur für einen Benutzer je Gerät gedacht ist. Es<br />

wird also ein globales Profil angelegt. Dieses Profil wird für jede Anwendung, die mit der SAPI arbeitet<br />

geladen. Mehrere Profile sind nicht möglich. Man kann zwar trotzdem mehrere Nutzer an einem System<br />

arbeiten lassen, aber da sich dabei das Sprecherprofil jedes mal gravierend ändert, ist dann kein optimales


7. AUSWAHL EINES SPRACHERKENNERS 48<br />

Ergebnis möglich.<br />

Auch der jlab SpeechServer des IAS bietet einen fertigen Spracherkenner. Dieser arbeitet auf Kommandozeilenebene<br />

und besitzt schon vordefinierte Schnittstellen. Es gibt eine fertige in JAVA geschriebene<br />

Anwendung, bestehend aus einem dem Server und einer Client-Webseite, auf der der Server getestet<br />

werden kann. Dort können unter anderem Vokabulare geladen werden, man kann eigene Spracheingaben<br />

machen und die eigenen Vokabulare mit Hilfe von Sprachaufnahmen automatisch längeren Tests unterziehen.<br />

Der Speech Server ist allerdings nur auf die deutsche Sprache trainiert. Die Antwortzeiten sind<br />

zwar recht lang, je nachdem, wie gut man das Vokabular eingestellt hat, liefert der SpeechServer aber<br />

gute Erkennungsergebnisse. Darin liegt auch der besondere Vorteil des SpeechServers, da nie eine Trainingsphase<br />

nötig ist. Der Server kann auf Kommandozeilenebene initialisiert werden. Dort muss man<br />

lediglich einen Pfad für die Konfigurationsdatei und eine Session ID angeben. Optional sind auch noch<br />

weitere Einstellungen möglich. Danach kann man mit Hilfe einiger weniger Funktionen neue Vokabulare<br />

laden, Sprachdaten an den Server senden und bekommt die entsprechenden Erkennungsergebnisse<br />

zurück.<br />

Die Ergebnisse werden noch einmal in Tabelle 7.1 dargestellt.<br />

Erkenner CMU Sphinx Microsoft Speech API jlab SpeechServer<br />

bereit zur Nutzung nein ja ja<br />

Sprache englisch versch. Sprachen mögl. deutsch<br />

Spracheingabe diskret diskret diskret<br />

kontinuierlich<br />

Eingangstraining nein ja nein<br />

Mehrbenutzerbetrieb ja nein ja<br />

Erkennungsergebnis mittelmäßig gut gut<br />

(sehr gut mit Training)<br />

Tabelle 7.1: Übersicht über die Eigenschaften von CMU Sphinx, MS SAPI und jlab<br />

Da für Sphinx der eigentliche Erkenner erst erstellt werden muss und die Erkennungsergebnisse in den<br />

Beispielen nicht überragend waren, kommt dieser Erkenner nicht in die engere Wahl für eine Schnittstelle.<br />

Die Entscheidung zwischen der SAPI und jlab fällt hingegen schon schwerer. Jlab bietet zwar etwas bessere<br />

Erkennungsergebnisse, dafür ist das Erstellen des Vokabulars in Phonemschrift besonders schwierig<br />

und die Eingabe auf die deutsch Sprache beschränkt. Durch die höhere Erkennungsgeschwindigkeit und<br />

bessere Dokumentation fällt die Wahl am Ende auf die SAPI von Microsoft. Im folgenden Kapitel wird


7. AUSWAHL EINES SPRACHERKENNERS 49<br />

eine vereinfachte Schnittstelle für die SAPI entwickelt, die der Programmsteuerung dienen soll.


8. ENTWICKLUNG EINER SCHNITTSTELLE AUF BASIS DER MICROSOFT SPEECH API 50<br />

8 Entwicklung einer Schnittstelle auf Basis der<br />

Microsoft Speech API<br />

In den vorangegangenen Kapiteln wurden die drei freien Spracherkenner verglichen und mit diesen Ergebnissen<br />

einer der Erkenner ausgewählt, auf dessen Basis nun eine Schnittstelle erstellt wird. Dieses<br />

Kapitel beginnt mit den Anforderungen, die an diese Schnittstelle gestellt werden. Danach werden einige<br />

Begriffe erklärt und der Aufbau eines Vokabulars beschrieben. Zum Abschluss wird mit Hilfe dieser<br />

Schnittstelle eine Beispielanwendung erstellt und mit ihr einige Tests durchgeführt. um die Schnittstelle<br />

mit den früheren Ergebnissen vergleichen zu können.<br />

8.1 Anforderungen an die Schnittstelle<br />

Um möglichst schnell und ohne großen Einarbeitungsaufwand, Spracherkennung in eine Anwendung<br />

einzubauen, sollte eine vereinfachte Schnittstelle entwickelt werden. Sie sollte ohne komplexe Datentypen<br />

auskommen und alle SAPI spezifischen Abhängigkeiten verdecken. Ausgehend von diesen Anforderungen<br />

sind folgende Funktionalitäten nötig:<br />

1. Starten und Beenden des Spracherkenners<br />

2. Einlesen eines vollständigen Vokabulars<br />

3. Schrittweises Erstellen eines Vokabulars<br />

4. Steuerung des Spracherkenners<br />

5. Spracheingaben verarbeiten<br />

Da die SAPI nicht der einzige frei verfügbare Spracherkenner ist, sollte die Möglichkeit bestehen auch<br />

andere Spracherkenner anzubinden. Aus diesem Grund wurde zusätzlich die abstrakte Klasse speech_input<br />

erstellt. Sie bietet die oben genannten Funktionalitäten ohne auf einen konkreten Spracherkenner einzugehen.<br />

Basierend auf dieser abstrakten Klasse wurde die Klasse microsoft_speech_input erstellt. Sie<br />

stellt die SAPI spezifische Implementierung dar. Eine vollständige Dokumentation dieser Schnittstelle<br />

findet sich im Verzeichnis project/src/doc auf der CD zum Beleg.


8. ENTWICKLUNG EINER SCHNITTSTELLE AUF BASIS DER MICROSOFT SPEECH API 51<br />

8.2 Begriffserklärungen im Zusammenhang mit der Schnittstelle<br />

In diesem Kapitel werden einige Begriffe erklärt, die im Zusammenhang mit der Schnittstelle und ihrer<br />

Implementierung von Bedeutung sind.<br />

8.2.1 Die Grammatik<br />

Die Beschreibung der Befehle und die Zusammenhänge zwischen den Befehlen bilden innerhalb der<br />

SAPI die Grammatik. Während der gesamten Laufzeit einer Anwendung, die diese Schnittstelle nutzt,<br />

kann es nur eine einzige Grammatik geben. Sie beinhaltet alle momentan vorhandenen Regeln sowie alle<br />

ihnen zugeordneten Befehle. Es existieren zwei Wege, eine Grammatik zu erstellen. Bei der ersten Variante<br />

wird die Grammatik Schritt für Schritt aus Regeln und Befehlen aufgebaut. Die Abschnitte ’Regeln<br />

und Menüs’ und ’Der Befehl’ beschrieben das jeweilige Vorgehen genauer. Wurde die Grammatik auf<br />

diese Art geändert, müssen die Änderungen durch Aufrufen der Funktion finalize_grammar festgeschrieben<br />

werden. Die zweite Möglichkeit besteht darin, eine Grammatik vollständig aus einem Vokabular zu<br />

laden. Im Abschnitt ’Das Vokabular’ wird darauf näher eingegangen. Im den Inhalt einer Grammatik<br />

vollständig zu löschen ist die Funktion clear_grammar vorgesehen.<br />

8.2.2 Regeln und Menüs<br />

Der Begriff Regel stammt noch aus der SAPI selbst. Eine Regel beschriebt dort alle Kombinationen von<br />

Spracheingaben, die von der SAPI erkannt werden können. Dabei musste es sich aber nicht zwangsläufig<br />

auch um konkrete Befehle handeln. Für die vereinfachte Schnittstelle wurden diese Möglichkeiten allerdings<br />

weggelassen, so dass eine Regel nur noch Befehle enthält. Aufgrund dieser Einschränkung, und<br />

weil eine Regel im Prinzip ein Menü darstellt, deren Befehle die Menüoptionen sind, wird innerhalb der<br />

Schnittstellenimplementation der Begriff ’menu’ anstelle von ’regel’ oder ’rule’ genutzt. Im Rest dieses<br />

Kapitels werden die Begriffe Regel und Menü analog verwendet und beziehen dabei sich immer auf die<br />

Implementation in der vereinfachten Schnittstelle.<br />

Um der Grammatik ein neues Menü hinzuzufügen wird die Funktion add_menu genutzt. Ihr werden als<br />

Parameter der Index, der initale Status, und der Name des Menüs übergeben. Der Index und der Name<br />

der Regel müssen jeweils eindeutig sein. Sie werden dazu genutzt, einen erkannten Befehl eindeutig zu<br />

identifizieren. Die Funktionen get_menu_index und get_menu_name können dazu genutzt werden, die<br />

entsprechenden Werte für den letzten erkannten Befehl zu ermitteln. Der initiale Status eines Menüs wird<br />

mit true für aktiv und false für inaktiv angegeben. Er sagt aus, ob die Regel direkt nach dem Erstellen<br />

sowie nach jedem weiteren Aufruf der Funktion finalize_grammar aktiv sein soll.


8. ENTWICKLUNG EINER SCHNITTSTELLE AUF BASIS DER MICROSOFT SPEECH API 52<br />

Nur Befehle die zu Regeln gehören deren Status ’aktiv’ ist können erkannt werden. Um ein Regel zu<br />

aktivieren können die Funktion activate_menu_index und activate_menu_name verwendet werden. Es<br />

ist allerdings nicht vorteilhaft immer alle Menüs aktiv zu lassen. Damit man ein Menü also auch wieder<br />

deaktivieren kann stehen die Funktionen deactivate_menu_index und deactivate_menu_name zur Verfügung.<br />

Dadurch wird Wahrscheinlichkeit reduziert, dass Spracheingaben verwechselt werden.<br />

Falls nötig können aus einer Regel auch alle Befehle gelöscht werden indem man erneut die Funktion<br />

add_menu mit dem entsprechenden Index aufruft. Der Name der Regel hat darauf allerdings keinen<br />

Einfluss und ändert sich auch dann nicht, wenn man beim Aufruf der Funktion einen neuen Namen<br />

angibt.<br />

8.<strong>2.3</strong> Der Befehl<br />

Jede Spracheingabe, die erkannt werden kann, wird als Befehl bezeichnet. Der Begriff umfasst dabei<br />

sowohl Befehle die nur aus einem einzigen Wort bestehen als auch Befehlswortgruppen.<br />

Mittels der Funktion add_command wird der Grammatik ein neuer Befehl hinzugefügt. Bei den übergebenen<br />

Parametern handelt es sich um den Menüindex, die Spracheingabe, den Befehlsindex sowie<br />

den Name des Befehls. Der Menüindex gibt an zu welchem Menü der neue Befehl hinzugefügt werden<br />

soll. Der Name und der Index eines Befehls identifizieren ihn innerhalb seines Menüs eindeutig. Die<br />

Spracheingabe gibt an, was gesagt werden muss um den entsprechenden Befehl auszulösen. Natürlich<br />

kann es vorkommen das verschiedene Spracheingaben den selben Befehl auslösen sollen. Zum Beispiel<br />

könnten die Eingaben ’exit program’, ’close program’ und ’end program’ alle die gleiche Wirkung verfolgen.<br />

Um dies zu realisieren muss für jede Spracheingabe erneut die Funktion add_command, mit dem<br />

gleichen Menü- und Befehlsindex aufgerufen werden.<br />

Um heraus zu bekommen welcher Befehl in der letzten Spracheingabe aufgerufen wurde, können die<br />

Funktionen get_menu_name und get_command_index aufgerufen werden. Falls nur eine Regel existieren<br />

sollte ist das ausreichend. Wenn mehrere Regeln existieren und gleichzeitig aktiv sind sollten noch<br />

entweder der Regelname oder der Regelindex abgefragt werden um einen Befehl eindeutig zu identifizieren.<br />

An dieser Stelle soll noch auf eine Besonderheit eingegangen werden. Wie schon zuvor erwähnt können<br />

mehrere Spracheingaben den selben Befehl auslösen. Außerdem wurde gesagt, dass dazu wiederholt<br />

die Funktion add_command mit dem gleichen Menü- und Befehlsindex aufgerufen werden muss. An<br />

dieser Stelle kommt die Frage auf, ob den nicht auch der Name des Befehls gleich lauten muss, da auch<br />

er einen Befehl eindeutig identifiziert. Die Antwort ist allerdings nein. Man kann einem Befehl also


8. ENTWICKLUNG EINER SCHNITTSTELLE AUF BASIS DER MICROSOFT SPEECH API 53<br />

durchaus mehrere Spracheingaben mit unterschiedlichen Befehlsnamen zuordnen. Das heißt, dass der<br />

Befehlsindex einen Befehl innerhalb eines Menüs eindeutig identifiziert und dass der Befehlsname dazu<br />

genutzt werden kann, verschiedene Spracheingaben eines Befehls auseinander zu halten. Im folgenden<br />

Beispiel wir gezeigt wie man sich diese Eigenart der SAPI zu nutze machen kann. Man erstellt eine<br />

Grammatik wie folgt:<br />

add_menu(1, true, ’exit’);<br />

add_command(1, ’exit program’, 0, ’ep’);<br />

add_command(1, ’close window’, 0, ’cw’);<br />

Die Regel ’exit’ ist während der gesamten Laufzeit der Anwendung aktiv. Die zwei Spracheingaben<br />

’exit program’ und ’close window’ führen zum selben Befehlsindex (0) aber zu den unterschiedlichen<br />

Befehlsnamen ’ep’ und ’cw’. In einer fiktiven Anwendung existiert nun ein Hauptfenster und zusätzliche<br />

Fenster abhängig von der momentanen Aufgabe. Befindet sich die Anwendung nun in einem Fenster<br />

für eine der zusätzlichen Aufgaben, wird der Name des Befehls abgefragt. Ist er ’ep’ wird die gesamte<br />

Anwendung geschlossen, wohingegen ’cw’ nur das einzelne Fenster schließt. Sollte sich die Anwendung<br />

allerdings im Hauptfenster befinden wird der Index des Befehls erfragt. Beide Spracheingaben führen<br />

dann dazu, dass die Anwendung beendet wird.<br />

8.2.4 Das Vokabular<br />

Abgesehen von den Funktionen clear_grammar, add_menu, add_rule und finalize_grammar gibt es auch<br />

die Möglichkeit, die gesamte Grammatik in einem Schritt zu erstellen. Dazu kann sie aus einem vorgegebenen<br />

Vokabular eingelesen werden.<br />

Es bestehen zwei Möglichkeiten, wie ein Vokabular angegeben werden kann. Zunächst ist da das anwendungsinterne<br />

Vokabular. Es ist in einer Zeichenkette fest in die Anwendung integriert und wird<br />

mittels read_grammar_string eingelesen. Bei dieser Variante kann das Vokabular nicht von außen manipuliert<br />

werden. Der Funktionsaufruf kann bei größeren Vokabularen allerdings schnell unübersichtlich<br />

werden. Das externe Vokabular wird in einer txt-Datei gespeichert. Auf sie wird durch die Funktion<br />

read_grammar_file zugegriffen. Eine externes Vokabular hat den Vorteil, dass der geübte Nutzer das<br />

Vokabular bei Bedarf auch an seine eigenen Vorlieben anpassen kann.<br />

Das gesamte Vokabular besteht aus abwechselnd Menü-Zeilen und Befehls-Zeilen. Diese Vorgabe macht<br />

es notwendig, dass auch in einem String alle Zeilenumbrüche angezeigt werden.<br />

Menü-Zeilen:<br />

Das Schlüsselwort ’Menu’ leitet eine neue Menü-Zeile ein. Ihm folgen der Name des Menüs und optional<br />

der Startzustand. Er kann ’active’ oder ’inactive’ sein. Wird kein Startzustand angegeben, wird er


8. ENTWICKLUNG EINER SCHNITTSTELLE AUF BASIS DER MICROSOFT SPEECH API 54<br />

automatisch auf ’inactive’ gesetzt. Gültige Zeilen sind somit:<br />

Menu namexyz active<br />

Menu nameabc inactive<br />

oder<br />

Menu namexyz<br />

Jede Menu-Zeile sollte mindestens eine ihr zugehörige Kommandozeilen folgen.<br />

Kommando-Zeile:<br />

Mit dem Schlüsselwort ’Command’ beginnt eine Kommando-Zeile. Danach folgen der Name des Kommandos<br />

und ihm alle gültigen Spracheingaben, die dieses Kommando auslösen. Besteht eine Spracheingabe<br />

aus mehreren Wörtern wird die gesamte Wortgruppe zwischen zwei ’ gesetzt. In folgendem Beispiel<br />

wird das Kommando exit gezeigt, welches durch die Spracheingaben ’exit the program’, ’close the program’<br />

oder einfach nur ’end’ ausgelöst werden kann:<br />

Command exit ’exit the program’ ’close the program’ end<br />

Der Übersicht halber können auch Leerzeilen oder Beschreibungen der einzelnen Teile des Vokabulars<br />

eingefügt werden. Diese dürfen allerdings nicht mit ’Rule’ oder ’Command’ beginnen und nicht auf der<br />

selben Zeile wie ein Kommando oder eine Regel stehen.<br />

Das Aufrufen der Funktionen read_grammar_file und read_grammar_string führt immer dazu, dass<br />

Abbildung 8.1: Beispielhafter Inhalt einer txt-Vokabulars für eine gültige Grammatik mit zwei Regeln.<br />

Abbildung 8.2: Beispielhafte Zeichenkette, die die selbe Grammatik wie das txt-Vokabular erzeugen<br />

würde.<br />

die zuvor genutzte Grammatik überschrieben wird. Eine Grammatik, die durch eine dieser Funktionen<br />

erstellt wurde kann aber immer noch durch clear_grammar, add_menu, add_command und finalize_grammar<br />

manipuliert werden. Allerdings muss man in diesem Fall besonders auf ID’s den einzelnen


8. ENTWICKLUNG EINER SCHNITTSTELLE AUF BASIS DER MICROSOFT SPEECH API 55<br />

Menüs und Kommandos achten. Diese werden bei Erstellen der Grammatik nämlich automatisch, von<br />

Null beginnend vergeben.<br />

8.3 Eine Beispielanwendung<br />

Die Beispielanwendung wird auf der Konsole ausgeführt und besteht aus einem Hauptmenü, zu dem elf<br />

Menüpunkte gehören, von denen wiederum Vier, eigene Untermenüs öffnen. Der Quellcode der Anwendung<br />

ist gemeinsam mit dem der Schnittstelle, auf der Beleg CD im Verzeichnis project/src abgelegt.<br />

8.3.1 Vokabular<br />

Das vollständige Vokabular, so wie es in ’vocabulary.txt’ zu finden ist, wird in Abbildung 8.3 dargestellt.<br />

Es orientiert sich an den Befehlen, die schon in Kapitel 6.1 für die verschiedenen Tests genutzt wurden.<br />

Genauere Informationen zum Aufbau eines Vokabulars sind in diesem Kapitel im Unterpunkt 8.2.4 ’Das<br />

Vokabular’ zu finden.<br />

8.3.2 Navigation<br />

Abbildung 8.4 gibt einen Überblick über die Navigation innerhalb der Anwendung. Alle Befehle die dort<br />

nicht auf ein anderes Menü verweisen, werden nur durch eine kurze Textmeldung bestätigt.<br />

8.3.3 Programmieren der Beispielanwendung<br />

Um eine funktionsfähige Anwendung zu erstellen müssen folgende Quelldateien dem Projekt hinzugefügt<br />

werden:<br />

• cgv/media/text/advanced_scan.cxx<br />

• cgv/media/text/scan.cxx<br />

• cgv/input/microsoft_speech_input.cxx<br />

• cgv/utils/file.cxx<br />

Natürlich müssen auch die nötigen Includeverzeichnisse angegeben werden. Außerdem muss mittels<br />

cgv::input::speech_input* si = new cgv::input::microsoft_speech_input(); ein neuer speech_input angelegt<br />

werden. Über ihn erhält man Zugriff auf alle nötigen Funktionen der Schnittstelle.


8. ENTWICKLUNG EINER SCHNITTSTELLE AUF BASIS DER MICROSOFT SPEECH API 56<br />

Abbildung 8.3: Vokabular der Beispielanwendung<br />

Abgesehen davon gibt es in der Beispielanwendung drei wichtige Funktionen:<br />

• main()<br />

• ExecuteCommand()<br />

• exit()<br />

Alle anderen Funktionen werden nur dazu genutzt um die verschiedenen Menüs anzuzeigen.<br />

8.3.3.1 main()<br />

Der Einstiegspunkt der Anwendung ist in Abbildung 8.5 zu sehen. Zunächst wird durch aufrufen der<br />

Funktion init() der Spracherkenner initialisiert. Sollte dies erfolgreich geschehen sein, lädt<br />

read_grammar_file(’vocabulary.txt’) das standard Vokabular als Grammatik in den Erkenner und das


8. ENTWICKLUNG EINER SCHNITTSTELLE AUF BASIS DER MICROSOFT SPEECH API 57<br />

Abbildung 8.4: Navigation in der Beispielanwendung<br />

Hauptmenü wird angezeigt. Falls dabei ein Fehler passieren sollte, wird eine Fehlermeldung angezeigt,<br />

das Notfallvokabular aus einem String geladen und das Notfallmenü angezeigt. Falls auch das fehlschlagen<br />

sollte, wird die Anwendung beendet. Nachdem der Spracherkenner vollständig initialisiert wurde,<br />

wird die Erkennungsschleife gestartet. Durch die Funktion is_recognizer_active() wird abgefragt ob der<br />

Erkenner noch arbeitet. Solange das der Fall ist, wird zunächst darauf gewartet, dass ein neuer Befehl erkannt<br />

wird. Diese Arbeit übernimmt die Funktion wait_for_event() und sorgt gleichzeitig dafür, dass im<br />

Falle einer Spracheingabe die Werte Menüindex, Menüname, Befehlsindex und Befehlsname abgefragt<br />

werden. Ist das geschehen, führt ExecuteCommand() den erkannten Befehl aus. Sollte das Initialisieren<br />

fehlgeschlagen sein, oder zuletzt der Befehl zum Beenden gegeben wurden sein, liefert die Funktion<br />

is_recognizer_active() den Wert false zurück und die Anwendung wird beendet.


8. ENTWICKLUNG EINER SCHNITTSTELLE AUF BASIS DER MICROSOFT SPEECH API 58<br />

void main()<br />

{<br />

if(si->init())<br />

{<br />

if(si->read_grammar_file("vocabulary.txt"))<br />

{<br />

menu();<br />

vocnumber = 1;<br />

}<br />

else<br />

{<br />

cout is_recognizer_active())<br />

{<br />

si->wait_for_event();<br />

ExecuteCommand();<br />

}<br />

}<br />

Abbildung 8.5: Der Einstiegspunkt der Beispielanwendung.


8. ENTWICKLUNG EINER SCHNITTSTELLE AUF BASIS DER MICROSOFT SPEECH API 59<br />

8.3.3.2 ExecuteCommand()<br />

Die Abbildung 8.6 stellt die Funktion ExecuteCommand() dar. Um die Funktionsweise besser zu zeigen,<br />

ist nur die Behandlung aller Befehle des Hauptmenüs abgebildet. Die Behandlung von Befehlen<br />

in den anderen Menüs läuft analog dazu ab. Sobald die Funktion aufgerufen wurde, werden zu dem soeben<br />

erkannt Befehl, der Name sowie die ID des Befehls selbst sowie der zugehörigen Regel abgefragt.<br />

Dies geschieht über die Funktionen get_menu_index(), get_command_index(), get_menu_name() und<br />

get_command_name(). Einige davon werden allerdings nicht für die Navigation im Hauptmenü genutzt.<br />

Die darauf folgende Abfrage der ’vocnumber’ dient nur dazu, zu unterscheiden ob das richtige Vokabular<br />

geladen ist oder ob sich die Anwendung im Fehlermenü befindet. Wenn nun das original Vokabular geladen<br />

wurde und sich die Anwendung im Hauptmenü befindet, nimmt die Variable ’rule_name’ den Wert<br />

’main’ an. Auf Grund dessen wird die Regel für das Hauptmenü ausgeführt und nun überprüft, welcher<br />

der Befehle des Hauptmenüs soeben eingegeben wurde. Dies geschieht entweder über den Namen des<br />

Befehls oder seine ID. Danach werden die entsprechenden Anweisungen für diesen Befehl ausgeführt.<br />

Im Fall der Beispielanwendung erfolgt entweder eine einfache Bildschirmausgabe, eine weitere Funktion<br />

wird ausgeführt oder ein Untermenü wird geöffnet, das entsprechende Menü in der Grammatik wird<br />

aktiviert und das momentane Menü deaktiviert.<br />

8.3.3.3 exit()<br />

Die Funktion exit() wird in Abbildung 8.7 gezeigt. Sie ist nur dafür zuständig die Ressourcen des Spracherkenners<br />

wieder frei zu geben. Dazu wird die Funktion close() der Schnittstelle aufgerufen. Auf das<br />

Beenden der Anwendung hat sie insofern Einfluss, als dass beim nächsten Aufruf der Erkennungsschleife<br />

die Funktion is_recognizer_active() den Wert ’false’ zurück gibt. Dies hat den Ausstieg aus der Schleife<br />

und damit das Ende der Anwendung zur Folge.<br />

8.4 Test der Schnittstelle mit Hilfe der Beispielanwendung<br />

Um die Schnittstelle auch mit den früheren Testergebnissen vergleichen zu können, wurde die Beispielanwendung<br />

entsprechend der Sphinx-4 Dialog Demo erstellt. Somit enthält die Testanwendung<br />

insgesamt fünf Menüs. Diese wiederum beinhalten zwischen elf und 31 Kommandos. Wie in den vorangegangenen<br />

Tests wurde auch hier jedes Kommando fünf mal wiederholt. Das Gesamtergebnis der<br />

Testanwendung wird in Tabelle 8.1 dargestellt. In der darauf folgenden Tabelle 8.2 werden diese neuen<br />

Ergebnisse den früheren Testergebnissen von SAPI, jlab und Sphinx gegenüber gestellt.


8. ENTWICKLUNG EINER SCHNITTSTELLE AUF BASIS DER MICROSOFT SPEECH API 60<br />

void ExecuteCommand(){<br />

int rule = si->get_menu_index();<br />

int value = si->get_command_index();<br />

std::string rule_name = si->get_menu_name();<br />

std::string command_name = si->get_command_name();<br />

if (vocnumber==1){<br />

if( rule_name=="main" ){<br />

if(command_name=="exit"){exit();}<br />

else if(command_name=="help"){help();}<br />

else if(command_name=="music"){<br />

music();<br />

si->activate_menu_name("music");<br />

si->deactivate_menu_name("main");<br />

}<br />

else if(command_name=="phone"){<br />

phone();<br />

si->activate_menu_name("phone");<br />

si->deactivate_menu_name("main");<br />

}<br />

else if(command_name=="game"){<br />

games();<br />

si->activate_menu_name("game");<br />

si->deactivate_menu_name("main");<br />

}<br />

else if(command_name=="mail"){<br />

mail();<br />

si->activate_menu_name("mail");<br />

si->deactivate_menu_name("main");<br />

}<br />

else{<br />

switch( value ){<br />

case 5:{cout


8. ENTWICKLUNG EINER SCHNITTSTELLE AUF BASIS DER MICROSOFT SPEECH API 61<br />

void exit()<br />

{<br />

si->close();<br />

}<br />

Abbildung 8.7: Die Funktion exit().<br />

Menüpunkt Anzahl richtig nicht verwechselt Worterkennungsrate<br />

der Befehle erkannt erkannt in Prozent<br />

Musik 31 150 5 0 96,80<br />

Anrufe 24 115 1 4 92,00<br />

Spiele 18 90 0 0 100<br />

eMail 13 65 0 0 100<br />

Hauptmenü 11 51 4 0 92,70<br />

Tabelle 8.1: Worterkennungsrate der SAPI Schnittstelle in den einzelnen Menüs<br />

Schon in den erst Tests wurde deutlich, dass die SAPI in vielen der Menüs besser als die anderen Erkenner<br />

arbeitete. Der extreme Einbruch der Erkennungsrate im Musik-Menü wurde damit begründet, dass in<br />

diesen Tests mit dem Dictation Pad, einer Diktieranwendung mit allumfassendem Sprachvokabular, gearbeitet<br />

wurde. Die neuen Ergebnisse zeigen zum Einen, dass diese Annahme richtig war. Zum Anderen<br />

zeigen sie auch, dass die SAPI im Bereich Befehlserkennung mit 97,1% Erkennungsrate deutlich exakter<br />

als jlab und Sphinx arbeitet. Die 2,9% Fehlerrate setzten sich dabei aus 2,1% nicht erkannten und 0,8%<br />

falsch verstandenen Befehlen zusammen.


8. ENTWICKLUNG EINER SCHNITTSTELLE AUF BASIS DER MICROSOFT SPEECH API 62<br />

Menüpunkt Sphinx4 JLAB Microsoft SAPI SAPI Interface<br />

Dialog Demo Speech Server Dictation Pad Testanwendung<br />

Musik 58,06 81,94 54,84 96,80<br />

Anrufe 69,17 81,67 89,17 92,00<br />

Spiele 68,89 88,19 95,56 100<br />

eMail 89,23 86,15 87,69 100<br />

Hauptmenü 78,18 94,55 90,91 92,70<br />

Durchschnitt 72,71 86,5 83,63 97,10<br />

Tabelle 8.2: Vergleich der Ergebnisse aus Kapitel 6 mit den Ergebnissen der Testanwendung (Angaben<br />

in Prozent)


9. ABSCHLIESSENDE BETRACHTUNGEN 63<br />

9 Abschließende Betrachtungen<br />

9.1 Resümee<br />

Zu Beginn dieser Arbeit wurden zunächst einige grundlegende Informationen über Spracheingabe und<br />

den Aufbau von Spracherkennern gegeben. Danach wurden einige momentan verfügbare Spracherkenner<br />

vorgestellt.<br />

Im Hauptteil dieser Arbeit wurden drei freie Erkenner vorgestellt und verglichen. Dabei handelte es sich<br />

zum einen um Sphinx von, unter Anderen, der Carnegie Mellon <strong>Universität</strong>. Dieser Erkenner bietet eine<br />

knappe Dokumentation und einige Beispielanwendungen. Der Nachteil ist, dass Sphinx eine Art Baukasten<br />

für Spracherkenner ist. Man hätte also zunächst seinen eigenen Erkenner aufbauen müssen, bevor<br />

man ihn in einer Anwendung nutzen kann. Sphinx ist in Java implementiert.<br />

Jlab vom Institut für Akustik und Sprachkommunikation der TU <strong>Dresden</strong> bietet einen fertigen Erkenner<br />

der für Befehlseingabe konzipiert ist und mit der deutschen Sprache arbeitet. Nachteilig wirkt sich bei<br />

Jlab das Vokabular aus. Durch das Angeben der Befehle in Phonemschrift ist es für Laien sehr schwer<br />

ein korrektes Vokabular zu erstellen. Außerdem kann sehr viel Feinarbeit nötig sein, um die Rückweisungsschwellen<br />

korrekt anzugeben, damit Verwechslungen durch den Erkenner ausgeschlossen werden.<br />

Der dritte Erkenner war die Microsoft Speech API. Sie bietet eine gute Dokumentation und eine Vielzahl<br />

von guten Beispielen zur Einarbeitung. Der Erkenner ist für Diktieranwendungen, sowie Befehlseingabe<br />

gedacht. Er arbeitet mit der englischen Sprache, es existieren aber Pakete für andere Sprachen. Außerdem<br />

handelt es sich bei der SAPI um den einzigen der drei Erkenner, der in C++ geschrieben ist.<br />

Im Anschluss daran wurden mit den Erkennern einige Tests durchgeführt. Bei der Befehlseingabe lag jlab<br />

mit 86,5Prozent Worterkennungsrate vor der SAPI mit 83,63Prozent. Am schlechtesten schnitt Sphinx,<br />

mit einer Rate von 72,71Prozent, ab. Letztendlich muss man sagen, dass dabei keiner der Erkenner<br />

wirklich überzeugende Ergebnisse geliefert hat. Anschließend wurde auch die Worterkennungsrate für<br />

die Diktieranwendung der SAPI getestet. Das mittlere Ergebnis dieses Tests lag bei 68,3Prozent. Danach<br />

wurden noch einmal alle drei Erkenner miteinander verglichen.<br />

Im letzten Kapitel dieses Belegs wurde eine Schnittstelle auf Basis der SAPI beschrieben. Die Schnittstelle<br />

versucht die SAPI spezifischen Merkmale zu verdecken um so eine einfachere Möglichkeit zu


9. ABSCHLIESSENDE BETRACHTUNGEN 64<br />

bieten um die Integration von Spracheingabe in die eigenen Anwendungen zu erleichtern. Um die Fähigkeiten<br />

dieser Schnittstelle zu zeigen wurde eine Beispielanwendung implementiert. Tests, die mit dieser<br />

Anwendung durchgeführt wurden, zeigten, das die SAPI weit bessere Ergebnisse liefern kann als aus<br />

den früheren Kapiteln hervor geht. Die ermittelte durchschnittliche Worterkennungsrate stieg in der Beispielanwendung<br />

auf 97,1Prozent und übertrifft die zwei anderen Erkenner nun bei Weitem. Mit diesem<br />

Wert bietet die SAPI eine gute Möglichkeit, Spracherkennung in eigene Anwendungen zu integrieren<br />

ohne dabei kommerzielle Systeme nutzen zu müssen.<br />

9.2 Ausblick<br />

In dieser Arbeit wurde die vereinfachte Schnittstelle für die Microsoft Speech API implementiert. Für die<br />

Zukunft wäre es natürlich wünschenswert, wenn die Schnittstelle auch für andere Erkenner implementiert<br />

würde. Im folgenden sollen allerdings ihre Anwendungsmöglichkeiten näher betrachtet werden.<br />

In Kapitel 7 wurde eine kleine Beispielanwendung zur Menüsteuerung vorgestellt. Heutige Anwendungen<br />

sind allerdings weitaus komplexer und besitzen einer sehr großen Anzahl an Menüs und eine dem<br />

entsprechende Masse an Befehlen. Aus diesem Grund werden einzelne Vokabulardateien schnell unübersichtlich.<br />

Wenn immer möglich, sollte man daher versuchen, immer nur das gerade benötigte Vokabular<br />

zu laden. Sollte zu einem Zeitpunkt zum Beispiel immer nur ein einzelnes Menü aktiv benötigt werden,<br />

bietet es sich an, für jedes Menü eine Vokabulardatei anzulegen. Diese wird dann immer, wenn es nötig<br />

ist, in die Grammatik geladen. Auf diese Weise hat man stets übersichtliche Vokabulardateien. Natürlich<br />

ist es nicht immer möglich ein riesiges Vokabular so aufzuteilen. Eine zweite Möglichkeit besteht darin,<br />

alle Befehle, die von jedem Programmpunkt aus zugänglich sind, in ein eigenes Menü zu packen und<br />

dieses dauerhaft aktiv zu lassen. So spart man sich zumindest, sich ständig wiederholende Befehle über<br />

alle Menüs hinweg. Um das Erstellen von Vokabularen einfacher zu gestalten wäre auch ein kleines Tool<br />

schön, mit dessen Hilfe die Vokabulardateien übersichtlicher dargestellt werden. Im Moment werden nur<br />

Vokabularzeilen ausgewertet, die mit den Worten ’Menu’ oder ’Command’ beginnen. Andere Schlüsselwörter<br />

könnte für vollkommen andere Auswertungsvarianten genutzt werden. Mit den entsprechenden<br />

Anpassungen könnte ein Tool somit eine grafische Nutzeroberfläche bieten, auf der man sehr einfach<br />

und übersichtlich neue Vokabulare erstellen kann. Die zusätzlichen Informationen könnten dann dazu<br />

genutzt werden, die Navigation innerhalb der Anwendung zu visualisieren und sie dem Nutzer dadurch<br />

einfacher verständlich darzustellen.<br />

Die Anwendung der vereinfachten Schnittstelle bezieht sich aber nicht nur auf Menüsteuerungen jeder<br />

Art. Auch die Steuerung von virtuellen Umgebungen oder Modellierungsanwendung wird möglich. In


9. ABSCHLIESSENDE BETRACHTUNGEN 65<br />

Zukunft müsste also untersucht werden, wie die Steuerung oder Bearbeitung von Objekten via Spracheingabe<br />

realisiert werden kann. Zunächst müsste man natürlich für jedes Objekt die entsprechenden Befehle<br />

in die Grammatik laden. Es ist aber klar, dass der Benutzer das nicht bei jedem neu angelegten Objekt<br />

von Hand erledigen will. Also wird eine Aufgabe darin bestehen, herauszufinden, wie man diese Abläufe<br />

automatisieren kann. Im folgenden werden dazu ein paar Anregungen gegeben.<br />

Als erstes muss man sich überlegen ob man ein Vokabular anlegt in dem alle Befehle zu den vorhandenen<br />

Objekten stehen. Dieses Vokabular muss dann jedes mal umgeschrieben werden wenn man ein<br />

Objekt hinzufügt oder entfernt und im Anschluss daran neu geladen werden. Sollten alle Befehle, die zur<br />

Anwendungssteuerung genutzt werden auch in einem Vokabular stehen, gibt es das Problem, dass keine<br />

zwei Vokabulare gleichzeitig geladen sein können. Dies lässt sich aber umgehen, indem man ein beim<br />

Erstellen eines neuen Projekts, ein neues Vokabular mit alle Menübefehlen erstellt und dieses dann um<br />

die Objektbefehle erweitert. Wenn man kein Vokabular anlegen will, kann man die einzelnen Befehle für<br />

die Objekte auch direkt in die Grammatik laden. Wenn ein Objekt gelöscht wird, wird einfach die alte<br />

Grammatik gelöscht und die Befehle für alle verbleibenden Objekte erneut geladen.<br />

Nach dem man diese Frage für sich geklärt hat, muss man überlegen, wie man die Befehle zur Steuerung<br />

der Objekte zu seinem Vokabular oder direkt zur Grammatik hinzufügen kann. Zunächst ist es vorteilhaft<br />

für jedes Objekt ein Menü anzulegen. Darin werden danach automatisch alle möglichen Sprachbefehle<br />

aufgeführt. Da sich diese Befehle bei mehreren Objekten wiederholen können steht dabei die Frage im<br />

Raum, wie man einen Befehl einem bestimmten Objekt zuordnet. Eine Möglichkeit jederzeit alle ’Objektmenüs’<br />

aktiviert zu lassen. Die Befehle in den Menüs müssten sich dann aus dem Objektnamen und<br />

der auszuführende Aktion zusammensetzen, um eindeutig zu sein. So entstehen Befehle wie ’move Red<br />

Cube to the right’, ’move Red Cube to the left’ und so weiter. Eine andere Möglichkeit ist, zum Beispiel<br />

im Hauptmenü, zu jedem Objekt einen Befehl wie ’take +Objektname’ anzulegen. Wird dieser Befehl für<br />

ein Objekt aufgerufen werden alle folgenden Befehle auf dieses Objekt bezogen, bis ein anderes Objekt<br />

aufgerufen wird. Die Objektnamen müssen in beiden Fällen eindeutig sein.<br />

Zum Ende sollen noch kurz zwei mögliche Erweiterungen der Schnittstelle genannt werden. Einerseits<br />

wäre da die Unterstützung von Callbacks. Im Moment ist der Aufruf der Schnittstellenfunktion<br />

wait_for_event() in einer Schleife in der Hauptanwendung vorgesehen. Für die Zukunft wäre es wünschenswert<br />

wenn diese Funktion in einem extra Thread angesiedelt werden könnte. Dazu kann die<br />

signal-Klasse aus cgv/utils genutzt werden. Man müsste der abstrakten Klasse speech_input ein Signal<br />

als Member hinzufügen. Die Funktion wait_for_event() kann dadurch in einer Schleife, in einem<br />

extra Thread laufen. Wenn eine Spracheingabe erfolgt, wird dann ein Signal an die Hauptanwendung<br />

geschickt, wodurch der Sprachbefehl verarbeitet wird.<br />

Eine weitere Erweiterung wurde dieser Arbeit im Kapitel 6 schon einmal kurz erwähnt. Es handelt sich


9. ABSCHLIESSENDE BETRACHTUNGEN 66<br />

um die Möglichkeit Texte zu diktieren. Nachdem man eine Anwendung schon per Sprachbefehl steuern<br />

kann, fehlt nur noch diese Erweiterung um Anwendungen unabhängig von Tastatur oder Maus nutzen<br />

zu können. Wie schon erwähnt bot die SAPI als einziger Erkenner diese Möglichkeit. Trotzdem wäre es<br />

eine sehr schöne Erweiterung um die Schnittstelle abzurunden.


10. GLOSSAR 67<br />

10 Glossar<br />

Erkennungsgeschwindigkeit<br />

Die Erkennungsgeschwindigkeit oder Echtzeitfaktor gibt an, wieviel schneller der Erkenner gegenüber<br />

der Dauer der gesprochenen Eingabe ist.<br />

Erkennungsraten<br />

Die Worterkennungsrate eines Spracherkenners bezeichnet wieviele Worte korrekt erkannt wurden. Ihr<br />

entgegen steht die Wortfehlerrate.<br />

Formanten<br />

Formanten sind die Frequenzanteile eines Signals, bei denen besonders viel Energie vorhanden ist. In<br />

Abbildung 10.1 ist das Spektrogramm eines Phonems zu sehen. Umso dunkler die Farbe desto höher ist<br />

der Energieanteil der entsprechenden Frequenz.<br />

NAD<br />

Die NAD (normalized acoustic distance) gibt an wie sicher sich der Erkenner bei einem bestimmten Ergebnis<br />

ist. Ihr zugrunde liegt eine Folge von Merkmalsvektoren für die die NAD berechnet wird. Dazu<br />

werden zunächst zwei zusätzliche Werte ermittelt. Der erste Wert (NLLd) gibt die Wahrscheinlichkeit der<br />

erkannte Vektorfolge an, mit der Beschränkung das nur die im Vokabular angegebenen Befehle möglich<br />

sind. Für den zweiten Wert (NLLr) gibt es keine Einschränkung. Es kann also jede Vektorfolge erkannt<br />

werden. Dadurch das es für NLLr keine Einschränkungen gibt, ist dieser Wert immer kleiner als NLLd.<br />

Umso geringer nun die Differenz von NLLd und NLLr ist, desto sicherer ist es, dass das Ergebnis korrekt<br />

ist. Die NAD wird dabei wie folgt berechnet:<br />

NAD = (NLLd-NLLr)/NLLd<br />

Ein NAD von unter 0.05 steht für einen mit hoher Sicherheit richtig erkannten Befehl.<br />

NED


10. GLOSSAR 68<br />

Abbildung 10.1: Spektrogramm des englischen Phonems ’ee’[17]<br />

Die NED (normalized edit distance) gibt genauso wie die NAD an wie sicher sich der Erkenner bei<br />

einem bestimmten Ergebnis ist. Für die Berechnung des NED wird allerdings die erkannte Phonemfolge<br />

genutzt. Auch hier werden wieder zwei unterschiedliche Werte Verglichen. Der erste Wert (Ad)<br />

beinhaltet die erkannte Phonemfolge unter der Bedingung, dass nur Phonemfolgen, die im Vokabular angegeben<br />

sind auftreten können. Der zweite Wert (Ar) enthält die erkannte Phonemfolge, wenn es keine<br />

Einschränkenden Bedingungen gibt. Da Pausen und Müll-Zeichen keine Informationen über den eingegebenen<br />

Befehl beinhalten, werden sie aus Ad sowie aus Ar entfernt. Danach werden die Phonemfolgen<br />

Phonem für Phonem wie folgt verglichen:<br />

∑<br />

NED = ( N c_i) / N<br />

mit:<br />

i=0<br />

N = maximale Anzahl der Phoneme, und<br />

c_i={Ad_i = Ar_i : 1; sonst : 0}<br />

Ein akzeptabler NED Wert sollte unter 0.5 liegen.<br />

Phoneme<br />

Phoneme bilden die Menge der kleinsten bedeutungstragenden Bestandteile einer Sprache und sind von


10. GLOSSAR 69<br />

Sprache zu Sprache unterschiedlich. Im deutschen wie im englischen unterscheidet man etwa 40 Phoneme.<br />

Tabelle 10.1 das Phonemset des JLAB Speech Servers.<br />

Phonemzeichen Beispiel Phonemzeichen Beispiel Phonemzeichen Beispiel<br />

a kann N Junge S Tasche<br />

a: Kahn h Hast t Torte<br />

aU Baum I ritt u: Mus<br />

b bei i: riet U muss<br />

C dich j ja v Vase<br />

x Dach k Kahn OY neu<br />

d du l Licht E: Käse<br />

e: Beet m Mann 2 Höhle<br />

@ lesen n neun 9 Hölle<br />

E Bett o: bog Y Hütte<br />

6 Leser O Bock y: Hüte<br />

aI zwei p Platz Spezialzeichen:<br />

f f ahren r Rauch Q (Glottalisierung) beenden<br />

Z Loge s las . Pause<br />

g Gast z lesen ♯ Müll<br />

Tabelle 10.1: Phonemset der deutschen Sprache wie es in jlab genutzt wird<br />

Rückweisungsschwelle oder Rückweisungswert<br />

Dieser Wert gibt an wie sicher sich der Erkenner sein muss, dass sein Ergebnis mit der Eingabe übereinstimmt,<br />

damit es akzeptiert wird. Wird dieser Wert falsch gewählt, kann es passieren das zu häufig<br />

Ergebnisse zurückgewiesen werden obwohl sie richtig waren oder aber es kommt zu häufig vor, dass der<br />

Erkenner auch Ergebnisse zulässt obwohl keine entsprechende Eingabe erfolgte. Siehe auch NAD und<br />

NED.<br />

Wortfehlerrate<br />

Sie bezeichnet wie häufig Erkennungsfehler auftreten und setzt sich aus verschiedenen Fehlerarten zusammen:<br />

• erkannte Eingabe ohne das eine Eingabe erfolgte<br />

• erkannte Eingabe obwohl eine völlig andere Eingabe erfolgte


10. GLOSSAR 70<br />

• nicht erkannte Eingabe obwohl ein korrekte Eingabe erfolgte


10. GLOSSAR 71<br />

[]


Literaturverzeichnis 72<br />

Literaturverzeichnis<br />

[1] BOWMAN ; KRUIJFF ; LAVIOLA ; POUPYREV: 3D User Interfaces: Theory and Practice. Addison-<br />

Wesley, 2004, S. 119,268,269,304–306. – ISBN 0–201–75867–9<br />

[2] BREMPEL, Michael: LipSync in Echtzeit-3D-Anwendungen, Fachhochschule Furtwangen, Diplomarbeit,<br />

2005<br />

[3] BUDDE, Mark: Kompakte Spracherkenner. In: Funkschau (13/1999)<br />

[4] CMU. Sphinx4 Overview. Dokumentation der Sphinx4-Version 1.0beta erhätlich unter<br />

http://sourceforge.net/project/showfiles.php?group_id=<br />

1904&package_id=117949. 1999-2004<br />

[5] CREEMER, David Z. ; DORIS, Tom ; CRAFT, Brian. XVoice.<br />

http://xvoice.sourceforge.net/. 1999<br />

[6] IBM. Offizielle Website, IBM speech recognition research history.<br />

http://www.research.ibm.com/hlt/html/body_history.html<br />

[7] JOHAN, Anhofer: Das elektronische Tagebuch der Sinne, <strong>Technische</strong> <strong>Universität</strong> Graz, Diplomarbeit,<br />

2003<br />

[8] KASPER, Klaus: Spracherkennung mit rekurrenten neuronalen Netzen. Shaker, 2000, S. 67–77. –<br />

ISBN 3–8265–7644–6<br />

[9] KELLER, Eric: Fundamentals of Speech Synthesis and Speech Recognition. Wiley, 1995, S. 129–<br />

146,297–310. – ISBN 0–471–94449–1<br />

[10] KIECZA, Daniel. VoiceControle - command and control for Linux!<br />

http://www.kiecza.net/daniel/linux/. 11.11.2002<br />

[11] MACSPEECH. Speech Recognition for MAC OS X.<br />

http://www.macspeech.com/<br />

[12] MICROSOFT. Offizielle Website, Other speech engine support.<br />

http://www.microsoft.com/msagent/downloads/otherspeech.aspx.<br />

02.04.2003


Literaturverzeichnis 73<br />

[13] MICROSOFT. Offizielle Website, Microsoft Agent download page for end-users.<br />

http://www.microsoft.com/msagent/downloads/user.aspx. 15.05.2003<br />

[14] NUANCE. Datenblatt Dragon Naturally Speaking.<br />

ftp://ftp.scansoft.com/nuance/datasheets/ds_dns9_professional_de.<br />

<strong>pdf</strong>. 2005<br />

[15] NUANCE. IBM ViaVoice.<br />

http://www.nuance.com/viavoice/matrix/. 2005<br />

[16] NUANCE. Offizielle Website, Datenblatt Dragon Naturally Speaking.<br />

http://www.nuance.de/naturallyspeaking/matrix/. 2008<br />

[17] PARK, Sung won. Chapter 7 Linear Predictive Speech Processing.<br />

http://www.engineer.tamuk.edu/SPark/chap7.<strong>pdf</strong>. 2003<br />

[18] PFISTER, Beat ; UEBERSAX, Hans-Peter: Erweiterungen von trueAct zum Sprachdialogsystem. In:<br />

PIDAS Kundenzeitschrift (2/2002)<br />

[19] ROZAK, Mike: Talk to Your Computer and Have It Answer Back with the Microsoft Speech API.<br />

In: Microsoft Systems Journal (Januar 1996)<br />

[20] SOBE, Daniel: Sprachsteuerung eines Computerspiels - Untersuchungen zur Leistungsfähigkeit<br />

und Ergonomie, <strong>Technische</strong> <strong>Universität</strong> <strong>Dresden</strong>, Diplomarbeit, 2004<br />

[21] SPEARMAN, Rob: ViaVoice and XVoice: Providing Voice Recognition. In: Linux Journal<br />

(17.10.2002)<br />

[22] STACHE, Oliver: Konzeption, Realisierung und Evaluation einer multimodalen Benutzungsoberfläche<br />

für PDA-basierte Software, <strong>Technische</strong> <strong>Universität</strong> <strong>Dresden</strong>, Diplomarbeit, 2006<br />

[23] VERSCHIEDENE. IBM ViaVoice.<br />

http://en.wikipedia.org/wiki/IBM_ViaVoice. 06.06.2008<br />

[24] VERSCHIEDENE. Speech Application Programming Interface.<br />

http://en.wikipedia.org/wiki/Speech_Application_Programming_<br />

Interface. 21.07.2008<br />

[25] VOICEIT. VoiceIt Produkte.<br />

http://www.groverind.com/index.php. 2006<br />

[26] WALKER ; LAMERE ; KWOK ; RAJ ; SINGH ; GOUVEA ; WOLF ; WOELFEL. Sphinx-4: A Flexible<br />

Open Source Framework for Speech Recognition.<br />

http://cmusphinx.sourceforge.net/sphinx4/doc/Sphinx4Whitepaper.


Literaturverzeichnis 74<br />

<strong>pdf</strong>. 2004<br />

[27] WERNER, Steffen ; WOLFF, Matthias ; EICHNER, Matthias ; HOFFMANN, Rüdiger. Integrating<br />

Speech enabled Services in a Web-based e-Learning Environment. 2004


Abbildungsverzeichnis 75<br />

Abbildungsverzeichnis<br />

3.1 Allgemeiner Aufbau eines Spracherkenners . . . . . . . . . . . . . . . . . . . . . . . . 14<br />

3.2 Mustererkennungsansatz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />

3.3 Akustisch-phonetischer Ansatz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />

3.4 Aufbau der Signalaufbereitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />

3.5 Anregung und Bewertung für einen Vokal[17] . . . . . . . . . . . . . . . . . . . . . . . 17<br />

3.6 Dynamic Time Warping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />

3.7 Hidden Markov Modell für das Wort ’haben’ nach [7] . . . . . . . . . . . . . . . . . . . 21<br />

5.1 Aufbau von Sphinx-4 nach [26] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />

5.2 Das Sphinx-4 Front End nach [26] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />

5.3 Der Sphinx-4 Search Graph für ’one’ und ’two’ nach [26] . . . . . . . . . . . . . . . . . 32<br />

5.4 Aufbau des Speech API Spracherkenners nach [19] . . . . . . . . . . . . . . . . . . . . 35<br />

5.5 Die jlab Speech Server Architektur nach [27] . . . . . . . . . . . . . . . . . . . . . . . 37<br />

5.6 Vereinfachtes Ablaufschema nach [27] . . . . . . . . . . . . . . . . . . . . . . . . . . . 38<br />

5.7 Aufbau eines jlab Vokabulars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />

5.8 Worterkennungsrate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />

5.9 Der Echtzeitfaktor, bezogen auf die Dauer des Eingabesignals . . . . . . . . . . . . . . 40<br />

8.1 Beispielhafter Inhalt einer txt-Vokabulars für eine gültige Grammatik mit zwei Regeln. . 54<br />

8.2 Beispielhafte Zeichenkette, die die selbe Grammatik wie das txt-Vokabular erzeugen<br />

würde. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54<br />

8.3 Vokabular der Beispielanwendung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56<br />

8.4 Navigation in der Beispielanwendung . . . . . . . . . . . . . . . . . . . . . . . . . . . 57<br />

8.5 Der Einstiegspunkt der Beispielanwendung. . . . . . . . . . . . . . . . . . . . . . . . . 58<br />

8.6 Die Funktion ExecuteCommand(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60<br />

8.7 Die Funktion exit(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61<br />

10.1 Spektrogramm des englischen Phonems ’ee’[17] . . . . . . . . . . . . . . . . . . . . . . 68


Tabellenverzeichnis 76<br />

Tabellenverzeichnis<br />

2.1 Mindestwortschatz einer Diktieranwendung in deutsch und englisch nach [1] . . . . . . 9<br />

2.2 Wortschatz für verschiedene Anwendungen nach [18] . . . . . . . . . . . . . . . . . . . 10<br />

4.1 Frei verfügbare Spracheingabesoftware . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />

4.2 Kommerzielle Spracheingabesoftware . . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />

4.3 Übersicht über VoiceIt Sofware und die unterstützten Betriebssysteme nach [25] . . . . . 27<br />

6.1 Worterkennungsrate einiger Menüs der Sphinx-4 Dialog Demo . . . . . . . . . . . . . . 42<br />

6.2 Worterkennungsrate von JLab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43<br />

6.3 Worterkennungsrate des Dictation Pad (trainiert) . . . . . . . . . . . . . . . . . . . . . . 43<br />

6.4 Worterkennungsrate des Dictation Pad (untrainiert) . . . . . . . . . . . . . . . . . . . . 44<br />

6.5 Worterkennungsraten aller drei Anwendungen in Prozent . . . . . . . . . . . . . . . . . 45<br />

6.6 Ergebnisse für die Diktieranwendung der SAPI . . . . . . . . . . . . . . . . . . . . . . 46<br />

7.1 Übersicht über die Eigenschaften von CMU Sphinx, MS SAPI und jlab . . . . . . . . . 48<br />

8.1 Worterkennungsrate der SAPI Schnittstelle in den einzelnen Menüs . . . . . . . . . . . 61<br />

8.2 Vergleich der Ergebnisse aus Kapitel 6 mit den Ergebnissen der Testanwendung (Angaben<br />

in Prozent) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62<br />

10.1 Phonemset der deutschen Sprache wie es in jlab genutzt wird . . . . . . . . . . . . . . . 69

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!