119 56 5MB
English Pages 375 [360] Year 2005
Die Reihe Xpert.press vermittelt Professionals in den Bereichen Softwareentwicklung, Internettechnologie und IT-Management aktuell und kompetent relevantes Fachwissen über Technologien und Produkte zur Entwicklung und Anwendung moderner Informationstechnologien.
Achim Zeeck
Speech Application SDK mit ASP.NET Design und Implementierung sprachgestützter Web-Applikationen Mit 99 Abbildungen und 19 Tabellen
123
Achim Zeeck [email protected] http://achimzeeck.de
Bibliografische Information der Deutschen Bibliothek Die Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.ddb.de abrufbar.
ISSN 1439-5428 ISBN-10 3-540-20872-0 Springer Berlin Heidelberg New York ISBN-13 978-3-540-20872-3 Springer Berlin Heidelberg New York
Dieses Werk ist urheberrechtlich geschützt. Die dadurch begründeten Rechte, insbesondere die der Übersetzung, des Nachdrucks, des Vortrags, der Entnahme von Abbildungen und Tabellen, der Funksendung, der Mikroverfilmung oder der Vervielfältigung auf anderen Wegen und der Speicherung in Datenverarbeitungsanlagen bleiben, auch bei nur auszugsweiser Verwertung, vorbehalten. Eine Vervielfältigung dieses Werkes oder von Teilen dieses Werkes ist auch im Einzelfall nur in den Grenzen der gesetzlichen Bestimmungen des Urheberrechtsgesetzes der Bundesrepublik Deutschland vom 9. September 1965 in der jeweils geltenden Fassung zulässig. Sie ist grundsätzlich vergütungspflichtig. Zuwiderhandlungen unterliegen den Strafbestimmungen des Urheberrechtsgesetzes. Springer ist ein Unternehmen von Springer Science+Business Media springer.de © Springer-Verlag Berlin Heidelberg 2005 Printed in The Netherlands Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutzgesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften. Text und Abbildungen wurden mit größter Sorgfalt erarbeitet. Verlag und Autor können jedoch für eventuell verbliebene fehlerhafte Angaben und deren Folgen weder eine juristische Verantwortung noch irgendeine Haftung übernehmen. Satz und Herstellung: LE-TeX Jelonek, Schmidt & Vöckler GbR, Leipzig Umschlaggestaltung: KünkelLopka Werbeagentur, Heidelberg Gedruckt auf säurefreiem Papier 33/3142/YL - 5 4 3 2 1 0
Widmung
Ich widme das Buch meinen Eltern, die mich in all meinen bisherigen Vorhaben in jeder Hinsicht unterstützt haben – auch wenn die meisten Versuche, Ihnen meine Arbeit verständlich darzustellen, meistens scheiterten, da in ihren Augen die Informationstechnologie nach wie vor ein Buch mit sieben Siegeln ist und etwas Magisches und manchmal sogar auch Unheimliches besitzt. Dem kann ich nur zustimmen. Aber ich arbeite daran… Ich danke Euch. Mein Dank gilt sowohl meinen beiden Lektoren Dr. Frank Schmidt sowie Frau Jutta Maria Fleschutz aus dem Springer-Verlag, die mich in den zurückliegenden Monaten mit der notwendigen Inspiration und Motivation bei Laune gehalten haben, als auch der Produktionsleitung, vertreten durch Herrn Michael Reinfarth. Außerdem danke ich allen Freunden und Bekannten für ihre Anregungen und Ideen.
Vorwort
Als ich mich vor über zwei Jahren dem Thema .NET widmete, war der Grund sehr profan: Die Verheißung, mit diesem neuen und auf absehbare Zukunft sehr viel versprechenden „Tool“ den Spaß am Entwickeln, Ausprobieren und Entdecken wieder zu finden. Viele Unzulänglichkeiten in der Programmierwelt führten dazu, dass mir der frühere Enthusiasmus abhanden kam und ich meinen Schwerpunkt mehr auf die technische Beratung verlagerte. Insbesondere die Webentwicklung war vor allem mit ISAPI und COM kein Vergnügen – viel besser waren da JSP und Co. Mit ASP.NET jedoch wurde die ganze Sache wieder spannend, und mit der meiner Meinung nach wirklich sehr gelungenen Entwicklungsumgebung Visual Studio war ich bereits vorher vertraut, als ich noch C++ für die Sprache schlechthin hielt. Bis die .NET-Sprachen debütierten. Mit Sprachtechnologien kam ich erst ein Jahr später in Berührung. Ein guter Freund, der eine Zeitlang für eine Firma in dieser Branche arbeitete, erzählte mir von den Möglichkeiten, die sich durch Sprachdialogsysteme eröffneten, zumal die zugrunde liegende Technologie bereits sehr weit fortgeschritten war. Auch er konnte anfangs nicht glauben, dass es funktioniert, und war umso mehr überrascht zu erfahren, welche großen Chancen sich bei einer produktiven Umsetzung boten. Nicht nur die Kostenersparnis seitens der Kunden, sondern auch die gesteigerte Anwenderzufriedenheit durch rund um die Uhr erreichbare, immer freundliche und sachkompetente Sprachdialogsysteme war auch für mich ein Argument, mich mehr mit dieser Materie zu beschäftigen. In dem vorliegenden Buch – übrigens dem Ersten seiner Art, und dann auch noch auf Deutsch! – habe ich versucht, so praxisnah wie möglich Ihnen von der Entstehung über die Einbindung bis zur Umsetzung alle Schritte des Speech Application Software Development Kits (SASDK) näher zu bringen. Allerdings setze ich dabei einige Vorkenntnisse voraus, und zwar vor allem deshalb, um nicht den Rahmen des Buches zu sprengen. C# oder eine andere CLR-konforme Sprache wird dabei als bekannt vorausgesetzt, ebenso der Umgang mit ASP.NET und dem Visual Studio .NET. Außerdem gehe ich davon aus, dass auch Kenntnisse im Umgang mit Webtechnologien vorhanden sind. So sollten Sie wissen, was http,
VIII
Vorwort
HTML, XML und DOM bedeuten oder wie sich clientseitige Skripte (JScript oder Javascript) erstellen lassen. Das vorliegende Werk kann aufgrund der hohen Informationsdichte, die durch die umfangreiche Klassenbibliothek und den darin enthaltenen Komponenten, den in ihnen verankerten Typen, Eigenschaften, Aufzählungen usw. resultiert, keinesfalls vollständig all diese Elemente en détail beschreiben. Sie sind also zusätzlich auf die umfangreiche Online-Hilfe angewiesen, was während der Entwicklungsphase zur Beschaffung kontextaffiner Informationen ohnehin notwendig werden wird. Da – wie alle schnelllebigen (Software-)Technologien – auch das SASDK dem permanenten Entwicklungszyklus unterworfen ist, haben Sie die Möglichkeit, sich auf meiner Webseite http://achimzeeck.de zukünftig über den aktuellen Entwicklungsstand sowie Neuigkeiten aus der Welt des SASDK zu informieren. Auch Errata des Buches werden Sie dort finden. Sollten Sie Lob oder Kritik üben oder sonstige Fragen sowie Anmerkungen zu diesem Thema loswerden wollen, dürfen Sie diese gerne an die spezielle E-Mail-Adresse [email protected] verschicken. Bitte haben Sie aber Verständnis, wenn ich nicht sofort antworte, da auch ich nicht ständig vor dem Rechner sitze. Dennoch werde ich versuchen, möglichst alle eingehenden Anfragen so kompetent und zeitnah wie möglich zu bearbeiten. Bei Fragen zum Buch allgemein oder ähnlichen SASDK-fremden Informationen dürfen Sie sich gerne auch an den Verlag wenden. Die Postanschriften stehen im Impressum, im Internet finden Sie den Verlag unter www.springeronline.de. Dort befindet sich auch der Link zu einem Kontaktformular. Ich danke Ihnen für den Kauf durch Ihr Interesse an diesem Thema und würde mich freuen, wenn beim Lesen interessante und innovative Ideen herauskommen. Auch darüber dürfen Sie mir gerne berichten! Hamburg, im März 2005
Achim Zeeck
Inhaltsverzeichnis
Vorbemerkungen 1
Spracherkennung und Sprachsteuerung..........................................3 1.1 1.2 1.3 1.4 1.5
Entwicklung der Spracherkennungssysteme..............................4 Desktopbasierte Sprachsteuerung...............................................5 Webbasierte Sprachsteuerung.....................................................6 Erweiterungen von Webseiten durch SALT ..............................6 Vergleichende Betrachtung von SALT und VoiceXML...........8
Teil 1 Das Speech Application SDK (SASDK) 2
Entwicklungshistorie.........................................................................13 2.1 2.2 2.3
3
Überblick über die Einsatzmöglichkeiten.......................................23 3.1 3.2 3.3
4
Von COM zu .NET...................................................................13 Die Entwicklung des SASDK...................................................15 Microsoft Speech Server (SES, TAS und TIM) ......................20
Multimodale Applikationen......................................................23 3.1.1 Technische Voraussetzungen .......................................... 24 3.1.2 Anwendungsgebiete......................................................... 24 Voice-only Applikationen ........................................................25 3.2.1 Technische Voraussetzungen .......................................... 25 3.2.2 Anwendungsgebiete......................................................... 26 DTMF-Applikationen ...............................................................30 3.3.1 Technische Voraussetzungen .......................................... 30 3.3.2 Anwendungsgebiete......................................................... 31
Installation und Anpassung..............................................................33 4.1 4.2
Hardware- und Softwarevoraussetzungen................................33 Installation von EIF und SASDK .............................................35 4.2.1 Änderungen in den Internet Information Services (IIS) . 37 4.2.2 Änderungen in der Registrierdatenbank (Registry) ........ 38
X
Inhaltsverzeichnis
4.2.3 4.2.4 4.2.5
5
Speech Controls im Visual Studio .NET.........................................45 5.1 5.2
5.3
5.4
6
Änderungen bei den Speech Properties........................... 39 Änderungen im Visual Studio .NET ............................... 41 Abschließende Einstellungen und Tests ......................... 43
Basic Speech Controls ..............................................................45 5.1.1 Listen................................................................................ 47 5.1.2 Prompt.............................................................................. 53 Dialog Speech Controls ............................................................58 5.2.1 SemanticMap ................................................................... 59 5.2.2 QA.................................................................................... 61 5.2.3 Command......................................................................... 66 5.2.4 SpeechControlSettings .................................................... 70 5.2.5 CompareValidator ........................................................... 75 5.2.6 CustomValidator.............................................................. 77 5.2.7 RecordSound.................................................................... 78 Application Speech Controls....................................................80 5.3.1 ListSelector ...................................................................... 85 5.3.2 DataTableNavigator......................................................... 88 5.3.3 AlphaDigit........................................................................ 95 5.3.4 CreditCardDate ................................................................ 96 5.3.5 CreditCardNumber .......................................................... 97 5.3.6 Currency........................................................................... 98 5.3.7 Date .................................................................................. 99 5.3.8 NaturalNumber .............................................................. 102 5.3.9 Phone.............................................................................. 103 5.3.10 SocialSecurityNumber................................................... 104 5.3.11 YesNo ............................................................................ 104 5.3.12 ZipCode.......................................................................... 105 Call Management Controls.....................................................106 5.4.1 SmexMessage ................................................................ 107 5.4.2 AnswerCall .................................................................... 111 5.4.3 TransferCall ................................................................... 114 5.4.4 MakeCall........................................................................ 116 5.4.5 DisconnectCall............................................................... 119
Wizards, Editors und andere Tools...............................................121 6.1 6.2
Erstellen des Applikationsgerüsts...........................................121 Integrierte Tools......................................................................124 6.2.1 Property Builder............................................................. 125 6.2.2 Grammar Library........................................................... 126 6.2.3 Grammar Editor ............................................................. 126
Inhaltsverzeichnis
6.3
XI
6.2.4 Grammar Explorer ......................................................... 128 6.2.5 Pronunciation Editor...................................................... 129 6.2.6 Semantic Script Editor................................................... 131 6.2.7 Speech Prompt Editor.................................................... 137 6.2.8 Prompt Function Editor ................................................. 140 6.2.9 Speech Controls Outline Window................................. 142 Externe Tools ..........................................................................143 6.3.1 Telephony Application Simulator (TASim) ................. 144 6.3.2 Speech Debugging Console........................................... 145 6.3.3 Log Player...................................................................... 152 6.3.4 Kommandozeilen-Tools ................................................ 153
Teil 2 Programmieren mit dem SASDK 7
Sprachverarbeitung und Debugging .............................................159 7.1
7.2 7.3
7.4 7.5
8
Speech Application Language Tags (SALT) .........................159 7.1.1 Die SALT-Architektur................................................... 160 7.1.2 Kriterien einer SALT-Applikation ................................ 161 7.1.3 Von Speech Tags zu SALT ........................................... 163 Laufzeitobjekte........................................................................167 7.2.1 Der RunSpeech Dialogmanager .................................... 168 7.2.2 Das SpeechCommon Laufzeitobjekt ............................. 174 Scriptfunktionen......................................................................175 7.3.1 Steuerung von Speech Controls..................................... 175 7.3.2 Verwendung lokaler und globaler Daten....................... 176 7.3.3 Einstellen von Funktionsparametern ............................. 177 7.3.4 Funktionen zur Normalisierung..................................... 178 Debugging ...............................................................................180 7.4.1 Debuggen von Scriptfunktionen.................................... 180 7.4.2 Arbeiten mit der Speech Debugging Console ............... 181 Benutzereingaben....................................................................182 7.5.1 Arbeiten mit dem QA Speech Control........................... 183 7.5.2 Reagieren auf Kommandos ........................................... 190 7.5.3 Datenbindung von Speech Controls.............................. 192
Überprüfen von Eingaben ..............................................................199 8.1
Integrierte Validierung............................................................199 8.1.1 Uhrzeit und Datum ........................................................ 200 8.1.2 Ziffern, Zeichen und Zahlen.......................................... 202 8.1.3 Kreditkarteninformationen ............................................ 204
XII
Inhaltsverzeichnis
8.2 8.3 9
Arbeiten mit Grammatiken............................................................211 9.1 9.2
9.3 9.4 9.5 9.6 10
Vergleichende Validierung.....................................................206 Benutzerdefinierte Validierung ..............................................207
Das XML Grammar Format ...................................................211 Grammatikelemente und Zuordnungen..................................212 9.2.1 Rolle (Rule).................................................................... 213 9.2.2 Äußerung (Phrase)......................................................... 213 9.2.3 Liste (List)...................................................................... 214 9.2.4 Referenz (RuleRef)........................................................ 215 9.2.5 Gruppe (Group) ............................................................. 216 9.2.6 Platzhalter (Wildcard).................................................... 216 9.2.7 Beenden (Halt)............................................................... 217 9.2.8 Überspringen (Skip) ...................................................... 217 9.2.9 Aktion (Tag) .................................................................. 218 9.2.10 Weitere Grammar XML Elemente................................ 219 Aufbau einer SML-Grammatikstruktur..................................220 Testen und Zuordnen von Grammatiken................................226 SML-Struktur und XPath........................................................229 Die Speech Grammar Libraries ..............................................231
Prompts und die Prompt-Datenbank............................................233 10.1 Synthetische Prompts..............................................................234 10.1.1 Mary, Mike und Sam..................................................... 234 10.1.2 Inline Prompts................................................................ 235 10.1.3 Synthetische Lückenfüller ............................................. 236 10.2 Natürlichsprachliche Prompts.................................................236 10.2.1 Arbeiten mit Prompt-Projekten ..................................... 236 10.2.2 Achtung, Aufnahme! ..................................................... 240 10.2.3 Transkriptionen und Extrakte........................................ 245 10.2.4 Verwaltungsdetails der Prompt-Datenbank .................. 253 10.3 Arbeiten mit Prompt-Funktionen ...........................................259 10.3.1 Aufbau und Zuordnung ................................................. 259 10.3.2 Prompt-Funktionen erstellen und ändern...................... 260 10.3.3 Prüf- und Laufzeitverhalten........................................... 262 10.4 Prompt-Optionen in Speech Controls.....................................264 10.4.1 BargeIn........................................................................... 264 10.4.2 Async ............................................................................. 265 10.4.3 PreFetch ......................................................................... 265 10.4.4 PreFlush ......................................................................... 265 10.4.5 PlayOnce ........................................................................ 266 10.4.6 Inline-Prompts mit eingebettetem Markup ................... 266
Inhaltsverzeichnis
XIII
10.5 Verwendung spezieller Prompt Controls ...............................268 10.5.1 Prompt............................................................................ 268 10.5.2 Listen.............................................................................. 272 10.5.3 RecordSound.................................................................. 274
Teil 3 Designkriterien und Best Practices 11
Multimodale Applikationen ...........................................................279 11.1 11.2 11.3 11.4
12
Unterschiede zu Telefonieapplikationen................................279 Typische Umsetzungsvarianten..............................................280 Zusätzliche Anwendungsoptionen..........................................280 Anforderungs- und Umsetzungskriterien...............................281
Voice-only Applikationen ...............................................................285 12.1 Betrachtung unterschiedlicher Systemtypen ..........................285 12.2 Der Projektlebenszyklus .........................................................286 12.3 Dialogorganisation und Dialogfluss .......................................291 12.3.1 Modale Dialoge.............................................................. 291 12.3.2 Moduslose Dialoge ........................................................ 292 12.3.3 Allgemeine Dialogtypen................................................ 293 12.3.4 Dialogstruktur mit Prompts ........................................... 294 12.3.5 Ein Blick in die Zukunft ................................................ 299
13
Tuning, Tipps und Tricks...............................................................301 13.1 13.2 13.3 13.4 13.5 13.6 13.7
TASim und die Speech Debugging Console..........................301 Optimieren der Qualität natürlichsprachlicher Prompts ........301 Kompilieren von Grammatikdateien ......................................302 Weitere Einsatzmöglichkeiten bei Grammatiken ..................304 Verbessern der Erkennungsrate ..............................................306 Normalisierung von Daten......................................................310 Globale Applikationseinstellungen.........................................313
Anhang A Speech Controls Einstellungen und Parameter 14
Timeouts............................................................................................319 14.1 14.2 14.3 14.4
InitialTimeout..........................................................................320 BabbleTimeout........................................................................320 EndSilence...............................................................................321 MaxTimeout............................................................................321
XIV
Inhaltsverzeichnis
14.5 FirstInitialTimeout ..................................................................322 14.6 ShortInitialTimeout.................................................................322 14.7 Timer .......................................................................................323 15
Events ................................................................................................325 15.1 Client-side events....................................................................325 15.2 Server-side events ...................................................................336
16
Thresholds ........................................................................................341 16.1 16.2 16.3 16.4 16.5 16.6
ConfirmThreshold...................................................................341 ConfirmRejectThreshold ........................................................342 RejectThreshold ......................................................................342 AcceptRejectThreshold...........................................................343 DenyRejectThreshold .............................................................343 AcceptCommandThreshold....................................................344
Anhang B Webverweise.....................................................................................345
Anhang C Index..................................................................................................349
Vorbemerkungen
„Wir kommen in friedlicher Absicht!“ In Tim Burtons Film „Mars Attacks!“ von 1996 wird ein vermeintlich freundlich gesinnter Ausspruch des Anführers der auf der Erde gelandeten Marsbewohner von einer Übersetzungsmaschine zwar korrekt wiedergegeben, die xenophobe Intention zur Abwendung der bevorstehenden Katastrophe blieb dem Gerät allerdings verborgen. Diese Szene zeigt exemplarisch, dass es noch sehr lange dauern (und selbst mit exponentiell steigender Rechenleistung in naher Zukunft Realität) wird, dass Maschinen rabulistische oder ambiguose Aussagen, die ein bestimmtes, meist eigennütziges Ziel verfolgen, korrekt interpretieren oder simulieren können. Dazu bedarf es keiner künstlichen Intelligenz: Selbst Menschen haben damit ja ihre Probleme…
1 Spracherkennung und Sprachsteuerung
Der Wunsch, sich mit einer Maschine wie mit einem Menschen unterhalten zu können, wird bei zunehmender Komplexität der Software und der damit entstehenden Anwendungen immer konkreter. Das hat vorrangig pragmatische Gründe, da ein Anwender keine speziellen Kenntnisse über die Bedienung benötigt, sondern zur Durchführung bestimmter Aufgaben lediglich Befehle in seiner natürlichen (Landes-) Sprache absetzt – verbunden mit der Hoffnung, dass seine Anweisungen auch richtig (akustisch und grammatikalisch) verstanden und entsprechend umgesetzt werden! Selbst zu Beginn des Computerzeitalters war an eine solche Möglichkeit aus technischer Sicht nicht zu denken, da die geringen Rechnerkapazitäten eine Sprachverarbeitung unmöglich machten. Daher blieb es viele Jahre lang bei dem Wunsch, der insbesondere im Film immer wieder variantenreich artikuliert wurde.1 Durch die fortschreitende Miniaturisierung von elektronischen Bauteilen und der zunehmenden Komplexität von Schaltkreisen sowie der parallel damit einhergehenden Zunahme von Speicherkapazität und Prozessorleistung2 wurde es schließlich möglich, per Spracheingabe mittels fest programmierter Befehle eine Software zu definierten Aktionen zu veranlassen. Diese Software war zunächst nur auf ganz speziellen, leistungsfähigen Rechnern einsetzbar und dementsprechend exklusiv und teuer. Während die Sprachausgabe relativ einfach umsetzbar war, musste für die Spracheingabe und die damit verbundene interne Verwaltung der Signalverarbeitung und zuordnung ein ungleich größerer Aufwand betrieben werden. In den folgenden Abschnitten wird skizziert, wie sich die Technologie der Spracherkennung und Sprachsteuerung in den letzten Jahren entwickelt 1
2
Es gibt zahlreiche Beispiele, in denen Computer „menschliche“ Reaktionen zeigen. Im visionären Film 2001: Odyssee im Weltraum von Stanley Kubrick aus dem Jahr 1968 beispielsweise beginnt die computergesteuerte Bombe HAL mit den Astronauten eine philosophische Diskussion über den Sinn des Daseins und das Für und Wider, zerstört zu werden. Erwähnenswert ist in diesem Zusammenhang das „Moore’sche Gesetz“ von 1965 (begründet durch den Amerikaner Gordon Moore), welches besagt, dass sich die Anzahl der Transistoren auf einer gegebenen Fläche Silizium etwa alle zwei Jahre verdoppelt. Konservative Annahmen gehen heute sogar von Leistungssteigerungen um mindestens den Faktor 100 oder mehr in den nächsten Jahren aus.
4
1 Spracherkennung und Sprachsteuerung
hat, welche Mechanismen es derzeit gibt und wie es um den Reifegrad der aktuellen Spracherweiterungen bestellt ist. Wenn Sie an zusätzlichen Details über diese Thematik interessiert sind, finden Sie im Anhang entsprechende Verweise zu Sekundärliteratur.
1.1 Entwicklung der Spracherkennungssysteme Die Erforschung und Entwicklung der Spracherkennung (Automatic Speech Recognition und Transcription, ASR) geht auf das Jahr 1936 zurück, als in den Bell AT&T Laboratorien für und mit Universitäten an dieser Technologie gearbeitet wurde. Natürlich war – wie bei vielen Innovationen – das Militär involviert, maßgeblich beteiligt durch die Forschungseinrichtung des Verteidigungsministeriums.3 Auf der Weltausstellung 1939 stellte das Labor einen ersten Sprachsynthesizer namens Voder vor, der mittels Tastatur und Fußpedalen bedient wurde, um die Ausgabe und Geschwindigkeit zu kontrollieren. Bereits in den frühen 1970er Jahren wurden die Forschungsanstrengungen ausgeweitet, zumal auch namhafte Firmen aus der Computerindustrie wie zum Beispiel IBM und Philips sich daran beteiligten. Im Laufe der Zeit wurden neue Algorithmen entwickelt, die eine Verbesserung in der Erkennung mit sich brachten. Außerdem begann Anfang der 1980er Jahre das Computerzeitalter, wo die Rechner kompakter, leistungsfähiger und auch für den Heimanwender erschwinglich wurden. In dieser Periode wurden zahlreiche – auf Sprachtechnologie spezialisierte – neue Unternehmen gegründet, von denen einige auch heute noch am Markt sind statt, andere Unternehmen fusionierten oder drangen ebenfalls in diesen viel versprechenden Markt mit Eigenentwicklungen ein. Microsoft investierte beispielsweise mehrere Millionen Dollar in einen Kooperationsvertrag mit Lernout & Hauspie, um deren Spracherkennungstechnologie in eigenen Produkten einsetzen zu können. Außerdem wurden von Microsoft, das zunehmend stärker expandierte, Unternehmen übernommen, die in diesem Forschungsbereich bereits große Fortschritte vorweisen konnten, wie etwa Entropic, die zu dieser Zeit das weltweit genaueste Spracherkennungssystem entwickelt hatten. In fKapitel 2, Entwicklungshistorie, erfahren Sie Näheres über die Entwicklung der Sprachtechnologie bei Microsoft. Lernout & Hauspie übernahm derweil Dragon Systems für 640 Millionen Dollar. Im Jahre 2001 wurden sie selbst von ScanSoft geschluckt, zwei 3
http://www.darpa.mil
1.2 Desktopbasierte Sprachsteuerung
5
Jahre später übernahm das Unternehmen auch noch SpeechWorks. Außerdem wurde ein Partnervertrag mit IBM für den Vertrieb der ViaVoiceProdukte geschlossen, ScanSoft selbst brachte die Software Dragon NaturallySpeaking auf den Markt. Diese beiden Produkte bzw. die darauf basierenden Technologien stellen nach Angaben der Hersteller derzeit die weltweit führenden Spracherkennungssysteme dar.4 Mit der Ausdehnung des Internet ab 1990 und der damit verbundenen Möglichkeit, von überall aus auf der Welt auf Daten zugreifen oder Daten verschicken zu können, entwickelten sich neben den bekannten Textauszeichnungssprachen HTML und XML weitere Derivate, um auch die Spracherkennung über den Browser oder das Telefon zu ermöglichen. Die beiden bislang am weitesten verbreiteten Erweiterungen sind VoiceXML und SALT, über die Sie in den fKapiteln 1.4 und 1.5 mehr erfahren. Daneben existieren nach wie vor die „klassische“ Variante des MenschMaschine-Dialogs innerhalb eigenständiger, auf dem Einzelplatzsystem ablaufender Programme, sowie die bereits genannte Möglichkeit der Sprachsteuerung über das Telefon. Beide Techniken werden im Folgenden näher betrachtet.
1.2 Desktopbasierte Sprachsteuerung In diesem Kontext geht es um die Sprachsteuerung in dialogorientierten Anwendungen wie beispielsweise Microsoft Word oder dem Tool RoboScreenCapture5, mit denen die Texte und Bildschirmabbildungen (Screenshots) für dieses Buch erstellt wurden. Die lokale, nicht notwendigerweise vernetzte Anwendung wird dazu auf dem Einzelplatzsystem gestartet, und mittels eines Mikrofons lassen sich Befehle an das Programm verschicken. Zusätzlich ist auch die „herkömmliche“ Arbeitsweise mit der Tastatur bzw. der Maus möglich. Anwendungen, die sich anhand verschiedener Techniken steuern lassen, werden auch multimodale Applikationen genannt. Nähere Informationen dazu finden Sie in fKapitel 1.4, Multimodale Sprachsteuerung. Der Anwender bedient die Applikation über eine grafische Schnittstelle (Graphical User Interface, GUI). Desktopbasierte sprachgesteuerte Anwendungen für das Windows-Betriebssystem nutzen zum Beispiel COMSchnittstellenaufrufe und setzen auf dem Microsoft Speech SDK auf, das diese Schnittstellen zur Verfügung stellt. Diese Applikationen werden mit einem entsprechenden nativen Compiler für die Windows-Plattform er4 5
http://www.scansoft.de/company/ sowie http://www.scansoft.com/viavoice/ http://www.ehelp.com/products/roboscreencapture/
6
1 Spracherkennung und Sprachsteuerung
stellt – die gesamte Sprachsteuerung ist also in der binären Einzelplatzanwendung gekapselt. Weitere Informationen zu COM finden Sie auch in fKapitel 2.1, Von COM zu .NET. Ähnlich wie ein Wörterbuch können sprachgesteuerte Applikationen durch neue Einträge – in diesem Fall Aktionen – erweitert werden. Welche Einsatzmöglichkeiten sich dabei ergeben, wird in fKapitel 3, Überblick über die Einsatzmöglichkeiten, detaillierter erläutert.
1.3 Webbasierte Sprachsteuerung Während bei einer desktopbasierten sprachgestützten Anwendung der Client eine modale (Standalone-)Applikation ist, stellt bei der webbasierten Sprachsteuerung der Browser den Client dar. Modale Dialoge sind zwar auch mit einem Browser – etwa durch Einsatz von Scriptsprachen bei der Datenvalidierung – möglich, normalerweise findet ein Feedback aber immer über zustandslose http-GET- oder POST-Aufrufe statt. Dieser Aufwand, der betrieben werden muss, um bestimmte Ergebnisse zu erhalten, hat zwar negative Auswirkungen auf die Gesamtperformance, er wird jedoch durch wesentlich mehr Flexibilität wieder wettgemacht. Durch weiter steigende, flächendeckend hohe Bandbreiten wird kurzfristig auch der Geschwindigkeitsnachteil obsolet werden. Ein großer Vorteil ist auch, dass sich bereits fertig entwickelte Webapplikationen mit vertretbarem Aufwand durch Sprachunterstützung aufwerten lassen. Auch das Problemthema „Sicherheit“ ist bei webbasierten Anwendungen mittlerweile durch Protokolle wie HTTPS oder SSL im Griff, darüber hinaus lässt sich über PIN- und TAN-Kennziffern und Firewalls der Datenschutz weiter ausbauen. Dafür ist eine nahtlose Zusammenarbeit sowohl auf der Entwicklungs- als auch auf der Administratorenseite unumgänglich. Webapplikationen müssen dem Anwender nicht notwendigerweise eine grafische Schnittstelle zur Verfügung stellen, sondern können ebenso über einen Webserver autarke Telefonsysteme repräsentieren, die mittels Sprache (Voice-only) oder Tastencodes (Dual-Tone Multi-Frequency, DTMF) bedienbar sind. Mehr zu diesen Themen finden Sie in fKapitel 3, Überblick über die Einsatzmöglichkeiten.
1.4 Erweiterungen von Webseiten durch SALT Neben der VoiceXML-Sprache existiert seit 1992 ein weiteres, von Microsoft als eines der Gründungsmitglieder zur Umsetzung der Sprachtechno-
1.4 Erweiterungen von Webseiten durch SALT
7
logie in eigenen Systemen präferiertes Konzept: Speech Application Language Tags (SALT). Wie der Name vermuten lässt, handelt es sich hierbei um eine Spracherweiterung für (X)HTML in Form von zusätzlichen Strukturelementen und Attributen (Tags), um Webseiten mit Sprachfunktionalität auszustatten. Neben diesen XML-Elementen nutzt SALT Eigenschaften, Ereignisse und Methoden des Document Object Model (DOM). SALT erlaubt den Zugriff über multimodale oder Telefonieapplikationen auf Anwendungen, Informationen oder auch Web Services mit nahezu allen vorhandenen Devices: PCs, Tablet PCs, PDAs, Smartphones oder Telefone. Mit Ausnahme des Telefons wird bei allen anderen Geräten selbstverständlich der Einsatz eines Mikrofons für die verbale Kommunikation vorausgesetzt. Die SALT-Spezifikation wurde am 15. Juli 2002 veröffentlicht und am 13. August 2002 in der Version 1.0 zur Verabschiedung dem World Wide Web Consortium (W3C) vorgelegt. Über 70 Unternehmen – darunter namhafte wie Intel, Cisco, Philips, Samsung, ScanSoft oder SpeechWorks – haben sich bereits diesem Forum6 angeschlossen bzw. fungieren als Initiatoren. Einige von ihnen bieten eigene SALT-Browser an, andere wiederum unterstützen diese Technologie durch Frameworks oder Entwicklungsumgebungen, allen voran Microsoft. In diesem Kontext ist die .NET-Plattform eine ideale Basis, die auch von vielen SALT-Partnern unterstützt wird. Microsoft ist hier die treibende Kraft und bietet zudem durch seine große Marktpräsenz ein hohes Potential. Ende März 2003 entschied sich das aus sechs Gründungsmitgliedern bestehende Board of Directors für eine offenere Struktur, in der Sponsoren oder Unternehmen, die das Industrieforum aktiv unterstützen, weitergehende Mitspracherechte eingeräumt werden, um die Attraktivität an einer Mitarbeit zu steigern und neue Interessenten zu gewinnen. Damit Sprache als Eingabemedium genutzt werden kann, reicht SALT im HTML-Kontext aber nicht aus. Der eingesetzte Browser benötigt Unterstützung durch entsprechende Erweiterungen: Damit zum Beispiel der (Pocket) Internet Explorer „SALT-compliant“ wird, muss ein entsprechendes Speech Add-in installiert werden, und für multimodale Applikationen wird im http-Header ein Substring namens HTTP_USER_AGENT mit Modul- und Versionsangaben benötigt. Der Webserver (bei Microsoft ist dies der Internet Information Server, IIS) muss in der Lage sein, eingebettete (proprietäre) Speech Controls in SALT-Code zu rendern. Sie finden detaillierte Erläuterungen dazu in Kapitel 6, Sprachverarbeitung zur Laufzeit. 6
www.saltforum.org
8
1 Spracherkennung und Sprachsteuerung
Der Einsatz des .NET-Frameworks bietet auch unter dem Gesichtspunkt Mobility interessante Einsatzmöglichkeiten, da es für die sich verstärkt im Markt etablierende Generation der Pocket-PCs und Smartphones in Verbindung mit webbasierter Spracheingabe ideale Voraussetzungen bietet. Microsoft fasst diese Geräte unter dem Begriff „Smart Devices“ zusammen. In fKapitel 3, Überblick über die Einsatzmöglichkeiten, wird darauf näher eingegangen. Das installierte Windows Mobile 2003 Betriebssystem ermöglicht zusammen mit dem .NET Compact Framework eine Portierung bestehender multimodaler Webapplikationen (mit entsprechender Anpassung), zumal das SASDK beide Frameworks unterstützt.
1.5 Vergleichende Betrachtung von SALT und VoiceXML SALT und VoiceXML7 verfolgen – sehr vereinfacht gesagt – im Kern dasselbe Ziel: Mit Hilfe der menschlichen Stimme Anwendungen zu steuern. Während es sich bei VoiceXML um eine vollwertige Applikationssprache handelt, besteht SALT „nur“ aus ein paar XML-Tags, die in (X)HTMLSeiten eingebettet werden (das ist natürlich nicht alles und wurde im vorherigen Kapitel bereits angedeutet. Spätestens nach der Lektüre dieses Buches werden Sie dies bestätigen!) Abgesehen davon, dass VoiceXML seit 1994 existiert und daher etwas später entwickelt wurde als SALT, liegen die Unterschiede eher in der Ausrichtung – daher stehen beide Konzepte auch nicht in direkter Konkurrenz zueinander, sondern ergänzen sich, da jedes seine spezifischen Schwerpunkte setzt. Obwohl es in diesem Buch um das SASDK und daher auch um SALT geht, möchte ich Ihnen dennoch zum Abschluss dieses Kapitels kurz die auffälligsten Unterschiede und Gemeinsamkeiten beider Konzepte – ohne Anspruch auf Vollständigkeit – vorstellen.8 Gemeinsamkeiten x Unterstützung von Telefonieapplikationen (Voice-only und DTMF) x Wiedergabe von Text durch synthetisches Audio und Audiodateien x Erweiterung von HTML-, XHTML- und XML-Seiten durch Tags
7 8
http://www.voicexml.org Im Anhang finden Sie auch Literaturangaben über VoiceXML-Bücher.
1.5 Vergleichende Betrachtung von SALT und VoiceXML
Unterschiede SALT x Über 70 Mitgliedsunternehmen (maßgeblich Microsoft) x Vorlage zur W3C-Spezifikation, Version 1.0 x Fokus liegt auf multimodalen Webapplikationen VoiceXML x x x x x
Über 600 Mitgliedsunternehmen Seit 03.02.2004 W3C Proposed Recommendation Status (Version 2.0) Fokus liegt auf telefongesteuerten Anwendungen Eigene Sprache (XML-Derivat) mit eigener DTD Unterstützt alle aktuellen Browser, plattformunabhängig
9
Teil 1 Das Speech Application SDK (SASDK)
2 Entwicklungshistorie
2.1 Von COM zu .NET Um den zunehmend gestiegenen Ansprüchen der Anwender nach zusätzlicher oder erweiterter Funktionalität in Softwaresystemen nachzukommen, dabei aber die bisher erlernten Bedienungsschritte in den Anwendungen weitestgehend beizubehalten, kamen bei der Programmierung bereits frühzeitig Klassenbibliotheken zum Einsatz. Diese Bibliotheken – häufig werden auch alternativ die englischen Begriffe Framework, Application Programming Interface (API)1 oder Software Development Kit (SDK)2 verwendet – sind insbesondere hinsichtlich der Wiederverwendung von bereits erstellten (und getesteten!) Klassen und Modulen hilfreich, da sie eine relativ einfach zu handhabende abstrakte Schicht über die hardwarenahen Implementierungsdetails legen. Als eine der schnellsten und flexibelsten Programmiersprachen auf dem Markt gilt auch derzeit noch die fast durchgängig objektorientierte Programmiersprache C++. Microsoft brachte früh eine eigene Klassenbibliothek namens Microsoft Foundation Classes (MFC) speziell für diese Sprache heraus, die sich bis heute in diesem Bereich als Quasi-Standard etabliert hat, denn auch andere Anbieter wie Borland oder Watcom setzten darauf. Die darin enthaltenen Klassen und Strukturen konnten sowohl für lokale (allein stehende) als auch vernetzte (webbasierte) Softwareprojekte eingesetzt werden, zum Beispiel durch Nutzung der Internet Server API (ISAPI). Um nun aber auch Programmierern aus anderen „Lagern“ wie zum Beispiel Visual Basic oder Delphi den Zugriff auf definierte Schnittstellen zu ermöglichen, bedurfte es eines sprach- und systemübergreifenden Ansatzes. Microsoft schuf daher mit dem Component Object Model (COM)3 einen Standard für die binäre Repräsentation von Objekten, der die objekt1 2
3
Manchmal auch bezeichnet als Application Programming Infrastructure. In einem SDK sind neben der eigentlichen Klassenbibliothek normalerweise noch weitere Tools enthalten. Zu Beginn wurde COM noch unter dem Begriff Common Object Model geführt.
14
2 Entwicklungshistorie
orientierte Programmierung mit gemischtsprachlichen Architekturen ermöglicht. Letztendlich war und ist aber die Schnittstellenprogrammierung mit COM und der damit verbundenen fehleranfälligen Zeigerarithmetik (vor allem bei C++) relativ schwierig zu handhaben. Es braucht nicht nur große Erfahrung, sondern führt insbesondere bei der teamorientierten Softwareentwicklung immer dann zu Problemen, wenn Teammitglieder ausscheiden und ihr Wissen mitnehmen anstatt anstatt, ganz besonders, wenn die Software nicht ausreichend dokumentiert ist. Um diesen technischen und defätistischen Problemen zu begegnen, entwickelte Microsoft eine vollständig neue Klassenbibliothek namens .NET, und dazu passend eine Reihe neuer Programmiersprachen wie zum Beispiel C# 4, Visual Basic.NET, JScript.NET oder Managed C++. Der große Vorteil lag nun unter anderem darin, dass es nur noch ein Framework für alle Sprachen gab und damit die Möglichkeit geschaffen wurde, Projekte mit gemischten Entwicklungsteams führen und gleichzeitig auf die Vorlieben der Programmierer Rücksicht nehmen zu können. Mittlerweile gibt es eine Vielzahl von Programmiersprachen, die .NET unterstützen, darunter sogar „altehrwürdige“ Vertreter wie COBOL und Fortran, aber auch moderne wie Java oder Delphi sowie eine Vielzahl von Scriptsprachen.5 Das .NET-Framework verfolgt ein völlig neues Paradigma: Es stellt nicht nur eine Klassenbibliothek dar, sondern besteht aus einer Vielzahl voneinander abhängiger und aufeinander aufbauender effizienter Dienste, die erst im Zusammenspiel miteinander die Leistungsfähigkeit ausmachen. Bereits im Vorwort des Buches wurde darauf hingewiesen, dass das Framework beim Leser als weitestgehend bekannt vorausgesetzt wird, daher werde ich nicht näher auf einzelne Details wie CLR, CLS oder CTS eingehen. Im Anhang finden Sie eine Liste empfehlenswerter deutsch- und englischsprachiger Literatur, die über alle Sprachelemente und Techniken erschöpfend Auskunft geben. Es sei noch darauf hingewiesen, dass Microsoft intensiv an einer neuen Version 2.0 arbeitet, die derzeit noch den Codenamen „Whidbey“ trägt und voraussichtlich Mitte 2005 auf den Markt kommen soll. Darin wird es 4
5
Sprich: „C sharp“. Das Zeichen # stammt aus der Musik und bedeutet die Erhöhung einer Note um einen halben Ton. Dadurch sollte – ähnlich wie bei C++ das Doppelplus – die Verbesserung der Sprache C verdeutlicht werden. Informationen über die .NET-Sprachen von Microsoft finden Sie unter http://msdn.microsoft.com/vstudio/productinfo/whitepapers. Eine umfangreiche Liste mit Sprachen, die das .NET-Framework unterstützen, gibt es unter http://www.jasonbock.net/programming.html (auf Englisch).
2.2 Die Entwicklung des SASDK
15
eine Vielzahl von Verbesserungen und Erweiterungen insbesondere für den Webentwickler geben, aber auch die Entwicklungsumgebung Visual Studio .NET sowie die Sprache C# wird davon profitieren. Details dazu finden Sie ebenfalls auf diversen Microsoft-Seiten im Internet.
2.2 Die Entwicklung des SASDK Während Microsoft intensive Erfahrungen mit der Sprachtechnologie sammelte, entstand parallel dazu eine COM-basierte Klassenbibliothek, mit der sich beispielsweise unter Visual C++ und Einsatz der MFC dialogorientierte sprachgesteuerte Anwendungen erstellen ließen. Diese Bibliothek hieß schlicht Speech SDK und wird seitdem – unregelmäßig aktualisiert – als kostenloser Download ins Internet gestellt. Die älteste derzeit noch erhältliche Bibliothek in der Version 4.0a steht nur noch aus Gründen der Abwärtskompatibilität zur Verfügung, und basiert auf frühen Spracherkennern wie Whistler und Whisper. Eine noch ältere Version steht nur noch Kunden zur Verfügung, die Zugang zum Microsoft Developer Network (MSDN) besitzen. Die derzeitige Fassung trägt die Versionsnummer 5.1 und ist in der Lage, mit der Win32 Speech API (SAPI) umzugehen, die Windows Automation unterstützt. SAPI ist eine Middleware, gegen die sowohl Anwender des SDK als auch Anbieter von Speech Engines programmieren. Von Microsoft werden dem SDK frei distributierbare Text-to-Speech-Engines (TTS) sowie Speech Recognition Engines in den Sprachen „U.S. English“, „Simplified Chinese“ und „Japanese“6 zur Verfügung gestellt. Kurz nach Einführung des .NET-Frameworks wurde auch eine .NETVariante des Speech SDK entwickelt. Am 7. Mai 2002 kündigte Microsoft auf der AVIOS Speech Expo in San Jose (Kalifornien) die Version 1.0 Beta 1 an, das als bislang erstes und einziges Webentwicklungstool auf den Speech Application Language Tags (SALT) aufsetzt. Nähere Informationen zu dieser Spezifikation finden Sie in Kapitel 6.1. Seit der Beta 3 heißt diese Bibliothek nun offiziell Microsoft Speech Application SDK (SASDK). In Tabelle 1 sind – soweit mir entsprechende Informationen vorlagen – alle veröffentlichten Versionen sowie deren Erscheinungstermine aufgeführt. Die Angaben basieren auf Daten von den Microsoft-Seiten sowie aus den Informationen des Microsoft Developer Network (MSDN). Da die ersten beiden Ausgaben des Speech SDK unter .NET durch neuere ersetzt wurden, sind sie (leider) nicht mehr verfügbar. 6
Nähere Details und Angaben zum Download der aktuellsten Bibliotheken finden Sie auch unter http://www.microsoft.com/speech/download/.
16
2 Entwicklungshistorie Tabelle 1. Versionsverlauf des Speech Application SDK
Bezeichnung
Version
Datum
Anmerkung
Speech SDK (SAPI)
3.0 4.0a 5.0 5.1 1.0 Beta 1 1.0 Beta 2 1.0 Beta 3 1.0 Beta 4 1.0 Final 1.1 Beta
15.05.1998 1999 12.01.2001 März 2003 Mai 2002 Okt. 2002 Aug. 2003 Nov. 2003 7. 5.2004 31.12.2004
Nur MSDN
.NET Speech SDK .NET Speech Application SDK
Nur MSDN n. mehr erhältl. n. mehr erhältl. n. mehr erhältl. n. mehr erhältl.
Bevor ich Sie kurz mit dem Speech Server und den Telephony Services vertraut mache, sollten der Vollständigkeit halber noch ein paar Begriffe erklärt werden, die in den vorherigen Abschnitten bereits erwähnt wurden. Windows Automation Mit Automation, Windows Automation oder OLE Automation wird die Fähigkeit eines Objekts (oder einer anderen Entität) bezeichnet, mit einem anderen Objekt zu kommunizieren, genauer gesagt, einen Datenaustausch durchzuführen oder den Aufruf von Schnittstellen zu gestatten. Die Einheiten selbst sind entweder Anwendungen oder so genannte ActiveX-Controls – wesentlich ist, das alle Kommunikationspartner COM unterstützen. So ist es zum Beispiel in einer Windows-Umgebung (und nur da) möglich, in Word die Funktionalität des Internet Explorers zu nutzen, oder in Excel die Textfunktionen von Word. Durch Automation lassen sich Dynamic Link Libraries (DLL) aufrufen, wie etwa SAPI. Diese Bibliothek stellt per se kein Interface zur Verfügung, bietet also keine visuellen Darstellungsmöglichkeiten an. Der Einsatz von DLLs erfordert kein Neukompilieren des sie benutzenden Programmcodes, da diese Bibliotheken beim Programmstart automatisch geladen werden und sofort zur Verfügung stehen. Automation als komplexe Technologie beherbergt Windows-spezifische Modelle, die unter den Begriffen ActiveX, COM und COM+ bekannt wurden, und geht auf Object Linking and Embedding (OLE) zurück. Ähnlich wie .NET ist die Automation-Programmierung sprachunabhängig, da sowohl Visual Basic, C++, JScript oder irgendeine andere COM-unter-
2.2 Die Entwicklung des SASDK
17
stützende Programmiersprache von Fremdanbietern eingesetzt werden kann, wobei hier C++ als „unhandlichste“ Variante auftritt.7 Bevor die Beschreibung der Speech Engines folgt, empfehle ich einen Blick auf die Struktur der SAPI-Layer, um zu verdeutlichen, wie die Kommunikationsstränge verlaufen. Für jede Richtung, also für die Spracheingabe sowie die Sprachausgabe, stehen COM-Schnittstellen zur Verfügung. Darüber hinaus lassen sich unabhängig von einer Sprach-Engine mittels der XML-Schemadefinition „sapi.xsd“ Parameter wie Geschwindigkeit oder Lautstärke beeinflussen. Das Device Driver Interface (DDI) wird von Speech-Engine-Anbietern genutzt, um die hardwarenahen Ausprägungen zu programmieren.
Abb. 2.1. Schematischer Aufbau der SAPI-Layer
Text-to-Speech Engines (TTS) Der erste Typ der SAPI-Engine unterstützt die computergesteuerte Sprachausgabe, die auch unter dem Begriff Text-to-Speech-Engine oder kurz TTS geführt wird. Dieser zusammen mit dem Betriebssystem installierte Systemtreiber führt im einfachsten Fall die Wiedergabe von Texten in Form von Strings mit einer synthetischen Stimme aus. Das Stimmprofil lässt sich dabei zwischen drei voreingestellten Avataren wählen (siehe auch Kapitel 9.1, Künstliche Wiedergabe), die auch separat von den Microsoft-Seiten heruntergeladen werden können. Es gibt weitere TTS-Engines von Drittanbietern, die unter anderem für spezielle Einsatzbereiche in der Ausgabe optimiert sind, wie etwa Medizin oder Technik, außerdem existieren diverse Sprachanpassungen zum Beispiel für Deutsch oder British English. TTS-Engines sollten normalerweise 7
Das gilt natürlich nicht für diejenigen Entwickler unter Ihnen, die C++ mit der Muttermilch aufgesogen haben und daher virtuos mit Referenzzählern und Zeigerarithmetik umzugehen verstehen!
18
2 Entwicklungshistorie
in der Lage sein, die zwei wesentlichen Methoden zur Sprachsynthese umzusetzen: Formantsynthese und Konkatenative Synthese8. Bei der Formantsynthese generiert die TTS eine künstliche Sprachausgabe, die auf linguistischen Rollen und Modellen basiert. Dabei wird durch den Einsatz diverser Filter die Natürlichkeit der menschlichen Stimme, die durch Mund- und Lippenform, Gaumen, Rachen, Kehlkopf und andere orale Merkmale geprägt ist, zu simulieren versucht. Die digitale Ausgabe ist bereits sehr authentisch, dennoch unverkennbar als Computerstimme zu identifizieren. Die Berechnungen erfolgen anhand von aufeinander aufbauenden Wahrscheinlichkeitswerten (genauer: Erkennungsraten), die auch während der Ablaufphase mittels SML angezeigt werden und sich zudem manuell konfigurieren lassen. Nähere Auskünfte erhalten Sie sowohl in fKapitel 5, Speech Controls im Visual Studio .NET, als auch in fKapitel 9.4, Die Semantic Markup Language. Bei der konkatenativen Synthese wird einen anderer, pragmatischer Weg verfolgt: Da nichts so echt ist wie die menschliche Stimme selbst, kommen bei diesem Verfahren Audiodateien zum Einsatz, die Worte, Sätze oder Satzfragmente beinhalten. Durch Aneinanderreihung (engl. to concatenate: verknüpfen) dieser Audioelemente lassen sich dann mit einiger Akribie neue Wörter und Sätze zusammenstellen. Dieses Verfahren ist entsprechend aufwändig und – sofern professionelle Sprecher daran beteiligt sind – auch verhältnismäßig teuer. Die Ausgabequalität ist jedoch hervorragend, vor allem wenn sie hochwertig produziert wird. Der Einsatz konkatenativer Synthese ist aber nicht in allen Fällen sinnvoll. Zum Beispiel ist er nicht praktikabel, wenn es um die Ausgabe unvorhersehbarer Texte geht, wie etwa beim Vorlesen von E-Mails oder bei der dynamischen Generierung von Texten (Strings) zur Laufzeit. Mehr Details zur Vorgehensweise bei der Programmierung mit dem SASDK finden Sie auch in fKapitel 9.2, Natürlichsprachliche Wiedergabe. In Telefonie-Anwendungen sind wegen der relativ geringen Bandbreite komprimierte und auf 44,1 KHz gesampelte Monoaufnahmen in 16 Bit jedoch völlig ausreichend. Weitere Informationen dazu gibt es in Kapitel 3.2, Voice-only Applikationen. Speech Recognition Engine (SR) Spracherkenner oder Speech Recognizer wandeln die menschliche Stimme, die über ein Mikrofon oder Telefon an die Applikation geschickt wird, wieder in Strings um. Damit ist die Speech Recognition Engine das Gegenstück zur Text-to-Speech-Engine, mit dem Unterschied, dass die Ein8
Es existiert noch die Artikulatorische Synthese, die aber wegen ihres hohen Rechenbedarfs und der bislang rückständigen Forschung hier keine Rolle spielt.
2.2 Die Entwicklung des SASDK
19
gabe immer natürlich (also durch eine Person) erfolgt, die Ausgabe wahlweise natürlich (als Audio) oder synthetisch. Bei der Spracherkennung ist darüber hinaus noch eine Unterscheidung zwischen aktiver und passiver Reaktion zu treffen. Bei der aktiven Umsetzung der gesprochenen Worte auf dem Zielsystem kann eine Steuerung des Empfängers ermöglicht werden, da die umgewandelten Strings als Befehle interpretiert werden. Dadurch ist ein Dialog möglich, um zum Beispiel Überweisungstransaktionen durchzuführen. Die passive Umsetzung führt lediglich zur Ausgabe der gesprochenen Worte, zum Beispiel in Form von Texten auf dem Bildschirm. Hier ist als Einsatz ein Schreib- oder Diktierprogramm vorstellbar. Weitere Beispiele für konkrete Einsatzzwecke – die keinesfalls den Anspruch auf Vollständigkeit erheben – finden Sie in Kapitel 3. Bei der Spracherkennung ist eine Audioausgabe als Bestätigung – egal ob natürlich oder künstlich – nicht zwingend notwendig („stille Umsetzung“). So verarbeiten viele Programme lediglich die Spracheingabe, und die Ausgabe von Informationen erfolgt entweder über Bildschirmmitteilungen, oder es werden gesprochene Befehle in Aktionen transformiert, wie beispielsweise in Microsoft Office (Word und Powerpoint)9 oder bei der Software „RoboScreenCapture“. Gerade hier ist es sehr sinnvoll, um unnötige Tastatur- anstatt oder Mauseingaben zu vermeiden.
Abb. 2.2. Die Sprachsteuerung bei RoboScreenCapture basiert auf SAPI
9
Dies gilt allerdings bislang nur für die Versionen in USA, Japan und China.
20
2 Entwicklungshistorie
2.3 Microsoft Speech Server (SES, TAS und TIM) Im Frühjahr 2003 wurde von Microsoft eine umfassende Sprach- und Telefonieinfrastruktur angekündigt, die auf ursprünglich zwei aufeinander abgestimmten Serversystemen basieren sollte: Speech Server und Telephony Server. Die Funktionalität des Telephony Server ist mittlerweile im Speech Server integriert, so dass es in der derzeitigen Fassung nur noch den Microsoft Speech Server (MSS) als Entwicklungs-, Test- und Managementplattform gibt.10 Der MSS stellt sich als vollständiges Interactive Voice Response-System (IVR) dar, welches unter Einsatz des SASDK als Unternehmenslösung für Telephony (DTMF)-, Voice-only- und Multimodal-Applikationen designed wurde. Der Fokus liegt dabei auf Hochlastverfügbarkeit, zum Beispiel für Callcenter, Buchungssysteme oder als flexible (Voice-) Kommunikationsplattform für Mitarbeiter. Betriebssystemvoraussetzung für den Einsatz des Speech Server (2004) ist die englische Fassung des Windows Server 2003 sowie das .NET Framework 1.1. Im Kern besteht der MSS aus zwei Komponenten: den Speech Engines Services (SES) sowie den Telephony Application Services (TAS). Während die SES für die Spracherkennung und -wiedergabe zuständig sind, kontrollieren die TAS in Verbindung mit dem Telephony Information Manager (TIM) die Verbindungen vom und zum Anwender, wenn dieser über ein Telefon mit dem Speech Server in Verbindung tritt. Der TIM ist bewusst als flexible Lösung mit Schnittstellen zu Drittanbietersystemen entwickelt worden. Die SES ermöglichen die Verbindung von Remote Clients über TCP/IP und SOAP (zum Beispiel via Pocket PC). Dabei wird durch Engine pooling die simultane Abarbeitung mehrfacher, gleichzeitiger Sprachanfragen geregelt, und zwar sowohl intern als auch extern, also für Spracherkennung und -ausgabe. Grammatiken, Audiodateien oder Promptdaten(banken) werden im Cache vorgehalten und erhöhen damit die Gesamperformance, da auf diese Elemente permanent zugegriffen werden muss. Außerdem unterstützen die SES Standardmechanismen eines Servers wie Verwaltung, Monitoring und Logging. Innerhalb der SES werden SR-, TTS- und DTMF-Engine Instances verwaltet. Die TAS stellen die Schnittstelle vom Telefon11 oder Handy zum SAS her. Auch die TAS ermöglichen das Management simultaner Anfragen
10
11
Derzeit ist der Microsoft Speech Server leider nur in den USA erhältlich. Aktuellste Informationen finden Sie unter http://www.microsoft.com/speech. Mit „Telefon“ sind schnurgebundene Telefone (auch im Auto) gemeint.
2.3 Microsoft Speech Server (SES, TAS und TIM)
21
durch SALT Interpreter pooling. Sie unterstützen DOM und verwalten Jscript (.NET), speziell für die Entwicklung von voice-only Applikationen.
Abb. 2.3. Interne und externe Kommunikation beim Microsoft Speech Server
Jeder SALT-Interpreter ist im TIM registriert, über den die Kommunikation zum Beantworten oder Beenden von Smex-Nachrichten (mehr dazu in Kapitel 5.1.17, SmexMessage) gemäß XML-formatierten Übertragungsstandards ECMA-26912 sowie ECMA-323 gesteuert wird. Bei Bedarf wird über einen Media und Speech Manager die Verbindung zum SES hergestellt, um Spracherkennung oder -ausgaben zu realisieren. Durch entsprechende Telefonadapter, die dem TIM angeschlossen sind, lassen sich auch komplexe Telefondienste für den Applikationsentwickler handhabbar gestalten und steuern. Dazu gehören unter anderem Treiber, die die Kommunikation mit Telefonkarten, digitalen und analogen Leitungen sowie Telefon- oder Nebenstellenanlagen (Private Branche Exchange, PBX) regeln. 12
Diese (und weitere) Standards sind als Spezifikation des Standardisierungsgremiums ECMA (European Computer Manufacturer Association) unter dem Begriff Services for Computer Supported Telecommunications Applications (CSTA) zusammengefasst.
3 Überblick über die Einsatzmöglichkeiten
Nachfolgend werden die drei typischen Szenarien beschrieben, bei denen sprachgesteuerte Anwendungen eine Rolle spielen. Dabei wird ausschließlich auf den Einsatz des SASDK unter den beiden .NET FrameworkVarianten Bezug genommen. Die Beispiele der Anwendungsgebiete sind selbstverständlich nicht komplett, denn die Möglichkeiten sind zu zahlreich, als dass sie allumfassend beschrieben werden könnten. Möglicherweise werden Ihnen weitere interessante Beispiele einfallen, die Sie vielleicht bei Ihrer eigenen Arbeit ein- und umsetzen können.
3.1 Multimodale Applikationen In den vorangegangenen Kapiteln war bereits die Rede davon, dass es möglich ist, webbasierte Applikationen zu entwickeln, die sich nicht nur mittels Tastatur oder Maus, sondern auch per Stift und vor allem durch Sprache bedienen lassen. Letzteres wird durch den Einsatz des SASDK erst praktikabel, und diese große Variabilität der Bedienmöglichkeiten wird unter dem Begriff Multimodalität zusammengefasst. Multimodale Applikationen besitzen den großen Vorteil, dass sie den Anwender nicht zwingen, seine Eingaben nach einer bestimmten Vorgehensweise durchzuführen. Diese Wahlfreiheit hat aber auch ihren Preis, denn es ist stets zu prüfen, ob der zusätzliche Entwicklungsaufwand in einem adäquaten Verhältnis zum Nutzen steht. Außerdem widerspricht es allgemein empfohlenen Designrichtlinien, da ein Anwender – vor allem bei Telefonie-Anwendungen – vorher informiert werden sollte, ob Tasteneingaben oder Spracheingaben erlaubt sind. In fTeil 4, Designkriterien und Best Practices, finden Sie für die verschiedenen Applikationstypen einen Richtlinienkatalog mit Bewertungsfaktoren und Vorschlägen, der Ihnen bei der Berücksichtigung wichtiger Kriterien vor der Entwicklung eigener sprachgestützter Webapplikationen helfen kann.
24
3 Überblick über die Einsatzmöglichkeiten
3.1.1 Technische Voraussetzungen Zum Einsatz können multimodale Applikationen in der Praxis sowohl auf Desktoprechnern als auch mobilen Geräten wie Laptops, Notebooks, Tablet PCs, Pocket PCs, PDAs oder Smartphones kommen, denn das SASDK unterstützt beide .NET Frameworks. Glücklicherweise ist die Webentwicklung unter .NET sehr flexibel handhabbar, denn sowohl das .NET-Framework als auch das .NET Compact Framework sind in vielen Bereichen kongruent, was die Entwicklung für oder die Portierung auf Windows CE(.NET) sehr erleichtert. Neben dem Speech Application SDK stehen auch das Pocket PC 2003 SDK sowie das Smartphone SDK auf den Internetseiten von Microsoft zum kostenlosen Download zur Verfügung. Für eine desktopbasierte multimodale Anwendung unter .NET benötigen Sie neben den Standardeingabemedien Tastatur und Maus zusätzlich ein Mikrofon (besser ist ein Headset). Smartphones (Handys mit PDAUnterstützung oder PDAs mit Telefoneinheit) besitzen bereits ein eingebautes Mikrofon, sie sind aber auch je nach Modell – genau wie Handys – mittels Freisprecheinrichtung bedienbar. Interne Sprachaufzeichnungsfunktionalität ist dabei für den Einsatz multimodaler Applikationen ohne Belang. Die Sprachsteuerung läuft bei webbasierten Applikationen unter Einsatz des SASDK, andernfalls benötigen Sie das aktuelle Speech API. Nähere Informationen dazu finden Sie in fKapitel 1.2, Sprachsteuerung, in fKapitel 1.3, Webbasierte Sprachsteuerung sowie in fKapitel 2.2, Die Entwicklung des SASDK. 3.1.2 Anwendungsgebiete Web Kiosk In einem Eingangs- oder Aufenthaltsbereich lassen sich Web KioskSysteme zur multimedialen sowie multimodalen Aufbereitung von Unternehmens- oder Produktinformationen platzieren. Auch für Bildungs- oder Forschungseinrichtungen ist ein Web Kiosk für Besucher oder Mitarbeiter ein sinnvolles Instrument, um schnell und komfortabel Informationen zu suchen und zu präsentieren. Ein Web Kiosk lässt sich auch außerhalb von Gebäuden einsetzen, zum Beispiel als Infoterminal für Touristen. Lern- und Schul(ungs)systeme Web- und desktopbasierte, sprachgesteuerte Applikationen können sinnvoll im schulischen Bereich zum Einsatz kommen, wenn es darum geht, Wissensvermittlung und Lernerfolg zu kombinieren. Sprachförderung ist
3.1 Multimodale Applikationen
25
ebenso ein Einsatzbereich wie Infotainment. Wichtig für die Akzeptanz ist auch hier eine professionell aufbereitete, natürliche Sprachausgabe. Des Weiteren ist das Erlernen neuer Software sowie der allgemeine Umgang mit (webbasierten) Programmen insbesondere für EDV-Anfänger durch Sprachsteuerung erheblich einfacher und komfortabler, da sie quasi ohne Vorkenntnisse an die Funktionsweise herangeführt werden und schnell zu Ergebnissen gelangen, ohne gleich zu Beginn komplizierte Tastenkürzel oder versteckte Menübefehle herausfinden zu müssen. Medizinischer Bereich Gerade die multiplen Möglichkeiten der Bedienung prädestinieren multimodale Anwendungen für den medizinischen und Pflegebereich. Menschen mit manueller Behinderung sind dann in der Lage, (webgestützte) Anwendungen mittels Sprache zu bedienen. Aber auch andere Bereiche sind vorstellbar, etwa bei der Visite eines Patienten mit gleichzeitiger Diagnoseerstellung mit einem Tablet PC oder Pocket PC (ambulante Diagnostik) oder bei Operationen unter Zuhilfenahme elektronischer, sprachunterstützer Geräte. Spiele Es gibt im Unterhaltungsbereich eine große Anzahl so genannter Multiplayer-Games, die über eine dezidierte, schnelle Leitung (oft Peer-to-Peer) gesteuert werden, und bei denen durch den Einsatz von Sprache – sowohl zu Steuerung als auch zur Kommunikation mit den Mitspielern – das Spiel zusätzlich an Reiz gewinnt.
3.2 Voice-only Applikationen 3.2.1 Technische Voraussetzungen Reine sprachgesteuerte Anwendungen kommen ohne visuelles Interface aus und benötigen als Client-Frontend keinen Browser, sondern ein Telefon bzw. Headset1. Das Rendern der Webseiten, die Sprachkomponenten beinhalten, erfolgt in einem Webserver. Voice-only Applikationen werden meistens in lastintensiven Bereichen eingesetzt und benötigen daher eine stabile Umgebung, wie sie durch den Speech Server zur Verfügung gestellt werden kann. Für den Test zur Entwicklungszeit kann der fTelephony Application Simulator (TASim) eingesetzt werden, der von der Basisfunktionalität 1
Dies gilt selbstverständlich auch für VoIP-Anwendungen (Internettelefonie).
26
3 Überblick über die Einsatzmöglichkeiten
dieselben Bedieneingaben ermöglicht wie der Speech Server. Dies beinhaltet den Vorteil, fertig gestellte Anwendungen quasi nahtlos von der Test- and die Produktivumgebung auszurollen. Die im SASDK enthaltenen Speech Controls für Voice-only Applikationen sind gleichzeitig in der Lage, auf DTMF-Eingaben zu reagieren. Wie bei den multimodalen Anwendungen bereits erwähnt erlaubt das SASDK den Betrieb auf Geräten, die auf dem Windows Mobile Betriebssystem aufsetzen. 3.2.2 Anwendungsgebiete Bei der Voice-only Benutzung geht es immer um Aktionen, die ein Anwender über das Telefon per Sprachbefehl durchführt. In einigen Systemen ist die Navigation sowohl über artikulierte Kommandos als auch über Tasteneingaben möglich. Diese Applikationen werden auch als Natürlichsprachliche Dialogsysteme (NDS) bezeichnet. Die meisten Anwendungen sind nicht benutzerspezifisch, das heißt, sie können einen Benutzer nicht anhand seiner Stimme erkennen, sondern reagieren lediglich auf definierte Befehle, die sie aus einem Befehlspool extrahieren. Zum einen wäre der Aufwand sehr hoch, da für alle Benutzer (Kunden) ein individuelles Stimmprofil angelegt werden müsste, andererseits ist eine fehlertolerante Programmierung äußerst schwierig zu realisieren, da non-deterministische Umstände wie Erkältung, Heiserkeit, Stimmbruch usw. die Erkennungsrate negativ beeinflussen. Um dennoch individuelle Dateneingaben berücksichtigen zu können, wird zusätzlich durch das Voice User Interface (VUI)2 mittels Kennwortoder Kennzifferabfrage das Profil und damit die Berechtigungsebene ermittelt. Daher werden nachfolgend nur Beispiele genannt, bei denen durch eine neutrale Befehlserkennung sinnvolle Ergebnisse erzielbar sind. Die Applikation wird entweder durch das System oder den Anwender durch Auflegen des Hörers beendet. Bestell- und Buchungssysteme Ein typischer Einsatzbereich für Voice-only Applikationen sind Bestellsysteme, bei denen der Kunde durch ein logisches und einfaches Frage- und
2
Ein VUI ist ein „virtuelles“ GUI – genau genommen lassen sich Menüstrukturen ähnlich wie bei einer grafischen Repräsentanz abbilden, nur dass im akustischen Fall die einzelnen Ebenen und Einträge mittels Spracheingaben angesteuert und ausgewählt werden. Die Komplexität einer visuellen Navigationsstruktur ist jedoch nur ansatzweise übertragbar.
3.1 Multimodale Applikationen
27
Antwort-Verfahren seine Order aufgeben kann. Folgende Situation zeigt exemplarisch eine derart geführte Kommunikation: Anrufer: Wählt die Telefonnummer des Onlinedienstes. VUI: „Guten Tag. Hier ist der telefonische Bestellservice von MyBook3. Was kann ich für Sie tun?“ Anrufer: „Bitte liefern Sie mir die aktuelle CD von Pink Floyd.“ VUI: „Tut mir leid, wir versenden keine CDs. Möchten Sie vielleicht ein Buch bestellen?“ Anrufer: „Hmm – dann hätte ich gerne das neue Buch von Philip Roth.“ VUI: „Einen Moment bitte.“ Kurze Pause. „Sind Sie bereits Kunde bei uns?“ Anrufer: „Meine Kundennummer lautet: 0-8-1-5-4-7-1-1.“ VUI: „Hallo, Herr Schuster. Wie lautet bitte Ihre PIN?“ Anrufer: „6-6-A-0-D.“ VUI: „Die PIN ist leider nicht korrekt. Wie lautet bitte Ihre PIN?“ Anrufer: „6-9-A-0-D.“ VUI: „Vielen Dank. Das Buch kostet 34 Euro 95 Cent. Wie möchten Sie bezahlen?“ Anrufer: „Mit meiner Kreditkarte. Visa.“ VUI: „Einen Moment bitte.“ Kurze Pause. 3
Zum Zeitpunkt der Skripterstellung war diese Domain noch nicht vergeben…
28
3 Überblick über die Einsatzmöglichkeiten
„Die Bestellung ist abgeschlossen.“ Kurze Pause. „Darf ich noch etwas für Sie tun?“ Anrufer: „Nee, das war’s.“ VUI: „Vielen Dank für die Bestellung, Herr Schuster. Auf Wiederhören.“ Verbindung wird beendet. Das obige Beispiel lässt sich auch auf andere Bereiche übertragen und weist einige interessante Details auf, die ich für erwähnenswert halte: x Das System ist fehlersensitiv (es dürfen nur Bücher, aber keine CDs bestellt werden) x Kernaussagen „Kreditkarte“ werden aus umgangssprachlichen Sätzen herausgefiltert x Die Anwendung selbst unterbricht den Anrufer nicht und bleibt immer höflich x Dateneingaben sind sicher (Kundennummer und PIN identifizieren und legitimieren den Benutzer) x Der Bestellvorgang ist einfach und benutzerfreundlich x Benutzer müssen auf Fragen nicht mit „ja“ oder „nein“ antworten, das System erkennt implizit die Beantwortung anhand der getroffenen Aussage („Sind Sie bereits Kunde…?“) x Einzelne Sätze („Vielen Dank“, „Einen Moment bitte“) oder Satzfragmente („für Sie tun“) werden wiederholt verwendet, jedoch in unterschiedlichen Kontexten. x Kurze Pausen (zum Suchen in der Datenbank) leitet das System durch Hinweise ein. Anschließend übernimmt es wieder die Kontrolle und beginnt mit weiteren Abfragen x Die Kundennummer ließe sich auch über die Tastatur eingeben, anstatt sie aufzusagen Was in dem Beispiel nicht berücksichtigt wurde ist die Möglichkeit, dem System „ins Wort zu fallen“ (barge-in) oder Abfragen zu überspringen, um die Anwendung vorzeitig zu beenden oder getätigte Eingaben zu korrigieren. Diese Aktionen – wie alle Erweiterungen, die der Steigerung des Komforts dienen – verursachen verständlicherweise zusätzlichen Entwicklungsaufwand, insbesondere bei der Erstellung von Grammatiken und Sprechertexten. Durch den Einsatz entsprechender Designpatterns lässt sich dieser Aufwand verringern, da wiederkehrende Aufgaben schematisiert und strukturiert abgelegt werden können und bei Bedarf schnell für weitere (gleichartige) Projekte zur Verfügung stehen. Redundante Strukturen und
3.1 Multimodale Applikationen
29
Elemente lassen sich bei maßvoller Archivierung und intelligentem Einsatz ebenfalls sehr flexibel weiter verwenden. Verschiedene Beispiele für einsetzbare Muster lassen sich zahlreichen Passagen dieses Buches. Sie sehen, dass eine Vielzahl von Aspekten für die erfolgreiche Umsetzung sprachgesteuerter Webapplikationen berücksichtigt werden müssen. Die Ansprüche sind bei Voice-only Applikationen auch höher als bei multimodalen Anwendungen, da das Feedback ausschließlich akustisch erfolgen kann, das heißt, der Benutzer sich auf das Gehörte verlassen muss. Alle genannten Details aus dem obigen Beispiel sind übrigens durch den Einsatz des SASDK und entsprechender Tools mit dem Visual Studio .NET realisierbar. Auskunftssysteme Neben den einleitend beschriebenen Bestellsystemen können auch die mit ihnen verwandten Auskunftssysteme für Voice-only Applikationen herangezogen werden. Als Einsatzbereiche sind Ansage- und Servicedienste oder die Abwicklung von Supportanfragen vorstellbar. Bei Ansagediensten sind die Möglichkeiten individueller Eingaben limitiert, da das Programm lediglich zu Beginn initiativ die notwendigen Parameter erfragt, für die es eine Auskunft erteilen soll. Supportsysteme benötigen dagegen zusätzliche Informationen, um zumindest begrenzt fundiert Hilfestellung leisten zu können. Grundsätzlich stellen computergesteuerte Auskunftssysteme im Vergleich zu herkömmlichen (mit Menschen besetzten) Callcentern mittelund langfristig eine kostengünstige Alternative dar. Mir ist bewusst, dass diese Aussage sehr kontrovers ist und stark polarisiert, denn sie führt zwangsläufig zu einer Rationalisierung von Arbeitsplätzen. Dennoch werden diese Anwendungen zukünftig verstärkt zum Einsatz kommen, gerade wegen des hohen Einsparpotentials. Schließlich sind Maschinen rund um die Uhr aktiv und benötigen keinen Urlaub (höchsten Wartung!). Die Akzeptanz selbst sehr kritischer Kunden wird bei einer professionell umgesetzten, natürlichsprachlichen Applikation sicher zunehmen. Es wird meines Erachtens jedoch auf absehbare Zukunft keinen vollwertigen Ersatz für eine „menschliche“ Beratung oder Dienstleistung geben können. So kann zum Beispiel der Austausch von Freundlichkeiten selbst bei Streitfragen (Support…) für den Kunden zu besseren Ergebnissen führen als dies mit einem computergestützten (unerbittlich und konsequent!) System möglich wäre.4 4
Falls Sie mir zu diesem gesellschaftspolitisch interessanten Thema Ihre Meinung mitteilen möchten und mir ein paar Zeilen schreiben wollen, würde ich mich darüber sehr freuen.
30
3 Überblick über die Einsatzmöglichkeiten
Anrufbeantworter Eine sehr nützliche Einrichtung ist der universelle, per Spracheingabe konfigurierbare Anrufbeantworter mit „XXL-Funktionalität“: Anrufweiterleitung nach Tag oder Uhrzeit, Rückruf auf unterschiedliche Endgeräte in Abhängigkeit unterschiedlicher Rufnummern, Speicherung beliebiger Ansagen oder Synchronisierung mit laufenden Office-Systemen und Faxübermittlung sind nur einige der denkbaren Möglichkeiten. Telematik Im mobilen Umfeld könnte ein Navigations- oder Erste Hilfe-Dienst als Applikation zum Einsatz kommen. Bei einigen Fahrzeugherstellern ist bereits heute eine sprachgesteuerte Eingabe von Zielen oder die Aktivierung von Notrufen möglich. Die vollautomatische Rufannahme bei einem Unfall und die Verarbeitung eingehender Informationen (etwa Unfallort und -zeit) über ein sprachgestütztes webbasiertes Callcenter (!) mit Weiterleitung an entsprechende Dienststellen wäre in diesem Zusammenhang ein sinnvolle Einrichtung.
3.3 DTMF-Applikationen Bei diesen Anwendungen handelt es sich um Tastentöne oder Ziffernfolgen, die über ein (schnurgebundenes oder schnurloses) Telefon übermittelt werden – sofern es Tone-dial Verfahren unterstützt. Die Steuerung der Applikation ist daher sehr einfach und schnell handhabbar, bei entsprechender Programmierung können sogar Menüebenen innerhalb des VUI durch „Abkürzungstasten“ übersprungen werden. Dies ist besonders für erfahrene Benutzer hilfreich, um Zeit und Geld zu sparen, denn DTMFApplikationen sind in vielen Fällen an kostenpflichtige Rufnummern gekoppelt. Genau wie bei den Voice-only Applikationen erfolgt das Feedback durch synthetische oder natürliche Sprachausgabe. Die Applikation endet nach Auflegen des Hörers. 3.3.1 Technische Voraussetzungen Für Testzwecke ist während der Entwicklungsphase der fTelephony Application Simulator (TASim) ein praktikables Hilfsmittel. Der Einsatz unter Last im Produktivbetrieb findet aufgrund der Möglichkeiten wie Lastverteilung und Skalierung unter dem Speech Server statt. Ansonsten gelten
3.3 DTMF-Applikationen
31
die für multimodale- und Voice-only-Anwendungen genannten technischen Voraussetzungen auch hier. 3.3.2 Anwendungsgebiete DTMF-Applikationen werden häufig für Kurzanfragen wie (regionale) Wetter-, Zeit- oder Wasserstandsdienste eingesetzt, sie können aber auch durchaus umfangreiche, tief geschachtelte Navigationsstrukturen besitzen, bei denen sich der Anwender bis zu der von ihm benötigten Auskunft „durcharbeiten“ muss. Sicher sind auch Sie schon einmal mit einem solchen System in Kontakt gekommen – und nicht immer hat die Bedienung Spaß gemacht… Häufig dienen diese Anwendungen auch nur als vorgeschaltete Struktur – quasi als Datenfilter – für Servicedienste, zum Beispiel bei Hotlines. Dadurch soll erreicht werden, dass der Kunde nach Eingabe bestimmter Abfrageparameter ohne weitere Umwege zum richtigen Ansprechpartner durchgestellt wird. Folgendes Beispiel mag dies verdeutlichen: Anrufer: Wählt die Nummer eines Servicedienstes. VUI: „Willkommen beim Servicedienst von Raff & Gierig.“ „Dieser Anruf ist bis zum Durchstellen an einen Kundendienstmitarbeiter gebührenfrei.“ „Privatanwender drücken bitte die Null, Geschäftskunden drücken bitte die Eins.“ Anrufer: Drückt die Taste 0. VUI: „Vielen Dank.“ „Bitte drücken Sie Eins bei technischen Fragen, Zwei bei Fragen zur Rechnung.“ Anrufer: Drückt die Taste 1. VUI: „Bitte drücken Sie Eins bei Fragen zu Notebooks, Zwei bei Desktops, Drei bei PDAs.“ Anrufer: Drückt die Taste 3.
32
3 Überblick über die Einsatzmöglichkeiten
VUI: „Sie werden nun zu einem Fachberater durchgestellt.“ „Einen Moment bitte.“ VUI endet. Bietet das System alternativ die Möglichkeit, allgemeine Informationen wie die neuesten Preise für bestimmte Artikel zu erfahren, so könnte diese Auskunft komplett gebührenfrei durchgeführt werden – erst bei der ausdrücklichen Vermittlung an einen Berater würden Kosten entstehen. Das hat für das Unternehmen den Vorteil, dass die Telefonleitungen zu Kundendienstmitarbeitern nicht ständig besetzt oder sogar überlastet sind, und die Anwender sparen bei Trivialauskünften Geld durch die (rund um die Uhr) kostenlose Auskunft des VUI, auch wenn dadurch unter Umständen deutlich mehr Zeit vergeht, bis die gewünschten Informationen vorliegen. Votingdienste DTMF-Anwendungen werden häufig auch für Umfragen, etwa bei Quizshows, eingesetzt. Die dabei anfallenden recht hohen Telefongebühren werden in Kauf genommen, wenn gleichzeitig Gewinnchancen den Kunden zum Anrufen animieren. Infodienste Bei so genannten Trivialdiensten wie Gebührenabfragen, Zeit-, Wetteroder Staumeldungen sowie der Auskunft über aktuelle, lokale kulturelle Veranstaltungen wie Zirkus-, Kino- und Theateraufführungen sind DTMFApplikationen ebenfalls sinnvoll und kostengünstig einsetzbar, insbesondere wenn es sich um sehr flache Navigationsebenen handelt, die wenig Zeit in Anspruch nehmen.
4 Installation und Anpassung
Microsoft stellt das Produkt in zwei Varianten zur Verfügung: Sie konnten es als gepackte .exe-Dateien von den Internetseiten herunterladen1, oder sich per Post aus Amerika zuschicken lassen. Dann erhielten Sie ein Ringbuch mit einer CD und dem SASDK sowie einer DVD, auf der sich eine Vollversion des Visual Studio .NET Professional in Englisch als 60-Tage Testversion befand. Außerdem waren in dem Heft einige interessante Bereiche des SASDK in Text und Bild zusammengefasst, um einen schnellen Überblick der Features zu erhalten. Sofern Sie nicht ohnehin im Besitz des Visual Studio .NET sind, ist letzteres eine praxisgerechte Lösung, um sich sowohl mit der Entwicklungsumgebung als auch der Anwendungssoftware vertraut zu machen. Allerdings dauert der – auch für Überseebesteller kostenlose – Versand von der Auftragsaktivierung (online)2 bis zu Lieferung erfahrungsgemäß mehrere Wochen. Für einen Download vom Microsoft-Server ist eine schnelle Leitung oder Geduld vonnöten, da das gesamte Paket einen Umfang von über 200 Megabyte umfasst. Allerdings besteht auch die Möglichkeit, die Dateien in kleineren Einheiten einzeln zu laden.
4.1 Hardware- und Softwarevoraussetzungen Es ist zur Vermeidung von Fehlermeldungen oder Inkonsistenzen ratsam, die Installation auf einem englischsprachigen Betriebssystem durchzuführen. Zwar werden die Speech Controls auch unter einem deutschen Webserver sowie einem deutschen Visual Studio lauffähig sein, dennoch birgt diese Vorgehensweise vermeidbare Fehlerquellen. Die Mindestempfehlungen für die Hardwareausstattung sind definitiv nicht ausreichend, um produktiv mit dem Visual Studio .NET, dem SASDK sowie dem IIS zu arbeiten, und die von Microsoft vorgeschlage1
2
http://msdn.microsoft.com/library/default.asp?url=/downloads/list/ netdevspeech.asp http://216.162.203.249/speech/ordersdk.asp?EventType=dl
34
4 Installation und Anpassung
nen Werte sind meiner Erfahrung nach eher zu konservativ ausgelegt. Die von mir erstellten Empfehlungen basieren auf eigenen Erfahrungen und entsprechen der Basisausstattung selbst zwei- bis dreijähriger Rechner vom Discounter: sie sind also durchaus praxisgerecht. Die aktuelle Rechnergeneration bietet demnach mehr als ausreichend Performance für alle Anwendungsbereiche. Hardware Prozessor Als Mindestanforderung wird ein Pentium-II mit 450 MHz benötigt. Meine Empfehlung ist ein Pentium-IV, 1.8 GHz. Arbeitsspeicher 128 MB RAM sind als Basiswert zu wenig. Ich empfehle 512 MB, vor allem wegen der spürbar höheren Geschwindigkeit in der Arbeit mit dem Visual Studio .NET. Festplattengröße Ein vollständig installiertes SASDK benötigt rund 235 MB (auf der Systempartition): falls Sie nur die Dokumentation und die Beispiele installieren möchten, wird immer noch etwa 200 MB verlangt. Lediglich die Speech Development Tools für die IDE verbrauchen 85 MB Plattenplatz. Eingabegeräte Neben der fast schon obligatorischen Maus bedarf es eines guten Mikrofons, da ansonsten die Entwicklung und der Test multimodaler Applikationen nicht praktikabel ist. Ihr System sollte zudem über einem Audioausgang für die Lautsprecher zur Sprachwiedergabe besitzen, falls sie Kopfhörer benutzen. Als Alternative bietet sich ein hochwertiges Headset an. Software Betriebssystem Möglich sind Microsoft Windows 2000, Microsoft XP Professional oder Microsoft Windows Server 2003 – jeweils mit den neuesten Servicepacks. Microsoft XP Home wird nicht unterstützt. Der Windows Server 2003 enthält bereits das .NET Framework 1.1, bei den anderen muss es nachinstalliert werden. Dringend empfohlen wird ein englischsprachiges Betriebssystem (U.S. English) und die Ausstattung mit den neuesten Updates und Patches – selbstverständlich auch für den Internet Explorer ab Version 6.
4.2 Installation von EIF und SASDK
35
Entwicklungsumgebung Microsoft Visual Studio .NET 2003 Professional/Enterprise Architect/Enterprise Developer (alle in U.S. Englisch) – oder die Trial-Edition auf der DVD des Ringheftes. Die IDE wird für die Erstellung sprachgestützter Webapplikationen unter Einsatz der im SASDK-Paket enthaltenen Speech Controls benötigt. IIS Sie sollten den Microsoft Webserver (Internet Information Services ab Version 5) installiert haben, da dieser für die Erstellung der webgestützten Anwendungen unumgänglich ist. Unterstützung für die Installation des IIS finden Sie in den Hilfeseiten Ihres Betriebssystems. Für die individuelle Konfiguration lassen sich anschließend ausführliche Informationen beim Aufruf von http://localhost im Browserfenster abrufen.
4.2 Installation von EIF und SASDK Zunächst entpacken Sie die Datei „SASDK-V1_Full.exe“ in ein beliebiges (temporäres) Verzeichnis. Alternativ können Sie auch die einzelnen „SASDK_V1_Part“-Dateien laden.
Abb. 4.1. Die gepackten Dateien werden extrahiert
Nachdem Sie nun die 16 „SASDK_V1_Part“-Dateien im Verzeichnis liegen haben, starten Sie das Programm „SASDK_Extract.exe“ und entpacken die Dateien in selbe Verzeichnis. Anschließend öffnen Sie die Kommandozeile (über Start|Run|„cmd“) und führen die Extraktion sämtlicher gepackter Installationsdateien in ein separates Verzeichnis aus, z.B. „SpeechSDK“.
36
4 Installation und Anpassung
Abb. 4.2. Entpacken der SASDK-Dateien in ein separates Installationsverzeichnis
Jetzt haben Sie alle Dateien (inklusive der „Setup“-Datei), die für den Start der eigentlichen SASDK-Installation notwendig sind. Bevor Sie jedoch mit der Installation loslegen, müssen die so genannten prerequisites vorhanden sein – genauer gesagt ist zunächst das Paket Microsoft Enterprise Instrumentation Framework (EIF) zu installieren. Ansonsten werden Sie durch eine entsprechende Fehlermeldung darauf aufmerksam gemacht. Dazu öffnen Sie das Unterverzeichnis „Prerequisites\EnterpriseInstrumentation“ und starten die Datei „EnterpriseInstrumentation.exe“. Für dieses Framework steht eine separate Informationsdatei bereit, die Ihnen nähere Auskünfte auch im Hinblick auf die Zusammenarbeit mit dem Visual Studio .NET bietet. Sie können sich während des Installationsvorgangs für ein beliebiges Verzeichnis sowie die Abwahl von zusätzlichen Elementen neben der eigentlichen Runtime entscheiden. Werfen Sie auch noch einen Blick in das Unterverzeichnis „Updates“. Dort liegen für die Betriebssysteme Windows 2000, Windows NT und Windows XP die aktuellen „Hotfixes“ für das .NET Framework 1.1, und ich empfehle dringend, diese zu installieren (sofern Sie dies nicht ohnehin bereits durchgeführt haben) – selbst wenn Sie bereits mit dem .NET Framework 2.0 arbeiten sollten. Beginnen Sie nun mit dem Aufruf der Setup-Datei. Der InstallationsWizard führt alle notwendigen Schritte der Reihe nach durch. Sie haben die Wahl zwischen einem Complete und einem Custom Setup. Letzteres ist empfehlenswert, wenn Sie das Verzeichnis und die zu installierenden Komponenten selbst bestimmen möchten – das ist auch meine Präferenz. Falls Sie allerdings das Visual Studio .NET (noch) nicht installiert haben, ist dies ohnehin die verpflichtende Auswahlmöglichkeit.
4.2 Installation von EIF und SASDK
37
Abb. 4.3. Die individuelle Auswahl ist im Setup flexibler
Am Ende des Installationsprozesses haben Sie die Möglichkeit, nach neuesten Updates des SASDK im Internet zu suchen. Sie beenden den Prozess schließlich mit dem Button Exit. Nach erfolgreichem Abschluss auch dieser Installation gibt es einige neue Elemente, die einer näheren Betrachtung lohnen. Bevor Sie die Einstellungen für den Internet Explorer sowie die Mikrofon- und Sprachtests durchführen, werfen wir zunächst einmal einen Blick hinter die Kulissen. 4.2.1 Änderungen in den Internet Information Services (IIS) Nach der Installation des SASDK wurden einige neue (virtuelle) Verzeichnisse angelegt, die zahlreiche Beispielprogramme beinhalten – sofern Sie meinem Rat gefolgt sind und bei der benutzerdefinierten Auswahl im Setup Wizard auch den Eintrag „Sample Applications and Documentation“ aktiviert haben. Bei den Beispielanwendungen handelt es sich einerseits um zwei vollständige, erweiterbare Applikationen namens „Banking Alerts“ und „Contacts Helper“, wobei Ersteres über ein separates Setupprogramm installiert werden muss, damit es lauffähig ist. Zudem finden Sie unter dem virtuellen Unterverzeichnis „Samples“ einige kleinere Testprogramme, die über eine entsprechende Portalseite aus dem Hauptmenü heraus („Sample and Reference Applications“) oder innerhalb des Visual Studio .NET aufgerufen werden können.
38
4 Installation und Anpassung
Abb. 4.4. Virtuelle Verzeichnisse im IIS nach der Installation
Der Eintrag „aspnet_speech“ verweist auf ein IIS-Verzeichnis unterhalb von „%SystemDrive%\Inetpub\wwwroot“. Dieses enthält wiederum das Verzeichnis „client_script“, in dem sich die für die clientseitige Ablaufsteuerung notwendigen Scriptdateien befinden, die entsprechenden Pendants in Form von Speech Controls zugeordnet sind. Nähere Informationen über den Einsatz und die Funktionsweise der Skripte erhalten Sie in fTeil 2, Programmieren mit dem SASDK. 4.2.2 Änderungen in der Registrierdatenbank (Registry) Die neuen Spracheinstellungen des SASDK werden detailliert unter dem Schlüssel „HKEY_CURRENT_USER\Software\Microsoft\Speech“ abgelegt. Zusätzlich erfolgen zahlreiche Verweise und Einträge von CLSIDWerten für die Speech Console, Grammatiken, TTS-Einstellungen usw., die in der gesamten Registry redundant verstreut sind.
4.2 Installation von EIF und SASDK
39
Ich rate dringend davon ab, diese Zuordnungen manuell zu verändern, da dies zu einer nicht mehr verifizierbaren Kette von Fehlern bei der Spracherkennung führen wird. Da sowohl das SASDK als auch die systeminternen Spracheinstellungen derzeit ohnehin ausschließlich auf U.S. Englisch vorliegen, besteht dazu auch kein Anlass. Trotzdem ist zum Beispiel anhand des Schlüssels „PhoneConverters\Tokens“ erkennbar, dass auch weitere Sprachen (zukünftig) bei der Erkennung berücksichtigt werden. Ein intensiver Blick in die einzelnen Registry-Einstellungen ist auf jeden Fall aufschlussreich und empfehlenswert!
Abb. 4.5. Die systeminternen Spracheinstellungen in der Registry
4.2.3 Änderungen bei den Speech Properties Nach der SASDK-Installation erhält der Dialog „Speech Properties“ einen zweiten Reiter namens „Speech Recognition“, unter dem sich die individuellen Sprachprofile festlegen und trainieren lassen. Außerdem wird hier das Mikrofon/Headset konfiguriert und justiert. Wie bereits erwähnt existiert derzeit nur eine U.S.-amerikanische Sprachfassung, daher ist die Schaltfläche Language|Settings auch inaktiv. In späteren Versionen werden die bereits in der Registry vorgesehenen Sprachen hier hoffentlich wählbar sein. Ihre individuellen Einstellungen bezüglich Erkennungspräzision im Verhältnis zur Erkennungsgeschwindigkeit und Erkennungsempfindlichkeit
40
4 Installation und Anpassung
nehmen Sie in Recognition Profiles|Settings vor, wobei die Standardeinstellungen gut funktionieren und beibehalten werden können. Ich empfehle in jedem Fall, das Sprachtraining (Train Profile) zu aktivieren und zumindest die Basisjustierung („Introduction to Microsoft Speech Recognition“) durchzuführen. Ergänzende Sprechertexte zum Nachlesen können zu einer Verbesserung der Erkennungsrate führen, sind aber anfangs nicht unbedingt notwendig. Wird das Sprachtraining nicht zu Beginn mindestens einmal vollständig durchlaufen, kann es später zu Fehlern bei der Spracherkennung kommen.
Abb. 4.6. In diesem Dialog werden die Spracheinstellungen justiert
Meine Empfehlung für eine benutzerspezifische Adaption ist folgende: 1. Öffnen Sie unter Audio Input den Dialog Audio Input Settings und stellen Sie alle Werte auf „preferred“ oder „automatic“, sofern dies nicht bereits die Vorgabe ist. 2. Wählen Sie unter Volume für Ihr Mikrofon/Headset zunächst den höchstmöglichen Wert als Eingangsempfindlichkeit. Achten Sie auch darauf, dass die Eigenschaften (Option|Properties) dabei auf „Recording“ stehen und nicht auf „Playback“. 3. Öffnen Sie den Dialog Configure Microphone und sprechen Sie gemäß den Anweisungen. Schlägt der Pegel zu stark (roter Bereich) aus, korrigieren Sie die Eingangsempfindlichkeit. 4. Führen Sie nun unter Train Profile die individuelle Sprechererkennung in einer ruhigen Umgebung durch. Die vorzulesenden Texte stellen zugleich eine informative und hilfreiche Einführung in die Funktionsweise und den Ablauf einer Spracherkennung dar.
4.2 Installation von EIF und SASDK
41
5. Alle durchgeführten Aktionen werden abschließend gespeichert und Ihrem individuellen Profil zugeordnet. Sie können jederzeit verändert und durch ergänzende Sprachtrainings verfeinert werden. Alle Einstellungen werden zusätzlich in der Registry hinterlegt. 4.2.4 Änderungen im Visual Studio .NET Die Toolbox wird durch die Kategorie „Speech“ erweitert, in der sich sämtliche so genannten Speech Controls befinden, die Sie für die Programmierung von multimodalen, Voice-only- oder DTMF-Applikationen benötigen. Jedes einzelne Control wird im folgenden Kapitel 5, Integration in das Visual Studio .NET, detailliert beschrieben. Die Elemente lassen sich – genauso wie Sie es von anderen Komponenten gewohnt sind – per drag and drop auf die Benutzeroberfläche ziehen und dort individuell konfigurieren.
Abb. 4.7. Die neuen Speech Controls in der Toolbox
42
4 Installation und Anpassung
Die Anordnung der Speech Controls in der Abbildung 4.8 entspricht der Standardeinstellung, sie können aber nach Ihren Präferenzen angepasst werden – entweder alphabetisch sortiert und individuell arrangiert. Die Reihenfolge in Kapitel 5, wurde anhand der Gruppenzuordnung vorgenommen. Wenn Sie bereits Erfahrung mit der Komponentenentwicklung haben, werden Sie sicher nicht erstaunt sein zu erfahren, dass Sie sich eigene Speech Controls nach Ihren Bedürfnissen erstellen und in der SpeechToolbox (oder einer beliebigen anderen) ablegen können. Die Erstellung von Komponenten wird in fKapitel 11, Eigene Speech Controls näher erläutert. Alle weiteren neu hinzugekommenen Elemente, die hier noch nicht im Detail erwähnt werden sollen, beleuchtet das fKapitel 6, Editors, Wizards und andere Tools. Neu hinzugekommen ist auch der Eintrag Speech Application SDK im Dialog Options. Hier können Sie ein paar zusätzliche Feineinstellungen für ausgewählte Tools vornehmen. Die vorgegeben Werte dürfen Sie ausnahmslos übernehmen, lediglich drei Parameter wären Kandidaten für eine individuelle Anpassung:
Abb. 4.8. Weitere Einstellungen sind im Options-Dialog möglich
Speech Debugging Console Die Checkbox Edit SML ist standardmäßig nicht ausgewählt. Wird sie aktiviert, ist während des Debugging die Manipulation von SML-Ausgaben erlaubt. Um das Logdateien aufzuzeichnen, empfiehlt sich die Aktivierung der Checkbox Record Log Files. Dazu geben Sie zusätzlich den Pfad für die zu erstellende Datei an.
4.2 Installation von EIF und SASDK
43
Wave Editor In der Auswahlliste Maximum document buffer size können Sie die Größe des Zwischenspeichers für Audiodateien zwischen 1 MB und 512 MB einstellen, wobei 2 MB der Vorgabewert ist. Haben Sie sehr viel Speicher zur Verfügung, oder arbeiten Sie mit sehr großen Audiodaten, lohnt es sich durchaus, die Standardgröße zu erhöhen. Die Toolbar besitzt ab sofort drei zusätzliche Symbolleistengruppen, die wie alle anderen Standardelemente auch beliebig positioniert, angedockt, ausgetauscht und neu zusammengestellt werden können. Sämtliche Aktionsschalter in den Symbolleisten sind bereits mit Hotkeys belegt und lassen sich auch über entsprechende Kontextmenüs aufrufen.
Abb. 4.9. Die neuen Symbolgruppen.
4.2.5 Abschließende Einstellungen und Tests Nachdem alle Installationsschritte durchlaufen wurden, und auch die in fKapitel 4.2.3, Änderungen bei den Speech Properties, vorgeschlagenen Justierungen vorgenommen wurden, sollten Sie abschließend die von Microsoft vorbereitete Webseite zum Testen des Speech Add-ins für den Internet Explorer (ab Version 6 SP1) starten. Öffnen Sie dazu wie unter Abbildung 4.10 zu erkennen die „Speech Add-in Start Page“ und arbeiten Sie die in der sich öffnenden Webseite die einzelnen Punkte der Reihe nach ab. Führt die Durchführung der Tests zu Fehlern bei der Erkennung, prüfen Sie nachträglich die Einstellungen Ihres Mikrofons/Headsets, oder führen Sie erneut einen Sprachprofiltest durch.
44
4 Installation und Anpassung
Abb. 4.10. Aufruf der Webseite zum Testen des Internet Explorer Speech Add-ins
5 Speech Controls im Visual Studio .NET
Das SASDK besteht aus insgesamt vier „Komponentengruppen“, in denen Klassen und Typen zusammengefasst sind, sie sich aus bereits bestehenden Elementen des .NET Frameworks herleiten: Basic Speech Controls, Dialog Speech Controls, Application Speech Controls sowie Call Management Controls. Alle Sprachkomponenten sind im Namensraum (namespace) Microsoft.Speech.Web.UI definiert. Die in diesem Kapitel beschriebenen Speech Controls sind ausschließlich visuelle Komponenten, also Elemente, die aus dem Bereich „Speech“ der Toolbox auf eine Weboberfläche gezogen und dort justiert werden können. Eine zusammenfassende Übersicht aller Sprachkomponenten des SASDK finden Sie auf den MSDN-Seiten von Microsoft im Internet1
5.1 Basic Speech Controls Hierbei handelt es sich um Basis-Komponenten (Klassen und Typen), die Ihnen auch für die Erstellung multimodaler Webapplikationen zur Verfügung stehen. Zwei Speech Controls, die vom Namen und von clientseitig definierbaren Ereignissen her identisch sind mit ihren korrespondierenden SALT-Objekten, werden im Folgenden vorgestellt: Listen und Prompt. Wie bereits in den vorangegangenen Kapiteln mehrfach zu lesen war, geht es bei multimodalen Anwendungen darum, dass der Benutzer sie neben der herkömmlichen Art und Weise – also Maus, Tastatur oder Stift – auch mittels Sprache bedienen kann. Das visuelle Feedback bleibt erhalten, der Umgang mit diesen Applikationen ist daher intuitiv und leicht erlernbar. Besonders vorteilhaft ist auch, dass sich bislang aufeinander aufbauende Aktivitäten oder voneinander abhängige Prozeduren, bei denen bisher viele Mausklicks auszuführen waren, in einem Schritt – nämlich durch einen Befehl, der aus einem oder mehreren Sätzen bestehen kann – durchführen 1
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sasdk_getstarted /html/SDK_ProgrammersRef.asp
46
5 Speech Controls im Visual Studio .NET
lassen. Das kann bei entsprechender Übung die Produktivität und Effektivität im Umgang mit diesen Anwendungen erhöhen: Beispiel: Angenommen, Sie arbeiten mit einer sprachsensitiven Officeanwendung und möchten folgende Aktivitäten durchführen: Das gestern Abend zuletzt erstellte Excel-Dokument soll ausgedruckt und anschließend als PDF per E-Mail an Ihren Vorgesetzen geschickt werden. Außerdem möchten Sie das Dokument in XML konvertieren und in Ihr öffentliches Verzeichnis auf den Unternehmens-Dateiserver kopieren. Aktivität ohne Spracheingabe: x x x x x
Excel starten, Datei suchen und öffnen Datei in PDF konvertieren Outlook öffnen, E-Mail erstellen, PDF-Datei anhängen und versenden Excel-Datei in XML konvertieren XML-Datei in öffentliches Verzeichnis kopieren
Aktivität als Spracheingabe2: „Bitte zuletzt erstellte Excel-Datei als PDF an Herrn Dr. Müller und als XML auf den Server legen.“ Sicherlich könnte auch die Aktivität in der herkömmlichen Art auch kürzer ausfallen, wenn nämlich das zuletzt bearbeitete Excel-Dokument über die Dokumentenliste des Hauptmenüs geladen wird und das E-Mail-Programm ebenfalls bereits geöffnet ist. Dennoch ist zu konstatieren, dass die gesamte Transaktion akustisch kurz gefasst werden kann und dadurch bequem erledigt ist. Die im Beispiel verwendeten fett hervorgehobenen Worte sind so genannte Schlüsselworte, anhand derer das System die einzelnen Schritte voneinander abgrenzt, während die übrigen Satzteile als Füllstellen dienen, die vom Spracherkenner ignoriert werden (daher könnte man sie beim Sprechen auch weggelassen, aber das klingt dann doch etwas merkwürdig). InfKapitel 9, Arbeiten mit Grammatiken, werden wir uns ausführlich diesem Thema widmen. Bei webbasierten multimodalen Applikationen läuft der Prozess normalerweise nicht automatisch, sondern wird über ein Ereignis angestoßen (triggered event). Das kann zum Beispiel der Klick auf eine Schaltfläche
2
Der Einfachheit halber sei angenommen, dass in diesem Unternehmen nur ein Dr. Müller arbeitet…
5.1 Basic Speech Controls
47
sein oder die Auswahl eines Menüeintrags – der Prozessablauf in obigem Beispiel könnte also durch ein solches Ereignis ausgelöst werden. Ereignisse der Spracherkennung werden clientseitig ausgeführt, wobei zusätzlich Aufrufe an den Server (page postback bzw. roundtrip) durch Speech Controls möglich sind. Der Methodenaufruf zur Aktivierung des Spracherkenners eines DOM-Objekts lautet „Start()“, zum Anhalten wird „Stop()“ aufgerufen.
5.1.1 Listen Das Listen Control ermöglicht dem Entwickler, semantische Informationen an ein (visuelles) Element auf einer Webseite zu binden. Dazu muss mindestens eine Grammatikdatei (.grxml) mit gültigen Einträgen vorliegen. Außerdem kann das Listen Control ausschließlich oder parallel zur Sprachaufnahme eingesetzt werden. Die Anzahl der Controls auf einer Webseite ist nicht begrenzt. Das Listen Control wird wie folgt umgesetzt: ASP.NET Markup
SALT rendered HTML
|
|
Hinweis: Der Einfachheit halber werden (wie oben) Datenbindungen dem Laufzeitsystem überlassen, was einerseits von der Handhabung her durch einfache Strukturen möglich ist, sich aber andererseits durch schlechtere Performance bemerkbar macht, da die Zuordnungen erst zur Laufzeit über explizite Typkonvertierungen erfolgen können. Schneller ist (hier zum Beispiel beim Einsatz mit einer Datenbanktabelle) daher immer der explizite Cast:
88
5 Speech Controls im Visual Studio .NET
Abb. 5.10 Ein ListSelector Grammar Template in der Bearbeitung
Answers x SemanticItem (required) Geben Sie die ID des SemanticItem Controls an, in das der Ergebniswert nach der Spracheingabe (bzw. nach der Spracherkennung) abgelegt werden soll. Input – Optional Rules Rules x OptionalPreConfirmRule Wählen Sie eine grammatikbezogene Rolle aus, um zusätzliche Eingaben vor einer Bestätigungsabfrage auszuführen. Die Rolle kann identisch sein mit der Eingabe in OptionalPreAnswerRule. Beispiel: „I said“, „I meant“, „I wanted“ x OptionalPostConfirmRule Wählen Sie eine grammatikbezogene Rolle aus, um zusätzliche Eingaben nach einer Bestätigungsabfrage auszuführen. Die Rolle kann identisch sein mit der Eingabe in OptionalPostAnswerRule. Beispiel: „please“, „thanks“ 5.3.2 DataTableNavigator Dieser Baustein ist eine komplexe – dafür aber auch sehr mächtige – Komponente, mit der sich Benutzer über Sprachbefehle durch beliebige Tabellenfelder bewegen. Die Komponente besitzt eine Anzahl fertiger Sprachausgaben und ist in der Lage, über bereits definierte Kommandos durch Zeilen und Spalten zu navigieren und Informationstexte auszugeben. Insbesondere für den Einsatz mit Datenbanksystemen stellt das DataTableNavigator Application Speech Control ein äußerst hilfreiches Tool dar (zum Beispiel als Mail-Reader). Die Spracheingaben können über unterschiedliche Templates individuellen Bedürfnissen angepasst werden. ASP.NET Markup
SemanticItem="{semantic item id}" QuestionPrompt="{prompt}"
5.3 Application Speech Controls
89
DataSource="" DataMember="{membername}" DataTextField="{display fieldname}" DataBindField="{binding fieldname}"
...
Client Script Object class DataTableNavigator { public string ActiveQAPhase { get; } public array AvailableOptions { get; } }
Property Builder Application Speech Control – General Data binding (required) x DataSource siehe: ListSelector.DataSource x DataMember siehe: ListSelector.DataMember x DataBindField siehe: ListSelector.DataBindField x DataTextField siehe: ListSelector.DataTextField x DataHeaderFields Um Felder aus einer Dropdownliste auszuwählen, klicken Sie in den Bereich doppelt. Mit DataHeaderFields definieren Sie die zulässigen Eingabedaten für den Anwender, um dem System bekannt zu geben, welche Daten gelesen werden sollen.
Abb. 5.11. Legen Sie die Kopf- und Datenfelder für die Ausgabe fest
90
5 Speech Controls im Visual Studio .NET
Falls Sie keine Felder definieren (oder die Auswahl nicht aus einem DataSet stammt), erfolgt die Ausgabe entweder über die Promptfunktion oder aus dem HeaderTemplate (sofern in diese Bereichen Informationen zur Ausgabe angelegt wurden). x DataContentFields Um Felder aus einer Dropdownliste auszuwählen, klicken Sie in den Bereich doppelt. Die DataContentFields spezifizieren die vom System vorzulesenden Daten, basierend auf dem vom Anwender ausgewählten Feld. Sollten in diesem Bereich keine Informationen vorliegen, kann das System keine assoziierten Daten ausgeben. Die Bezeichner werden von der Sprachplattform in der Reihe ihres Auftretens verkettet und vorgelesen. Falls Sie mit anderen Datenquellen als einem DataSet arbeiten, müssen Sie die jeweiligen Felder über das Eigenschaftenfenster oder im ContentTemplate eingeben.
Abb. 5.12. Zuordnungen bei der Datenbindung und der Ausgabe
5.3 Application Speech Controls
91
Other x StartingIndex Geben Sie die Nummer des (Zeilen-)Index an, mit der die Sprachausgabe starten soll – dies gilt im Zusammenhang mit Datenbanktabellen. Falls Sie mit Arrays arbeiten, bezieht sich der Index auf das n-te Element in der Liste. Standardmäßig ist der Wert 0; die Ausgabe beginnt also mit dem 1. Eintrag. Input – General Answers x Access mode Eigenschaft: AccessMode Bestimmen Sie hier durch die Auswahl von drei unterschiedlichen Modi, wie das DataTableNavigation Control nach der Aufforderung zum Lesen reagiert: – Ignore Das Control ignoriert die Eingabe; stattdessen wird der fFehlerPrompt „NoReco“ ausgegeben. – Select Das Control erstellt eine Grammatikliste mit Elementen aus den DataHeaderFields. Der interne Cursor wird auf das erste Element gesetzt, der Wert vorgelesen und anschließend der QuestionPrompt aktiviert. – Fetch Es wird ebenfalls eine Grammatikliste aus den Kopfelementen erstellt. Anders als bei „Select“ wird nach einer Leseaufforderung ein gefundenes Element in das assoziierte fSemanticItem Control geschrieben und das DataTableNavigation Control beendet. Falls die Eingabe von der Sprachplattform durch den Wert in ConfirmThreshold zurückgewiesen wird, erfolgt eine automatische Nachfrage. Für die Modi „Select“ und „Fetch“ werden folgende Bereiche abgefragt: 1. GrammarTemplate Sofern Sie ein GrammarTemplate angelegt haben, sind die dort hinterlegten Angaben ausschlaggebend für die vom System aufgebaute Grammatikstruktur. 2. DataTextField Sollten Sie im DataTextField eine Zuordnung getroffen haben, ist diese Einstellung für die Datenbindung und den Aufbau der Grammatikstruktur des Systems relevant.
92
5 Speech Controls im Visual Studio .NET 3. DataHeaderFields Wurden weder GrammarTemplate noch DataTextField spezifiziert, erstellt das System für das Control die Grammatikstruktur anhand der Felder, die in diesem Bereich angegeben wurden. DataHeaderFields ist ein Pflichtfeld und muss unabhängig der anderen Bereiche definiert sein.
x SemanticItem (required) siehe: ListSelector.SemanticItem Input – Command Rules Dieser Bereich enthält sämtliche Befehle, die vom DataTableNavigator Control erkannt werden. Falls Sie eigene Befehle für die jeweiligen Kommandos verwenden möchten, tragen Sie den Pfad und Namen der Grammatik sowie den Verweis auf die Rolle in das Eingabefeld ein. Alternativ können Sie die Grammatik und Rolle auch über den fGrammar URL Browser auswählen, indem Sie auf die Ellipse-Schaltfläche (…) klicken. Sofern Sie einen internen Befehl nicht aktivieren möchten, demarkieren Sie die Checkbox. Command rules x Next Aktivieren Sie den Befehl „Next“, um den internen Cursor vom aktuellen Element auf das Folgeelement zu bewegen. Sofern Sie sich bereits auf dem letzten Element befinden, wird die NextOnLastError Fehlermeldung ausgegeben. Sollte nur ein Datensatzelement vorhanden sein, wird die Fehlermeldung „This is the only item available“ (NextOnOnlyItemError) erzeugt. x Previous Aktivieren Sie den Befehl „Previous“, um den internen Cursor vom aktuellen Element zum vorherigen Element zu bewegen. Falls Sie sich bereits auf dem ersten Element befinden, wird vom Control die PreviousOnFirstError Fehlermeldung ausgegeben. Existiert nur ein Datensatz, erfolgt die Wiedergabe des Prompts „You are on the only item“ (PreviousOnOnlyItemError). x First Aktivieren Sie den Befehl „First“, um von der aktuellen Position auf das erste Element in der Liste zu springen. Falls Sie sich bereits auf dem ersten Element befinden, erfolgt die Wiederholung des QuestionPrompt. x Last Aktivieren Sie den Befehl „Last“, um den Cursor von der aktuellen Position auf das letzte Element in der Liste zu bewegen. Sollten Sie sich bereits auf dem letzten Element befinden, wird der QuestionPrompt erneut gestartet.
5.3 Application Speech Controls
93
x Header Aktivieren Sie den Befehl „Header“, um die Kopfeinträge auszugeben. Sollten Sie eine Prompt-Funktion angelegt haben, wird die Ausgabe über die Funktion gesteuert; sofern ein HeaderTemplate vorliegt, werden die dort hinterlegten Daten ausgegeben. x Read Aktivieren Sie den Befehl „Read“, für die Wiedergabe von Daten aus DataContentFields, einer Prompt-Funktion oder einem ContentTemplate. x Select Aktivieren Sie den Befehl „Select“, um die Daten des aktuell vom Cursor selektierten Datensatzes auszugeben. Anschließend erfolgt vom System die Nachfrage, ob die Datenausgabe beendet werden soll. Der Befehl ist nur dann einsetzbar, wenn die Eigenschaft AccessMode auf „Select“ gesetzt wurde. x Repeat Aktivieren Sie den Befehl „Repeat“, um den zuletzt ausgeführten Prompt zu wiederholen – je nachdem, ob es sich um die Wiedergabe der Kopfeinträge (siehe: fHeader) oder des Dateninhalts handelt. x Exit Aktivieren Sie den Befehl „Exit“, kann der Benutzer über die Kommandos „Cancel“ oder „Done“ die aktuelle Bearbeitung abbrechen. Other x DisableColumnNavigation Standardmäßig ist die Checkbox nicht aktiviert; dadurch können Sie den internen Cursor über die Angabe der Spaltennamen aus DataContentFields steuern. Wenn Sie dies nicht wünschen, setzen Sie die Markierung der Checkbox – dadurch würde nach der Eingabe eines Spaltennamens ein Fehler („NoReco“) erzeugt und der Prompt „I didn’t understand you“ ausgegeben. Neben den genannten Befehlen können Sie zusätzlich das Kommando „Help“ eingeben. Damit aktivieren Sie die Ausgabe „Please say read, next, previous, first, last or select“. Sollten Sie eigene Hilfetexte benötigen, so müssen Sie das das Kommando „Help“ in einer Promptfunktion abfangen: Beispiel: var historyLength = RunSpeech.ActiveQA.History.length – 1; var lastCommand = RunSpeech.ActiveQA.History[historyLength]; if (lastCommand == "Help")
return "This is my own help prompt."
94
5 Speech Controls im Visual Studio .NET
Input – Optional Rules Rules x OptionalPreConfirmRule siehe: ListSelector.OptionalPreConfirmRule x OptionalPostConfirmRule siehe: ListSelector.OptionalPostConfirmRule Input – Speech Timeouts Die Einstellungen variieren je nach Szenario, daher sind keine pauschalen Empfehlungen möglich. Wenn aufgrund bestimmter Konstellationen in Ihrer Anwendung die Timeouts einen gleich bleibenden (festen) Wert haben müssen, sollten Sie eigene oder abgeleitete Speech Controls erstellen. Alternativ bietet sich die Ablage der Werte in externen Dateien (z.B. XML) an, die zur Laufzeit – genauer gesagt bei Aktivierung der Komponente – gelesen werden. Weitere Informationen dazu erhalten Sie auch in fKapitel 11, Eigene Speech Controls. Voice Output – General Eine Zusammenfassung der einzelnen Prompt-Einstellungen finden Sie im fKapitel 10, Prompts und die Prompt-Datenbank. Weitere Informationen zum Erstellung von Prompts erhalten Sie außerdem in fKapitel 6.2., Integrierte Tools. Voice Output – Prompt Templates Standardmäßig wird bei der Wiedergabe eines Kopf- oder Dateneintrags nur auf den Spaltenname bzw. Datensatzinhalt Bezug genommen, das heißt, die Ausgabe klingt recht statisch und „computerisiert“. Um die Wiedergabe den eigenen Bedürfnissen anzupassen, können Sie in den PromptTemplate Eingabefeldern gefälligere Texte hinterlegen. Beziehen Sie dabei die originalen Bezeichner in die Ausgabe ein. Prompt templates x Header Tragen Sie in dieses Eingabefeld den Text ein, der für die Wiedergabe der Kopfeinträge (zum Beispiel mit f„Header“) ausgegeben werden soll. In der folgenden Struktur wird davon ausgegangen, dass die DataHeaderFields auf die Spalten „Date“ und „Time“ referenzieren: „The following information from at ”
5.3 Application Speech Controls
95
x Content Hinterlegen Sie in diesem Eingabefeld einen individuellen Ausgabetext, der die Felder in den DataContentFields berücksichtigt. Beispiel: „was sent by and contained the message . The phone number is “ Events – General Eine Aufstellung der client- und serverseitigen Ereignisse aller Speech Controls und der ihnen zugeordneten Funktionen und Methoden finden Sie im fAnhang A, Einstellungen und Parameter unter 15. Events. Beispielprojekt Wenn Sie die Übungsbeispiele „Samples.sln“ zusammen mit dem SASDK installiert haben, finden Sie ein Arbeitsprojekt für das DataTableNavigator Application Speech Control unter dem Projektordner „TableNavigation“. 5.3.3 AlphaDigit Mit dem AlphaDigit Control erlauben Sie dem Anwender die Eingabe von Zahlen, Ziffern und Buchstaben – entweder in beliebiger oder fest definierter Reihenfolge, je nachdem, wie die dazu notwendige Eingabemaske angelegt wurde. Wie jedes Application Control besitzt auch AlphaDigit einen eingebauten Nachfragemechanismus und gestattet die Wiedergabe eines Hilfetextes über das Kommando „Help“. Weitere Informationen über das AlphaDigit Application Speech Control erhalten Sie in fKapitel 8.1.2, Ziffern, Zeichen und Zahlen. ASP.NET Markup
QuestionPrompt="{question prompt}" BargeIn="True" SemanticItem="{semantic item control}" InputMask="DDD[a-A][z-Z]" Grouping="False" ConfirmThreshold="0.85" AllowDtmf="False" ...
96
5 Speech Controls im Visual Studio .NET
Property Builder Input – General Answers x SemanticItem (required) Tragen Sie in dieses Auswahlfeld den Bezeichner (ID) des fSemanticItem Controls ein, das die Daten nach der erfolgreichen Spracherkennung aufnimmt. x InputMask (required) Hinterlegen Sie hier die Eingabemaske, um die Zahlen, Ziffern sowie Buchstaben für die Erkennung zu bestimmen. Durch die Maske können Sie sowohl eine wahlfreie als auch statische Eingabereihenfolge festlegen. Beachten Sie, dass einzelne Buchstaben des Alphabets vom Spracherkenner (SR) als alphabetische Aufzählung interpretiert werden. So wird zum Beispiel „[a][b][c]“ (ay bee cee) als „a. b. c.“ verstanden und auch dem SemanticItem zugeordnet16. In der Tabelle 8.1 des fKapitels 8.1.2 finden Sie einige weitere Maskenbeispiele. x Grouping Wenn Sie das Auswahlfeld markieren, erweitern Sie den Erkennungsbereich auf Zahlen größer als 9. Dadurch ist zum Beispiel bei einer Maske wie „DDD“ sowohl die Eingabe von „one two three“ als auch „one twenty three“ möglich – beides würde als „123“ interpretiert. Ist die Checkbox nicht markiert, wäre nur die Eingabe einzelner Ziffern („one two three“) erlaubt. 5.3.4 CreditCardDate Mit dem CreditCardDate Application Control erfragen Sie vom Anwender (normalerweise immer zusammen mit dem fCreditCardNumber Control) das Ablaufdatum einer Kreditkarte im Format Monat/Jahr. Beide Werte werden eigenen SemanticItem Controls zugewiesen. Weitere Hinweise erhalten Sie in fKapitel 8.1.3, Kreditkarteninformationen im Abschnitt CreditCardDate. ASP.NET Markup
< meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ ie5">
124
6 Wizards, Editors und andere Tools
Die serverseitig hinzugefügten Elemente müssen auch noch in der HTMLSeite (clientseitig) berücksichtigt werden, wobei die Bezeichner-IDs identisch sein müssen. Durch die eingebaute IntelliSense-Funktionalität des Visual Studio (siehe auch Meta-Tags oben im Beispiel) lassen sich die Komponenten recht schnell kodieren, da sämtliche Bezeichner nach Eingabe der geöffneten Tag-Klammer (). Sollten mehrere Standardformen vorhanden sein, können Sie diese mit dem Doppelpfeil (>>) in das Bearbeitungsfenster übertragen, ohne ein Element vorher zu markieren. Die verschiedenen Ausspracheformen erhalten Sie aus den vorgegeben Bereichen Vowels und Consonants. Im Bereich Misc lassen sich zusätzliche Veränderungen vornehmen, z.B. Lautdehnungen (1 Stress). Die Einstellungen können sofort überprüft werden, in dem Sie auf das Lautsprechersymbol klicken. Mit OK übernehmen Sie die Werte; dabei erscheinen alle individuellen Aussprachen durch Semikolon getrennt im Eingabebereich Pronunciation des Eigenschaftenfensters.
Abb. 6.9. Die Phrase „yes“ mit Aussprachesignatur
Zusätzlich wird das grafische Phrase Element im fGrammar Editor mit einem Aussprachesymbol (Æ) ausgestattet. Das erleichtert den Überblick bei umfangreichen Grammatiken, da sofort erkennbar ist, dass für ein Wort weitere individuelle Aussprachen angelegt wurden. 6.2.6 Semantic Script Editor Jedes im fGrammar Editor grafisch dargestellte Element wird in entsprechende SML-Tags überführt Das Ergebnis einer Grammatikinterpretation können Sie sich anzeigen lassen, in dem Sie einen Satz (oder ein Wort) in das Testfeld im Grammar Editor eintragen (siehe auch: Testen von Grammatiken und Phrasen). Das Ergebnis ist – sofern der Test erfolgreich verlief – ein gerenderter SML-Block im Ausgabefenster. Mit dem Semantic
132
6 Wizards, Editors und andere Tools
Script Editor lassen sich die SML-Ergebnisse komfortabel für spezielle Bedürfnisse anpassen.
Aufrufen des Semantic Script Editors Sollten die auf der Dialogseite Assignment bereitgestellten Parameter nicht ausreichen, können Sie mit einem Klick auf den Reiter Script die Einstellungen weiter verfeinern, um beispielsweise zusätzliche Bedingungen für die endgültige Ausgabe festzulegen. In den folgenden Abschnitten erhalten Sie dazu weiterführende Informationen.
Abb. 6.10. Individuelle Einstellungen zur Veränderung der SML-Ausgabe
Verändern von SML-Ausgaben über Parameter Nachfolgend werden die einzelnen Bereiche auf der Dialogseite Assignment erklärt sowie die Auswirkungen bei der Aktivierung von Parametern verdeutlicht. Zu diesem Zweck wird von der Standardeinstellung ausgegangen: Der Ausgabetext (phrase) wird an das Attribut „text“ angehängt und außerdem als Rückgabewert zwischen die SML-Tags gesetzt. Dieses Ergebnis kann mittels XPath bequem gelesen und ausgewertet werden.
{phrase}
6.2 Integrierte Tools
133
Damit Sie die Ergebnisse für obiges Beispiel4 verändern können, müssen Sie zuerst ein Tag-Element an die Liste anhängen5. Anschließend führen Sie einen Doppelklick auf dem Tag-Element aus bzw. öffnen den Semantic Script Editor mit dem Ellipse-Button (…).
Abb. 6.11. Beispielgrammatik
Assignment Assign a semantic result to this Rule’s semantic output object ($)6 • Return result in a sub-property of this Rule
Der Bezeichner, den Sie in diesem Eingabefeld hinterlegen, wird zukünftig als separate Eigenschaft zwischen die Basis-Tags gesetzt. Beispiel: – Test des Wortes „Delta“ – Eingabe von „phrase“ – Tags kapseln den Ausgabetext, also Delta • Return result as an attribute of this Rule or sub-property
Der Bezeichner, den Sie in dieses Eingabefeld eintragen, wird zukünftig als eigenes Attribut an das -Tag gehängt. Beispiel: – Test des Wortes „Delta“ – Eingabe von „phrase“ – Das Ergebnis ist
4
5
6
Die Attribute „utteranceConfidence“ und „confidence“ werden in fKapitel 9, Arbeiten mit Grammatiken, näher erläutert. Eine Beschreibung der einzelnen grafischen Elemente und ihre Verwendung erhalten Sie in fKapitel 9.2, Grammatikelemente und Zuordnungen. Dazu müssen Sie jedoch noch den Wert von Rule variable auf „-Recognized Text-“ setzen, ansonsten werden lediglich die Attribut-Tags eingebunden.
134
6 Wizards, Editors und andere Tools
Source of semantic result • Constant
Falls Sie – abweichend vom automatisch generierten Ergebnis – einen selbstdefinierten Rückgabewert einstellen möchten, tragen Sie diesen in das Eingabefeld ein. Strings müssen in Anführungszeichen gesetzt werden („test“), Einzelzeichen in Hochkomma ('+'), numerische Literale direkt (4711). Beispiel: – Test des Wortes „Delta“ – Festlegung der Konstante „Differenz“ – Das Ergebnis ist Differenz • Rule variable
In Abhängigkeit der vorangegangenen Einstellungen legen Sie hier fest, ob und wie die Phrase (Erkennungswert) in die SML-Klammer eingebettet wird. Bei der Auswahl “- This Rule ($) -“ wird an das Standardattribut “text“ der Wert angehängt, bei der Auswahl „- Recognized Text -“ erfolgt zusätzlich die Ausgabe der Phrase als Ergebnisstring. Sollten mehr als eine Rolle in der Grammatikdatei definiert sein, können Sie auch auf diese Rollen referenzieren. Beispiele: – Test des Wortes „Delta“ – Festlegung der Einstellung „- This Rule ($) -“ – Das Ergebnis ist – Festlegung der Einstellung „- Recognized Text -“ – Das Ergebnis ist Delta – Eingabe von „attr“ unter Name of attribute – Festlegung der Einstellung „- Recognized Text -“ – Das Ergebnis ist • Select property
Diese Auswahl ist nur möglich, wenn die der Eintrag Rule von Rule variable auf „- This Rule ($) -“ gesetzt und zusätzlich eine eigene Eigenschaft (sub-property) oder ein eigenes Attribut angelegt wurden. Eigenschaften werden direkt übernommen, Attribute hingegen erhalten das Präfix „_attributes.“ Diese Auswahlliste ist sinnvoll, wenn Sie auf Eigenschaften oder Attribute in anderen Rollen (derselben Grammatik) zugreifen möchten. Script Sollten Sie neben den beschriebenen Einstellungen weitere oder vollkommen eigene Abfragen benötigen, können Sie diese mittels JScript in dem dafür vorgesehenen Eingabefenster kodieren. Um auf Variablen, Eigen-
6.2 Integrierte Tools
135
schaften oder Attribute zugreifen zu können, gibt es eine Anzahl fest definierter Bezeichner (Semantic Interpretation Markup, SI). SI-Ausdrücke, die in JScript kodiert sind, entsprechen – wenn auch nicht vollständig – der Spezifikation nach ECMA-3277. In der Tabelle 6.1 sehen Sie die möglichen Bezeichner mit einzelnen Beispielen. Falls Sie noch nicht mit JScript vertraut sind, erhalten Sie im Internet genügend Informationen. Im Anhang finden Sie unter fWebverweise eine Auflistung diverser Webseiten zum Thema. Mit den in der Tabelle 6.1 gelisteten Elementen sind zusätzliche Steuerungsmöglichkeiten gegeben, um zum Beispiel die Erstellung zusammengesetzter Rückgabewerte oder Ergebnisse anhand bestimmter Bedingungen zu generieren. Neben rein arithmetischen Strukturen sind demnach auch verschachtelte Abfragen mit if, for, while usw. möglich, außerdem können Sie mit temporären Variablen arbeiten. Mehrfache Anweisungen sind mit einem Semikolon zu trennen. Allerdings sind nicht alle Zuweisungen erlaubt bzw. sinnvoll, doch der Interpreter wird in diesem Fall entsprechende Fehlermeldungen generieren, falls das Rendern in SML fehlschlägt. Die Meldungen erscheinen dann im Output-Fenster. Folgende Zuweisungen sind nicht möglich: • Zuweisungen an eine Rolle oder Referenz
Falsch: $Rolle2 = "Hello" Richtig: $.eigenschaft = "Hello"; $.wert = $Rolle2 • Einsatz von Unter-Attributen
Falsch: $.attribut1.attribut2 = 4711 Richtig: $.zahl = 4711; $.bier = $.malz + $$.hopfen • Falsche Variablenzuweisung
Falsch: $ = 3Biersorten Richtig: $ = Biersorten3; $ = 0xA1B2 • Spezielle SI-Syntax8
$$$.text = "xyz" Sollte sich eine Anweisung nicht parsen lassen, wird es vorkommen dass der Reiter Assignment gesperrt ist. Sie müssen dann die JScript-Struktur löschen oder so korrigieren, dass der Parser sie interpretieren kann.
7
8
Informationen hinsichtlich der Ausnahmen finden Sie auch unter http://www.ecma-international.org/publications/standards/Ecma-327.htm. Nähere Informationen zu den vom W3C-Konsortium erstellten erweiterten Spezifikationen erhalten Sie unter http://www.w3.org/TR/2001/WD-semanticinterpretation-20011116/
136
6 Wizards, Editors und andere Tools Tabelle 6.1. Syntax der Semantic Interpretation Markup
Element
Aufruf
Beispiel (SML/JScript)
Rollenvariable (GrammatikRolle)
$
$ = 4711; 4711 $.day = "Montag"; Montag $.day = $Rolle2; {Rolle2} $.day = $Rolle2.day;
$.eigenschaft $rolle
Rollenvariable (Rollenreferenz)
$rolle. eigenschaft
{$Rolle2.day}
JScript Variable
variable
$ = $$; {$$} $ = $$.number; {$$.number} Setzt das Standardattribut "text": $._attributes = "hello"; Zusätzliches Attribut für -Tag9: $._attributes.extra = $recognized.text; Rückgabewert: $._value; $ = $$._value; $._ value = "abc"; Der erkannte Text aus der aktuellen Rolle: $._attributes.text = $recognized.text; Übereinstimmungswert zwischen 0.0 und 1.0: $recognized.confidence = 0.75; Falls .confidence nicht zu ermitteln ist: $recognized.unknownConfidence = Yes Wert = 47.11; Gruss = "Hello World!"; x = 0;
Strings
"Stringwert"
S = "Dies ist ein String.";
Zeichen
’Zeichenwert’
Ascii = ’Y’;
Zahlen (dezimal)
Integer (Float)
0, 9, 4711, 63525, (47.11, 0.815, 9999.12)
Operatoren
.NET Operatoren
+, -, *, /, & (logisch und), | (log. oder)
$$ $$.eigenschaft _attributes
Serialisierungsvariable
_attributes.nam e _value
.text Erkennungswerte ($recognized) und Übereinstimmungen
.confidence .unknown Confidence
9
Wird das Attribut „text“ genannt, erscheint es nur einmal – also nicht etwa
6.2 Integrierte Tools
137
6.2.7 Speech Prompt Editor Eine sprachgestützte Applikation nimmt nicht nur Eingaben entgegen, sondern führt auch Äußerungen durch. Insbesondere bei Voice-only- und DTMF-Anwendungen ist dies die einzige Möglichkeit, mit dem User zu interagieren, da es kein visuelles Feedback gibt. Bei multimodalen Applikationen besteht zusätzlich bzw. alternativ die Möglichkeit, Ergebnisse optisch darzustellen. Prompts können auf zwei Arten im System eingestellt werden: • Synthetische Wiedergabe von Strings (text-to-speech, TTS) • Natürlichsprachliche Wiedergabe (via Sprachaufzeichnung) Während die synthetische Wiedergabe von Strings sehr einfach und schnell durchführbar ist, in dem lediglich der auszugebende Text im jeweiligen Speech Control untergebracht wird, ist der zeitliche und finanzielle Aufwand für die Wiedergabe natürlicher Sprache erheblich größer. Dies liegt zum einen daran, dass für eine „saubere“ Aussprache gesorgt werden muss, die bei professioneller Anwendung den Einsatz von geschulten Sprechern und Sprecherinnen notwendig macht, was wiederum mit hohen Kosten verbunden sein kann. Andererseits sollte bereits in der Planungsphase berücksichtigt werden, ob und wie sich Textbausteine (extractions) aus den gesprochenen Sätzen (transcriptions) zwecks späterer Wiederverwendung generieren lassen, was eine entsprechend sorgfältige Vorbereitung sowie Auf- und Nachbereitungszeiten verlangt. Um diesen Aufwand auch für den ambitionierten Heimanwender oder semiprofessionellen Webentwickler überschaubar zu halten, ist dem SASDK das Tool Speech Prompt Editor beigefügt, welches nahtlos in die Umgebung des Visual Studio integriert wurde.
Aufruf des Editors und Sprachaufzeichnung Damit der Speech Prompt Editor geöffnet werden kann, müssen Sie ein Prompt-Projekt angelegt haben. Prompt-Projekte sind Projekte, für die ein oder mehrere .prompt-Dateien vorliegen bzw. die einem Speech-Projekt zugeordnet sind. Nähere Information zu diesem Thema finden Sie in fKapitel 10, Prompts und die Prompt-Datenbank. Doppelklicken Sie zum Öffnen des Editors auf eine .promptdb-Datei oder wählen Sie Open im Kontextmenü. Das Bearbeitungsfenster erscheint daraufhin unter einem neuen Reiter als standardmäßig horizontal geteiltes Fenster, in dessen oberen Bereich die Eintragungen der Transkriptionen erfolgen und im unteren Teil die Segmente (extractions) abgelegt werden.
138
6 Wizards, Editors und andere Tools
Abb. 6.12. Die Funktionen im Recording Tool
Beginnen Sie nun zunächst mit der Erfassung Ihres zu sprechendes Textes als String, den Sie in das Eingabefeld unter Transcription eingeben. Anschließend führen Sie die Sprachaufzeichnung mit dem Recording Tool durch – alternativ können Sie auch externe Tools zur Sprachaufzeichnung nutzen und die generierten .wav-Dateien in den Editor importieren. Über die genaue Vorgehensweise sowie weitere Bearbeitungsmöglichkeiten informiert Sie fKapitel 10.2, Natürlichsprachliche Prompts.
Erstellen von Textbausteinen Nachdem die zu sprechenden Texte definiert und als Audiodatei generiert wurden, können Sie nun einzelne Abschnitte als Textbausteine der Transkription entnehmen und separat weiterverwenden. Dazu erhalten die Extrakte eigene Bezeichner (tags) sowie optionale Nummerierungen. Details dazu finden Sie in Kapitel 10.2.3, Transkriptionen und Extrakte.
Das Prompt Validation Tool Wenn Ihre Sätze fertig gesprochen und als Textbausteine abgelegt wurden, stehen Ihnen nun viele Variationsmöglichkeiten offen: Sie können Sätze neu zusammenstellen, Worte neu anordnen oder neue Worte einfügen. Die neuen Worte müssen nicht notwendigerweise als .wav-Extrakt vorliegen, sondern können beliebig frei gewählt werden. Dabei erkennt das System automatisch, ob die Ausgabe als synthetischer oder natürlichsprachlicher Prompt erfolgt. Damit die mit diese Tests mit dem Prompt Validation Tool durchführen können, müssen Sie zunächst eine Prompt-Datendatei geöff-
6.2 Integrierte Tools
139
net haben und die in Frage kommenden Begriffe aus dem ExtraktionsBereich in das Testfenster mittels drag and drop ziehen. Anschließend werden nach dem Kompilieren10 die fehlenden Textpassagen im Ergebnisfenster rot hervorgehoben. Sie öffnen das Tool entweder über das Menü View|Prompt Validation oder über die Toolbar Prompt Editor, die Sie im Kontextmenü zum Anpassen der Menüleiste einblenden können:
Abb. 6.13. Überprüfung von Textpassagen im Validation Tool
Es lassen sich beliebig viele Texte prüfen – entweder geben Sie die Transkriptionen (hinter- oder untereinander) direkt ein oder ziehen die Passagen mit der Maus in das Fenster. Alle Detailinformationen zur Textüberprüfung sowie Prompterfassung und -kompilierung finden Sie in fKapitel 10, Prompts und die Prompt-Datenbank.
Der Wave Editor Nach der Aufzeichnung eines Prompts durch das Recording Tool (oder eines anderen, externen Programms) lässt sich die .wav-Datei nachträglich bearbeiten. Dazu dient der Wave Editor, der entweder automatisch nach der Aufnahme11 oder nachträglich manuell gestartet werden kann.
10
11
Beachten Sie, dass Sie dazu Ihr Prompt-Projekt als Release kompilieren müssen! Dazu muss die Checkbox Display waveform after recording wie in Abbildung 6.12 markiert sein.
140
6 Wizards, Editors und andere Tools
Abb. 6.14. Darstellung eines aufgezeichneten Textes im Wave Editor
Je nach Qualität des Eingangssignals werden die Schwingungen der Aufnahme größer oder kleiner dargestellt. Am unteren Bildrand sind die einzelnen Worte sichtbar, die vom Spracherkenner nach der Aufzeichnung automatisch in Segmente unterteilt wurden. Erst nachdem die einzelnen Worte der Transkription syntaktisch (und vorbehaltlich auch semantisch) entsprechen, wird die Zuordnung als korrekt bestätigt. Im Speech Prompt Editor wird dies durch einen grünen Haken in der Spalte Has Alignments signalisiert. Längere Pausen am Satzanfang oder -ende können Sie im Wave Editor nachträglich herausschneiden, außerdem lassen sich Pausen zwischen die Phrasen einfügen. Die Möglichkeiten der Sprachdateibearbeitung werden in fKapitel 10.2.2, Achtung, Aufnahme, im Detail erläutert. 6.2.8 Prompt Function Editor Der Prompt Function Editor dient der Erstellung und Bearbeitung von Prompts, die hauptsächlich dynamisch – also erst zur Laufzeit – generiert und ausgegeben werden sollen. Prompt Function-Dateien sind UTF-8 formatiert, besitzen die spezifische Endung .pf und werden in JScript kodiert. Sie enthalten einen speziellen XML-Header, der für eine visuelle Bearbei-
6.2 Integrierte Tools
141
tung durch den Prompt Function Editor nötig ist. Prompt-Funktionen könnten zwar auch als JScript/JavaScript-Dateien (mit der Endung .js) angelegt werden, dann ist aber nicht nur die komfortable Verwaltung durch den Editor verwehrt, sondern auch keine Validierung mit dem fPrompt Validation Tool möglich.
Aufruf des Editors Sofern noch keine Funktionsdatei (erkennbar an der Endung .pf) im Projekt vorliegt, können Sie diese auf unterschiedliche Art und Weise neu anlegen: • Innerhalb eines QA-, Command- oder Application Speech Controls, durch den Property Builder über den Eintrag in der Dropdown-Liste der Ebene Voice Output – General.
Abb. 6.15. Erstellen einer neuen Prompt-Funktion aus einem Speech Control
• Durch den Add New Item-Dialog und der Auswahl des Templates Prompt Function File. • Beim Öffnen des Kontextmenüs eines entsprechenden Speech Controls wählen Sie Manage page’s Prompt Function Files. Anschließend klicken Sie auf den Button New und geben den Namen der Datei an.
Wrapper-Funktionen und Innere Funktionen Beim Anlegen einer neuen Prompt-Funktion wird zuerst automatisch eine nicht editierbare Wrapper-Funktion erzeugt, die im mittleren Bereich des in drei Ebenen unterteilten Fensters angezeigt wird. Die Wrapper-Funktion besitzt einen einzigen Parameter, clientControl, der auf den Inhalt des fRunSpeech Laufzeitobjekts verweist. Die möglichen Werte, die dieser Parameter beinhaltet, werden im Parameterfenster (erster Bereich) ange-
142
6 Wizards, Editors und andere Tools
zeigt – es handelt sich um Strings, die den Status des Spracherkenners wiedergeben, also z.B. „NoReco“ oder „Silence“.
Abb. 6.16. Parameter und ihre entsprechenden Laufzeitvariablen
Die Wrapper-Funktion verteilt die Stati an innere Funktionen, die den drei möglichen Zuständen „Erkennung“ (acknowledge), „Bestätigung“ (confirm) und „Frage“ (question) entsprechen. Der Standardparameter der inneren Funktionen History darf verändert, erweitert und gelöscht werden. Der Rückgabewert der inneren Funktion ist ein Prompt (String) und wird zur Laufzeit wiedergegeben („gesprochen“). Sobald ein eigener neuer Parameter definiert wird, lässt sich ihm ein beliebiger Laufzeitwert zuordnen, zum Beispiel aus einer anderen Skriptfunktion oder aus einem Speech Control (siehe Abbildung 6.16). Wenn die benachbarte Zelle in der Spalte Validation Value angeklickt wird, öffnet sich der Dialog Validation Values, in dem Sie beliebige Werte untereinander eintragen können, wobei Strings in Anführungszeichen zu setzen sind. Der Sprachapplikationsentwickler kann dann aus der inneren Funktion heraus auf (globale) Variablen in Skriptfunktionen zugreifen diese müssen allerdings dazu erst einmal bekannt gemacht werden. Weiterführende Einzelheiten zum Funktionsaufbau und -einsatz erhalten die fKapitel 7, Sprachverarbeitung und Debugging sowie fKapitel 10.3, Arbeiten mit Prompt-Funktionen. 6.2.9 Speech Controls Outline Window Vergleichbar mit dem Tabulator-Index von Web- oder Windows Controls gibt es für Speech Controls den Aktivierungs-Index (SpeechIndex). Damit ist die Reihenfolge gemeint, in der die einzelnen Komponenten zur Laufzeit aufgerufen werden. Im Eigenschaftenfenster lässt sich der Index über einen positiven ganzzahligen Wert festlegen; dabei dürfen unterschiedliche Komponenten denselben Index besitzen (Standard ist 0). Die Aufrufreihenfolge verläuft von oben nach unten. Davon abweichende Werte werden im Speech Controls Outline Window durch eckige Klammern kenntlich gemacht (z.B. [3]). Der Gesamtverlauf richtet sich maßgeblich nach diesem festgelegten Wert, bei gleichen Werten nach der gewählten Darstellung.
6.3 Externe Tools
143
Abb. 6.17. Aufrufreihenfolge der Speech Controls
Nach einem Doppelklick auf einen Eintrag öffnet sich der Property Builder des entsprechenden Speech Controls mit der korrespondierenden Panelseite. In der Toolbar stehen Ihnen Schaltflächen zum Ändern der Komponentenreihenfolge, zum Öffnen der Prompt-Datenbank oder der PromptFunktionsdatei zur Verfügung. Außerdem lässt sich über die DropdownListe Show die Anzeige variieren. Weiterführende Informationen hinsichtlich des Programmablaufs durch das RunSpeech Skriptobjekt bietet Ihnen fKapitel 7.2, Laufzeitobjekte.
6.3 Externe Tools Als externe Tools werden die Programme bezeichnet, die nicht nativ in die integrierte Entwicklungsumgebung eingebettet sind, sondern hauptsächlich von der Kommandozeile aus gestartet werden. Obwohl es möglich ist, innerhalb des Visual Studio externe Programme über das Menü Tools|External Tools einzubinden und aufzurufen, werden die im Folgenden besprochenen Applikationen außerhalb der IDE betrieben. Sie sind in erster Linie als Hilfsprogramme gedacht, um seltener benötigte Aufgaben zu Testzwecken schnell und einfach durchzuführen.
144
6 Wizards, Editors und andere Tools
6.3.1 Telephony Application Simulator (TASim) Der TASim enthält ein „abgespeckte Version“ der im Speech Server 2004 enthaltenen Telephony Server-Funktionalität mit grafischer Oberfläche. Mit ihm lassen sich während der Entwicklungsphase sprach- und telefongesteuerte Applikationen testen, die später in Voice-only oder DTMFUmgebungen zum Einsatz kommen sollen. Die erfolgreich getesteten Anwendungen lassen sich anschließend in der Release-Version für den Produktiveinsatz im Speech Server betreiben.12 Den TASim können Sie entweder über den Menüeintrag Microsoft Speech Application 1.0|Debugging Tools|Telephony Application Simulator oder über die Kommandozeile starten. Sofern Sie bei der Installation das vorgegebene Verzeichnis beibehalten haben, befindet sich die Datei TASim.exe im Programmverzeichnis „\Microsoft Speech Application SDK 1.0\SDKTools\Telephony Application Simulator“. Damit der TASim sich zu Beginn einer Applikation öffnet, muss die Komponente AnswerCall als erstes Element auf der Webseite eingestellt sein. Um eine DTMF-basierte Webapplikation zu testen, müssen Sie die Seite selbst nicht im Browser öffnen – der TASim fungiert in diesem Fall als Client (Prozess). Sie tragen im File|Open-Dialog lediglich die vollständige Adresse der Startseite ein, z.B. wie in Abbildung 6.18. Daraufhin wird die Seite geladen und gerendert, zusätzlich öffnet sich die fSpeech Debugging Console und die Applikation startet das erste Speech Control gemäß Index.
Abb. 6.18. Der TASim als Web-Client mit geladener Startseite
12
Weitere Informationen dazu erhalten Sie in fKapitel 2.3, Speech Server und Telephony Server sowie fKapitel 13, Deployment.
6.3 Externe Tools
145
Mit dem Speech Application Wizard erstellte Anwendungen rufen beim Start standardmäßig sowohl den TASim als auch die fSpeech Debugging Console auf.13 Über View|Source können Sie sich die gerenderte HTML-Seite ansehen, für die der TASim als Client zur Verfügung steht. Da es sich bei DTMFAnwendungen nicht um visuelle, sondern dialogorientierte Webseiten handelt, sind einige Aktionen nicht durchführbar. Dazu gehören die Befehle „Forward/Back“, „Reload/Refresh“ sowie „Stop“. Wenn Sie eine Wiederholung benötigen, zum Beispiel bei einer längeren Textpassage mit unterschiedlichen Anweisungen, kann das durch clientseitige Programmierung erreicht werden. TASim kann JScript(.NET) und XHTML-Subsets rendern – mehr dazu erfahren Sie fim Teil 2, Programmieren mit dem SASDK. Hinweis: Sollte es bei der Ausführung einer Applikation insofern zu einzelnen Problemen kommen, dass zum Beispiel die DTMF-Tasten deaktiviert sind oder die Debugging Console vor dem Programmende stoppt, könnte es daran liegen, dass die Umgebungseinstellungen Ihres Rechners nicht auf den US-amerikanischen Zeichensatz eingestellt sind.
Call Management In das Eingabefeld Destination device tragen Sie die Telefonnummer ein, die für die Aktivierung der Telefonapplikation gültig ist. Darin sind außer Ziffern keine Leer- oder sonstigen Zeichen erlaubt. Zur Ausführung der Beispielapplikationen des SASDK wird das Feld mit den Aktionsnummern belegt. Es lassen sich bis zu 10 Nummern speichern. Im Auswahlfeld daneben wählen Sie zwischen der Device Number und der Dialing Number, wobei erstere die Aufrufnummer einer Applikation bezeichnet und letztere für eine Telefonnummer bestimmt ist. Auch in dieser Liste sind bis zu 10 Nummern möglich. Mit der Schaltfläche Dial initiieren Sie den Start, dadurch beginnt TASim als Client mit dem Aufruf des ersten gerenderten Speech Controls. Durch Hang Up wird die laufende Anwendung wieder beendet. 6.3.2 Speech Debugging Console Bei der Erstellung sprachgestützter Applikationen kommen sehr viele unterschiedliche Ereignisse zusammen: Clientseitige Skripte werden geladen, 13
Wie Sie dieses Verhalten ändern können, erfahren Sie in fKapitel 12, Tuning, Tipps und Tricks.
146
6 Wizards, Editors und andere Tools
gerenderte Speech Controls gestartet bzw. aktiviert, Prompt-Daten gelesen, während der Spracherkennung – egal ab lokal oder remote – werden XML-, SML- und PEML-Konstrukte generiert und vieles mehr. Die Speech Debugging Console ein hilfreiches und mächtiges Tool, um die Fülle an Daten und Aktivitäten während des Entwicklungsprozesses einsehen und verwalten zu können. Sie ist das „Auge“, dass alle internen Zustände während des Programmablaufs für den Entwickler sichtbar macht, und der Entwickler kann darüber hinaus entscheiden, welche Informationen er untersuchen möchte oder welche Daten zur Laufzeit geändert werden sollen. Einige grundsätzliche Einstellungen sind nicht nur in der Konsole selbst, sondern auch innerhalb des Visual Studio konfigurierbar. Dazu öffnen Sie im Menü Tools den Dialog Options und darin den Bereich Speech Debugging SDK. Dort stehen Ihnen unter dem Eintrag Speech Debugging Console zahlreiche Konfigurationsparameter zur Verfügung. Die Einstellungen unter Startup settings lassen sich auch zur Laufzeit in der Konsole verändern, dort sind sie im Menü Options untergebracht. Vor der Durchführung intensiver Debugging-Sitzungen einer Applikation empfiehlt es sich der Übersichtlichkeit und Einfachheit halber, die Detailinformationen zunächst auszublenden (vgl. Abbildung 6.18) und Text- oder Audioeingaben, die von der Anwendung abgefragt werden, im Bearbeitungsbereich der Konsole vorzunehmen sowie die Ergebnisse zu überprüfen.
Abb. 6.19. Im Output-Bereich ist der Programmablauf nachvollziehbar
6.3 Externe Tools
147
Standardansicht (Prompt … Result) Im Feld Prompt erscheint der momentan vom System gewählte Eintrag, der entweder aus der Datenbank (als natürlichsprachlicher Prompt) stammt oder als TTS-Stream abläuft. Der Wiedergabe-String wird dabei in SML-Tags eingebettet. Texteingaben, auf die das System wartet, werden im Eingabefeld Input vorgenommen und mit einem Klick auf die Schaltfläche Use Text an das System übertragen. Bei Audioeingaben genügt es, die Schaltfläche Use Audio zu drücken und den Text zu sprechen. Fehlerstati erscheinen in der Liste Exceptions, wobei jederzeit ein anderer Fehlerzustand ausgewählt und zur Überprüfung mit Submit ausgelöst werden kann. Während des Programmablaufs erhalten Sie Zustandsinformationen im Feld Status. Die aktuelle Grammatik wird in der Liste Grammars protokolliert und kann über die Schaltfläche View angesehen und editiert werden. Dabei wird aus der Speech Debugging Console das Visual Studio geöffnet und die entsprechende Grammatikdatei geladen. Wenn nach der Eingabe von Text oder Audio bestimmte Ergebnisse generiert werden, erfolgt die Anzeige der Rückgabewerte im Feld Result.
Detailansicht (SML … Output) Die einzelnen Informationsbereiche der Detailansicht stellen inhaltlich einen vollwertigen Ersatz für die Debugging-Fenster im Visual Studio dar, denn sie ermöglichen nicht nur die Überwachung, sondern auch die Veränderung bestimmter Parameter zur Laufzeit. SML In diesem Auswahlfenster erscheint das nach einer erfolgreich durchgeführten Spracherkennung zurückgelieferte Ergebnis als SML-Struktur. Der Text entspricht genau dem Resultat einer Grammatikprüfung bezogen auf die jeweilige Phrase oder das untersuchte Wort. Ebenso wird auch in DTMFAnwendungen das Ergebnis des Spracherkenners nach der Auswertung angezeigt. Um die SML-Struktur zu bearbeiten, aktivieren Sie in der Toolbar die Schaltfläche Enable SML Editing, bevor Sie ein Strukturergebnis auswerten wollen (also vor jedem Durchlauf). Sie können dabei folgende Elemente verändern: • Ergebnisstring • confidence und utteranceConfidence • SML-Tags und -Werte
148
6 Wizards, Editors und andere Tools
Beachten Sie, dass die Veränderungen eine gültige SML-Struktur nicht verletzten dürfen, sonst ist die Anwendung nicht in der Lage, die Ergebnisse auszuwerten. Mit Submit übertragen Sie die Veränderungen an Ihre Applikation (um sie dort auszuwerten), durch Reset stellen Sie die ursprüngliche Struktur wieder her. Können die Änderungen an oder in der SML-Struktur nicht der aktuellen Grammatik zugeordnet werden, so erfolgt die Strukturweitergabe an die TTS-Engine – die Suche in der PromptDatenbank wird demnach nicht mehr ausgeführt. DTMF Der Reiter bzw. die Elemente darin sind nur aktiv bzw. einsetzbar, wenn die Applikation DTMF-Funktionalität unterstützt, das heißt, explizit auf DTMF-Eingaben reagieren kann und diese abzufragen in der Lage ist. Eine DTMF-Applikation wird entweder über den fTelephony Application Simulator (TASim) oder über die Telephony Services betrieben – je nachdem ob der Speech Server installiert ist oder nicht. In einer DebugUmgebung (bzw. unter Einsatz des TASim) lässt sich die Anwendung über den Ziffernblock steuern. Der Ziffernblock der Debugging Console ist während einer Debuggingsitzung aktiv und übernimmt die Aufgaben des TASim-Ziffernblocks (dieser wird inaktiv gesetzt).
Abb. 6.20. Die Elemente im Bereich DTMF während der Debuggingsitzung
Weitere Attribute des aktiven (hier: QA) Speech Controls wie ID14 oder Timeouts werden ebenfalls angezeigt. Um auf bestimmte Ereignisse zu reagieren oder Einfluss zu nehmen, können Sie in der Auswahlliste unter Exceptions eine anderes als der aktuell angezeigte Ereignis bestimmen und über Submit der Anwendung schicken. Dadurch können Sie testen, ob für 14
Wurde keine ID vergeben, so erstellt die Sprachplattform während der Sitzung eine temporäre eindeutige ID.
6.3 Externe Tools
149
jede Tasteneingabe entsprechende Reaktionsmethoden implementiert wurden. Ansonsten bedienen Sie die Applikation wie gewohnt mit den (erlaubten) Tasten des Ziffernblocks. Im Ergebnisfeld Result oberhalb des DTMF-Reiters werden Ihnen die Werte der zuletzt durchgeführten Erkennung angezeigt. Weitere Ergebnisse des Programmablaufs können Sie in den anderen Bereichen (Reitern) einsehen. Listen Sofern während des aktuellen Debugging- bzw. Spracherkennungsprozesses ein exklusives oder eingebettetes Listen Control innerhalb des ausgeführten Speech Controls zum Einsatz kommt, werden die aktuellen Informationen angezeigt. Darüber hinaus informiert sie der Bereich Listen im oberen Anzeigebereich der Speech Debugging Console über den derzeitigen Wartezustand oder aufgetretene Ereignisse. Sofern eine Eingabe erwartet wird, können Sie entweder über Sprach- oder Texteingabe und dem Drücken der entsprechenden Schaltfläche Daten an das wartende System zur Auswertung schicken. Eine Unterbrechung beim Laden eines Listen Controls steuern Sie durch die Aktivierung oder Deaktivierung der Schaltfläche Break on Listen Start. Grammar In der Anzeige erscheinen die gewählte Grammatikdatei und Zusatzinformationen zur Grammatik, wie Status (zum Beispiel Inline-Grammatik) oder Sprache. Die Daten entsprechen weitestgehend den Informationen, die Sie erhalten, wenn Sie im Visual Studio die Eigenschaften der gewählten Grammatik aufrufen. Um eine Grammatik zu öffnen bzw. zu ändern, klicken Sie auf die Schaltfläche View neben dem Eingabefeld Grammar. Daraufhin wird eine zweite Instanz des Visual Studio geöffnet und die unter Grammar URI angegebene Datei geladen. Record Hier können Sie sich die Ergebnisse einer Audioaufnahme anzeigen lassen, sofern sich ein aktives Reco Objekt in der Ausführung befindet (zum Beispiel RecordSound). Bei anderen Speech Controls, in denen Reco Controls benutzt werden, müssen diese zunächst aktiviert werden. Für ein QA Speech Control gehen Sie dabei wie folgt vor: 1. Öffnen Sie das Eigenschaftenfenster des Speech Controls 2. Erweitern Sie die Eigenschaft Reco 3. Erweitern Sie die Eigenschaft Record 4. Setzen Sie die Eigenschaft Enabled auf „True“.
150
6 Wizards, Editors und andere Tools
In den Anzeigefeldern sehen Sie unter Media type das Aufnahmeformat (normalerweise „audio/wav“) sowie die Aufnahmedauer und die Größe der generierten Audiodatei. Das Feld Location zeigt den Pfad des Webservers, in das die Datei gespeichert wurde. Prompt Dieser Bereich gibt Informationen über den aktuellen Zustand eines Prompt Controls wider. Die Attribute entsprechen den Einstellungen, wie sie für das ausführende Speech Control definiert wurden; im unteren Bereich erfolgt die Anzeige über den aktivierten Serverpfad (sofern der optionale Speech Server installiert ist, also zum Beispiel http://localhost/speechserverweb/ lobby.asmx) und den Typ für das Attribut BargeIn. Dieser lautet entweder grammar oder speech (bei DTMF). Sie können den Pfad des Servers auch auf Ihrem lokalen Host in der „TASim.exe.config“ Konfigurationsdatei festlegen, die sich im selben Verzeichnis wie die Datei TASim.exe befindet („\Program Files\Microsoft Speech Application SDK 1.0\SDKTools\Telephony Application Simulator“). Current QA Sofern Sie eine Applikation mit aktiviertem fQA Speech Control debuggen, ist dieser Anzeigebereich aktivierbar – bei reinen SALT-Applikationen oder Anwendungen ohne SALT-Tags und den Einsatz von Speech Controls ist der Reiter inaktiv. In den ID-Feldern stehen die eindeutigen Bezeichner des aktivierten QA Controls; wurden dagegen keine IDs festgelegt, generiert die Sprachplattform automatisch eigene Werte. Haben Sie Kommandos (fCommand Speech Controls) für das QA Control festgelegt, so erscheinen die momentan aktivierten und ausgewählten Controls im Fenster Commands. Bei jeder Markierung eines Command Controls werden die korrespondierenden Daten angezeigt. Weitere Informationen zu dem aktivierten QA Control finden Sie unter dem Reiter „Answers“. Answers Sämtliche intern verwendeten Listen (Answers, ExtraAnswers sowie Confirms) mit Einträgen des Objekts „Microsoft.Speech.Web.UI.Answer“ können Sie in diesem Bereich einsehen. Der Inhalt des Feldes Text repräsentiert den aktuellen Wert des Objekts Reco der aktivierten Answer. Die Anzeige Semantic element verweist auf das fSemanticItem, dem der Inhalt aus dem Objekt Answer zugewiesen wird. Zusätzliche Details erhalten Sie unter dem Reiter „Activations“. Im Feld Status sehen Sie den derzeitigen Stand der Abfrage – wird der Wert „NeedsConfirmation“ angezeigt, wartet das System auf eine Bestäti-
6.3 Externe Tools
151
gung für den Eintrag in Text. Weitere mögliche Anzeigen sind „Empty“ oder „Confirmed“. Activations Eines der wichtigsten Debuggingfenster stellt dieser Bereich dar. Hier sehen Sie den Programmablauf, wie er durch das clientseitige Managementobjekt fRunSpeech kontrolliert wird. Die Anzeige wird nur bei Voice-only Applikationen aktualisiert bei multimodalen Anwendungen erfolgt keine Protokollierung. Da Sie in Voice-only Anwendungen keine optische Kontrolle besitzen, stellt diese Log-Anzeige eine wertvolle Informationsquelle über den aktuellen Aktivierungsverlauf dar. Die Datenliste wird für die folgenden Controls bereitgestellt: • • • •
QA Command CustomValidator CompareValidator
Abb. 6.21. Informationen des aktiven Speech Controls durch RunSpeech
152
6 Wizards, Editors und andere Tools
Die Verlaufsliste (History) stellt alle aktivierten (abgelaufenen) Controls sowie das momentan aktive Speech Control in absteigender Reihenfolge dar, das heißt, aktive Elemente (Knoten) stehen zwar immer am Anfang, innerhalb des aktiven Knotens werden die bis dahin aufgerufenen Controls in umgekehrter Reihenfolge aufgeführt. Vor jedem Knoten sehen Sie den Ausführungszeitpunkt – damit haben Sie eine zusätzliche Information zur Festlegung individueller Timeouts. Im Bereich Detailed information werden alle Eigenschaften des ausgewählten Elements sowie die entsprechenden Answer Controls untereinander aufgelistet. Damit die Aktivierungsinformationen angezeigt werden können, müssen Sie – wie bei dem Reiter „Listen“ auch – die Schaltfläche Break on Listen Start in der Toolbar aktivieren. Neben jedem Knoten wird zusätzlich noch der Aktivierungsstatus angezeigt; „Is active“ signalisiert bei einem QA Speech Control, ob dieses aktiviert wurde („true“) oder noch zu aktivieren ist („false“). Bei den Validator Controls wird stattdessen „Is valid“ angezeigt: Der Eintrag „false“ bedeutet, dass die Überprüfung fehlgeschlagen ist, andernfalls erscheint hier „true“. Die Aktivierung interner Prompts eines Validator Controls zeigt hingegen wieder „Is active=true“ an. Output Dieser Bereich zeigt Ihnen neben Aktivitätsmeldungen wie zum Beispiel die (erfolgreiche) Beendigung von Skriptkompilierungen oder das Laden diverser Headerdaten, sondern auch den Status des laufenden Prozesses (process monitoring). Bei der Ursachenforschung von Störungen ist das Output-Fenster eine wertvolle Informationsbasis, denn die meisten Meldungen erscheinen recht ausführlich im Klartext. Schade ist nur, dass ein Zeilenumbruch nicht eingestellt werden kann; die Texte erstrecken sich oft über einen weiten horizontalen Bereich, der zu scrollen ist. Die Ausgabedaten können auch zwecks späterer Kontrolle in einer Textdatei (.txt) gespeichert werden. Dazu wählen Sie im Menü Tools den Eintrag Save Output to File. 6.3.3 Log Player Mit dem Log Player (Speech Debugging Console Log Player) lassen sich Log-Dateien, die von der fSpeech Debugging Console aufgezeichnet wurden, nachträglich abspielen. Einsatzschwerpunkt sind automatisierte Test, um Fehlerquellen in Voice-only-Anwendungen nachträglich lokalisieren zu können. Die Log-Daten werden im .xml-Format abgelegt. Stellen Sie vor der Ausführung einer Sprachapplikation entweder in der Konsole selbst oder im Dialog Speech Debugging Console Configuration
6.3 Externe Tools
153
den Log-Modus ein und wählen einen Pfad aus, in dem die Aufzeichnungsdatei gespeichert werden soll. Den Konfigurationsdialog öffnen Sie unter Start|Microsoft Speech Application SDK 1.0|Debugging Tools|Speech Debugging Console Configuration. Nach Ablauf einer Debugging-Sitzung öffnen Sie den Log Player von der Kommandozeile oder aus dem Hauptmenü unter Start|Microsoft Speech Application SDK 1.0|Debugging Tools|Speech Debugging Console Log Player. Im Feld Log file path geben den Pfad– und Dateinamen an oder wählen die Datei über die Schaltfläche Browse. Beachten Sie, dass für den Ablauf das Visual Studio nicht geöffnet sein darf.
Abb. 6.22. Ergebnis eines erfolgreichen Log-Abrufs
Der Log Player startet die Applikation und erwartet denselben Ablauf wie vor der Aufzeichnung. Abweichende Eingaben werden entsprechend als Fehler protokolliert, ebenso korrekte Eingaben. Das Ablaufprotokoll selbst können Sie wiederum als Vorlage speichern, dazu markieren Sie den Menüeintrag Record Log File im Menü Options. 6.3.4 Kommandozeilen-Tools Neben den bereits beschriebenen dialogbasierten Tools existieren auch eine Reihe kommandozeilenbasierter Tools, die in der Leistungsfähigkeit mit ihren visuellen Pendants vergleichbar sind, jedoch häufig in einer Produktivumgebung und nicht während der Entwicklungsphase eingesetzt werden. Eine Aufstellung sämtlicher Programme erhalten Sie, wenn Sie
154
6 Wizards, Editors und andere Tools
den Menüeintrag Start|Microsoft Speech Application SDK 1.0|Debugging Tools|Microsoft Speech Application Command Prompt wählen. Alle Programme können aus dem Kommandozeilenfenster heraus gestartet werden, da beim Aufruf ein entsprechender Umgebungsparameter gesetzt wird. Alternativ ist selbstverständlich auch der Aufruf aus dem jeweiligen Verzeichnis heraus möglich.
Grammar Compiler Grammatikdateien liegen in einem XML-Format vor und beinhalten spezifische Einträge, die es dem fGrammar Editor beispielsweise ermöglichen, die textlichen Informationen grafisch umzusetzen. Darüber hinaus enthalten sie häufig Querverweise auf andere Grammatiken, verschachtelte Listen usw. Umfangreiche Grammatiken können recht schnell nicht nur in der Größe, sondern auch in der Komplexität wachsen. Dem SASDK liegt daher ein Grammatikcompiler bei, mit dem sich die Größe der Grammatikdateien und damit auch die Ladezeiten verringern lassen. Das Tool „SrGSGc.exe“ liegt standardmäßig im Verzeichnis „\Program Files\Microsoft Speech Application SDK 1.0\SDKTools\Bin“ und ermöglicht die Kompilierung einer W3C-konformen .grxml-Datei in das kontextfreie Format .cfg (context free grammar). Kontextfreie Grammatiken besitzen keine Informationen zur grafischen Darstellung und sind nicht mehr mit einem Text- oder XML-Editor lesbar. Allerdings ist es möglich, innerhalb von Speech Controls auf diese Dateien zu verweisen und sie als externe Dateien in Speech-Projekte einzubinden. Nähere Informationen zum Aufruf und zur Vorgehensweise finden Sie in fKapitel 12, Kompilieren von Grammatikdateien.
Prompt Editor Die Funktionen des dialogbasierten Tools fSpeech Prompt Editor lassen sich auch mit der Kommandozeilen-Version namens „PromptEdit.exe“ ausführen. Die Datei befindet sich im Verzeichnis \Program Files\Microsoft Speech Application SDK 1.0\SDKTools. Eine Auflistung möglicher Befehle und Parameter erhalten Sie beim Aufruf mit „promptedit /?“ (oder einfach nur „promptedit“). Die kommandozeilenbasierte Variante bietet sich beispielsweise an, wenn Sie eine Vielzahl von .wav-Dateien über eine Batchverwaltung in die abschließende .promptdb-Datenbank laufen lassen möchten. Es stehen dazu auch diverse Schalter zur Verfügung, mit denen Dateiausschlüsse oder Logs gesteuert werden können. Ein weiterer möglicher Einsatz ist die parallele Bearbeitung während der Entwicklungsphase, da sowohl das Kommandozeilenfenster als auch
6.3 Externe Tools
155
das Visual Studio gleichzeitig geöffnet bleiben können und länger laufende Prompt-Generierungen im Hintergrund stattfinden können, während Sie zum Beispiel Grammatiken entwickeln.
Prompt Builder Mit dem Prompt Builder erstellen Sie fertige (verteilbare) Prompt-Dateien (.prompts). Als Eingangsmaterial sind lediglich Dateien vom Typ .promptsdb, .js sowie .vbs erlaubt. Der Prompt Builder kompiliert die Eingangsdaten anhand diverser Schalter, die Sie sich mit „buildprompts /?“ anzeigen lassen können. Sie finden die Datei „BuildPrompts.exe“ im selben Verzeichnis wie den Prompt Editor, also unter \Program Files\Microsoft Speech Application SDK 1.0\SDKTools. Die Textdatei, in der Sie die Pfadangaben zu den entsprechenden Eingangsdateien eintragen, muss im Unicode-Format gespeichert werden, ansonsten kann der Compiler die Informationen nicht verarbeiten und erzeugt eine Fehlermeldung. Die kompilierten .prompts-Dateien sind mit den Prompt-Datendateien vergleichbar, die das Visual Studio .NET im Release-Modus aus dem .promptdb-Ausgangsmaterial erstellt. Die Kompilate werden dabei automatisch in das entsprechende Projektunterverzeichnis /Release verschoben. Auf der Kommandozeile können Sie den Pfad selbst angeben.
Teil 2 Programmieren mit dem SASDK
7 Sprachverarbeitung und Debugging
Um den programmatischen Ablauf einer .NET-basierten, sprachgestützten Webapplikation besser zu verstehen, ist es wichtig, die zugrunde liegende Referenztechnologie näher zu betrachten. Die folgenden Kapitel behandeln alle relevanten Themen, die mit laufzeitgesteuerten Programmverarbeitung und der Programmuntersuchung zu tun haben Wie in fKapitel 1, Spracherkennung und Sprachsteuerung, bereits erwähnt, werden alle sprachbasierten Elemente einer ASP.NET Webseite in der endgültigen (gerenderten) HTML-Fassung in SALT-Elemente überführt, soweit es die Übereinstimmungen zulassen. Die Webseite beinhaltet darüber hinaus Laufzeitobjekte, die den Aufruf einzelner Sprachkomponenten koordinieren. In fKapitel 7.2, Laufzeitobjekte, werden diese Objekte detailliert beschrieben. Die meisten Speech Controls besitzen Schnittstellen zu Skriptfunktionen, mit denen sich das Laufzeitverhalten beeinflussen lässt oder zusätzliche vor- und nachgelagerte Aktionen ausgeführt werden können. Details dazu erhalten Sie in fKapitel 7.3, Skriptfunktionen.
7.1 Speech Application Language Tags (SALT) SALT (Speech Application Language Tags) ist eine Spezifikation des SALT-Forums und liegt derzeit in der Version 1.0 dem World Wide Web Consortium (W3C) zur Standardisierung vor. Die ASP.NET Speech Controls werden vom Webserver in korrespondierende SALT-Elemente gerendert, wobei Microsoft nicht alle Teile der Spezifikation konsequent umsetzt1 – vielleicht wird sich dies in den kommenden Versionen ändern. Es ist möglich, dass nach einer Verabschiedung des SALT-Standards einige Anstrengungen unternommen werden, eine vollständige Implementierung des Speech Application SDK nach SALT zu erreichen, zumal Microsoft als einer der maßgeblichen Unterstützer des Forums auftritt. 1
Entsprechende Anmerkungen erhalten Sie hierzu auch in Kapitel 9.2., Grammatikelemente und Zuordnungen.
160
7 Sprachverarbeitung und Debugging
7.1.1 Die SALT-Architektur Im Wesentlichen besteht die SALT-Architektur aus vier Bereichen: Web Server, Speech Server, Telephony Services und Client. Der Speech Server (2004) beinhaltet bereits die Telephony Services Infrastruktur – weitere Informationen dazu erhalten Sie auch in fKapitel 2.3, Speech Server und Telephony Services. SALT ist eine XML Markup-Ergänzung, um durch entsprechende Schnittstellen (interfaces) sprachgestützte Applikationen über einen Web Browser wiedergeben zu können. Dabei kommen zwei unterschiedliche Typen zum Einsatz, und zwar für ausschließlich sprachgesteuerte (voiceonly) multimediale Anwendungen.
Abb. 7.1. Architektur für sprachgestütze Applikationen mit SALT2
Durch den Einsatz der spezifischen SALT-Elemente und -Objekte ist es möglich, Webanwendungen durch Sprachsteuerung zu erweitern, ohne die bisherige Applikationsstruktur oder die eingebundene Geschäftslogik zu verändern. SALT lässt sich in HTML-, XHTML-, cHTML- oder WMLDokumente sowie jeder anderen, von SGML abgeleiteten Markup-Sprache einbetten. Außerdem wird DTMF unterstützt, um in ausschließlich telefoniegesteuerten Browsern für Voice-only Anwendungen eingesetzt zu werden. 2
Quelle: Microsoft
7.1 Speech Application Language Tags (SALT)
161
7.1.2 Kriterien einer SALT-Applikation Der Sprachumfang von SALT ist relativ gering und kompakt. Es gibt vier Hauptelemente sowie darin eingebettete Unterelemente. Außerdem verfügt die Sprache über einige DOM-Objekte, -eigenschaften und -ereignisse zur Steuerung des Sprachflusses. Das Tag-Präfix lautet sinnigerweise salt. Die vollständige Spezifikation können Sie in der Version 1.0 im SALT-Forum als Web- oder PDF-Dokument herunterladen.3 Tabelle 7.1. SALT-Elemente und SALT-Objekte Element/Objekt
Typ
Zugehörigkeit
prompt listen dtmf smex
Hauptelement/Objekt Hauptelement/Objekt Hauptelement/Objekt Hauptelement/Objekt
param bind grammar record content value
Unterelement, optional Unterelement Unterelement Unterelement Unterelement, optional Unterelement, optional
prompt, listen, dtmf, smex listen, dtmf, smex listen, dtmf listen prompt prompt
PromptQueue CallControl LogMessage
Objekt Objekt
nur Uplevel-Browser4 nur Uplevel-Browser nur Uplevel-Browser
In fKapitel 9, Arbeiten mit Grammatiken, werden die für die Gestaltung von Grammatiken verfügbaren Elemente und Zuordnungen im Einzelnen beschrieben. Dort sind auch die jeweiligen Grammatik-Tags und ihre korrespondierenden SALT-Elemente aufgeführt. Microsoft hält sich dabei weitestgehend an die Spezifikation, einige Elemente sind jedoch proprietär und werden zur Laufzeit in adäquate Varianten überführt – der generierte Code bleibt dabei jedoch SALT-konform. 3 4
http://www.saltforum.org/devforum/default.asp So genannte Uplevel-Browser unterstützen vollständig Skripte und Ereignisbehandlung – dies ist bei nahezu allen aktuellen Browsern der Fall. Dazu gehören zum Beispiel der Internet Explorer 6.x und Firefox 1.x.
162
7 Sprachverarbeitung und Debugging
Browser-Unterstützung SALT unterstützt zwei verschiedene Ausführungsmodi: Den „Objektmodus“ und den „deklarativen Modus“. Beide Varianten sind abhängig von der Ausstattung des Browsers, genauer gesagt der Fähigkeit, Skripte und Ereignisse interpretieren und ausführen zu können. Der Objektmodus ermöglicht dem Anwendungsentwickler, die Möglichkeiten der Sprache voll auszuschöpfen – zum Beispiel dynamische Manipulation von SALT-Elementen –, da der Host (der Browser) alle zur Ablaufsteuerung wesentlichen Features unterstützt. Dies bedeutet vor allem die Unterstützung von XHTML gemäß W3C.5 Im deklarativen Modus ist der Einsatz von SALT-Elementen genauso möglich, ohne jedoch die weitergehenden Skript- und Ereignissteuerungen des Document Object Model (DOM) nutzen zu können. Die betrifft so genannte Downlevel-Browser, bei denen entweder das Scripting deaktiviert ist oder die über keine derartige Unterstützung verfügen. Hier sind lediglich einfache Funktionsaufrufe durchführbar. Um mit SALT-Elementen ausgestattete Web-Applikationen wiedergeben zu können, muss der Browser gemäß Spezifikation die W3CEmpfehlung für die Speech Synthesis Markup Language (SSML) berücksichtigen6. Dies gilt zum Beispiel für den Internet Explorer 6.x. Der Browser kann darüber hinaus beliebige andere Sprachformate unterstützen. Bei der Wiedergabe eines Prompts können dadurch einzelne Phrasen gesondert ausgegeben werden. Beispiel:
You said six times Hello.
Damit auch Browser eingesetzt werden können, die nicht mit SALT-Tags umzugehen verstehen, wird empfohlen, innerhalb von Funktionen zu testen, ob SALT-Objekte in der Webseite vorhanden sind oder nicht. Dadurch wird gewährleistet, dass bei multimodalen Applikationen zumindest die allgemeine Ausführung ohne Sprachunterstützung fehlerfrei möglich ist.
5 6
http://www.w3.org/TR/xhtml1/ http://www.w3.org/TR/speech-synthesis/
7.1 Speech Application Language Tags (SALT)
163
7.1.3 Von Speech Tags zu SALT Microsoft verwendet für seine Speech Controls das Präfix „speech“ – die Darstellung einer .aspx-Seite in HTML verdeutlicht, dass die Sprachkomponenten der Bibliothek „Microsoft.Speech.Web.dll“ entnommen sind. Diese enthält unter anderem den Namensraum „Microsoft.Speech.Web. UI“, in dem sich die grafischen Elemente befinden. Ein typischer Kopfeintrag sieht demnach wie folgt aus:
...
Der Webserver sorgt beim Rendern für die Umsetzung der Speech Controls in die entsprechenden SALT-Elemente. Der Verweis wird in der generierten HTML-Datei in den Kopfdaten hinterlegt, worin auch die Referenz über eine CLASSID innerhalb der Registry enthalten ist. Dadurch wird der Browser zu einem SALT-kompatiblen Host:
Lamborghini Ferrari Aston Martin
BMW M5 ...
Cat Dog
...
...
13.6 Normalisierung von Daten Sie haben vielleicht bemerkt, dass in zahlreichen Kapiteln des Buches an entsprechenden Stellen auf die Möglichkeit des Einsatzes von Normalisierungsfunktionen hingewiesen wurde, an einigen Stellen finden Sie auch kurze Beispiele. Für den Fall, dass Sie die vom Spracherkenner zurückgelieferten Informationen (es handelt sich ja immer um Phrasen – also Strings – aus den Grammatiken) weiterverarbeiten möchten, sollten Sie die Daten normalisieren. Dazu werden clientseitige Scriptfunktionen eingesetzt, und es bietet sich an, diese in eine separate Scriptdatei (zum Beispiel „Normalizations.js“) auszulagern. Eine Datennormalisierung kann praktisch überall und jederzeit vorgenommen werden; meistens werden Sie den Aufruf einer Normalisierungsfunktion aber an ein Ereignis binden, etwa OnClientComplete oder OnClientListening. Die Ereignisfunktion ruft dabei die Normalisierungsfunktion auf, oder sie ist die Normalisierungsfunktion. Dies trifft vor allem für die Speech Controls zu, die keinen exponierten Zugang zu einer Normalisierungsfunktion zur Verfügung stellen. Das einige Speech Control, dass Bei der Normalisierung manipulieren Sie in der Regel nicht direkt die zurückgelieferten Daten des Spracherkenners; die Werte werden vielmehr zwischengespeichert und für die Weiterverarbeitung der Ergebnisdaten eingesetzt. Die unmittelbare Veränderung der Daten hätte – je nach Zeitpunkt – zur Folge, dass die Überprüfung keine Übereinstimmung ergibt und es daher zu einer Fehlermeldung („NoReco“) kommt. Eine Normalisierung
13.6 Normalisierung von Daten
311
sollte demnach immer nach einer erfolgreichen Datenerkennung vorgenommen werden. Der Einsatz einer Normalisierungsfunktion ist abhängig vom Einsatzzweck, und damit gleichzeitig auch vom Applikationstyp. Eine Telefonnummer, die aus einer Reihe von Ziffern besteht, in eine optisch ansprechende Struktur zu bringen hat beispielsweise nur dann Sinn, wenn diese Änderung für den Benutzer auch sichtbar ist. Dies ist bei voice-only oder DTMF-Anwendungen nicht der Fall, sondern nur in einer multimodalen Umgebung. Allerdings spricht nichts gegen die Weiterverarbeitung der Daten, wenn diese in einer Datenbank landen und später auf einer Rechnung wieder auftauchen. Parameterzuweisung an die Scriptfunktion Das fQA Dialog Speech Control ist die einzige visuelle Komponente, die einen expliziten Zugang zu einer Normalisierungsfunktion anbietet. Die Funktionsreferenz stammt aus der Klasse Microsoft.Speech.Web.UI.Answer und ist ein String, der den Namen der clientseitigen Scriptfunktion beinhaltet. Der Funktion werden zwei Parameter übergeben: x XMLNode Vom fRunSpeech Dialogmanager wird nach erfolgreichem Test der XPathTrigger Eigenschaft (der vom Benutzer eingegeben Begriff stimmte überein) ein Wert des Typs XMLNode als erster Parameter übergeben. Dieser Datentyp beinhaltet den betreffenden SML-Knoten, der vom Spracherkenner zurückgeliefert wurde (zum Beispiel „/SML/Day“) und entstammt den Microsoft Core XML Services (MSXML 4.0). Der zugrunde liegende Datentyp ist das Interface IXMLDOMNode2. x object Als zweiten Parameter erhält die Scriptfunktion ein object, das auf ein fSemanticItem Speech Control verweist, welches für das AnswerObjekt die Daten aufnimmt.
2
Weiterführende Informationen erhalten Sie auf den Microsoft-Webseiten der MSDN Library, zum Beispiel unter http://msdn.microsoft.com/library/default.asp? url=/library/en-us/xmlsdk/html/xmobj-xmldomnode.asp
312
13 Tuning, Tipps und Tricks
Abb. 13.4. Zuweisung von SemanticItem, XPathTrigger und Normalisierungsfunktion
Die clientseitige Scriptfunktion besitzt folgenden strukturellen Aufbau: string FunctionName (XMLNode node, object semanticItem)
Die Parameter sind optional – sie können auch weggelassen werden, da ohnehin der Zugriff auf die assoziierten Elemente wie SemanticItem und XMLNode besteht, wie in Abbildung 13.4 dargestellt. Wie Sie an der Funktionsstruktur erkennen, wird als Rückgabewert ein string erwartet, der als (normalisierter) Text für die Weiterverarbeitung zur Verfügung steht. Das Objekt XMLNode besitzt unter Anderem folgende Methoden, die Sie bei der Arbeit öfter einsetzen werden: hasChildNodes und selectSingleNode. In einer Anwendung können Sie die Funktion wie folgt einsetzen: function NormalizeMyData(smlNode, sItem) { var content = smlNode.selectSingleNode("Phone").text; ... if (sItem.value == "home") ... return content; }
Alternative Zugriffe Auch wenn die anderen Speech Controls keine direkte Schnittstelle zu einer Normalisierungsfunktion bereitstellen, können Sie dennoch über die OnClient-Methoden auf SemanticItem Controls und das aktive QA Control zugreifen. Funktionen, die für diese Ereignisbehandlung erstellt werden, besitzen keine Parameter und keinen Rückgabewert. Sie können aber einen eigenen Rückgabewert definieren, sofern Sie diesen für Ihren Bedarf zur Laufzeit auswerten möchten.
13.7 Globale Applikationseinstellungen
313
function NormalizeMyData() { var history = RunSpeech.ActiveQA.History; var len = history.length; var lastCommand = history[len-1]; ... if (document.all.sItem.value == "home") ... return true; }
13.7 Globale Applikationseinstellungen Möglicherweise ist Ihnen beim Lesen der diversen Kapitel aufgefallen, dass manchmal davon die Rede war, dass eine „Standard-Fehlerseite“ aufgerufen wird. Tatsächlich können Sie durch globale Applikationseinstellungen in der Konfigurationsdatei „web.config“ bestimmte Standardfunktionalitäten festlegen, die für die gesamte sprachgestützte Webapplikation gültig sind, sich aber dennoch bei Bedarf durch individuelle Parameter überschreiben lassen. Allgemeine Fehlerseite Geben Sie den absoluten oder relativen Pfad sowie den Namen einer allgemeinen Fehlerseite (zum Beispiel „http://myserver/errorpages/GlobalErrorPage.aspx“) wie folgt an: Listing 13.7. Festlegung der allgemeinen Fehlerseite
...
...
...
Logging von sensiblen Daten Normalerweise werden sensible Daten wie beispielsweise Kreditkarteninformationen oder Sozialversicherungsnummern nicht auf dem Server protokolliert, wenn das Logging (conditional logging) eingeschaltet ist. Damit auch diese Informationen eingesehen werden können, müssen Sie die entsprechende Sperre in der Konfigurationsdatei ausschalten.
314
13 Tuning, Tipps und Tricks
Listing 13.8. Festlegen der Protokolloption
...
...
...
Festlegung des Parameters für den TIM smex tag Mit dem Tag legen Sie für SALT-Elemente plattformspezifische Einstellungen fest – in diesem Fall betrifft dies die Standardeinstellung für den Telephony Interface Manager (TIM) des Speech Servers. Dazu verwenden Sie den Schlüssel „CallManagerSmexParam“ und vergeben den Tag mit optionalen Attributen sowie bei Bedarf weiteren eingebetteten Elementen – alle in HTML-encodierter Form: Listing 13.9. Einstellungen für das smex-Element des Telephony Interface Managers (TIM)
...
...
...
Standardeinstellungen für Dialog Speech Controls In fKapitel 5.2.4, SpeechControlSettings wird beschrieben, wie Sie allgemeine Einstellungen für Dialog Speech Controls wie fQA oder fCommand vornehmen können. Diese Festlegungen lassen sich auch in der Konfigurationsdatei durchführen, und zwar im Abschnitt . Dieser Abschnitt wird aber auch automatisch erstellt, sobald Sie mit Prompts arbeiten und eine neue Prompt-Datei anlegen. Dann nämlich baut die integrierte Entwicklungsumgebung im Hintergrund eine Liste von Prompt-Datenbankverweisen für alle Dialog Speech Controls mit dem Namen „globalStyle“ auf und fügt diese ans Ende der Konfigurationsdatei:
13.7 Globale Applikationseinstellungen
315
Listing 13.10. Ausschnitt der Standardeinstellungen für Dialog Speech Controls
...
...
Anhang A Speech Controls Einstellungen und Parameter
Viele Speech Control Dialogboxen sind in ihrer Aufteilung und den Möglichkeiten der Werteingabe sehr ähnlich, teilweise sogar identisch. Die vier wesentlichen Bereiche zur Festlegung dieser Daten sind Timeouts (Zeitraum bzw. Zeitüberschreitung bei der Spracherkennung), Events (Ereignisse), Prompts (natürlichsprachliche und synthetische Sprachwiedergabe) sowie Thresholds (Schwellenwerte für die Grammatikerkennung). Erst durch eine individuelle Festlegung dieser Parameter werden die Speech Controls quasi funktionstüchtig – manche besitzen sogar Pflichtfelder, ohne dessen Belegung sie nicht gerendert werden können. In fKapitel 5, Speech Controls im Visual Studio .NET, werden alle Speech Controls mit ihren Dialogparametern aufgeführt, dennoch wiederholen sich einige Beschreibungen wegen der genannten identischen Eigenschaften. Daher wird in den entsprechenden Erläuterungen auf diesen Anhang A verwiesen, um Ihnen hier einen schnellen Überblick über die Gemeinsamkeiten, Unterschiede sowie den Einsatzzweck zu bieten.
1
14 Timeouts
Abb. 14.1. Aktivierung der Timeouts im Überblick 1
Alle Angaben in Millisekunden (ms). Eine Deaktivierung erfolgt bei 0 (Null) ms.
320
14 Timeouts
14.1 InitialTimeout fListen fQA fRecordSound fApplication Speech Controls Tabelle 14.1. Zulässige Werte für InitialTimeout Minimalwert
Standardwert2
Maximalwert
1
3000
60000
InitialTimeout grenzt den Zeitraum ein, in dem der Spracherkenner (SR) auf eine Eingabe reagiert bzw. in dem mit einer Spracheingabe zu rechnen ist, bevor es zu einer Zeitüberschreitung kommt. Wurde kein PromptPlayback eingestellt, wird der Bereich vom Beginn der Aktivierung der Komponente (Start der Spracherkennung) bis zum festgelegten Timeout berücksichtigt. Bei einer Prompt-Ausgabe gilt der Zeitraum von der Aktivierung bis zum Ende des Playback, sofern der Benutzer nicht durch eine Unterbrechung (barge-in) die Wiedergabe stoppt.
14.2 BabbleTimeout fListen fQA fRecordSound fApplication Speech Controls Tabelle 14.2. Zulässige Werte für BabbleTimeout Minimalwert
Standardwert
Praxiswert
Maximalwert IE3/Telephony
5000
20000
7000
60000/2147483647
Ein BabbleTimeout tritt ein, wenn die zugeteilte Sprachzeit überschritten wurde. Die Dauer der erlaubten Spracheingabe ist maßgeblich abhängig von zwei Faktoren: Der zugrunde liegenden Grammatik und der damit verbunde2
3
Von einem Standardwert wird immer dann ausgegangen, wenn der Wert nicht spezifiziert ist, also entweder gar nicht angegeben wird oder ein Leerstring (""). Internet Explorer sowie Pocket Internet Explorer als Clients
14.4 MaxTimeout
321
nen Anzahl von erlaubten Begriffen, sowie dem Sprachmodus (automatic, single oder multiple, lesen Sie dazu auch das fKapitel 10.5.2, Listen).
14.3 EndSilence fListen fQA fRecordSound fApplication Speech Controls Tabelle 14.3. Zulässige Werte für EndSilence Minimalwert
Praxiswert
Standardwert
Maximalwert
50
2000
1000
60000
Durch EndSilence legen Sie fest, wie viel Millisekunden nach Beendigung der Spracheingabe der Spracherkenner mit der Bewertung der Eingabe bzw. dem Vergleich von Eingabe (Phrase) und den zugeordneten Grammatikelementen beginnen soll. Legen Sie kürzere Zeitabstände fest, um dem Anwender Sprachpausen zu ermöglichen, ohne diese aber gleichzeitig als Beendigung der Spracheingabe zu interpretieren. Der Wert von EndSilence hat im Sprachmodus single für Listen Speech Controls keine Bedeutung.
14.4 MaxTimeout fListen fQA fRecordSound fApplication Speech Controls Tabelle 14.4. Zulässige Werte für MaxTimeout Minimalwert
Standardwert IE/Telephony
Maximalwert IE/Telephony
5051
140000/120000
140000/MAX_INT
Mit MaxTimeout bestimmen Sie die gesamte mögliche Zeitspanne seit Beginn einer Sprachaufzeichnung. Der Wert sollte demnach mindestens so
322
14 Timeouts
groß sein wie der gesamte Zeitrahmen von fInitialTimeout plus fBabbleTimeout (plus fEndSilence im Sprachmodus automatic). Sobald eine Spracherkennung erfolgt, wird der Timer zurückgesetzt (neu gestartet). Außerdem können Sie mit MaxTimeout eine Obergrenze festlegen, wann die Sprachplattform spätestens in Aktion treten soll – zum Beispiel bei Netzwerkausfällen oder sehr langen Lade- sowie Übertragungszeiten, vor allem in verteilten Umgebungen. In diesen Fällen würde das Ereignis onerror (fOnClientError) ausgelöst.
14.5 FirstInitialTimeout fQA fApplication Speech Controls Tabelle 14.5. Zulässige Werte für FirstInitalTimeout Minimalwert
Praxiswert
Standardwert
Maximalwert
0
1000
0
MAX_FLOAT
Der Begriff FirstInitialTimeout ist eigentlich etwas missverständlich, denn bei diesem Wert handelt es sich um die Zeitspanne, nach der das Control eine „stillschweigende“ Zustimmung durchführt. Die Eigenschaft ist Bestandteil des fQA Dialog Speech Controls; da aber alle Application Speech Controls implizit mit QA Controls arbeiten, besitzen auch sie diese Eigenschaft. Ein Wert gleich 0 setzt die implizite Zustimmung (sehen Sie dazu auch in fKapitel 7.2.1, Der RunSpeech Dialogmanager) außer Kraft; dadurch wird der Anwender veranlasst, durch eine explizite Zustimmungsäußerung aus der Grammatik (XPathAcceptConfirms) die Frage zu beantworten.
14.6 ShortInitialTimeout fDataTableNavigator Tabelle 14.6 Zulässige Werte für ShortInitialTimeout Minimalwert
Praxiswert
Standardwert
Maximalwert
0
1000
1200
MAX_LONG
14.7 Timer
323
Mit ShortInitialTimeout steuern Sie im fDataTableNavigator automatisch durch die Datensätze, sofern ein Wert größer als 0 eingestellt ist. Jede „stillschweigende“ Zustimmung löst ein Ereignis OnSilence aus und führt dazu, dass der nächste Datensatz (vor)gelesen wird. Ist der Wert gleich 0, muss die Navigation durch ein entsprechendes Kommando erfolgen. Welche Kommandos möglich sind, legen Sie innerhalb des Controls fest. Sehen Sie dazu auch in die fKapitel 5.3.2, DataTableNavigator sowie fKapitel 7.5.3, Datenbindung von Speech Controls.
14.7 Timer fCall Management Controls Tabelle 14.7. Zulässige Werte für Timer Minimalwert
Praxiswert
Standardwert
Maximalwert
0
1000
1200
MAX_LONG
Die Kommunikation zwischen der sprachgestützten Webapplikation und der Sprachplattform verläuft asynchron, unter anderem auch um den Datenaustausch auch bei hoher Netzlast zu ermöglichen. Mit der Eigenschaft Timer (im Element smex ist es ein Attribut) legen Sie den „Countdown“ fest, um auf eine Nachricht der Sprachplattform zu warten. Sollte die Zeit verstreichen, ohne dass Dateneingänge stattgefunden haben, kann durch das ausgelöste Ereignis ontimeout entsprechend darauf reagiert werden. Die Eigenschaft Timer ist in der Basisklasse SmexMessageBase deklariert. Wann werden Timeouts verwendet bzw. sind Timeouts zwingend notwendig? In multimodalen Applikationen (tap-and-talk) bestimmt normalerweise der Anwender, wann bzw. ob eine Spracheingabe stattfindet, indem er zum Beispiel eine Maustaste oder den Stift für den Zeitraum der Spracheingabe gedrückt hält und nach Beendigung wieder loslässt. Die Sprachplattform bekommt demnach durch die Ereignisse mousedown und mouseup den Erkennungszeitraum vorgegeben. In voice-only Szenarien besteht diese Möglichkeit nicht; daher werden andere Mechanismen benötigt, um Spracheingaben abzubrechen oder den Erkennungszeitraum einzugrenzen. Timeouts erfüllen diesen Zweck, da
324
14 Timeouts
die Anwendung durch diese festgelegten Zeitfenster in der Lage ist, selbst einen Abbruch einzuleiten oder die Spracherkennung durchzuführen. Wo sind Timeouts am sinnvollsten? Abgesehen davon, dass die Festlegung von Timeouts – wie vorher bereits beschrieben – in voice-only Umgebungen am meisten Sinn macht, ist es schwierig, pauschal eine Antwort darauf zu geben, denn letztendlich liegt es in der Entscheidung des Applikationsentwicklers, wie lange eine Spracheingabe dauern darf oder wie die Anwendung auf Sprachpausen reagieren soll.
15 Events
Ereignisse, egal ob sie client- oder serverseitig eingesetzt werden, sind ein wertvolles Hilfsmittel, um auf laufzeitspezifische Vorgänge zu reagieren. Ohne diese Möglichkeit des vor- oder nachgelagerten Eingreifens blieben dem Entwickler viele Schnittstellen verbaut. Einige Ereignisse sind sogar „lebenswichtig“, zum Beispiel zur Reaktion auf Fehler. In den folgenden Abschnitten werden zunächst die clientseitigen und im Anschluss daran die serverseitigen Ereignisse aufgeführt. Sämtliche Ereignismethoden sind standardmäßig nicht gesetzt, das bedeutet, keine der genannten Ereignisse ist in den Speech Controls vorbelegt. Alle Schnittstellen sind außerdem in den einzelnen Abschnitten der jeweiligen Speech Controls in fKapitel 5, Speech Controls im Visual Studio .NET, beschrieben.
15.1 Client-side events Clientseitige Ereignisse werden vom fRunSpeech Dialogmanager aufgerufen und verwaltet. Einige Ereignisse sind gekapselte Methoden („Wrapper“) von SALT-Elementen – wo dies der Fall ist, wird entsprechend darauf hingewiesen. Sofern keine Parameter oder Rückgabewerte notwendig sind, erfolgt auch keine Aufstellung; ansonsten sind alle Ein- und Ausgabewerte tabellarisch gelistet. Bei clientseitigen Funktionen ist die Angabe der Parameterliste optional, das heißt, auch wenn eine Funktion Parameter übergeben bekommt, müssen diese nicht angegeben werden, sofern Sie nicht darauf zurückgreifen wollen. Die Bezeichner der Parameter sind frei wählbar. Jedem Funktionsbezeichner folgt mindestens ein Verweis auf ein Speech Control, in dem die beschriebene Schnittstelle enthalten ist. Manche Ereignisfunktionen gleichen Namens werden in differenten Controls mit unterschiedlichen Parametern oder Rückgabewerten eingesetzt. OnClientActive fQA fApplication Speech Controls
326
15 Events
function ClientActive()
Dieses Ereignis wird immer dann ausgelöst, bevor der fRunSpeech Dialogmanager das (implizite) fQA Speech Control aktiviert bzw. reaktiviert, selbst wenn das QA Control seine Verarbeitung noch nicht abgeschlossen hat oder aktiv ist. Ob ein QA Control das aktive Element ist, lässt sich der Eigenschaft RunSpeech.ActiveQA (nicht null) entnehmen. OnClientActiveFirst fApplication Speech Controls function ClientActiveFirst()
Das Ereignis tritt ein, nachdem das erste fQA Speech Control innerhalb eines Application Speech Controls aktiviert wird. Siehe auch: OnClientActive OnClientBargeIn fPrompt fQA fCompareValidator fCustomValidator function ClientBargeIn()
Der Aufruf dieses Ereignisses erfolgt aufgrund des Ereignisses onbargein durch das SALT-Element prompt. Das Ereignis wird ausgelöst, wenn während der Prompt-Ausgabe der Anwender eine Spracheingabe durchführt, die Ausgabe also unterbricht und dem System „ins Wort fällt“. Siehe auch: OnClientKeyPress OnClientBeforeSend fSmexMessage string ClientBeforeSend( 2 parameters )
Dieses Ereignis wird vom fRunSpeech Dialogmanager kurz vor dem Senden einer Nachricht ausgelöst. Für den Entwickler ist dies die letzte Gelegenheit, noch Änderungen an der Mitteilung durchzuführen. Wird das Ereignis nicht abgefangen, erfolgt die Übertragung der Nachricht aus der Eigenschaft SmexMessage.Message.
15.1 Client-side events
Parameter
Typ
Bedeutung
sender message Rückgabewert
String Object String
Aufrufendes Control (SmexMessage) Smex-Nachricht des DOM-Objekts Neue (überarbeitete) Nachricht
327
OnClientBookmark fPrompt (wird bislang noch nicht unterstützt) function ClientBookmark()
Bookmarks können vom Entwickler für Sprachausgaben (Prompts) festgelegt werden, um bestimmte Markierungen innerhalb eines Textes zu setzen. Trifft die Speech Engine während der Wiedergabe auf ein Bookmark, so wird dieses Ereignis ausgelöst und die Eigenschaft Prompt.Bookmark erhält die Markierung. Dieses Ereignis hat keinen Einfluss auf die Wiedergabe. OnClientChanged fSemanticItem function ClientChanged( parameter )
Das Ereignis wird durch eine Änderung des Inhalts der Eigenschaft Text vom fSemanticItem Speech Control ausgelöst. Für den Fall, dass die Eigenschaft AutoPostback aktiviert wurde, können Sie die Skriptfunktion dazu nutzen, vor dem bevorstehenden Serveraufruf die geänderten Daten zwischenzuspeichern, zum Beispiel mittels SpeechCommon.SetViewState. Parameter
Typ
Bedeutung
semanticItem
Object
Aufrufendes Control (SemanticItem)
OnClientCommand fCommand function ClientCommand( parameter )
Der fRunSpeech Dialogmanager ruft das Ereignis auf, wenn der Spracherkenner feststellt, dass ein oder mehrere Begriffe aus der Grammatik des Command Controls verwendet werden. Sollte die Eigenschaft AutoPostback aktiviert sein, können Sie dieses Ereignis dazu nutzen, Infor-
328
15 Events
mationen vor dem Serveraufruf zwischenzuspeichern. Dazu bietet sich die Methode SetViewState des SpeechCommon-Objekts an. Siehe auch: Triggered Parameter
Typ
Bedeutung
smlNode
XMLNode
Der generierte SML-Knoten des Spracherkenners
OnClientComplete fPrompt function ClientComplete()
Das Ereignis tritt ein, sobald die Wiedergabe eines Prompts beendet ist. OnClientComplete ist ein Wrapper für das originäre Ereignis oncomplete des SALT-Elements prompt. Siehe auch: Complete OnClientComplete fQA fApplication Speech Controls function ClientComplete()
Dieses Ereignis wird nach Beendigung der Ausführung eines expliziten oder impliziten QA Speech Controls und unmittelbar vor der Übergabe der Kontrolle an den fRunSpeech Dialogmanager aufgerufen. Siehe auch: OnClientCompleteLast OnClientCompleteLast fApplication Speech Controls function ClientCompleteLast()
Der fRunSpeech Dialogmanager ruft das Ereignis auf, nachdem das letzte implizite fQA Control eines Application Speech Controls beendet wurde. Siehe auch: OnClientComplete, CompleteLast OnClientConnected fAnswerCall function ClientConnected( 5 parameters )
15.1 Client-side events
329
Die Funktion ist ein Wrapper für das vom Speech Server erzeugte CSTA-Ereignis ESTABLISHED. Der fRunSpeech Dialogmanager aktiviert den Funktionsaufruf, nachdem eine Verbindung zustande gekommen ist. Der Name des XML-Knotens für das Ereignis in smexMessage lautet „EstablishedEvent“. Alle CSTA-Ereignisse können beispielsweise wie folgt verarbeitet werden: ... var msg = event.srcElement.received; if (msg.nodeName == "EstablishedEvent") { callID.value = msg.selectSingleNode("./connection/callID").nodeValue; ... }
Siehe auch: Connected Parameter
Typ
Bedeutung
sender callID callingDevice calledDevice smexMessage
Object String String String Object
Das clientseitige Speech Control (AnswerCall) Eindeutige ID des aktuellen Anrufs Device ID des Anrufers Device ID des Angerufenen (Anruf-Empfängers) DOM-Objekt mit der gesendeten Smex-Nachricht
OnClientConnected fMakeCall function ClientConnected( 3 parameters )
Mithilfe des ECMA-323 Make Call Service lässt sich ein so genannter outbound call durchführen – eine Verbindung an ein anderes Device (network interface device) mithilfe der Device ID oder einer gewählten Nummer als Ziel. Der Verbindungsaufbau löst dieses Ereignis aus („NetworkReachedEvent“). Siehe auch: Connected Parameter
Typ
Bedeutung
sender directoryNum smexMessage
Object String Object
Das clientseitige Speech Control (MakeCall) MakeCall.CalledDirectoryNumber DOM-Objekt mit der gesendeten Smex-Nachricht
330
15 Events
OnClientDelivered fAnswerCall function ClientDelivered( 2 parameters )
Nach der (erfolgreichen) Übertragung einer Nachricht wird von der Empfangsplattform das CSTA-Ereignis DELIVERED ausgelöst, welches bei der Sprachplattform (Ausgangsplattform) als „DeliveredEvent“ eingeht und von OnClientDelivered gekapselt wird. Siehe auch: Delivered Parameter
Typ
Bedeutung
sender smexMessage
Object Object
Das clientseitige Speech Control (MakeCall) DOM-Objekt mit der gesendeten Smex-Nachricht
OnClientDisconnected fQA function ClientDisconnected( parameter )
Nach der Beendigung einer Verbindung wird dieses Ereignis ausgelöst. Parameter
Typ
Bedeutung
clientQA
Object
Das clientseitige Speech Control (QA)
OnClientDisconnected fDisconnectCall function ClientDisconnected( 2 parameters )
Die Beendigung einer aufgebauten Verbindung wird vom Clear Connection Service der Telefonplattform durch ein ECMA-323 Ereignis namens „ConnectionClearEvent“ signalisiert. In der übermittelten Nachricht sind unter anderem die Verbindungs-IDs an die aufgerufene Gegenstelle enthalten. Siehe auch: Disconnected Parameter
Typ
Bedeutung
sender smexMessage
Object Object
Das clientseitige Speech Control (MakeCall) DOM-Objekt, das die Smex-Nachricht enthält
15.1 Client-side events
331
OnClientDone fRecordSound function ClientDone()
Nach der Beendigung einer Sprachaufzeichnung wird vom RecordSound Control dieses Ereignis ausgelöst. Siehe auch: Done OnClientError fListen, fPrompt fQA (erweiterte Einstellung) fRecordSound fApplication Speech Controls bool ClientError( parameter )
Das Auslösen dieses Ereignisses erfolgt beim Auftreten eines Fehlers (onerror oder onnoreco eines SALT-Elements). Die Fehlerursache kann anhand der übergebenen Fehlernummer lokalisiert werden. Es gibt unterschiedliche Fehlertypen: Laufzeitfehler, Hardwarefehler oder Fehler des Spracherkenners. Während detaillierte Hardwarefehler eher durch einen Systemmonitor sowie Einträge in Logdateien auf der Serverseite untersucht werden, ist diese Routine für die Behandlung von Verständnis- und Verständigungsproblemen zuständig. Über den Rückgabewert können Sie das weitere Verhalten steuern. Siehe auch: OnClientFailed Parameter
Typ
Bedeutung
status Rückgabewert
int boolean
Fehlercode (vom SALT-Element listen) true: RunSpeech verbleibt auf der Seite false: Aufruf der Standardfehlerseite
OnClientFailed fAnswerCall fMakeCall fTransferCall fDisconnectCall bool ClientFailed( 3 parameters )
332
15 Events
Das Ereignis (CSTA „FailedEvent“) tritt bei jedem Problem während der Kommunikation zwischen Anfangs- und Endpunkt ein, zum Beispiel weil die Gegenstelle besetzt ist. Siehe auch: OnClientError Parameter
Typ
Bedeutung
sender cause smexMessage Rückgabewert
Object String String boolean
Das clientseitige Speech Control Hinweis über die Fehlerursache (vom TIM) DOM-Objekt, das die Smex-Nachricht enthält true: RunSpeech verbleibt auf der Seite false: Aufruf der Standardfehlerseite
OnClientKeyPress fListSelector fAlle impliziten und expliziten Dtmf-Objekte function ClientKeyPress( parameter )
Jede Eingabe auf der Telefontastatur führt zu einem onkeypress DTMFEreignis, sofern die Tasteninformation mit der Grammatik übereinstimmt; andernfalls wir ein das Ereignis onnoreco ausgelöst. Diese Funktion ist ein Wrapper für das entsprechende DTMF-Ereignis. Sollte eine Prompt-Ausgabe während des Tastendrucks stattfinden, wird das Ereignis onbargein ausgelöst und der Prompt unterbrochen (sofern die Eigenschaft BargeIn aktiviert ist). Bei einer Spracheingabe werden alle Timeouts des aktivierten Reco Controls außer Kraft gesetzt. Siehe auch: OnClientNoReco, OnClientBargeIn Parameter
Typ
Bedeutung
status
int
Der Statuscode des Ereignisses
OnClientListening fQA fApplication Speech Controls function ClientListening()
Dieses Ereignis erfolgt nach dem Start des Reco Objekts (nach dem Laden der Grammatiken) eines impliziten oder expliziten fQA Speech Controls; also nach dem Beginn der Spracheingabe.
15.1 Client-side events
333
OnClientNoReco fListen function ClientNoReco( parameter )
Der Aufruf dieser Funktion erfolgt aufgrund des Ereignisses onnoreco und wird vom SALT-Element listen ausgelöst. Siehe auch: OnClientKeyPress, OnClientSilence Parameter
Typ
Bedeutung
error
int -11: „NoReco“ -13: „NoReco“ -14: „NoReco“ -15: „NoReco“
Der Fehlercode des Ereignisses initaltimeout erreicht (vgl. -11: „Silence”) Keine Zuordnung, da keine Spracheingabe Keine Zuordnung, da unvollständig Keine Zuordnung, da zu viel Text
OnClientReceive fSmexMessage bool ClientReceive( parameters )
Nach dem Eingang einer Smex-Nachricht auf der Sprachplattform wird diese Ereignisbehandlungsfunktion aufgerufen. Es geht dabei vorrangig um die Feststellung, dass ein Nachrichteneingang stattgefunden ist, aber nicht, um was für eine Nachricht es sich handelt, da das SmexMessage Control den Inhalt nicht durchsucht. Eine enthaltene Fehlermeldung wie zum Beispiel „CSTAFailed“ löst daher keine automatische Fehlerbehandlung aus. Ob alle in der Nachricht enthaltenen Informationen für das Control (oder den Entwickler) ausreichend waren, bestimmen Sie über den Rückgabewert. Siehe auch: Receive Parameter
Typ
Bedeutung
sender smexMessage Rückgabewert
Object String boolean
Das clientseitige Control (SmexMessage) DOM-Objekt, das die Smex-Nachricht enthält true: Objekt hat alle Ereignisse erhalten false: SmexMessage fehlen noch Informationen
334
15 Events
OnClientReco fListen fRecordSound function ClientReco( parameter )
Mit dieser Funktion können Sie auf das Ereignis onreco (ausgelöst durch des SALT-Element listen) reagieren. Die vom Benutzer durchgeführte Spracheingabe wird vom Spracherkenner als Parameter an die Funktion zurückgeliefert. Allerdings kann es hier durchaus Unterschiede bei SALT-Interpretern auf einer Sprachplattform geben. Siehe auch: Reco Parameter
Typ
Bedeutung
smlContent Eigenschaften utteranceConfidence text confidence
SML Element
Rückgabewert des Spracherkenners
float String float
Wert der Übereinstimmung (0.0-1.0) Inhalt des erkannten Tokens Änderbarer Parameter für Bewertung
OnClientSilence fListen fQA function ClientSilence( parameter )
Diese Eigenschaft entspricht der Ereignisbehandlung für onsilence des impliziten oder expliziten SALT-Elements listen. Siehe auch: OnClientNoReco Parameter
Typ
Bedeutung
error
int
Fehlercode des Ereignisses (-11: „Silence“)
OnClientSpeechDetected fListen function ClientSpeechDetected()
Mit dieser Funktion reagieren Sie auf das Ereignis onspeechdetected des SALT-Elements listen. Das Ereignis wird ausgelöst, sofort nachdem die
15.1 Client-side events
335
Sprachplattform eine Spracheingabe feststellt und umfasst den Zeitraum vom Start der Eingabe bis zur Rückgabe des Erkennungsergebnisses. OnClientSpeechDetected fQA (erweiterte Einstellung) function ClientSpeechDetected()
Die Ereignisbehandlung verläuft im Prinzip wie beim fListen Control, nur dass zusätzlich das Ereignis onbargein eintritt, falls die Erkennung einer Spracheingabe während der Wiedergabe eines Prompts stattfindet. Sofern auch Tasteneingaben möglich sind (wenn das implizite Dtmf Control entsprechende Grammatiken berücksichtigt), werden entsprechende Timeouts dafür nicht berücksichtigt. Siehe auch: OnClientBargeIn OnClientTimeout fCall Management Controls bool ClientTimeout( parameter )
Sie können diese Funktion einsetzen, um auf das Ereignis ontimeout von SALT Smex-Objekten zu reagieren. Mit dem Rückgabewert legen Sie das weitere Verhalten für den Dialogmanager fest. Parameter
Typ
Bedeutung
sender Rückgabewert
Object boolean
Das aufrufende clientseitige Objekt true: RunSpeech verbleibt auf der Seite false: Aufruf der Standardfehlerseite
OnClientTransferred fTransferCall function ClientTransferred( parameters )
Benutzen Sie diese Funktion, um auf den Transfer von Nachrichten des TransferCall Controls zu reagieren. Das CSTA-Ereignis für diesen Vorgang wird durch den Bezeichner „TransferredEvent“ veranlasst.
336
15 Events
Parameter
Typ
Bedeutung
sender smexMessage
Object String
Das clientseitige Control (SmexMessage) DOM-Objekt, das die Smex-Nachricht enthält
15.2 Server-side events Serverseitige Ereignisse behandeln Sie durch entsprechende Routinen im.NET Quellcode, genauer gesagt, der „Code-behind“-Datei ihrer webbasierten Sprachapplikation. Die Ereignisbehandlungsroutinen müssen Sie dabei nicht selbst erstellen, denn die Methoden lassen sich aus dem jeweiligen Speech Control heraus anlegen. Wählen Sie dazu in der dem Ereignis zugeordneten Auswahlliste den Eintrag und vergeben Sie einen beliebigen, eindeutigen Namen. Sie können bei Bedarf aber auch bereits angelegte Servermethoden (wieder) verwenden. Falls Sie zusätzlich die Eigenschaft AutoPostback markieren, sollten Sie neben Ihrer ereignisspezifischen Schnittstelle auch die Methode Page_Load bei der Ereignisverarbeitung berücksichtigen, da diese sofort nach jeder Benutzeraktion automatisch aufgerufen wird und nicht erst, wenn ein offizieller Seitenaufruf ansteht. Complete fPrompt private void _Complete(object sender, System.EventArgs e)
Der Methodenaufruf erfolgt nach Beendigung des Prompt Controls. Parameter
Typ
Bedeutung
sender e
object System.EventArgs
Das serverseitige Control Standardargument
CompleteLast fApplication Speech Controls private void _CompleteLast(object sender, System.EventArgs e)
Der Methodenaufruf erfolgt unmittelbar nach der Ausführung des clientseitigen Ereignisses OnClientCompleteLast, sofern AutoPostback akti-
15.2 Server-side events
337
viert wurde. Andernfalls wird die Methode nach dem nächsten standardmäßigen Seitenaufruf ausgeführt. Siehe auch: OnClientCompleteLast Parameter
Typ
Bedeutung
sender e
object System.EventArgs
Das serverseitige Control Standardargument
Connected fAnswerCall fMakeCall private void _Connected (object sender, System.EventArgs e)
Der Methodenaufruf erfolgt, nachdem der Telephony Interface Manager (TIM) nach dem Verbindungsaufbau eine Antwort der Gegenstelle (device) festgestellt hat. Die Eigenschaft CurrentCall erhält alle Daten aus dem CallInfo Objekt durch den clientseitigen Aufruf von fRunSpeech.CurrentCall(). Parameter
Typ
Bedeutung
sender e
object System.EventArgs
Das serverseitige Control Ohne Inhalt
Delivered fAnswerCall private void _Delivered (object sender, System.EventArgs e)
Der Methodenaufruf erfolgt, nachdem erfolgreich Information an die Gegenstelle geliefert wurden. Das serverseitige Ereignis folgt dem clientseitigen Ereignis fOnClientDelivered nach einem erneuten Seitenaufruf. Parameter
Typ
Bedeutung
sender e
object System.EventArgs
Das serverseitige Control Standardargument
338
15 Events
Disconnected fDisconnectCall private void _Disconnected (object sender, System.EventArgs e)
Der Methodenaufruf erfolgt nach Beendigung der bestehenden Verbindung und folgt dem clientseitigen Ereignis fOnClientDisconnected, sobald ein erneuter Seitenaufruf stattfindet. Parameter
Typ
Bedeutung
sender e
object System.EventArgs
Das serverseitige Control Standardargument
Done fRecordSound private void _Done (object sender, System.EventArgs e)
Der Methodenaufruf erfolgt, nachdem eine Sprachaufzeichnung beendet wurde. Das Ereignis ist das serverseitige Pendant zu fOnClientDone und wird unmittelbar nach dem clientseitigen Ereignis gestartet, sofern AutoPostback aktiviert wurde. Ansonsten passiert der Aufruf erst nach einer planmäßigen Seitenanwahl. Parameter
Typ
Bedeutung
sender e
object System.EventArgs
Das serverseitige Control Standardargument
Receive fSmexMessage private void _Receive ( object sender, Microsoft.Speech.Web.UI.ReceiveEventArgs e)
Der Methodenaufruf erfolgt, nachdem das Speech Control Nachrichten über den Speech Server von der Gegenstelle erhalten hat. Dieses Ereignis folgt dem clientseitigen Ereignis fOnClientReceive und kann bei der Aktivierung der Eigenschaft AutoPostback im Anschluss daran aufgerufen werden.
15.2 Server-side events
Parameter
Typ
Bedeutung
sender e
object ReceiveEventArgs
Das serverseitige Control Ereignisnachricht des Smex-Elements
339
Reco fListen private void _Reco (object sender, System.EventArgs e)
Dieser Methodenaufruf wird von dem Listen Speech Control durchgeführt, nachdem die Sprachplattform ein RecoResult Objekt zurückgeliefert hat. Außerdem kann das Ereignis unmittelbar dem clientseitigen Aufruf fOnClientReco folgen, sofern die Eigenschaft AutoPostback aktiviert wurde. Parameter
Typ
Bedeutung
sender e
object System.EventArgs
Das serverseitige Control Standardargument
Transferred fTransferCall private void _Transferred (object sender, System.EventArgs e)
Dieser Methodenaufruf passiert, nachdem der „SingeStepTransferCall“ Smex-Dienst den Nachrichtentransfer eingeleitet hat. Nach dem Auslösen des Ereignisses enthält die Eigenschaft CurrentCall die Informationen aus dem Transfer durch den clientseitigen Methodenaufruf fRunSpeech.CurrentCall(). Nach der Durchführung des Transfers wird normalerweise der SALT-Interpreter ohne einen weiteren Serveraufruf beendet; dieser kann durch Setzen der Eigenschaft AutoPostback eingeleitet werden. Der serverseitige Methodenaufruf erfolgt nach dem Ereignis fOnClientTransferred. Parameter
Typ
Bedeutung
sender e
object System.EventArgs
Das serverseitige Control Ohne Inhalt
340
15 Events
Triggered fCommand private void _Triggered ( object sender, Microsoft.Speech.Web.UI.CommandTriggeredEventArgs e)
Der Methodenaufruf erfolgt, nachdem das Command Control einen Serveraufruf durchgeführt hat. Eingeleitet wird das Ereignis durch den serverseitigen CommandTriggeredEventhandler, der einen Seitenaufruf registriert und daraufhin das Ereignis Triggered anstößt. Dazu muss allerdings die Eigenschaft AutoPostback aktiviert sein. Andernfalls wird der serverseitige Aufruf erst nach einem offiziellen Seitenaufbau gestartet. Ein vorgelagertes clientseitiges Ereignis existiert nicht. Parameter
Typ
Bedeutung
sender e
object CommandTriggeredEventArgs
Das serverseitige Control Zugriff auf die Grammatik des Controls, zum Beispiel über die Eigenschaft SmlNode.
16 Thresholds
Thresholds sind Schwellenwerte, mit denen Sie die Erkennungstoleranz festlegen. Dieser Übereinstimmungsmaßstab definiert, ab welcher Überoder Unterschreitung beim Vergleich des Inhalts eines fSemanticItem Speech Controls mit dem Rückgabewert des Spracherkenners bestimmte Aktionen ausgelöst werden sollen, zum Beispiel das Setzen interner Stati. Diese Änderungen haben direkten Einfluss auf den weiteren Programmablauf durch den fRunSpeech Dialogmanager. Die Bereichsgrenzen liegen bei allen Schwellenwerten zwischen 0.0 (0%) und 1.0 (100%).
16.1 ConfirmThreshold fQA fApplication Speech Controls (Default = 1)
Im Gegensatz zum separaten QA Dialog Speech Control führen alle Application Speech Controls nach der Spracheingabe eine Bestätigung durch. Bei jeder Antwort des Anwenders, die durch ein implizites Answer Control repräsentiert wird, erfolgt der Abgleich mit den zurückgelieferten Informationen des Spracherkenners. Sollte beim diesem Vergleich der inhaltlichen Übereinstimmung ein Wert unterhalb des Schwellenwertes ConfirmThreshold auftreten, wird der Status des SemanticItem Controls auf „NeedsConfirmation“ gesetzt, was dazu führt, dass eine explizite Nachfrage durch das jeweilige Control erfolgt. Im QA Speech Control ist der Wert standardmäßig 0, es erfolgt also niemals eine Nachfrage; Sie können den Wert aber nach eigenem Ermessen einstellen. Bei allen Application Speech Controls ist der Wert standardmäßig auf 1 gesetzt, damit immer eine Nachfrage durchgeführt wird.
342
Thresholds
Abb. 16.1. Interne Abstimmung beim Auswerten von Spracheingaben
16.2 ConfirmRejectThreshold fApplication Speech Controls
Legen Sie mit dieser Eigenschaft fest, ab welchem Schwellenwert ein Application Speech Control bei einer Nachfrage die Spracheingabe zurückweisen soll („NoReco“). Der Wert ist normalerweise höher als bei fRejectThreshold und gilt für alle internen Answer Controls.
16.3 RejectThreshold fApplication Speech Controls
Im Gegensatz zum vorherigen ConfirmThreshold sorgt die Belegung dieser Eigenschaft dafür, alle Spracheingaben abzuweisen, die unterhalb des eingetragenen Schwellenwertes liegen. Das Ergebnis lautet „NoReco“ und führt dazu, dass zum Beispiel die Meldung „Sorry, I didn’t understand that“ ausgegeben wird. Durch die Zurückweisung erfolgt auch keine Bestätigungsfrage, sondern eine Wiederholung der Ausgangsfrage (aus QuestionPrompt oder einer Promptfunktion). Der Standardwert ist 0, was bedeutet, dass grundsätzlich keine Antworten zurückgewiesen werden, da das Resultat eines Übereinstimmungsvergleichs nicht negativ sein kann.
Thresholds
343
Abb. 16.2. Application Speech Control Thresholds im Vergleich
16.4 AcceptRejectThreshold fQA
Der Schwellenwert dieser Eigenschaft bestimmt die Akzeptanz einer Spracheingabe für die Rolle mit Zustimmungsäußerungen. Der zurückgelieferte Inhalt des Spracherkenners liefert einen SML-Knoten, den Sie mit der Eigenschaft XPathAcceptConfirms verbinden. Mit dem AcceptRejectThreshold Schwellenwert legen Sie fest, ab wann die Äußerung einer Phrase dieses Knotens entspricht oder ob diese abzuweisen ist, wenn der Wert kleiner oder gleich war. Der Standardwert ist 0.
16.5 DenyRejectThreshold fQA
Neben den Zustimmungsäußerungen können Sie für das QA Dialog Speech Control auch Ablehnungsäußerungen festlegen und diese einer eigenen Rolle zuordnen. Über XPathDenyConfirms legen Sie einen SML-Knoten für diese Äußerungen fest, die über den DenyRejectThreshold Schwellenwert die Akzeptanz der Ablehnungsphrase definiert.
344
Thresholds
16.6 AcceptCommandThreshold fCommand
Um ein Kommando ausführen zu können, muss dieses von der Sprachplattform als gültig anerkannt werden. Den Pfad der möglichen Äußerungen bestimmen Sie über die Eigenschaft XPathTrigger, doch ob eine Eingabe akzeptiert wird, legen Sie über den Schwellenwert AcceptCommandThreshold fest, der den Rückgabewert der Spracherkenners mit dem Schwellenwert hinsichtlich einer Über- oder Unterschreitung vergleicht. Bei gleichem oder niedrigerem Wert wird die artikulierte Eingabe zurückgewiesen. Der Standardwert ist 0; daher werden alle Kommandoeingaben akzeptiert.
Anhang B Webverweise
JScript x JScript Einführung http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnclinic/html/ scripting07142000.asp
x JScript Sprachreferenzen http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/ js56jslrfjscriptlanguagereference.asp http://www.gpick.net/sbr/html/jsdoc/default.htm
x JScript (.NET) Downloads http://www.microsoft.com/downloads/details.aspx? familyid=c717d943-7e4b-4622-86eb-95a22b832caa
Microsoft x Microsoft Visual Studio .NET (2005 Beta, Downloads) http://lab.msdn.microsoft.com/vs2005/
x Microsoft Visual Studio .NET (allgemein) http://msdn.microsoft.com/vstudio/
x Microsoft Speech Server http://lab.msdn.microsoft.com/vs2005/
x Microsoft Speech Application SDK (SASDK) http://msdn.microsoft.com/vstudio/
x Microsoft Speech Tipps und Tricks http://www.microsoft.com/speech/techinfo/tipsandtricks/default.mspx
x Microsoft Speech White Papers http://www.microsoft.com/speech/evaluation/whitepapers/default.mspx http://www.microsoft.com/speech/evaluation/whitepapers/ TelephonyCallControlDoc
346
Anhang B Webverweise
x Microsoft Speech Programmers Reference http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sasdk_ getstarted/html/SDK_ProgrammersRef.asp
x Microsoft Speech Output Reference (SSML, PEML) http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sasdk_ prompting/html/Prompting_Intro.asp
x Microsoft XML DOM Reference http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/ xmconnavigatingalongthechildaxis.asp
SALT x Speech Application Language Tags Forum http://www.saltforum.org/
x SALT Programmers Reference http://msdn.microsoft.com/library/default.asp?url=/library/en-us/SASDK_ SALT/html/ST_Programmers_Reference.asp
x SALT Technology Report http://xml.coverpages.org/salt.html
x SALT Fehlercodes http://msdn.microsoft.com/library/default.asp?url=/library/en-us/SASDK_ SALT/html/st_dtmf_onerror.asp http://msdn.microsoft.com/library/default.asp?url=/library/en-us/SASDK_ SALT/html/ST_prompt_onError.asp http://msdn.microsoft.com/library/default.asp?url=/library/en-us/SASDK_ SALT/html/st_PromptQueue_onerror.asp http://msdn.microsoft.com/library/default.asp?url=/library/en-us/SASDK_ SALT/html/ST_listen_onerror.asp http://msdn.microsoft.com/library/default.asp?url=/library/en-us/SASDK_ SALT/html/st_dtmf_onnoreco.asp http://msdn.microsoft.com/library/default.asp?url=/library/en-us/SASDK_ SALT/html/ST_listen_onnoreco.asp
VoiceXML x VoiceXML Forum http://www.voicexml.org/
Anhang B Webverweise
347
ECMA, CSTA x Ecma International Forum http://www.ecma-international.org/
x Ecma C# CLI Standards http://msdn.microsoft.com/net/ecma/ http://www.dotnetexperts.com/ecma/
x Ecma Background http://xml.coverpages.org/ni2003-10-03-a.html http://www.webservices.org/index.php/ws/content/view/full/3391
x Ecma CSTA http://www.ecma-international.org/activities/Communications/TG11/ cstaIII.htm
x CSTA Background www.ecma-international.org/activities/Communications/TG11/2004tg11-040_ CSTAoverview.ppt
x Intel CSTA Service Interface http://www.voiceway.fr/techonologies/docs/CSTA/Service/Interface.pdf
x Microsoft Telephony Call Control Whitepaper http://www.microsoft.com/speech/evaluation/whitepapers/ TelephonyCallControlDoc
Anhang C Index
. .aspx 262 .cfg-Format 231 .grxml 127 .js siehe JScript .NET 13 .NET Compact Framework 8, 24 .NET Framework 1.1 36 .NET Framework 2.0 36 .pf-Datei 253, 261 .promptdb siehe PromptArbeitsdatei .promptdb-Ausgangsmaterial 155 .prompts 253 .prproj siehe Prompt-Projektdatei .vbs siehe VBScript .wav-Extrakt 138
< 240 240 240 219 213, 216 213, 214 240 215 240, 314 218 220
A Abdeckung 253 Abfolgekette 216 Abfrageparameter 31
Abfrageroutine 172 Abkürzungstaste 30 Ablaufphase 287 Ablaufprofil 283 Ablaufsequenz 170 Ablaufstruktur 270 Ablaufszenario 121 Abschnittszeichen 249 Abspielsequenz 244 Abspielsymbol 245 Abwärtskompatibilität 15 Access mode 91 ActiveX-Control 16 ActiveX-Unterstützung 167 Aktionsschemata 296 Aktivierung 176 Aktivierungsreihenfolge 80 Aktivierungsstatus 152 Aktivierungsverlauf 151 Aktivierungszähler 168 Aktivitätsmeldung 152 Aktiv-Passiv-Beziehung 58 Aktuelle Rolle 219 a-law 238, 256 Allgemeine Dialogtypen 293 AllowAmex 98 AllowCommands 81, 205 AllowDinersClub 98 AllowDiscover 98 AllowDTMF 82 AllowHolidays 100 AllowMasterCard 98 AllowNumeralDates 101 AllowRelativeDates 101 AllowVisa 98 AlphaDigit Control 95, 202 Alternativabfrage 201 Alternative Browser 164 Amateursprecher 233
350
Anhang C Index
Anforderungskriterien 281 Anforderungsprofil 281 Anlegen neuer Grammatikdateien 127 Annahmestelle 116 Anrufbeantworter 30 AnswerCall Control 111, 169 Answers 178 Antworten 185 Antwortstrukturen 295 Anwahlversuch 119 Anwendungsgebiete 24 Anwendungskern 283 Anwendungsoptionen 280 Anwendungstyp 241, 268 Anwendungsverhalten 287 Anzeige der Ablauffolge 226 AOL 167 API 13 Application Programming Interface siehe API Application Speech Controls 80 Applikationsgerüst 121, 123 Applikationsprozesskette 297 Applikationsstruktur 160 Applikationstypen 277 Arbeitserleichterung 281 Arbeitsgruppen 283 AreaCodeSemanticItem 103 Artikulation 234 ASR 4 Assignment 132, 133 Async 265 Audio Sample Format 256 Audiodatei 257 Audiofragment 249 Audio-Import 244 Audioqualität 251 Audio-Referenzdatei 256 Audiostruktur 301 Aufnahme 240 Aufnahmeschnitt 244 Aufnahmetipps 302 Aufnahmeverfahren 233 Aufruf des Editors und Sprachaufzeichnung 137 Aufrufen des Pronunciation Editor 130
Aufrufen des Semantic Script Editors 132 Aufrufreihenfolge 142, 208, 268 Aufrufwahrscheinlichkeit 308 Aufrufzähler 171 Aufzeichnung 153 Ausführungsmodi 162 Ausführungszeitpunkt 152 Ausgabefrequenz 238 Ausgabequalität 18 Auskunftssysteme 29 Auslieferungsphase 289 Aussprache 214, 220 Ausspracheempfindlichkeit 307 Aussprachekennzeichen 214 Aussprachesymbol 131 Aussprachevariante 220 Auswertungsfenster 226 Auszeichnungssprache 266 Automatic Speech Recognition und Transcription siehe ASR Automatische Spracherkennung 273 AutoPostback 84, 110 AVIOS 15
B Bandbreite 6, 18 barge-in 28, 58 BargeIn 264 Basic Speech Controls 45 Batchverwaltung 154 Bearbeitungsstand 279 Bedienerfreundlichkeit 281 Bedingte Aktivierung 61 Befehlserkennung 26 Begrüßungen 233 Bell AT&T 4 Benutzerdefinierte Validierung 207 Benutzereingaben 182 Benutzerkreis 241 Benutzeroberfläche 233 Benutzerverhalten 289 Besetztzeichen 114 Best Practices 277 Bestätigungen 172, 185 Bestätigungsergebnis 173
Anhang C Index Bestell- und Buchungssysteme 26 Beta 235 Bezeichner 251 Bezugselement 214 Bildabgleich 281 Binärdateien 232 binäre Datei 253 BindAt 193 Bindings 192 BindOnChanged 193 Bindungseinstellungen 273 Blocklänge 204 Borland 13 Browser 6 Browser-Unterstützung 162
C C# 14, 15 C++ 13, 14 Cache 20 Call Management 145 Call Management Controls 106 callback 176, siehe postback Callcenter 29, 286 CalledDirectoryNumber 118 CallInfo 106, 167 CallingDevice 118 CallManagerSmexParam 314 Cancel Prompt 299 Carnegie Mellon Universität 167 Carrier Rules 305 cHTML 160 Cisco 7 CLASSID 163 ClientActivationFunction 81, 110, 169, 184, 266, 275 ClientNormalizationFunction 178 Clientseitige Ereignisse 51 ClientSmexID 110 ClientValidationFunction 207, 208 CLR 14 CLR-Debugger 180 CLS 14 cmnrules.grxml 204, siehe Standardgrammatik COBOL 14 COM 6, 13, 14, 16
351
COM+ 16 Command Control 66, 174 CompareValidator Control siehe CompareValidatorControlSettings 206 CompleteLast 84 Computer Supported Telecommunications Applications siehe CSTA, siehe CSTA COM-Schnittstelle 17 COM-Schnittstellenaufruf 5 confidence 220 Confirmation Prompt 298 ConfirmByOmission 173 Confirmed 173 ConfirmIfEqual 173 ConfirmRejectThreshold 81 Confirms 178 ConfirmThreshold 81, 171, 185 ConnectionRetryInterval 118 ConnectionRetryTimeout 119 Container 70 Content 95 ContentTemplate 90 Control Settings 206, 208 Control-Kontextmenü 261 Correction Prompt 298 CreditCardDate Control 96, 205 CreditCardExpirationDate 205 CreditCardNumber Control 97, 204 CSTA 21, 106 CSTA Basic Telephone Profile 106 CSTA Single Step Transfer Service 114 CSTA-Device 113 CSTA-Nachricht 112 CTS 14 Currency Control 98, 203 CustomValidator Control 77, 206, 207
D DataBindField 86, 194 Databindings 109, 114, 116, 118, 120 DataContentFields 90, 195 DataHeaderFields 89
352
Anhang C Index
DataMember 86, 195 DataSource 85, 194 DataTableNavigator Control 88, 194 DataTextField 86, 194 DataTypeCheck 207 Date Control 99, 200 DateContext 101 Datenbankverzeichnis 247 Datenbindung 192, 272 Datenvalidierung 6 Datumsabfrage 101 DaySemanticItem 100 DDI 17 Debugging 159, 180 Debuggingprozess 180 Debugging-Sitzung 146 Delphi 14 Designkriterien 23, 277 Designpattern 28 Designphase 287 Designrichtlinien 23 Desktopbasierte Sprachsteuerung 5 Device Driver Interface siehe DDI DeviceID 114 Dialog Speech Controls 58 Dialogfluss 291 Dialogorganisation 291 Dialogstruktur mit Prompts 294 Digital Signal Processing siehe DSP DisableColumnNavigation 93 DisconnectCall 169 DisconnectCall Management Control 119 DLL 16 DNS lookup 48 Document Object Model siehe DOM Dokument-Typdefinition siehe DTD DOM 7, 21, 162 Domäne 274, 291 DOM-Methoden 116 DOM-Objekt 113, 161 Dragon NaturallySpeaking 5 Dragon Systems 4 DSP 254
DTD 211 DTMF 6, 121, 148, 285 DTMF-Applikation 30, 148, 288 DTMF-Engine 20 DTMF-Komponenten 277 DTMF-Reiter 149 Dual-Tone Multi-Frequency siehe DTMF Dynamic Link Libraries siehe DLL Dynamische Grammatiken 304
E ECMA 21 ECMA-269 21, 106 ECMA-323 21, 106, 114 ECMA-334 106 ECMA-348 106 ECMAScript 219 ECMA-Service 112 EIF 36 Eigenaufnahme 241 Eigenschaftenfenster 216 Einführungsschulungen 289 Eingabekanal 280 Eingabemaske 95 Eingangsempfindlichkeit 241 Einsatz des Pronunciation Editor 129 Einsatzszenarien 283 Einsparpotentials 29 Einzelplatzsystem 5 enCue Voice.NET Server 167 Engine pooling 20 Enterprise Instrumentation Framework siehe EIF Entropic 4 Entwicklungshistorie 13 Entwicklungsteam 14 Ereignis-Schnittstelle 114 Erkennungsbereich 96 Erkennungsgenauigkeit 308 Erkennungsgeschwindigkeit 307 Erkennungspräzision 39 Erkennungsrate 26, 221, 306, 308 Erkennungstoleranz 308 Erkennungsverlauf 217 Error Prompt 299
Anhang C Index Erstellen von Grammatiken 127 Erstellen von Textbausteinen 138 Eskalationsstufen 298 European Computer Manufacturer Association siehe ECMA Exit 93 Explizite Bestätigung 188 ExtensionSemanticItem 103, 105 Externe Tools 143 Extra-Antworten 178, 185 Extraction ID 251 Extrakt 138, 245, 249 Extraktionsdatei 258 Extraktionskennzeichen 251
F FailedEvent 117 FallBackCount 101 Falscherkennung 201 Fehlerdialoge 294 Fehlerseite 313 Fehlerzustand 147 Fehlversuch 101 Feiertage 99 Feineinstellungen 42 Fetch 91 Firefox 164 First 92 FirstInitialTimeout 190 Flexibilität 235 Formantsynthese 18 Frequenzachse 244 Füllstellen 46 Funktionale Anforderungen 282 Funktionsparameter 177
G Gegenstelle 114 Geldbeträge 99 Gemischte Wiedergabe 271 gemischt-initiativ 185, 287 Generelle Ereignisbehandlung 176 Generierung von SML 226 Gesamtprojekt 254 Geschwindigkeitsnachteil 6 Give-up Prompt 298, 299
353
Globale Applikationseinstellungen 313 grafische Benutzeroberfläche siehe GUI Grammar 149 Grammar Compiler 154, 303 Grammar Editor 126, 131, 212 Grammar Explorer 128, 213 Grammar Library 126 Grammar template 87 Grammatik 147, 211, 272, 282 Grammatikaufbau 222 Grammatikdatei 47, 211, 303 Grammatikelement 212 Grammatikprüfung 220 Grammatikstruktur 52 Grammatiktests 288 Graphical User Interface siehe GUI Grouping 96 Gruppe 214, 216 Gruppenelement 216 GUI 5, 279 Gültigkeit 78 Gültigkeitsbereich 191
H Halt 217 Handhabung des Pronunciation Editor 130 Handheld-PC 273 Hands-free 280 Handy 24 Hardware- und Softwarevoraussetzungen 33 Hardwareausstattung 33 Hauptelement 270 Header 93, 94 Headerdaten 152 Headset 24, 39, 240 Hilfeprompts 299 Hilfsprogramme 255 History 142, 263 Hochlastverfügbarkeit 20 hot keys 297 HTML 5 HTML-encodiert 266 HTTP_USER_AGENT 7, 164
354
Anhang C Index
HTTP-Request 164 HTTPS 6
I IBM 4, 300 Identifizierungsmerkmal 251 Ignore 91 IIS 7, 33, 35, 37 IIS-Verzeichnis 38 IIS-Workerprozess 180 Implementierungsphase 288 Implizite Bestätigung 189 Implizite Standardparameter 263 Import von Audiodateien 247 Import von kompilierten Prompts 247 Import von Scriptdateien 247 Infodienste 32 Infrastruktur 282 Initiativmonolog 287 Inkonsistenzen 33 Inline content 271 Inline-Grammatik 61, 68, 227 Inline-Prompt 235, 266 Innere Funktion 141 InputMask 96 Installation 35 Installations-Wizard 36 Integrationstests 288 Integrierte Validierung 199 Intel 7 Interactive voice response siehe IVR InterDigitTimeout 83 Internet Explorer 7, 16 Internet Information Services siehe IIS Internet Server API siehe ISAPI InvalidOperationException 207 Investitionsausgaben 295 ISAPI 13 IVR 20, 285 IXMLDOMNode 311
J Java 14 Javascript 175
JIT-Debugger 253 JScript 21, 135, 175, 219, 254, 259 JScript.NET 14 JScript-Bibliotheksfunktion 262
K Kennzeichen 259 Kernaussage 28 Kernbegriffe 224 Klassenbibliothek 13 Kommando 190 Kommandozeile 143 Kommandozeilen-Tools 153, 254 Kommunikation 233 Kommunikationselektronik 299 Komponentenreihenfolge 143 Komprimierung 254 Konfigurationsdatei 150, 239 Konkatenative Synthese 18 Konsonant 131, 243 Kontexteintrag 260 Kontextfreie Grammatiken 154 Konversationssysteme 286 Kopfdaten 212 Kopfeintrag 163 Kopfhörer 240 Korrelationsprüfung 246 Kosteneinsparungen 295 Kreditkarteninformationen 96, 204 Kundenvertrauen 295
L Landesvorwahl 103 Lastverteilung 30, 92 Laufzeitergebnisse 290 Laufzeitobjekte 167 Laufzeitverhalten 262 Lautsprechersymbol 131 Lebenszyklus 277 Leerstelle 244 Lernerfolg 24 Lernout & Hauspie 4 Lidschlagüberwachung 299 List 214 Listen Control 47, 149, 272 Listen Mode 273
Anhang C Index ListSelector Control 85, 194 LocalNumberSemanticItem 103 Log Player 152 Logdatei 258, 259, 290 Logging 288, 313 LowerBound 102
M Main Prompt 297 MakeCall Management Control 116 Managed C++ 14 Markup 266 Mary, Mike und Sam 234 Maske 203 Maskenlänge 202 Medizinischer Bereich 25 Mensch-Maschine-Dialog 5 Menüstruktur 243 Message 110 Meta-Informationen 123 Metasicht 297 Meta-Tags 124 MFC 13, 15 Microsoft 4, 7, 9, 13 Microsoft Developer Network siehe MSDN Microsoft Foundation Classes siehe MFC Microsoft Office 19 Microsoft Prompt Engine 254 Microsoft Speech SDK 5 Microsoft Speech Server 211, siehe MSS Mikrofon 39, 240 MIME 55 Misrecognition Prompt 298 Mobility 8 Modale Dialoge 291 Moduslose Dialoge 292 Monitor Service 116 MonthSemanticItem 97, 100 MSDN 15 MSS 20 MSXML 311 multimodal 5, 20, 23, 121, 281, 286 Multimodale Applikationen 23, 279
355
Mumble 298 Muster 29
N Nachfolgeversionen 235 Nachfragemechanismus 95 Nachkommastellen 203 Natural language siehe NL NaturalNumber Control 102, 203 Natürliche Zahlen 102 Natürlichkeit 234 Natürlichsprachliche Dialogsysteme 286, siehe NDS Natürlichsprachliche Prompts 236, 301 Natürlichsprachliche Wiedergabe 137 Navigate 265 Navigation 30, 280 Navigationsansagen 243 Navigationsebene 32 Navigationsstruktur 31 Navigationssystem 299 NDS 26, 286 Nebengeräusche 300 Nebenstellenanlage 21 NeedsConfirmation 150, 188 Nested Dialog Speech Controls 58 Netscape Navigator 167 Neutral 101 Next 92 NL 286 NoReco 263 Normalisierung 61, 64, 103, 178, 254, 310
O Object Linking and Embedding siehe OLE Objektmodus 162 OLE 16 OLE Automation siehe Windows Automation onbargeein 264 onchange 102 OnClientActive 84
356
Anhang C Index
OnClientActiveFirst 84 OnClientBargeIn 264 OnClientBeforeSend 108, 110 OnClientComplete 84, 265 OnClientCompleteLast 84 OnClientConnected 112, 117 OnClientDelivered 113 OnClientDisconnected 119 OnClientError 108 OnClientFailed 114, 115, 117, 120 OnClientKeyPress 83 OnClientListening 84 OnClientReceive 108 OnClientTimeout 109 OnClientTransferred 115 onconfirmed 102 open-microphone 273, 286 OpenSALT 167 Optimieren 301 OptionalPostAnswerRule 82 OptionalPostConfirmRule 88, 94 OptionalPreAnswerRule 82 OptionalPreConfirmRule 88, 94 OptionalRulesGrammarUrl 82 optische Rückmeldung 279 Output 152
P Panel 191 Param 48 Parameterzuweisung 311 Passive Controls 184 Passworteingabe 280 Past 101 Pause 28 Pausenmarker 301 PBX 21 PCM 238 pcm16 238, 256 pcm8 238, 256 PDA 7, 24, 273, 280 PDA-Unterstützung 24 Pegel 40, 239 PEML 55, 146, 251, 252, 267, 271 Performancetests 288 Permanente Spracherkennung 273 Personalisierung 286
Philips 4, 7 Philips Speech Processing 167 Phone Control 103 Phonem 220, siehe Aussprache Phrase 130, 213, 214 Pilotphase 289 PIN 6 Planungsphase 137, 287 Platzhalter 202, 243, 248, 302 PlaybackUrlBase 275 PlayOnce 168, 266 PLZ-Erweiterung 105 Pocket Internet Explorer 7 Pocket PC 20, 24 postback 47, 179, siehe callback Postleitzahl 105 Präfix 246 PreferDollars 99, 203 PreFetch 265 PreFlush 83, 265 Previous 92 Private Branche Exchange siehe PBX Private Regeln 129 Produktdokumentation 289 Produktivapplikation 256 Profil 41, 234 Programmfluss 297 Programmiersprache 13 Projekt-Kontextmenü 261 Projektlebenszyklus 286, 290 Projektverzeichnis 261 Prompt 150, 268 Prompt Builder 155 Prompt Editor 154 Prompt Engine Markup Language siehe PEML, siehe PEML Prompt Function Editor 140, 260 Prompt Speech Control 53 Prompt Validation Tool 138, 251 Prompt-Arbeitsdatei 254, 257 Prompt-Datenbank 233, 302 Prompt-Datendatei 138 Promptfunktion 253 Prompt-Funktion 259 Prompt-Funktionsliste 261 Prompt-Import 247 Prompt-Optionen 264
Anhang C Index Prompt-Projekt 237, 254 Prompt-Projektdatei 254 Prompt-Prüfung 263 PromptQueue 265 Prompts 233, 297 Prompt-Segment 249 Prompt-Template 236 Pronunciation 130 Pronunciation Editor 96, 129, 214, 220 Property Builder 125 Property-Setting Dialog Speech Controls 58 Protokolldatei 182 Prototypingphase 288 Prozessketten 295 Prozesslogik 297 Prüfergebnis 252 Prüfprozess 171 Prüfung 226 Pufferung 264 Pulse Code Modulation siehe PCM
Q QA 61 Qualitätsanforderungen 234 Qualitätseinstufungen 233 QuestionPrompt 205
R Rahmenfunktion 260 Read 93 Reaktion 19 Realign Wave 302 Record 149 Recording Tool 138 RecordSound Control 78, 274 Redundanzen 127, 242 Referenz 215 Referenzanwendung 183 Referenzierung 225 Regelelemente 128 Regeln 128 Registrierdatenbank 38 Registry 39 Reject 185
357
RejectThreshold 81 Release-Verzeichnis 239 Repeat 93 RepeatPropability 213 RequiresAreaCode 103 RoboScreenCapture 5, 19 Rolle 213, 219 Roll-out 254, 277, 288, 289 Rufannahme 30 Rufnummer 103 Rule Browser 215 RuleRef 215 RunSpeech Dialogmanager 61, 108, 116, 143, 151, 167, 168, 187, 268
S SALT 5, 7, 8, 15, 159, 162, 267 SALT Interpreter pooling 21 SALT Plug-in 265 SALT-Applikation 161 SALT-Architektur 160 SALT-fähiger Browser 164 SALT-Forum 161 SALT-Interpreter 21, 114, 119 Sample 238 Sample Applications and Documentation 37 Samsung 7 SAPI 15 SAPI-Layer 17 SASDK 11, 15, 45, 121, 282 Satzfragment 18, 28 SavePath 274 ScanSoft 5, 7, 167 Schemadefinition 17 Schlosssymbol 128 Schlüsselworte 46 Schnittstellen 160 Schweigeelement 270 schweigende Zustimmung 183, 190 Schwellenwert 61, 308 Scope 191, 215, siehe Gültigkeitsbereich Scope-Zuordnungen 67 Script 132, 134 Script Tags 218 Scriptfunktionen 175, 176
358
Anhang C Index
Scriptsprachen 6 Segmentanpassung 244 Select 91, 93 Semantic Dialog Speech Controls 58 Semantic Script Editor 131, 218 SemanticItem 59, 167, 205, 218 SemanticItemControlSettings 59 SemanticItemToValidate 207 SemanticMap 59, 226 Semantische Abfolge für QA 169 Separate Grammatiken 61 Separator 104 Serverpfad 150 Servicedienst 31 SES 20, 49, 274 Settings 110, 114, 116 Setup Wizard 37 SGML 160 Sicherheit 6 Silence Prompt 263, 298 Simple Messaging Extension siehe Smex SI-Syntax 135 Sitzungsmanagement 286 Skalierung 30 Skip 214, 217 Smart Devices 8 Smartphone 7, 24 Smartphone SDK 24 Smex-Element 107, 110 SmexMessage Control 21, 107 SmexMessageBase 106 Smex-Nachricht 21 SML 146, 147 SML-Attribut 221 SML-Block 131 SML-Code 227 SML-Grammatikstruktur 220 SML-Knoten 178 SML-Struktur 221, 226, 229 SML-Tags 131 SOAP 20 SocialSecurityNumber Control 104 Sonderzeichen 56 Sozialversicherungsnummer 104 Speech Add-in 7 Speech Add-in Start Page 43
Speech API 24 Speech Application Language Tags, siehe SALT Speech Application Project Wizard 121 Speech Application SDK siehe SASDK Speech Controls Outline Window 142 Speech Debugging Console 144, 145, 181, 301 Speech Debugging Console Configuration 181 Speech Engine 271 Speech Engines Services, siehe SES Speech Grammar Compiler 231 Speech Grammar Libraries 231 Speech Prompt Editor 55, 137, 140 Speech Properties 39 Speech Recognition Engine 15 Speech Recognition Engine, siehe SR Speech Recognition Grammar Specification, siehe SRGS Speech Recognizer 18 Speech SDK 15 Speech Server 144 Speech Synthesis Markup Language siehe SSML SpeechCommon Laufzeitobjekt 167, 174, 265 SpeechControlSettings Control 70 SpeechControlSettingsItem Control 110 SpeechIndex 80, 111, 142, 168, 208 Speech-Toolbox siehe Toolbox SpeechWorks 5, 7 Spezifikation 161 Spiele 25 Sprachabschnitte 238 Sprachbausteine 233 Sprachbüro 282 Sprachdateibearbeitung 140 Sprachdatenbank 121 Sprachdialog 58 Spracherkenner 15, 18, 129 Spracherkennung nach expliziter Anweisung 273
Anhang C Index Sprachförderung 24 Sprachfunktionalität 279 Sprachprofiltest 43 Sprachsynthese 18 Sprachsynthesizer 4 Sprachtraining 40, 307 Sprachtypen 234 Sprachverarbeitung 159 Sprechererkennung 40 Sprechertexte 40, 282 Sprechgeschwindigkeit 234 SR 18, 48, 50, 211 SRGS 63, 68, 216 SSL 6 SSML 54, 162, 266 Standardaussprache 129 Standarddialoge 293 Standardeinstellungen 181, 314 Standardelemente 43 Standard-Equipment 233 Standardfloskeln 222 Standardgrammatik 201, 222 Standard-Grammatikbibliothek 126 Standard-Grammatikdatei 98, 204 Standardparameter 142 Standardphrasen 231 StartingIndex 91 State 75 Stille 244 stillschweigenden Zustimmung 65 Stimme 8 Stimmenanalyse 299 Stimmprofil 17 Stream 245 Stresstests 288 Suchpfad 248 Supportanfrage 29 Supportsystem 29 Symbolleistengruppe 43 Synchronisierung 248, 250 Syntaktische Fehler 180 Synthetische Lückenfüller 236 Synthetische Prompts 234 Synthetische Wiedergabe 137 System-initiativ 185 Systemtypen 285 Szenarien 23
359
T Table 191 Tablet-PC 7, 24, 280 Tabulator-Index 142 Tag 214, 218, 224, 252 Tag-Programmierung 219 TAN 6 tap-and-talk 168, 176, 280 TargetAttribute 192 TargetElement 192 TAS 20, 111, 119 TASim 25, 30, 79, 111, 144, 148, 182, 274, 301 TCP/IP 20 Technische Anforderungen 282 Technische Voraussetzungen 24 Telefon 7 Telefonadapter 21 Telefonanlage 282 Telefonieapplikationen 23, 279 Telefonieinfrastruktur 20 Telematik 30 Telephony Application Simulator, siehe TASim Telephony Information Manager siehe TIM Telephony Interface Manager siehe TIM Telephony Server 20 Template-Funktion 85 Template-Liste 122 Templates 239 Testen 43, 226 Testseite 163 Textauszeichnung 252 text-to-speech siehe TTS Text-to-Speech-Engine siehe TTS TIM 20, 314 time-out 50, 148, 182 Timer 111 Tonhöhe 266 Toolbar 43 Toolbox 41 Transaktionsverwaltung 286 TransferCall Control 114 TransferredTo 116 Transkription 137, 140, 239, 245, 246, 248, 257
360
Anhang C Index
Transkriptionsdatei 247 Transkriptionsfeld 250 Trennzeichen 104 triggered event 46 Trivialdienst 32 TTS 15, 17, 234, 253, 267 TTS-Engine 17 TTS-Format 239 TTS-Prompts 233, 234 TTS-Stream 147 Type 207
U Überarbeiten 244 Überprüfen von Eingaben 199 Überprüfungsaktion 253 Überprüfungsroutinen 77 u-law 238, 256 Umsetzungskriterien 281 Umsetzungsprofil 282 Umsetzungsvarianten 280 Unicode 247, 255 Unordered Controls 192 Unter-Attribut 135 Unterstützerklassen 106 UpperBound 102 URI-Verweis 271 URL Browser 216 User-Interface Dialog Speech Controls 58 UTF-8 140, 259 utteranceConfidence 220
V Validation Value 142 ValidationEvent 102, 208 Validierung 207 Validierungskomponenten 199 Variablenzuweisung 135 Varianten eines Satzes 242, 249 VBScript 254 Verändern von SML-Ausgaben über Parameter 132 Verarbeitungsdialoge 293 Verbindungsaufbau 116 Vererbungshierarchie 72
Vergleichende Validierung 206 Verlaufsliste 152 Versionsverlauf 16 Versprecher 245 Verständlichkeit 234 Verständnisdialoge 294 Verständnisprobleme 233 Verständnisproblemelement 270 Verwaltungsdetails 253 ViaVoice 5 ViewState 177 Virtuelle Verzeichnisse 38 Visual Basic.NET 14 Visual Studio .NET 15 Voder 4 Voice over IP siehe VoIP Voice User Interface siehe VUI voice-only 26, 121, 233, 281, 285 Voice-only Applikation 25 VoiceXML 5, 6, 8 VOID 217 VoIP 286 Vokal 131, 243 Vor- und nachgelagerte Ereignisse 176 Vorherige Rolle 219 Vorwahl 103 Votingdienste 32 VUI 26, 30, 32
W W3C 7, 9, 159 W3C Proposed Recommendation Status 9 W3C SRGC 216 W3C-Spezifikation 212 Währung 203 Wartbarkeit 291 Watcom 13 Wave Editor 43, 139, 244, 246 Wave-Platzhalter 256 Web Kiosk 24 web.config siehe Konfigurationsdatei Webbasierte Sprachsteuerung 6 Webseitenlayout 279 Webserver 6, 7
Anhang C Index Weight 213 Weiterleitung 30, 114 Weitervermittlung 121 Whidbey 14 Whisper 15 Whistler 15 Wiedergabelautstärke 239 Wiedergabequalität 233 Wiederholung 214, 216 Wiederholungskennzeichen 214 Wiederholwahrscheinlichkeit 309 Wiederverwendung 13 Wildcard 216 Win32 Speech API siehe SAPI Windows Automation 15, 16 Windows CE 24 Windows-Konventionen 127 Wizard 121 Wizard of Oz Test 288 WML-Dokument 160 Workflow 168 World Wide Web Consortium siehe W3C, siehe W3C Wortbestandteile 243 Wörterbuch 6 Wortmarkierung 244, 245, 301 Wortschatz 241 Wrapper 141, 263 Wurzelelement 128 Wurzelknoten 230
X XHTML 160, 162 XHTML-Subsets 145 XML 5, 54, 146 XML Grammar Format 211
361
XML-Derivat 9 XML-Editor 127, 154 XML-Header 140 XMLNode 311 XML-Pattern 50 XPath 221, 229, 272, 274 XPath Trigger Sample Sentence Tool 50 XPathAcceptConfirms 172 XPath-Angabe 172 XPath-Attributwert 50 XPath-Auswertung 218 XPathDenyConfirms 172 XPathTrigger 171, 192, 229, 311 XPathTrigger Sample Sentence Tool 64, 227
Y YearSemanticItem 97, 100 YesNo Control 80, 104
Z Ziffernblock 148 Ziffernfolge 30 ZipCode Application Speech Control 105 ZipCodeSemanticItem 105 Zirkulation 184 Zugriffseinstellungen 79 Zukunft 299 Zuordnung 212 Zusatzrollen 306 Zustandswerte 171 Zuweisungen 135