Principy řečových služeb Jakub Doležal
Autor: Jakub Doležal Název díla: Principy řečových služeb Zpracoval(a): České vysoké učení technické v Praze Fakulta elektrotechnická Kontaktní adresa: Technická 2, Praha 6 Inovace předmětů a studijních materiálů pro e-learningovou výuku v prezenční a kombinované formě studia Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti
VYSVĚTLIVKY Definice Zajímavost Poznámka Příklad Shrnutí Výhody Nevýhody
ANOTACE Význam aplikace technologií pro rozpoznávání řeči je v současné době opomíjen i přes jeho význam pro praktické nasazení v Interactive Voice Response systémech jako další evoluční krok klasické tónové volby, známé z automatizovaných zákaznických linek. Tento modul obsahuje úvod do technologií pro tvorbu takových služeb, které s uživatelem komunikují pomocí řeči podobně, jako živý operátor. Studenti tohoto modulu porozumí základům a praktické aplikaci technologií VoiceXML a MRCP spolu s nejdůležitějšími pravidly návrhu řečových služeb. CÍLE Tento kurz seznamuje studenty s teorií i praktickým vývojem distribuovaných řečových služeb. Po prostudování první teoretické části budou studenti obeznámeni s možnostmi a limity technologií rozpoznávání a syntézy řeči. Druhá číst kurzu je již zcela praktická, obsahuje výklad tvorby skutečných řečových aplikací v jazyce VoiceXML a distribuované nasazení v telekomunikačním prostředí s využitím protokolu MRCP. LITERATURA [1] Sharma Chetan, Kunins Jeff. VoiceXML: Strategies and Techniques for Effective Voice Application Development with VoiceXML 2.0. : John Wiley & Sons, 2002. 496. ISBN 978-0471418931. [2] Juang B. H., Rabiner Lawrence R. Automatic Speech Recognition - A Brief History of the Technology Development. Rutgers University and the University of California (Santa Barbara), 2004. http://www.ece.ucsb.edu/faculty/rabiner/ece259/reprints/354_lali-asrhistoryfinal-10-8.pdf. [3] Mařík Vladimír, Štěpánková Olga, Lažanský Jiří a kolektiv. Umělá inteligence 5. : Academia Praha, 2007. 552. ISBN 978-8020014702. [4] Harris Randy Allen. Voice Interaction Design: Crafting the New Conversational Speech Systems. : Morgan Kaufmann, 2004. 624. ISBN 978-1558607682. [5] World Wide Web Consortium (W3C). Voice Extensible Markup Language (VoiceXML) Version 2.0. : 2004, http://www.w3.org/tr/voicexml20/. [6] Burke David. Speech Processing for IP Networks: Media Resource Control Protocol (MRCP). : Wiley-Blackwell, 2007. 368. ISBN 978-0470028346. [7] Shanmugham S., Monaco P., Eberman B. A Media Resource Control Protocol (MRCP). : 2006, http://tools.ietf.org/html/rfc4463.
[8] World Wide Web Consortium (W3C). Natural Language Semantics Markup Language for the Speech Interface Framework. : 2000, http://www.w3.org/tr/nl-spec/.
Obsah 1 Úvod... 8 1.1 Příležitosti řečových služeb... 8 1.2 Historie do konce 60. let... 9 1.3 Historie od 70. let... 11 2 Teoretické základy syntézy a rozpoznávání řeči... 12 2.1 Syntéza řeči... 12 2.2 Zpracování přirozeného jazyka... 13 2.3 Konketace řečových segmentů... 14 2.4 Rozpoznávání řeči... 15 2.5 Komponenty rozpoznávače - Akustický procesor... 16 2.6 Komponenty rozpoznávače Ligvistický dekodér... 17 2.7 Skryté Markovovy modely... 18 3 Vývoj řečových aplikací v jazyce VoiceXML... 19 3.1 Úvod... 19 3.2 Jazyk VoiceXML... 20 3.3 Stavy a formuláře... 21 3.4 Navigace mezi stavy a obsluha událostí... 23 3.5 Syntéza řeči práce s hlasem a tichem... 25 3.6 Syntéza řeči práce s důrazem... 26 3.7 Syntéza řeči dodání významu... 27 3.8 Gramatiky pro rozpoznání řeči... 29 3.9 Tvorba řečových gramatik... 30 3.10 Sémantická interpretace gramatik... 31 3.11 Tvorba gramatik pro tónovou volbu... 32 3.12 Skriptování... 34 3.13 Rozšířená práce s výsledky rozpoznání... 36 3.14 Procházení výsledky rozpoznání... 38 3.15 Načítání externího obsahu... 40 3.16 Logování událostí při běhu programu... 42 4 Distribuované nasazení řečových aplikací... 44 4.1 Protokol MRCP... 44 4.2 Obsluha sestavení spojení... 46 4.3 Obsluha syntézy řeči... 48 4.4 Obsluha rozpoznání řeči... 50 4.5 Výsledek rozpoznání řeči... 51
5 Závěr... 53 5.1 Shrnutí... 53 6 Test... 54 6.1 Test... 54
1 Úvod 1.1 Příležitosti řečových služeb V Současné době je většina softwarových aplikací založena na grafické interakci i přesto, že první, byť jednoduchý řečový syntetizér byl zkonstruován na konci 18. století a první rozpoznávač v roce 1952. Pro uživatele je však přínosnější a přirozenější kombinace hlasové a vizuální interakce, která potlačuje nevýhody a naopak zdůrazňuje výhody každé z obou interakcí. Kombinace interakcí se odborně označuje jako multimodální interakce. Pojem multimodální slouží jako protějšek známějšího označení multimediální, které označuje více způsobů interakce pro předání informací uživateli strojem. Naopak pojem multimodální vyjadřuje použití různých interakcí pro zadání příkazu stroji uživatelem. Cílem multimodální interakce člověka s počítačem je tedy nápodoba interakce člověka s člověkem, která využívá navíc více smyslu. Ideálním klientem multimodálních služeb je mobilní telefon, zařízení s celosvětovou penetrací 60% a celkovým počtem 4 600 000 000 kusu. V některých rozvinutých zemích Evropy dosahuje penetrace nad 100%. V CR se jedná o penetraci 130%, mobilní telefon má téměř každý student a každý druhý důchodce. V rozvojových zemích je penetrace menší, avšak mobilní telefony představují nejdostupnější cestu k informacím. Celkový počet počítačů dosáhl v roce 2008 jedné miliardy, přitom 58% počítačů je používaných ve vyspělých zemích v EU, USA a Japonsku, ve kterých žije 15% světové populace. Uživatelé mají mobilní telefon, na rozdíl od osobních počítačů, většinou stále při sobe. Nové generace mobilních telefonu disponují rychlejším procesorem, vetší paměti, kvalitnější obrazovkou, rychlým připojením na Internet a GPS přijímačem. Tyto a další funkce učiní v budoucnu z mobilního telefonu všudypřítomné klienty s konektivitou, zajištující přístup k multimodálním službám. Současné dělení na vizuální a hlasové služby padne a přijde nová generace služeb, využívajících nejlepších vlastností z vizuální i hlasové interakcí. Služby se stanou vůči uživatelům přátelštější a efektivnější díky zapojení více smyslu. Uživatel bude komunikovat ze softwaru, který bude mluvit jako člověk a možná tak i vypadat. Informace pro uživatele budou pocházet z Internetu, role lidského operátora bude potlačena. Změní se způsob jejich prezentaci uživateli, založený na spolupráci webové stránky, vykreslené v prohlížeči telefonu, s rozpoznáváním a syntézou reci. Uživatelé budou moci zapojit zrak i sluch pro rychlé pochopení informací, používání služby se stane přirozenější a zábavnější. Díky tomu, že mobilní telefony doprovázejí své majitele po celém světě, bude možné vytvořit služby, nabízející správné informace ve správný čas. Znalost polohy uživatele umožní předložit mu jen ty informace, které se vztahují k jeho aktuální poloze. Díky zapojení hlasu se práce s informacemi přiblíží rozhovoru dvou lidí. Tento vývoj umožní většímu poctu lidí přístup k informacím a efektivní práci s nimi.
1.2 Historie do konce 60. let Ovládání strojů pomocí řeči je vnímáno jako buď jako rekvizita vědeckofantastických filmů nebo novinka, používaná pro hlasové vytáčení a vyhledávání na mobilních telefonech. První prototypy syntetizéru řeči, napodobující mechanicky lidské řečové ústrojí, však byly sestrojeny před dvěma sty lety a výzkum rozpoznávačů přinesl první výsledky před šedesáti lety v době, kdy dnes nejrozšířenější grafické uživatelské rozhraní neexistovalo. Následuje proto shrnutí významných pokroků až do konce 60. let, následující obrazovka rozšiřuje časovou osu do 90. let. 1773 Christian G. Kratzenstein, ruský profesor fyziologie v Kodani, zkonstruoval první přístroj schopný vytvářet samohlásky pomocí rezonujících trubic připevněných k vahanům. 1804 Wolfgang von Kempelen, autor slavného podvrhu hrajícího šachového stroje Turek a Bratislavský rodák, předvedl dvacet let jím vyvíjený přístroj schopný vytvářet celá slova i věty. Své poznatky shrnul v knize Mechanismy lidské řeči, i s popisem mluvícího stroje. Přístroj napodoboval lidské hlasové ústrojí: vzduch proudil z měchu nahrazujícího plíce přes píšťalu a přes úzkou trubici. Ovládal se páčkami a ručním zakrýváním nosních dírek a úst, prst nahrazoval jazyk. Jednalo se tedy v podstatě o hudební nástroj. Mechanický přístup k syntéze hlasu přetrval až do počátku 20. století. 1837 Sir Charles Wheatstone navazuje na Kempelenovu práci a tím zahajuje další vlnu výzkumu fonetického rozměru řeči. 1876 Alexander Graham Bell vynalezl telefon. Učinil tak poté, co se jako mladý seznámil s Wheatstonovou prací. Původně chtěl sestrojit fonoautograf, aby pomohl hluchým lidem dorozumět se s okolím. 1939 Homer Dudley navrhl v Bellových laboratořích elektronický systém Voice Operating Demonstrator (VODER) pro rozpoznání a syntézu řeči. Jedná se o elektronickou variantu Wheatstonova syntetizátoru, pracující na základě poznatků Harveryho Fletchera o hlasovém spektru, které je distribucí síly hlasu přes frekvenci. Navzdory přetrvávajícímu paradigmatu hudebního nástroje je VODER považován za důležitý milník ve vývoji demonstrující význam spektra hlasového signálu pro identifikaci fonémů. 1952 V Bellových laboratořích stvořen hlasový analyzátor schopný rozpoznat číslice 0 až 9 s pravděpodobností úspěchu 50 až 100 % Pracoval na principu měření formantů, což jsou lokální extrémy frekvenčního spektra vznikající akustickou rezonancí. 1959 V Lincolnových laboratořích, Forie a Forgie byl stvořen systém rozlišující slova typu b-samohláska-t (bit, boat, byte,... ) s přesností 93 %. 60. léta 20. století Výzkum rozpoznání hlasu v Japonsku. V Tokiu se za účasti společností Suzuki a Nakata zkoumá rozpoznání fonémů. Rozpoznání samohlásek se společně s Kjótskou univerzitou věnují Sakai a Doshita za prvního použití segmentace řeč, která znamená počátek rozpoznání přirozeného jazyka. Laboratoře NEC zkoumají rozpoznání číslic. 9
1966 Položeny základy lineárního prediktivního kódování, které slouží k rozpoznávání fonémů na základě statistických pravděpodobnostních metod. V průběhu dalších let výrazně zdokonaleno. Na MIT vyvinut systém analýzy řeči se slovníkem o 50 slovech pracující na principu ohodnocení všech možností. Dosáhl úspěšnosti 86 %, v 96 % se správné slovo umístilo do druhého místa. 1968 Stanley Kubrick natáčí film 2001: Vesmírná odysea (2001: A Space Odyssey), ve kterém vystupuje myslící a mluvící stroj. Lidstvo začíná být fascinováno představou stroje, který by se mohl chovat a mluvit jako lidé. 10
1.3 Historie od 70. let 70. léta 20. století byla bohatá na události: Počítače umožňují simulovat obvody pro generování tónů, což se dříve dělalo s pomocí speciálního hardwaru. Systémy pro rozpoznání mají slovní zásobu čítající stovky slov. Mezi problémy patří nutnost dělat pomlky mezi slovy a závislost na mluvčím. Založena první komerční společnost v oboru rozpoznání řeči Threshold Technology, Inc. Se svým produktem VIP-100 System slaví skromné úspěchy, použito výrobci televizorů a FedExem. Do výzkumu porozumění řeči se dává americká DARPA společně s Carnegie Mellon University. Jejich systém Harpy obsahoval ve svém slovníku 1011 slov, k jejichž rozpoznání používal segmentaci řeči a prohledávání konečného grafu stavů pro výběr nejpravděpodobnějšího slova. Tým IBM, v čele s českým rodákem Fredem Jelínkem, zkoumá hlasem ovládaný psací stroj Tangora, který měl umět převést řeč do textové podoby, a stát se tak historicky prvním Speech-to-text systémem závislým na řečníkovi. Používal gramatiku a n-gramový model. Gramatika byla statistickým souborem syntaktických pravidel říkajících, která slova nebo fonémy po sobě mohou v projevu následovat. N-gramový model slouží k predikci dalšího slova na základě slov již zadaných, až do počtu n. Dnes se využívá zejména pro porozumění přirozenému jazyku. V Bellových laboratořích AT&T se pracuje na systému nezávislém na mluvčím, schopnému obsloužit velký počet zákazníků v oboru telekomunikací. Použito statistické modelování. Systém byl schopen si poradit s přirozenou řečí zákazníků díky vyhledání klíčových slov v projevu, které pak spustily adekvátní reakci. 80. léta 20. století Pokrok ve statistickém modelování řeči, které je základem dnešních systémů. Jednalo se zejména o skryté Markovovy modely, na kterých jsou založeny dnešní systémy rozpoznávání řeči. 90. léta 20. století vznik call center se jeví jako vhodná příležitost k automatizaci hlasové komunikace se zákazníkem. AT&T v roce 1992 zprovozňuje Voice Recognition Call Processing (VRCP), který vyřídí za rok 1,2 miliardy telefonátů za použití technologií rozpoznání i syntézy řeči. Podle AT&T někteří zákazníci vůbec nepoznali, že se jedná o stroj. Některé výše zmíněné technologie (rozpoznání fonémů, segmentování, lineární kódování, statistické metody, gramatiky) jsou dále rozvíjeny a dnes používány. 11
2 Teoretické základy syntézy a rozpoznávání řeči 2.1 Syntéza řeči Pojmem syntéza řeči označujeme proces tvorby akustického signálu, který imituje lidskou řeč na základě strojové informace, která má obvykle podoby textu. Proto se syntéza také označuje jako Text-to-speech. Při syntéze dochází ke zřetězení (konketace) segmentů akustického signálu do podoby výsledného sdělení. Na některých českých nádražích se lze setkat s nejjednodušší formou konketace jednotlivých předem nahraných slov pro syntézu informačních hlášení cestujícím. Software pak vybírá nahrávky jednotlivých slov z databáze a zřetězuje je. Takové řešení je velice jednoduché, avšak značně limituje možnosti použití a rozšiřitelnost daného řešení, kdy pro syntézu hlášení je nejprve třeba slova namluvit a zanést do databáze. Tato kapitola pojednává o složitější variantě konketace fonémů - nejmenších akustických jednotek řeči, která umožňuje syntézu prakticky jakékoliv informace. Foném je nejmenším rozlišitelným prvkem akustického vnímání řeči, který má rozlišovací vlastnost. Tedy na základě poslechu fonémů v projevu dokáže mozek určit obsah sdělení. Při syntéze dochází k fonetické transkripci, tj. k převedení posloupnosti znaků abecedy na posloupnost fonémů. Vlastní syntéza se skládá ze dvou procesů, popsaných na následujících stránkách: 1. Zpracování přirozeného jazyka 2. Konketace řečových segmentů Moderní syntetizéry navíc disponují podporou více jazyků v podobě rozšiřitelných softwarových modulů. Je proto možné míchat v jedné řečové službě mnoho jazyků, neboť syntéza řeči nepředstavuje pro dnešní počítače velkou výpočetní zátěž. Se syntézou řeči se můžeme setkat v moderních operačních systémech pro chytré mobilní telefony, kde nabízí alternativu k obrazovce. 12
2.2 Zpracování přirozeného jazyka Na předchozí stránce je zmíněna fonetická transkripce pro převod textu na fonémy. Pro správný převod je nutné provést řadu operací nad vstupním textem pro optimální transkripci. Dnešní řečové služby jsou propojeny s řadou graficky orientovaných aplikací, které poskytují informace v textové podobě, která spoléhá na implicitní znalost významu použitého formátování lidským uživatelem. Jedná se o formát zápisu čísel a zkratek a symbolů, interpunkci a další. Tyto psané projevy přirozeného jazyka je třeba analyzovat a dle výsledku upravit vlastní následnou konotaci řečových segmentů. Komponentou syntetizéru, zodpovědnou za toto zpracování přirozeného jazyka, je Morfologicko-syntaktický analyzátor. V případě některých slov jsou však vlastnosti řeči, získané na základě syntaktické analýzy, nepřesné. Např. anglické slovo read může být vysloveno různě na základě časového vyjádření věty. Tyto problémy řeší Morfologicko-syntaktický analyzátor. Ten pracuje podobně jako kontrola pravopisu v některých textových editorech. Udržuje si gramatický kontext, a je proto schopen najít a případně opravit chyby v pravopisu a stylizaci. Jeho použití je logicky možné jen pro jeden konkrétní jazyk. Morfologicko-syntaktický analyzátor se skládá z několika částí, které pracují paralelně: 1. Předzpracování řeči extrahuje vlastní text formátu z požadovaného souboru a stanovuje strukturu textu: odstavce, tabulky, seznamy atp. Je využíváno anotací podkladového formátu (např. HTML značkování). 2. Normalizace převádí prvky textu vyžadující zvláštní interpretaci na lépe zpracovatelnou formu. Jedná se čísla, finanční částky, zkratky atd. 3. Morfologická analýza zpracovává ohebná slova tak, že detekuje jejich kmen a doplní jej o vhodné koncovky. 4. Kontextová analýza zkoumá druhy po sobě následujících slov podle pravděpodobnostního i deterministického modelu. 5. Syntakticko-prozodický rozbor odvozuje dodatečnou prozódii na základě hranic mezi frázemi v textu. K tomu je využíván korpus s anotacemi určujícími hranice frází Morfologicko-syntaktický analyzátor obsahuje pravidla pro gramatický kontext a pravidla výslovnosti slov definované pomocí expertních pravidel či trénovací množiny. Pro jazyky s množstvím odvozenin jako např. čeština je vhodná trénovací množina, vytvořená ze statisticky významného množství příkladů reálného jazyka. Tyto příklady jsou obsažené v tzv. jazykových korpusech, sestavovaných dle určitého zastoupení různých písemných projevů z novin, knih či dalších zdrojů. Naopak expertní pravidla jsou vhodná pro jazyky s jasnými pravidly pro gramatiku a výslovnost. Pravidla jsou pak zapsána jako algoritmus a spouštěna syntetizérem nad textem k analýze. 13
2.3 Konketace řečových segmentů Konketace je závěrečný proces syntézy řeči, skládající akustické segmenty řeči za sebe, tvoříce tak výsledný akustický signál řeči. Segmenty jsou uloženy v akustickém modelu - zvláštní databázi, která je součástí syntetizéru. Starší syntetizéry produkovaly zvukově plochý strojově znějící řečový signál, který neobsahoval změny prozódie, typické pro skutečnou řeč. Důvodem jsou odlišné charakteristiky fonému ovlivněné fonémem předchozím s následujícím v projevu. Pro lepší kvalitu syntézy je tak každý foném uložen v akustickém modelu v podobě několika reprezentantů, kteří s sebou nesou informaci o předchozím a následném fonému. Příklady trifónů a difónů Tvorba akustického modelu je náročná práce, která začíná pořízením nahrávek řádově desítek lidí s odlišným řečovým projevem, každý přečte text o minimální délce několika stránek formátu A4. Následně 14
2.4 Rozpoznávání řeči Strojové rozpoznávání řeči je proces, při němž je vstupní akustický signál převáděn do digitální podoby a ta pak dále do posloupnosti slov. Výsledná posloupnost je dále analyzována za účelem získání potřebné informace. Žádoucí vlastností je nezávislost procesu rozpoznávání na konkrétním mluvčím, což zjednodušuje práci se systémem. Jsou používány systémy pro porozumění řeči na různých úrovních složitosti. Určující proměnnou je přitom velikost domény, nad níž má systém pracovat. Od ní se odvíjí velikost slovníku, se kterým bude systém pracovat. Velké slovníky (velikost řádově desítky tisíc slov) představují nemalou výpočetní zátěž, nehledě na zvýšenou chybovost. Dále je třeba z projevu získat potřebné informace. Zde záleží na povaze řešené úloze: obvykle je cílem buď převést diktovaný obsah do textové podoby, nebo si pomocí hlasového dialogu vyžádat od uživatele potřebné informace. Zatímco v prvním případě diktafonů proces rozpoznávání se získáním slova končí, v případě druhém je nutno zpracovat celou větu a tu podrobit sémantické analýze. Zatímco primitivní systémy obvykle reagují na přítomnost dané fráze, v případě rozsáhlejších domén je nutno použít vlastní gramatiky. Rozpoznávání řeči samo osobě negarantuje porozumění projevu uživatele. V případě rozpoznávání přirozené řeči je výsledkem nijak nestrukturovaný text, který je nutně analyzovat pomocí specializovaného software tzv. chatbotu, který dokáže na základě modelů jazyka a gramatiky z textu extrahovat podmět, přísudek, předmět a další informace. Chatbot obvykle má definována synonyma podstatných jmen a ekvivalentní slovesa, a proto se dokáže vypořádat s různými projevy odlišných uživatelů se stejným obsahem projevu. 15
2.5 Komponenty rozpoznávače - Akustický procesor Akustický procesor mění spojitý signál hlasu, pocházející ze vstupního zařízení (nejčastěji mikrofonu), do posloupnosti vektorů příznak. Využívá lineární prediktivní analýzu (LPC) pro odvození parametrů (např. intensity a frekvence) hlasového signálu na základě krátkodobého měření jeho diskrétních hodnot. Pro získání čistých parametrů signálu jsou reverzním filtrováním pomocí číslicových obvodů ze signálu odstraněny formanty, což jsou lokální extrémy frekvenčního spektra vznikající akustickou rezonancí. Akustické procesory se snaží věrně napodobovat způsob, jak lidé slyší. K tomu využívají psychoakustický model podobně jako MP3 kódování. Ten pracuje s frekvenčním a časovým maskováním: Frekvenční maskování V případě vnímání signálu s vysokou frekvencí není lidské ucho schopné vnímat též jiné signály s frekvencí nižší. Jedná se tedy o posun prahu slyšitelnosti zvuků. Časové maskování Při výskytu příliš hlasitého zvukového signálu chrání lidské ucho člověka tím, že daný signál prostě potlačí. Přitom snížená citlivost sluchu bude patrná nejen několik milisekund po vypnutí signálu, ale i těsně před jeho spuštěním. 16
2.6 Komponenty rozpoznávače Ligvistický dekodér Lingvistický dekodér překládá vektory příznaků na konkrétní slova. Přitom si musí umět poradit s různými typy hlasů a zkomoleninami. Nechť: W = {w(1), w(2),, w(n) je posloupnost N slov. O = {o(1), o(2),, o(t) je akustická informace v podobě posloupnosti vektorů odpovídajícímu t-tému mikrosegmentu hlasového signálu. P(W O) představuje podmíněnou pravděpodobnost, že při zjištěné akustické informaci O bude detekována posloupnost slov W. P(O W) je podmíněná pravděpodobnost, že při vyřčení posloupnosti slov W bude zjištěna akustická informace O. P(W) vyjadřuje apriorní pravděpodobnost vyřčení posloupnosti slov W. P(O) značí apriorní pravděpodobnost výskytu akustické informace O. Pak lze rozpoznání vyjádřit jako dekódování s maximální aposteriorní pravděpodobností nalezením takové posloupnosti slov W, která maximalizuje podmíněnou pravděpodobnost P(W O). S využitím Bayesova pravidla tak dostaneme: Bayesovo pravidlo Vzhledem k tomu, že P(O) není závislá na W, ji lze z rovnice 3.1 vynechat, čímž dostaneme: Upravené Bayesovo pravidlo 17
2.7 Skryté Markovovy modely Skrytý Markovův model (Hidden Markov Model - HMM) je konečným stochastickým automatem, jehož aktuální stav je nezávislý na stavech předchozích. Slovo skrytý značí, že pozorovateli je aktuální stav automatu neznámý. Cílem je aktuální stav odvodit na základě pozorovaných parametrů, které automat generuje v diskrétním čase pro každý stav. Nechť automat generuje parametry v podobě vektorů příznaků O = o(1), o (2)},, o(t). Nechť aktuální stav s(i) je v diskrétních časových okamžicích změněn na s(j) tak, že i j (jedná se o levo-pravé Markovovy modely) podle předem daných, v čase konstantních, podmíněných pravděpodobností přechodu a(i,j) mezi stavy i a j: Vyjádření Markovova modely Kde s (t) je stav modelu v čase t. Po každém přechodu je vytvořen vektor příznaku o(t) též podle předem daného pravděpodobnostního rozdělení b(j, o(t)) vztahujícího se k novému stavu v čase. Lidské hlasové ústrojí je vlastně považováno za Markovovův proces, jehož každý jeden stav reprezentuje konkrétní konfiguraci hlasivek, jazyka, zubů atp., která vytváří zvuk, a tedy i zachycenou akustickou informaci o. 18
3 Vývoj řečových aplikací v jazyce VoiceXML 3.1 Úvod Řečové služby mohou být realizovány na bázi monolitické i distribuované architektury. Tento materiál cílí na distribuovanou architekturu z důvodů její standardizace a četnější využití v telekomunikačním prostředí. Nicméně obě architektury mají své přednosti. Výhodou monolitické architektury je na rozdíl od distribuovaného možnost úzkého propojení s existujícími technologiemi knihovnami pro syntézu a rozpoznávání řeči. Díky tomu je možné využít specifické vlastnosti a funkce knihoven, jinak nedosažitelné z používaných standardů, které tvoří minimální podmnožinu funkcí, nabízených napříč spektrem různých dodavatelů. Další výhodou může v některých případech být možnost implementovat logiku aplikace ve zvolené technologii, např. jazyce Java, PHP nebo na platformě.net. Výhodou distribuované architektury je modularita všech komponent: interpretu, rozpoznávače, syntetizéru a úložiště logiky vlastní služby, které může být realizováno jako aplikace v jazyce Java, PHP nebo na platformě.net. Díky nezávislosti na konkrétním produktu a dodavateli je možné měnit různé komponenty bez negativních dopadů a nekompatibilit. Další výhodou je snazší škálovatelnost při velkém počtu uživatelských požadavků a snazší školení odborníků díky jedné standardizované technologii. 19
3.2 Jazyk VoiceXML VoiceXML je jednak značkovací jazyk, založený na jazyce XML (Extensible Markup Language), spravovaný konsorciem W3C a podporovaný různými dodavateli řečových technologii. Po stránce syntaxe je VoiceXML velice podobný HTML (Hypertext Markup Language), avšak odlišuje se ve způsobu řízení vlastní řečové služby vzhledem k velkým odlišnostem mezi grafickou a akustickou interakcí člověka s počítačem. Zároveň se jedná o standard, zastřešující různé dílčí technologie pro řečové služby: 1. Syntéza řeči 2. Rozpoznávání řeči 3. Sémantická interpretace rozpoznané řeči 4. Logika služby, která spojuje výše uvedené Každá distribuovaná architektura vyžaduje protokol, definující způsob komunikace jednotlivých částí interpret VoiceXML potřebuje sdělit rozpoznávači nejprve gramatiky, které se mají použít, později rozpoznávači sdělit, že má být zahájeno rozpoznávání řeči a nakonec od něj přijmou výsledky. Takovým protokolem je MRCP (Media Resource Control Protocol), který definuje obsah a formu zpráv, vyměňovaných si VoiceXML interpretrem, rozpoznávačem a syntetizérem. Ačkoliv znalost tohoto jazyka není pro samotnou tvorvu řečových služeb vyžadována, jeho znalost je výhodou. 20
3.3 Stavy a formuláře Aplikace jsou v jazyce VoiceXML modelovány jako množina stavů s definovanými podstavy. Stav je reprezentován elementem form, který má podobnou funkci jako stejnojmenný element v jazyce HTML načíst uživatelský vstup. Nicméně vzhledem ke složitosti definice gramatik pro rozpoznání řeči následnému zpracování výsledků včetně zotavení se z případných chyb, je definice formu ve VoiceXML složitější. Každý formulář se proto skládá z nejméně jednoho podstavu, který načítá vstup. Formulář pak slouží jako jakýsi kontejner pro seskupování více podstavů pro obsluhu událostí (viz následující část 4) a navigaci mezi stavy. Podstav může být realizován elementem field nebo block. Element field obsahuje trojici vnořených elementů: 1. Element prompt pro zprávu, která má být syntetizována uživateli. 2. Element grammar s gramatikou, definující možné volby řečového povelu. 3. Elemnt filled s obsluhou události úspěšného rozpoznání. 4. Element catch s obsluhou událostí chyby rozpoznání nebo vykonávání samotné služby Element block může obsahovat pouze syntézu řeči nebo logiku služby, např. větvení a vykonávání skriptů. Příklady elementů field a block v jednom formuláři: <vxml> <form id="welcome_form"> <block> <prompt> Vítejte v aplikaci vtipů. </prompt> </block> <field name="category"> <prompt> Řekněte kategorii. </prompt> <grammar type="application/srgs+xml" version="1.0" mode="voice" root="main"> <rule id="main" scope="public"> <one-of> <item>zvířata</item> <item>škola</item> <item>matematické</item> </one-of> </rule> 21
</grammar> <catch event="nomatch noinput"> <prompt> Řekněte prosím kategorii vtipu, například škola. </prompt> </catch> <filled> <prompt> Výběr akceptován. </prompt> </filled> </field> </form> </vxml> 22
3.4 Navigace mezi stavy a obsluha událostí Běh spuštěné VoiceXML služby se skládá z opakovaných změn stavu, typicky dle řečové volby uživatele, kdy se průběh služby větví. Přechod mezi stavy lze iniciovat explicitně pomocí elementu goto, který jako atribut přebírá název nového formu. Do elementu field či block lze takto přejít pouze v rámci stejného formu. Důvodem pro takové chování je myšlenka zapouzdření, kdy podstavy jednotlivých stavů jsou neviditelné z vnějších stavů. Příklady elementu goto: <vxml> <form id="welcome_form"> <block> <prompt>vítejte v aplikaci vtipů.</prompt> <goto next="#category_form"/> <block> </form> <form id="category_form"> <field name="category"> <filled> <prompt> Výběr akceptován. </prompt> <goto expr= # + category /> </filled> <field> </form> </vxml> Po přechodu do nového stavu skokem do elementu form je interpretem standardně vykonán první podstav, kterým může být element block nebo field. Po jeho dokončení je vykonán podstav další. Jestliže je nutné, aby po přechodu do formu byl vykonán jiný než první podstav, pak je vhodné zavést tzv. rozcestník první podstav v podobě bloku s logikou vyhodnocení situace a explicitním přechodem na požadovaný podstav. Pro větvení přechodů je vhodné použít elementy if, elseif a else, které tvoří podmíněné podmínky vykonání určených vnořených elementů, v následujícím případě tedy syntézy textu a přechodu na form. Příklady větvení logiky: <vxml> <form id="category_form"> <field name="category"> <filled> <prompt> Výběr akceptován. </prompt> 23
<if cond="category == 'Zvířata'"> <goto next="#vtipy_medvedi"/> <elseif cond="category == 'Škola' category == 'Matematika'" /> <goto next="#vtipy_vyuka_matematiky" /> <else /> <prompt>neznámá kategorie</prompt> </if> </filled> </field> </form> </vxml> Implicitním přechodem je potom zachycení událostí, které jsou typicky generovány v případě nespěšného rozpoznávání. Zachycení takových událostí pomocí elementu catch dává možnost zotavit se z chyby, např. syntézou přesnějších pokynů uživateli. Příklad zachycení chybové události pomocí elementů catch, umístěných na různých úrovních aplikace. První element catch je zanořený do elementu form s atributem, a speciálně uzpůsoben k obsluze chyb, které se vyskytly při vykonávání logiky tohoto formuláře. Případné chyby mimo formulář jsou zachyceny druhým elementem catch, vnořeným přímo do hlavního elementu vxml, a jejich obslouha po syntéze obecného popisu ukončí aplikaci: <vxml> <form id="vtipy_medvedi"> <catch event="error"> <prompt> Promiňte, medvědi jsou nemocní. </prompt> <goto next="#category_form" /> </catch> </form> <catch event="error"> <prompt> Promiňte, došlo k vážné chybě. </prompt> <exit /> </catch> </vxml> Elementy catch mohou být na úrovni podstavu, stavu i celé služby. V takovém případě je vykonán pouze ten element catch, který je nejblíže výskytu události od nejbližšího podstavu po nejvzdálenější službu. 24
3.5 Syntéza řeči práce s hlasem a tichem VoiceXML obsahuje elementy umožňující ovlivnit syntézu reci. Následující výpis obsahuje formulář z identifikátorem welcome, obsahující pouze syntézu v elementu prompt. Po syntéze úvodní hlášky následuje krátká pomlka, jejíž trvání je možné zadat v sekundách nebo milisekundách. Formulář uzavírá přechod do jiného formuláře s identifikátorem IBM. Identifikátoru formuláře v elementu goto musí vždy předcházet znak #. Příklad syntézy s použitím elementu voice, který umožňuje definovat hlas syntézy daného textu. V níže uvedeném příkladu vystupuje vypravěč s hlasem Jan, muž a žena coby protagonisté, s hlasy definovanými dle pohlaví a věku. Každý syntetizér je obvykle dodáván s jedním až s několika hlasy, které mohou pokrývat obě pohlaví a různé věky a dokonce i varianty. Avšak tato podpora je rozdílná dle dodavatele syntetizéru a uvedený příklad nemusí fungovat s jinými syntetizéry. <vxml> <form id="medvedi"> <block> <prompt> <voice name="jan"> Eskymak se pta eskymacky: </voice> <break time="500ms" /> <voice gender="male" age="40"> Čím jsi zabila toho medvěda, co leží před iglů? </voice> <break time="250ms" /> <voice gender= female age= 35 > Tím bumerangem, co ti ležel na posteli. </voice> <break time="100ms" /> </prompt> </block> </form> </vxml> <voice gender="male" age="40"> Ještě jednou mi sáhneš na ponožky a zlomím ti deku! </voice> 25
3.6 Syntéza řeči práce s důrazem V řeči se používají způsoby doplnění významu informací změnou rychlosti či hlasitosti, Jazyk VoiceXML stejné vlastnosti řeči umožňuje dodat pomocí elementu prosody s atributem rate pro změny rychlosti a atributem volume pro změnu hlasitosti. Jak ukazuje příklad níže, oba atributy je možné kombinovat pro vtvoření požadovaného efektu. <vxml> <form id="kone"> <block> <prompt> Kovboj vlítne do saloonu a <emphasis>zařve</emphasis>: to, <prosody rate="fast" volume="loud"> Kdo mi ukradl koně?! Ať se okamžitě přizná, nebo udělám co udělal můj strýc před padesáti lety! </prosody> Chvíli je ticho a potom pomalu jeden zvedá ruku. <prosody rate="slow" volume="silent"> Promiň, máš ho za rohem. </prosody> Po chvíli se kovboje ostatní bojácně ptají, co že to udělal jeho strýc. Kovboj jim odpoví: <prosody rate="x-slow" volume="silent"> Šel domů pěšky! <prosody >. </block> </form> </vxml> Výčet všech možných hodnot pro oba atributy jsou uvedeny v následující tabulce: Basic table table caption Atribut Hodnoty Atribut Hodnoty rate x-slow volume x-silent slow medium fast x-fast silent medium loud x-loud 26
3.7 Syntéza řeči dodání významu Často se vyskytne nutnost syntetizovat posloupnost znaků se sémantickým význam, který je jasný člověku z kontextu, avšak nikoliv syntetizéru. Příkladem mohou být datum a čas, finanční částky, telefonní číslo a další. Následující příklad obsahuje element say-as, který je používán k vyznačení významu zanořeného obsahu pomocí atributu format pro definicí typu obsahu k syntéze a interpret-as s použitou konvencí zápisu. V následujícím příkladě tak první element say-as dává syntetizéru na srozuměnou, že posloupnost čísel 03.06.1868 se datumem a druhý element stejným způsobem ošetřuje srývnost syntézy času 22:22. <vxml> <form id="medvedi"> <block> <prompt> Dle nejnovějšího výzkumu byl Jára Cimrman narozen dne <say-as format="date" interpretas="dd.mm.yyy">03.06.1868</prompt> v <say-as format="time" interpret-as="hh:mm">22:22</prompt>. </prompt> </block> </form> </vxml> Podpora různých typů obsahu i konvencí se liší dle dodavatele syntetizéru o od rozsáhlé podpory různých významů až po prosté ignorování celého elementu sayas. Další formou významu textu je použitý jazyk. Element prompt je proto možné doplnit elementem xml:lang se zkratkou jazyka dle ISO 866, např. cs-cz pro češtinu. Následující příklad doplňuje aplikaci vtipů o dva nové vtipy v anglickém a německé jazyce: <vxml> <form id="family"> <block> <prompt xml:lang="en-us"> Son asks difference between Confidence and Confidential. Dad says, you are my son, I am Confident. Your friend is also my son, thats Confidential. </prompt> </block> </form> <form id="other"> <block> <prompt xml:lang="de-at"> Terffen sich ein Stein und ein Brett. 27
Der Stein: "Ich bin ein Stein". Das Brett: "Wenn du Einstein bist, bin ich Brett Pitt." </prompt> </block> </form> </vxml> Pro řadu volně dostupných syntetizérů je možné stáhnout balíčky s podporou dalších jazyků, mezi kterými nechybí ani čeština. Podpora jazyků komerčních syntetizéru je pak závislá na technických možnostech a strategii výrobce. 28
3.8 Gramatiky pro rozpoznání řeči Tvorba gramatik představuje základní a nejdůležitější prvek návrhu řečové služby. VoiceXML umožňuje pouze tvorby gramatik na základě výčtu všech voleb včetně opakování a větvení. S těmito možnostmi lze dosáhnout složitých a bohatých gramatik. Výhodou gramatik je snadná definice s možností začít malou gramatikou a postupným rozšiřováním pokračovat ke složitějším verzím. Dále gramatiky doplněné sémantickou interpretací jsou výborné pro zadávání strukturovaných objednávek s mnoha volbami, např. dvě velké pizzy se sýrem, parmskou šunkou a olivami a láhev Infinitus Tempranillo. Výsledkem rozpoznání dle dobře, avšak snadno napsané gramatiky s interpretací bude datová struktura s vlastnostmi: počet kusů, oddělené ingredience, nápoj. Nevýhodou je nutnost gramatiku navrhovat, testovat a udržovat. Je třeba pamatovat a ošetřit situace, kdy uživatel zadá volbu jinak, než očekával návrhář gramatiky. Následné testování je velmi pracné i pro člověka, který má kvalifikaci v oboru návrhu uživatelských rozhraní. Pro porozumění řeči převedené na text existují speciální nástroje, v případě jejichž rozšíření bude návrh gramatik umenšen. 29
3.9 Tvorba řečových gramatik Základní gramatika představuje použití seskupujícího elementu rule a elementu item pro definici textu, který se má rozpoznat. Gramatiku jej dále možné vylepšit větvením, kdy uživatel má na výběr jednu ze tří voleb pomocí elementu one-of: <vxml> <form id="category_form"> <field name="category"> <grammar type="application/srgs+xml" version="1.0" mode="voice" root="main"> <rule id="main" scope="public"> <one-of repeat="1-3"> <item>zvířata</item> <item>škola</item> <item>matematické</item> </one-of> </rule> </grammar> </field> </form> </vxml> Gramatiku lze vylepši přidáním opakování pomocí atributu repeat elementu item, který v tomto případě slouží jen jako kontejner pro další elementy one-of a item. Různý zápis hodnot atributu je přípustný: repeat="3" učiní volbu opakovatelnou přesně třikrát. Jestliže budde volba zopakována pouze dvakrát, skončí rozpoznávání neúspěchem repeat="1-3" umožní volbu zopakovat jednou, dvakrát nebo třikrát repeat="0-1" učiní volbu volitelnou repeat="1-" volba může být zadána jednou až vícekrát, limit není stanoven Jestliže hrozí, že uživatelé řeknou daný povel s příliš mnoha variantami, je možné použití elementu garbage, jako doplňku klasických elementů gramatik. Element garbage přijme každou část povelu bez nutnosti vypisování všech variant. Nevýhodou je, že část povelu, přijatá elementem garbage se neobjeví ve výsledku rozpoznávání. Jedná se tedy o vhodný způsob vypořádání se s variantami povely typu chci se odhlásit odhlásit se odhlásit, prosím a další na základě klasického elementu item doplněného před sebou i za sebou elementem garbage. 30
3.10 Sémantická interpretace gramatik Gramatiky lze doplnit elementy tag, obsahující výraz v ECMAScriptu, který se vykoná vždy, pokud uživate vybere příslušnou volbu. Elementy tag jsou obvykle vnořeny do elementů item, např. pro náhradu uživatelem řečeného příkazu univerzálním tokenem. Následující příklad obsahuje : <vxml> <form id="category_form"> <field name="category"> <grammar type="application/srgs+xml" version="1.0" mode="voice" root="main"> <rule id="main" scope="public"> <one-of> <item>zvířata <tag>$ = 'zvirata';</tag></item> <item>medvědi <tag>$ = 'zvirata';</tag></item> <item>škola <tag>$ = 'Matematické';</tag></item> <item>matematické </item> <item>nepochopitelné <tag>$ = 'Matematické';</tag></item> </one-of> </rule> </grammar> </field> </form> </vxml> Uvedený příklad zobrazuje, jak umožnit definici více řečových povelů, které se vztahují ke stejnému tématu. Bez ohledu na to, zda uživatel řekne Zvířata nebo Medvědi, výsledek bude v následném zpracování v elementu filled zpracován stejně, v tomto případě skokem do formuláře s id atributem zvirata, který obsahuje vtipy o medvědech i dalších zvířatech. V gramatikách je možné použít dokonce skriptování včetně definice vlastních metod, které se používá pro průběžné zpracování dílčích výsledků rozpoznání ve složitých gramatikách. Tato problematika je však již nad rámec kurzu. 31
3.11 Tvorba gramatik pro tónovou volbu Řečová může být nevhodná v případě limitů, pramenících z nároků na rozpoznávání řeči. Typickým příkladem je prostřední s hlukem na pozadí nebo nutnost rozpoznat krátké volby, které obsahují příliš málo písmen, respektive fonémů, a je tedy vysoké riziko špatného rozpoznání. V extrémních případech může dokonce dojít k aktivování rozpoznání a vykonání volby na základě náhodného hluku na pozadí. V těchto případech je vhodné použít tónovou volbu, anglicky označovanou jako Dual-tone multi-frequency (DTMF). Tónová volba představuje výhodu prakticky 100% úspěšnosti rozpoznání v případě, že uživatel stiskne správné tlačítko. Na rozdíl od rozpoznání řeči není třeba třeba zabývat se při návrhu gramatiky situací chybného rozpoznání z důvodů neznalosti či zmatení uživatele ani z důvodu rušného prostředí. Nevýhodou tónové volby je nutnost sdělit uživatel význam každé klávesy, přesněji čísla, na klávesnici mobilních telefonů. Při větším počtu dostupných voleb a v případě víceúrovňových menu s volbami může být tento způsob interakce těžkopádný. Dalším limitem je omezený počet takto definovaných volbe v jedné gramatice na 10 číslic plus klávesy hvězdičky a mřížky. S tónovou volbou tak standardně nelze tvořit rozsáhlé gramatiky. Následující příklad ukazuje definici gramatiky se třemi číselnými hodnotami. Povšimněte si použití sémantické interpretace pro přiřazení významu jednotlivým číselným volbám. Takto lze dokonce mít v jednom fieldu definovány gramatiky pro ovládání řečí i tónovou volbou: <vxml> <form id="category_form"> <field name="category"> <grammar type="application/srgs+xml" version="1.0" mode="dtmf" root="main"> <rule id="main" scope="public"> <one-of> <item> 1 <tag>$ = 'zvirata';</tag></item> <item> 2 <tag>$ = 'skola';</tag></item> <item> 3 <tag>$ = 'matematika';</tag></item> </one-of> </rule> </grammar> </field> </form> </vxml> 32
Je možné a užitečné kombinovat obě modality řečovou i tónovou volby v podobě dvou gramatik, přiřazených jednomu elementu field. Uživatel si tak může vybrat, který způsob zadání voly použije. 33
3.12 Skriptování Samotný kód VoiceXML je možné doplnit ECMAScriptem pro dodání dalších funkcí. Klíčovými elementy jsou skript pro definici skriptových funkcí, var pro přiřazení volání funkce proměnné a value pro syntézu proměnné. ECMAScript je podmnožinou JavaScriptu, používaného pro tvorby webových aplikací, běžících na straně klienta. To je velký rozdíl v případě VoiceXML služeb, které jsou celé včetně případného skriptování vykonávány vždy na straně serveru. Navíc nejsou v ECMAScriptu k dispozici proměnné, specifické pro webové stránky, a naopak k dispozici jsou jiné proměnné, specifické pro možnosti VoiceXML služeb. Následující příklad vylepšuje přivítání uživatele o pozdrav dle aktuálního času. V elementu block představen nový element var, který definuje novou ECMAScript proměnnou jménem greeting s hodnotou určenou výrazem v atributu expr. Atribut může obsahovat jakýkoliv správný výraz ECMAScriptu, v uvedeném příkladu se jedná o volání funkce, jejíž návratová hodnota je přiřazena proměnné. <vxml> <form id="welcome"> <block> <var name="greeting" expr="hello();"/> <prompt> <value expr="greeting" />, vítejte v aplikaci vtipů. </prompt> </block> </form> <script><![cdata[ function hello() { var now = new Date(); var hour = now.gethours(); var message = ""; if (hour < 9) { message = "Dobré ráno"; } else if (hour < 12) { message = "Pěkné dopoledne"; } else if (hour == 12) { message = "Doborou chuť"; } else if (hour < 19) { message = "Hezké odpoledne"; } else if (hour < 22) { message = "Pěkný večer"; } else { message = "Dobrou noc"; } return message; } 34
]]></script> </vxml> V element se syntézou prompt je přitomen element value, který vloží aktuální hodnotu atributu expr do syntézy. Jako v případě elementu var i zde může atribut expr obsahovat libovolný výraz ECMAScriptu, u tomto případě se jedná o dříve definovanou proměnnou. Vlastní funkce hello je pak zapsána v jazyce ECMAScript jako obsah elementu skript. Výhodou skriptování pomocí ECMAScriptu je efektivní zápis vlastních algoritmů pro načtení externího obsahu nebo pokročilejší zpracování výsledků rozpoznání. Bohužel výuka programování v jazyce ECMAScript je mimo rozsah tohoto kurzu. Nevýhodou skriptování je nepřehledné ladění. Častým zdrojem chyb ze strany vývojářů, znalých webových aplikací, je pak použití metod, které fungují v prohlížečích jako rozšíření základního standardu ECMAScript, avšak VoiceXML interpretem podporovány nejsou. 35
3.13 Rozšířená práce s výsledky rozpoznání Při rozpoznávání řeči často dochází k situacím, kdy je namísto skutečného příkazu uživatel mylně rozpoznána jiná volba. K tomu dochází zejména při velkém počtu položek v gramatice nebo při výskytu příliš krátkých položek, v jejich případě má rozpoznávač příliš málo dat ke správnému rozpoznávání V takovém případě je vhodné analyzovat dodatečné informace o výsledku rozpoznání pomocí proměnné application.lastresult$, za jejíž definici a obsah zodpovídá VoiceXML interpret. Jedná se o datovou strukturu s vlastnostmi, které poskytují detailní informace o výsledku: utterance je textová reprezentace řečové volby uživatele, může být vhodná pro dotaz na uživatele, zda je hypotéza správná. inputmode rozlišuje způsob zadání: nabývá hodnot voice pro řečový povel a dtmf pro tónovou volbu s použitím klávesnice. intepretation je textová interpretace volby uživatele, je použita pro přechod na další stavy. confidence je číselné vyjádření míry pravděpodobnosti hypotézy v intervalu 1 až 100, nicméně rozpoznávač hypotézy s pravděpodobností menší než 50 standardně zahazuje. Následující příklad představuje doplnění formuláře s výběrem kategorie vtipů o úplný výčet informací o výsledku rozpoznání: <vxml> <property name="maxnbest" value="1" /> <form id="category_form"> <field name="category"> <filled> <prompt> Vaše volba <value expr="application.lastresult$.utterance"/> zadaná pomocí </prompt> <if cond="application.lastresult$.inputmode== 'voice'"> <prompt>řeči<prompt> <else> <prompt>tónové volby<prompt> </if> <prompt> bude zpracována jako <value expr="application.lastresult$.interpretation"/> </prompt> </filled> </field> </form> </vxml> 36
Element property slouží k zadání speciálních vlastností rozpoznávače, které ovlivňují výsledky. Vlastnost maxnbest říká, že pro jednoduchost si přejeme pouze jediného kandidáta výsledku rozpoznání. Na základě hodnoty confidence je vhodné se rozhodnout, zda existujíc pochybnosti o nejpravděpodobnější hypotéze a na základě ní přejít přímo na další stav nebo provést ověření. V případě, že existuje více hypotéz s nízkou pravděpodobností 37
3.14 Procházení výsledky rozpoznání V reálných aplikacích se vhodné nelimitovat se na navrácení jediného kandidáta, nýbrž požádat rozpoznávač o vrácení pole N kandidátů, kterému se odborně říká N-Best-List. V dalším příkladu je pomocí elementu property požadována maximálně 5 kandidátů. Proměnná application.lastresult$ je pak pole s délou k < N, neboť rozpoznávač se může rozhodnout, že skutečný počet hypotéz je menší než počet vyžádaných hypotéz. Každá položka v poli je pak struktura objekt s vlastnostmi, uvedenými výše. Následuj příklad načtení více hypotéz výsledku rozpoznávání: <vxml> <property name="maxnbest" value="5" /> <form id="category_form"> <field name="category"> <filled> <var name="candidates" expr="application.lastresult$" /> <prompt> Nalezeno <value expr="candidates.length" /> kandidátů rozpoznání. </prompt> <foreach array="candidates" item="candidate"> <prompt> <value expr="candidate.utterance"/> <break time="300ms" /> </prompt> </foreach> </filled> </field> </form> </vxml> Příklad nejprve přiřadí proměnnou application.lastresult$ do vlastní kratší proměnné candidates. Následně je syntetizována zpráva s celkovým počtem nalezených kandidátů pomocí výrazu ECMAScript, vloženého do elementu value. Jádro příkladu je pak představování uvedením nového elementu foreach, který postupně vykonává vnořené elementy (v tomto případě syntézu textu) pro všechny prvky datového pole, zadaného atributem array s nalezenými kandidáty. V vnořených elementech (jmenovitě v elementu value) se lze odkázat na aktuálně zpracovávaného kandidáta pomocí proměnné, specifikované v elementu item. Uvedené informace jsou velice užitečné pro diagnostiky řečově aplikace a zkoumání výstup rozpoznávače může mnohé napovědět o potenciálních problémech, kdy se aplikace chová neočekávaně. Dle počtu kandidátů a jejich hodnoty confidence se lze během vykonání aplikace rozhodnout, zda a jak provést ověření výsledku rozpoznání. 38
Hodnota N by měla být rovna 5. Bylo zjištěno, že lidé si v krátkodobé paměti udrží 5 až 7 voleb. Vzhledem k tomu, že řeč je sekvenční médium uživatelé jsou spíše zvyklí na grafická rozhraní, je v tomto případě doporučeno zůstat na spodní hranici pěti voleb. Dalším důvodem je úspornost tónového výběru ve druhém kole, který by s větším počtem voleb trval příliš dlouho. 39
3.15 Načítání externího obsahu Během vykonávání VoiceXML služby je často nutné vyžádat si obsah z externího zdroje a jeho obsah syntetizovat uživateli. K tomu slouží element data, který přijímá URL s externím obsahem ve formátu XML dokumentu, který je nezávislý na programovacím jazyce či operačním systému. Předpokládejme řečovou službu, která uživateli na přání sdělí aktuální počasí na daném místě. Taková aplikace bude zřejmě propojena s online databází, obsahující všechna známá místa v zemi. Z důvodu rozsáhlosti databáze nemůže naše služba načítat všechny informace o počasí při generování VoiceXML dokumentu, a proto je zaslán požadavek pro dané místo až po volbě uživatele. V online prostřední se používá k výměně informací mezi službami značkovací jazyk XML, v případě počasí může mín např. následující strukturu: <pocasi> <místo nazev="praha"> <teplota>15</teplota> <oblasnost>zataženo</oblasnost> </misto> </pocasi> Po načtení obsahu z externího XML dokumentu mohou být zajímavé informace syntetizovány uživatel pomoví elementů value, které jsou při syntéze nahrazeny aktuální hodnotou proměnné v ECMAScriptu. Načtený XML dokument je nutné parsovat, tj. získat obsah na základě dotazů na existující elementy a atributy načtěného dokumentu. K tomu slouží rozhraní Document Object Model (DOM), používané v mnoha programovacích jazycích. DOM je dostupná jako součást ECMAScriptu, následující kód uvádí příklad parsování XML dokumentu pomocí DOM: <vxml> <form id="weather"> <block> <data name="response" src=http://www.example.org/praha" /> <var name="weather" expr="getweather(response)" /> <prompt> V městě <value expr="weather.place"/> je <value expr="weather.temperature"/> stupňů <value expr="weather.cloudiness"/>. <break time="500ms"/> </prompt> </block> </form> <script><![cdata[ function getweather(response) { var answer = struct; var root = response.documentelement; 40