|
Tutorial: Einführung in Mixed Initiative Dialoge
Hinweis:
Vor dem Start dieses Tutorials sollten Sie bereits das Grammar Tutorial durchgearbeitet und verstanden haben, speziell
die Kapitel zu Multi Slot Recognition und natürlicher Spracherkennung.
Die meisten automatischen Systeme kontrollieren den Ablauf des Dialogs, in dem sie die Reihenfolge der Eingaben strikt vorgeben.
Diese Dialogart wird auch Directed Dialog genannt.
Es gibt jedoch in VoiceXML eine Dialogart, die sowohl dem System als auch dem Anrufer die Kontrolle gestattet. Diese Dialogart
wird "gemischt-sprachlicher Dialog" oder auch Mixed Initiative Dialog genannt.
In den folgenden Beispielen möchte ich die beiden Dialogarten anhand eines Flugbuchungssystems eingehender erläutern.
Gerichteter Dialog (durch die Anwendung festgelegt):
1. |
Anwendung: |
Wo möchten Sie abfliegen? |
|
Anrufer: |
München |
|
Anwendung: |
Wohin möchten Sie fliegen? |
|
Anrufer: |
Hamburg |
|
Anwendung: |
Reserviere Flug 123 von München nach Hamburg. |
Mixed Initiative Dialog (abhängig von der Eingabe des Anrufers):
1. |
Anwendung: |
Welchen Flug wünschen Sie ? |
|
Anrufer: |
Von München nach Hamburg |
|
Anwendung: |
Reserviere Flug 123 von München nach Hamburg. |
|
2. |
Anwendung: |
Welchen Flug wünschen Sie ? |
|
Anrufer: |
Von München |
|
Anwendung: |
Wohin möchten Sie fliegen? |
|
Anrufer: |
Nach Hamburg |
|
Anwendung: |
Reserviere Flug 123 von München nach Hamburg. |
|
3. |
Anwendung: |
Welchen Flug wünschen Sie ? |
|
Anrufer: |
Nach Hamburg |
|
Anwendung: |
Wo möchten Sie abfliegen? |
|
Anrufer: |
München |
|
Anwendung: |
Reserviere Flug 123 von München nach Hamburg. |
|
4. |
Anwendung: |
Welchen Flug wünschen Sie ? |
|
Anrufer: |
Ich verstehe nicht ganz ... |
|
Anwendung: |
Wo möchten Sie abfliegen? |
|
Anrufer: |
München |
|
Anwendung: |
Wohin möchten Sie fliegen? |
|
Anrufer: |
Nach Hamburg |
|
Anwendung: |
Reserviere Flug 123 von München nach Hamburg. |
Man erkennt deutlich, wie unterschiedlich die Konversation verlaufen kann, und welche Folgefragen je nach Eingabe des Anrufers gestellt
werden müssen.
Sie werden gleich sehen, dass sich solch eine scheinbare Komplexität relativ leicht in VoiceXML realisieren lässt.
Hinweis:
In einem Mixed Initiative Dialog wird das erste Prompt allgemein gehalten. Das erlaubt es dem Anrufer, der sich mit dem System auskennt,
seine Anfrage direkt in einen Satz zu packen.
Ein Anrufer, der nur einen Teil der Information sagt, wird in Abhängigkeit der fehlenden Info weiter durch den Dialog geleitet,
ohne Informationen doppelt zu erfragen.
Bei einem Anrufer, der überhaupt keine Ahnung hat, was er sagen kann, schwenkt das System automatisch zum gerichteten Dialog, und erfragt
die Informationen nacheinander.
Die zugrundeliegende Grammatik ist nun weitaus komplexer, muss sie doch alle möglichen Sätze, Phrasen, aber auch einzelne Wörter
erkennen und zuordnen.
Die generelle Struktur eines VoiceXML Dialogs mit Mixed Initiative sieht folgendermaßen aus:
<form>
<grammar src="MeineGrammar.txt" />
<initial name="initialSection">
<!-- Generelle, allgemeine Frage -->
</initial>
<field name="field1">
<prompt> <!-- Spezielle Frage --> </prompt>
<filled> . . . </filled>
</field>
<field name="field2">
<prompt> <!-- Spezielle Frage --> </prompt>
<filled> . . . </filled>
</field>
<field name="fieldn">
<prompt> <!-- Spezielle Frage --> </prompt>
<filled> . . . </filled>
</field>
<filled> <!-- Allgemeine Eingabe verarbeiten --> </filled>
</form>
Hinweise:
- Wenn die Form-Level Grammatik alle möglichen Eingaben abdeckt (z.b. von A nach B, nach B von A, von A, nach B, A, B),
wird keine Field-Level Grammatik benötigt.
Wenn die Form-Level Grammatik keine spezifischen Eingaben abdeckt (A, B), so muss dies in der Field-Level Grammatik
geschehen.
- Die Grammatik muss multi-slot ermöglichen, und Field Namen oder Slot Attribute für jedes müssen zum zurückgelieferten
Slot passen. Dadurch werden die fields gefüllt und von der VoiceXML Ablaufkontrolle nicht mehr angesteuert.
- Wenn mindestens ein <field> gefüllt ist, gilt das <initial> Feld als
erfüllt und wird nicht mehr angesteuert.
Stattdessen werden alle noch nicht gefüllten <field> der Reihe nach angesteuert.
- Nach einer Bestimmten Anzahl von Fehlern innerhalb von <initial> sollte man durch explizites Setzen
der <initial> Variable auf den gerichteten Dialog zurückfallen. Dadurch werden die
<field>'s nacheinander angesteuert.
Nachfolgend ein etwas umfangreicheres Beispiel für eine 'Mixed Initiative' Kino-Auskunft. Die Definition der entsprechenden
Grammatik 'initGrammar.txt' folgt im Anschluss:
<?xml version="1.0"?>
<vxml version="2.0">
<form>
<grammar src="initGrammar.txt"/>
<block>
Willkommen bei der Cinemax Filmauskunft.
</block>
<initial name="movieInit">
<prompt>
Welcher Film darf es denn sein ?
</prompt>
<catch event="noinput nomatch" count="1">
Nennen Sie einfach Filmkategorie und Tag.
Zum Beispiel: Actionfilme am Montag.
</catch>
<catch event="noinput nomatch" count="2">
<!-- Initial Variable setzen => Schwenk auf directed dialog -->
<assign name="movieInit" expr="true"/>
<reprompt/>
</catch>
</initial>
<field name="type">
<prompt>
Welche Filmkategorie soll ich suchen?
</prompt>
<catch event="noinput nomatch">
Bitte nennen Sie mir eine Filmkategorie, zum Beispiel:
Action, Zeichentrick, Komödie, Dokumentarfilm, Drama, or, Horror.
</catch>
</field>
<field name="day">
<prompt>
Für welchen Tag soll ich nachschauen?
</prompt>
<catch event="noinput nomatch">
Bitte wählen sie einen Tage zwischen Montags und Sonntags.
</catch>
</field>
<block name="search">
<prompt>
Einen Moment bitte,
Ich suche nach Filmen der Kategorie <value expr="type"/>
Die am <value expr="day"/> laufen.
</prompt>
<exit/>
</block>
</form>
</vxml>
'initGrammar.txt' mit Nuance GSL:
;GSL2.0
Main [ (Type filme am Day)
(Type ?filme)
(?(filme am) Day)
]
Type [ action {<type action>}
zeichentrick {<type zeichentrick>}
komoedie {<type komoedie>}
dokumentarfilm {<type dokumentarfilm>}
drama {<type drama>}
horror {<type horror>}
]
Day [ montag {<day montag>}
dienstag {<day dienstag>}
mittwoch {<day mittwoch>}
donnerstag {<day donnerstag>}
freitag {<day freitag>}
samstag {<day samstag>}
sonntag {<day sonntag>}
]
|
|