IDA, Linköpings Universitet Artificiell Intelligens II, 729G11 HT 2008 Taligenkänning med fördjupning på Hidden Markov Models 870524-0045 jearu017@student.liu.se
Sammanfattning Taligenkänning är en teknik som gör det möjligt att givet en akustisk signal identifiera en sekvens av ord som yttras av en talare och på så sätt tolka det mänskliga språket. System som behärskar detta kan komma till stor nytta för personer med olika fysiska handikapp och kommunikationssvårigheter och som kanske annars inte kan interagera på vanligt sätt med t.ex. en dator eller telefon. Det finns flera olika typer av taligenkänningssystem men normalt sett börjar en taligenkännare med att bearbeta den av talaren givna akustiska signalen som sedan jämförs med ord som finns lagrade i ett schablonminne. Orden matchas sedan mot den schablon som passar bäst och ger i form av utdata en tolkning av den talade sekvensen. En modell som är vanlig att använda sig av vid taligenkänning är Hidden Markov model (HMM) med vilken man genom en sannolikhetsprocess kan se på vilka sätt ett ord eller fonem kan uttalas på och genom detta beräkna sannolikheten för att ett ord följs av ett annat. 2
Innehållsförteckning 1. Taligenkänning... 4 1.1 Språkmodellen och den akustiska modellen... 4 1.2 Taligenkänningssystemets uppbyggnad... 5 1.3 Olika typer av taligenkännare... 6 1.4 Användning av taligenkänningssystem... 7 1.5 Prestation och begränsningar... 7 2. Hidden Markov Model (HMM)... 9 2.1 HMM s uppbyggnad... 9 2.3 Problem med HMM s... 11 3. Diskussion... 12 4. Referenser... 13 3
1. Taligenkänning Att tekniken idag är något vi människor minst sagt är beroende av är för många ingen underdrift. Tekniska hjälpmedel för att förbättra vår interaktion med andra människor samt maskiner är därför något många idag ser som en självklarhet. Att personer med olika fysiska handikapp och kommunikationssvårigheter även de skall kunna använda sig av dessa är kanske för alla inte lika självklart, men på många sätt minst lika viktigt. Taligenkänningssystem bygger på en teknik som givet akustiska signaler kan identifiera olika sekvenser av ord och på så sätt tolka det mänskliga språket. För människor som inte kan interagera med t.ex. datorer på ett normalt sätt kan sådana system därför vara till stor nytta. Talet har nämligen en möjlighet att vara ett bättre hjälpmedel än exempelvis ett tangentbord i situationer där fullt naturlig språkkommunikation är användbar. Andra viktiga användningsområden för taligenkänning är telefoni, där taligenkänningssystem kan användas för diverse olika ändamål och diktering som är en transkription av en enskild talares monolog och som bl.a. kan användas inom områden som juridik. Taligenkänningssystem behandlar den akustiska indatan som en oren (engelskans noisy ) version av den ursprungligen talade meningen. För att omvandla den orena versionen så tar systemet hänsyn till alla möjliga meningar som kan passa in på denna och kan därigenom spåra ursprungsmeningen som den som med mest sannolikhet har skapat den orena versionen. Genom att talet är så pass varierande och innehållsrikt så behövs en effektiv algoritm som istället för att söka igenom alla möjliga meningar endast söker igenom de som är mest sannolika att matcha indatan. Detta kan göras med Vitebrialgoritmen eller A*. (Jurafsky & Martin, 2000) 1.1 Språkmodellen och den akustiska modellen Vårt tal kan, som nämnt tidigare, på ett bra sätt beskrivas som orent om man ser till allt ifrån olika bakgrundsljud till hur olika vi uttalar vissa ord samt att vissa olika ord ibland kan låta lika. Genom detta har taligenkänning kommit att betraktas som ett probabilistiskt slutledningsproblem. Problemet kan lättast beskrivas genom Bayes teorem där ord är en slumpmässig variabel som sträcker sig över alla möjliga sekvenser av ord som kan yttras och signal är den observerade akustiska signalsekvensen: P(ord signal) = α P(signal ord) P(ord) P(signal ord) kallas här för den akustiska modellen. Den beskriver hur orden låter. T.ex. att engelskans ceiling (tak) börjar med ett mjukt c och låter lika som sealing (försegling). P(ord) däremot kallas för språkmodellen och beskriver varje yttrandes sannolikhet att förekomma som t.ex. att engelskans uttryck high ceiling är mer sannolikt att förekomma än uttrycket high sealing. (Russel & Norvig, 2003) För att räkna ut sannolikheten att ett ord följs av ett annat i språkmodellen använder man sig att bigramsmodeller, trigramsmodeller eller n-gramsmodeller. Ovanstående exempel med high ceiling är ett exempel på bigramsmodell och beräknar sannolikheten att ett ord ska 4
följa givet det föregående ordet. En trigramsmodell ser till de två föregående orden och en n- gramsmodell ser till de N-1 föregående orden. Modeller likt dessa, där orden som följer endast beror på de föregående, kallas för Markovmodeller och förutsätter att man kan förutsäga sannolikheten för ett ord utan att se allt för långt tillbaka på de föregående. (Jurafsky & Martin, 2000) Språkmodeller som används i taligenkänningssystem är ofta ganska simpla medan den akustiska modellen anses vara mycket mer komplex. Den bygger på att det mänskliga språket innefattar endast 40 eller 50 olika ljud kallade fonem som är den minsta betydelseskiljande enheten. Exempelvis så är [iy] ett fonem till ordet beat och [ih] ett fonem till ordet bit. Genom dessa fonem kan man dela in den akustiska modellen i två delar. Den första delen handlar om uttal och ger för varje ord en tilldelning av sannolika fonemsekvenser. Exempelvis så kan engelskans ceiling uttalas på olika sätt genom fonem: [s iy l ih ng], [s iy l ix ng] eller [s iy l en]. Dessa fonem går i vanliga fall inte att observera och man kan säga att variabeln X t specificerar vilket fonem som yttras vid tiden t. Den andra delen handlar om på vilket sätt ett fonem inses vara en akustisk signal. Variabeln E t ger en akustisk signals observerade särdrag vid tiden t och den akustiska modellen specificerar P(E t X t ), där X t är nuvarande fonem. (Russel & Norvig, 2003) 1.2 Taligenkänningssystemets uppbyggnad Enligt Schmandt ingår det i varje taligenkännare tre grundläggande komponenter. Dessa tre är en språklig representation, ett set av schabloner och en mönstermatchningsalgoritm. I representationen omvandlas talsignalen innan den analyseras för att identifiera ord. Schablonerna beskriver varje ord som ska kännas igen genom igenkännarens vokabulär, dvs. de ord som finns lagrade för igenkännaren att identifiera. Schablonerna är som referenser mot vilka man jämför talsekvenserna för att utgöra vad det är som sägs. Mönstermatchningsalgoritmen har sedan i uppgift att avgöra ordgränser, hitta den mest matchande schablonen och avgöra om skillnaderna mellan schablonen och talsekvensen är små nog för att kunna acceptera ett visst ord. För att lyckas identifiera ett ord måste alltså en taligenkännare fånga den inkommande talsekvensen och omvandla den till den valda representationen, genom mönstermatcharen välja den schablon som är mest lik talsekvensen eller ignorera yttrandet om ingen av schablonerna är en tillräckligt nära matchning. (Schmandt, 1994) 5
Figur 1. Beskriver elementen i en taligenkännare. Användarens tal omvandlas till igenkännarens interna representation och jämförs sedan med igenkännarens vokabulär, orden som finns lagrade i schablonminnet. Genom mönstermatchning avgörs sedan vilken schablon som passar bäst in och som utdata ges sedan en tolkning av yttrandet. (Schmandt, 1994) 1.3 Olika typer av taligenkännare Det finns många olika typer av taligenkännare som varierar i både funktionalitet och prestanda. Några av dessa kan vara oberoende, beroende eller anpassningsbara igenkännare. En oberoende igenkännare är anpassad till att känna igen vilken talare som helst medan en beroende igenkännare bara kan känna igen en specifik talare. En anpassningsbar taligenkännare är en kombination av dessa två och har förmågan att kunna anpassa sig efter sin användare. Med tanke på att vi människor ofta uttalar samma ord på flera olika sätt är den oberoende taligenkännaren en aning mer komplicerad än den beroende. En variation i talarens uttal och röstläge ställer då till problem gällande mönstermatchningen. Detta gör att en oberoende taligenkännare kräver mer genomtänkt teknik för att lyckas känna igen olika sätt som ett visst ord kan uttalas på. På grund av detta har oberoende igenkännare ofta ett begränsat vokabulär på ca 10 till 20 ord och känner endast igen enstaka ord som uttalas separat. Anledningen till att beroende igenkänning anses vara lättare är att en enskild talare har ett mer konsist sätt att uttala orden på och dessa är därför lättare att känna igen. En anpassningsbar taligenkännare lär sig att anpassa sig till en specifik talare genom att antingen kalibrera sig själv till något den känner igen från den specifika personens tal eller genom att införliva användarfeedback när den känner igen ett ord som rätt eller fel. En sådan taligenkännare har en akustisk modell för varje ord den renar för att passa en viss talare. För att igenkännaren lättare ska lyckas avgöra hur en viss person talar kan personen först läsa ett stycke träningsdata varigenom igenkännaren då kan utläsa sättet denne talar på. Gällande huruvida taligenkännare kan känna igen flera ord med eller utan pauser emellan finns det diskreta taligenkännare som kräver pauser mellan varje ord för att identifiera ordgränser eller sammansatta taligenkännare som är designade till att känna igen kortare stycken av ord som talas i en fras. En kontinuerlig taligenkännare känner igen längre 6
sekvenser med vanligt tal utan att talaren tar några pauser mellan orden och taligenkännare som känner igen vissa nyckelord kan lokalisera ett fåtal ord i en obestämd mängd tal. Ännu en skillnad mellan olika taligenkänningssystem kan vara storleken på dess vokabulär. Dessa skulle kunna delas in i tre olika storlekar små, medium och stora. En igenkännare med en vokabulär på färre än 200 ord anses ha en liten sådan. En vokabulär på mellan 200-5000 ord anses vara en mediumstor igenkännare och igenkännare med 5000 10000 ord i sin vokabulär benämns som stora. (Schmandt, 1994) 1.4 Användning av taligenkänningssystem Det finns flera olika användbarhetsområden där man drar nytta av att använda sig av taligenkänningssystem. Ett av dessa är telefoni som oftast kräver en oberoende igenkännare med en relativt liten vokabulär eftersom talaren då ofta är okänd. Inom telefoni kan man dra nytta av taligenkänning vid exempelvis banktjänster, beställningstjänster eller olika mottagaren-betalar-tjänser. Människans interaktion med datorer är även det ett viktigt användningsområde för taligenkänning och då främst för personer med olika handikapp och kommunikationssvårigheter. Att då kunna använda sig t.ex. av en röststyrd dator för att kunna kommunicera är något som för dessa personer kan göras möjligt genom taligenkänning. Man måste däremot ta hänsyn till det faktum att taligenkänning kanske inte kommer att kunna ersätta vanliga datorer och tangentbord och se till problem som att det kan ta mycket längre tid för sådana system samt att det krävs mycket för att göra taligenkänningen så pass omfattande som det kan krävas. (Schmandt, 1994) 1.5 Prestation och begränsningar För att lyckas skapa bra taligenkänningssystem krävs kunskap och expertis som vilar på en mycket bred bas och är hämtad ur flera olika discipliner såsom lingvistik, datavetenskap, psykologi med flera. Detta kräver att forskare som arbetar med taligenkänningssystem har en god förståelse för just detta för att lyckas lösa problem av bredare karaktär, utan att för den skull behöva vara experter på alla dessa olika discipliner. För att mäta ett taligenkänningssystems prestationsförmåga ser man främst till dess precision och snabbhet, och många användare av dessa system är överens om att de kan uppvisa en mycket hög prestation i kontrollerade förhållanden. Många kommersiella företag som marknadsför igenkänningssystem menar att de kan uppnå mellan 98-99% i precision under optimala förhållanden. Till optimala förhållanden räknas då att talets karaktär matchar med intränad data, att systemet kan anpassa sig väl till talaren och att det kan agera i en omgivning utan störande moment såsom olika bakgrundsljud eller andra ljud som talaren ger ifrån sig. Talare som t.ex. pratar med en kraftig brytning kan därför uppnå sämre igenkänningsresultat än personer som talar tydligt och koncist. (http://en.wikipedia.org/wiki/speech_recognition) 7
Enligt Schmandt kan fel som uppstår vid taligenkänning delas in i tre klasser: 1. Avslag, där talaren säger ett ord som finns med i igenkännarens vokabulär men ändå inte känns igen. 2. Ersättning, där talaren säger ett ord som finns med i igenkännarens vokabulär men som känns igen som ett annat. 3. Införande, där irrelevanta ord känns igen genom att talaren andas eller smackar eller andra störningar som bakgrundsljud. Alla dessa fel uppkommer lättast vid sammansatt igenkänning, stora vokabulär samt vid användning av oberoende taligenkännare. Det kan vara svårt att veta hur stor sannolikheten för att olika fel ska inträffa är för olika typer av taligenkänningsprodukter men man tar oftast hänsyn till bakgrundljud, vokabulär, samarbetet med talaren och talarens attityd samt erfarenhet. Även det faktum att många olika ord kan låta lika är något som kan vara frustrerande för såväl människan som för taligenkännare. Detta kan vara svårt utan en fördjupad förståelse för den akustiska representationen men i stort kan man säga att ord som innehåller liknande fonemsekvenser ofta kan leda till olika fel vid igenkänningen. Genom ett antal olika tekniker kan man dock försöka att minimera de fel som man uppkomma vid taligenkänning genom att vara noga med att välja ut igenkännarens vokabulär, kontrollera omgivningens akustik samt vilken mikrofon som används och att träna talaren i att tala tydligt och konsekvent. (Schmandt, 1994) 8
2. Hidden Markov Model (HMM) Det finns flera olika tekniker att tillämpa på taligenkänningssystem för att känna igen olika talmönster och Hidden Markov Models är en av dessa. Andra exempel på tekniker är Dynamic Time Warping, Vector Quantization samt neurala nätverk. (Schmandt, 1994) I mer än de två senaste årtiondena har HMM ansetts vara en av de främsta stokastiska modellerna att använda sig av vid automatisk taligenkänning och imponerande HMMbaserade igenkännare har skapats för många varierade och svåra taligenkänningsuppgifter. (Glass, 2002) Grundteorin för HMM s publicerades i slutet på 1960-talet av Baum och hans kollegor och på 70-talet användes olika tillämpningar med talprocesser av Baker vid CMU och av Jelinek med kollegor vid IBM. (Rabiner & Juang, 1993) En Hidden Markov Model är en sannolikhetsprocess som kan användas som en kraftfull representation av tal genom att beräkna sannolikheten att ett ord följs av ett annat. Den består av ett antal interna tillstånd som går från initialtillstånd till sluttillstånd genom att steg för steg generera observerad utdata vid varje steg, kallat tillståndsövergångar. Exempelvis kan tillstånden svara mot fonem i ett ord med observerad utdata som svarar mot existerande eller icke existerande akustiska särdrag. För varje steg kan modellen antingen ta sig till nästa tillstånd eller stanna i det nuvarande beroende på observerad utdata. Modellen är gömd, dvs. tillstånden kan inte observeras direkt utan det vi ser är endast utdata. Genom en serie av observerad utdata kan man sedan gissa när modellen befann sig vid de olika tillstånden. (Schmandt, 1994) Figur 2. Ett exempel på en Hidden Markov Model där x är olika tillstånd, y är möjliga observationer, a är tillståndens sannolika övergångar och b är sannolik utdata. (http://en.wikipedia.org/wiki/hidden_markov_model) 2.1 HMM s uppbyggnad En HMM s uppbyggnad kan enligt Rabiner beskrivas genom ett visst antal särdag: 1. N, där N är antal tillstånd i modellen. Dessa tillstånd är ofta sammankopplade på så sätt att ett tillstånd kan nås från något av de andra tillstånden. Tillstånden betecknas S = {S 1, S 2 S N } och tillståndet vid tiden t betecknas q t. 9
2. M, där M är antalet observerade olika symboler per tillstånd. De observerade symbolerna svarar mot modellens fysiska utdata. Symbolerna betecknas V = {V 1, V 2 V M }. 3. Tillståndens övergångssannolikheters spridning A = {A ij } där i och j är olika tillstånd och a ij = P[q t+1 = S j q t = S i ] som är sannolikheten att gå mellan dessa tillstånd. 4. B, där B är observerade symbolers sannolika fördelning i tillstånd j. 5. π = {π i } som är själva starttillståndet. Givet lämpliga värden på N, M, A, B och π kan HMM användas som en generator för en observerad sekvens O = O 1 O 2 O T där varje observation är en symbol från V och T är antalet observationer där man: 1. Väljer ett initialtillstånd q 1 = S i beroende på initialtillståndets fördelning π. 2. Sätter t = 1 3. Väljer O t = v k enligt vilken sannolik fördelning en symbol har i ett tillstånd S i. 4. Övergår till ett nytt tillstånd q t+1 = S i enligt den sannolika fördelningen av tillstånd S i. 5. Sätter t = t+1 och går tillbaka till steg 3 om t < T och annars upphöra proceduren. Ovanstående procedur användas både som en generator av observationer och som en modell för hur en given observationssekvens generas av en lämplig HMM. Genom detta kan man se att en specifikation av en HMM kräver en specifikation av två modellparametrar (N och M), en specifikation av observerade symboler samt en specifikation av de tre sannolikhetsmåtten A, B och π. Detta kan sammanfattas genom beteckningen λ = (A, B, π). (Rabiner, 1989, 1993) Schmandt beskriver hur en HMM kan vara uppbyggd genom ett exempel med en låda och en skål som båda är fyllda med svarta och vita kulor. Lådan har fler svarta kulor än skålen som i sin tur har fler vita. Man börjar sedan med att välja en slumpmässig kula från lådan och ger den till en observatör i ett annat rum, som är ovetandes om vad som utförs. Sedan kastas en tärning och visar den på ett tal lägre än fyra så byter man och gör man samma sak med en kula ur skålen. Om talet är större än tre tar man istället en kula från lådan och fortsätter att upprepa proceduren. När vi tar kulor ifrån lådan och tärningen visar på lägre än fyra så fortsätter vi att plocka kulor från skålen. När vi väl börjat plocka kulor ur skålen så fortsätter vi tills vi är klara. Detta kommer leda till att vi spenderar mest tid med att plocka kulor från skålen då en tillståndsövergång från lådan till skålen har en sannolikhet på 1/2 att inträffa medan skålen har en sannolikhet på 1/6 att sluta och 5/6 att fortsätta. Resultatet av detta borde då bli att observatören i början får fler svarta kulor, när vi plockar kulor från lådan, och sedan få fler vita kulor när vi plockar från skålen. Anledningen till att exemplet med kulorna kan liknas vid en HMM är ett visst antal tillstånd med associerade sannolikheter för varje övergång från något av tillstånden, där lådan och skålen är tillstånd och varje gång man kastar tärningen representeras av de olika övergångarna. Genom observatören befinner sig i ett annat rum och inte ser själva handlingarna utan endast resultatet av dem så visar exemplet på att modellen är gömd. (Schmandt, 1994) 10
Figur 3. Ett exempel på en HMM där det i varje tillstånd S(n) finns en sannlikhet P(n, n) att stanna i det tillståndet och en sannolikhet P(n, n + 1) för övergång till nästa tillstånd. (Schmandt, 1994) 2.3 Problem med HMM s Enligt Schmandt finns det två problem relaterade till HMM som båda kan lösas matematiskt. Ett av problemen är att HMM givet ett visst antal observerade sekvenser måste kunna representera ett specifikt ord som finns lagrat i schablonminnet. Det andra problemet är att för observerad utdata fastställa vilka interna tillstånd som var mest sannolika vid varje steg. (Schmandt, 1994) Rabiner menar att det finns tre vanliga problem som måste lösas för att man ska kunna tillämpa HMM i verkligheten: Problem 1: Givet den observerade sekvensen O = O 1 O 2 O T och modellen λ = (A, B, π), hur får vi på ett effektivt sätt fram P(O λ), sannolikheten att sekvensen är producerad av modellen? Problem 2: Givet sekvensen O = O 1 O 2 O T och modellen λ, hur väljer vi en motsvarande tillståndssekvens Q = q 1 q 2 q T som är optimal och bäst förklarar observationerna? Problem 3: Hur anpassar vi modellparametrarna λ = (A, B, π) så att de maximerar P(O λ)? Det första problemet är utvärderingsproblemet som handlar om hur man givet en modell och en sekvens av observationer räknar ut sannolikheten för att sekvensen är producerad av modellen. Det andra problemet är att försöka visa den gömda delen av modellen, att hitta den rätta tillståndssekvensen. Det tredje problemet handlar om att optimera modellens parametrar så att de på bästa sätt beskriver hur en given observerad sekvens kommer till. Den observerade sekvensen som används för att anpassas till parametrarna kallas för en träningssekvens då den används för att träna HMM s. Träningsproblemet är avgörande i många fall vid användning av HMM s då det tillåter oss att skapa bra modeller för verkliga fenomen. (Rabiner, 1989) 11
3. Diskussion Jag anser personligen att taligenkänning är en välbehövd och fascinerande teknik då den på många sätt kan förbättra vardagen, främst för personer med olika sorters handikapp, när det gäller att kommunicera med omvärlden. Då jag själv anser att olika hjälpmedel för handikappade är ett intressant område som på många sätt måste utvecklas så är taligenkänning en teknik jag ser som en viktig del i detta. Viktigt att tänka på när man utformar dessa system tror jag är att ta hänsyn till vem användaren av systemet är. Beroende på vilket syfte taligenkänningen har, om det så är för en stressad pappa som gör sina bankärenden eller för en handikappad person med ett som vill kunna kommunicera med nära och kära så måste systemen, enligt mig, vara utformade på ett sätt som ger en tillfredsställelse av användarens behov. För att lyckas med detta tror jag att det är betydelsefullt att lägga stor vikt vid igenkänningssystemets vokabulär. Att anpassa detta efter ändamål kan vara viktigt beroende på vad användaren vill få ut av samtalet med systemet. Eftersom vårt tal är så pass varierat och att så många ord låter lika så tror jag att en utveckling av system som har lättare att känna igen ord oavsett t.ex. brytning eller dialekt är något som är viktigt att satsa på. Också hastigheten på systemen verkar kunna vara av det långsammare slaget och eftersom man talar fortare än man skriver så kan säkerligen detta av användare upplevas som en frustrerande del av proceduren. Hur pass möjlig en sådan förbättring i dagsläget är har jag ingen vidare vetskap om men jag kan bara se till mina egna önskemål gällande användning av ett taligenkänningssystem och självklart hade jag velat att systemet skulle kunna användas utan vidare ansträngning. Även områden där taligenkänningen kanske inte är av lika betydande karaktär men ändå på många sätt förenklar olika uppgifter är intressanta att ta hänsyn till. Olika system som förenklar och automatiserar olika sorters tjänster via telefon tror jag, så länge de fungerar på ett tillfredställande sätt, är något som kan vara mycket uppskattat hos användare och vara något vi kommer att använda oss av allt mer. Kanske kommer taligenkänningssystem mer och mer att bli en del av vår vardag på samma sätt som mycket annat inom tekniken som ständigt förbättras och utvidgas, även om jag tror att det finns mycket kvar att utveckla gällande prestandan av systemen. Sammanfattningsvis så tror jag att taligenkänningssystem kommer att få en allt mer betydande roll för människan även om vi alla gånger inte kommer att reflektera så mycket över det. Själv kommer jag dock att fortsätta fascineras och förundras över tekniken som ligger bakom dessa system och bära med mig vetskapen om att tekniken kanske inte alltid är så självklar som vi många gånger tycks tro. 12
4. Referenser Glass, J. R. (2002) A probabilistic framework for segment-based speech recognition. Cambridge: MIT Laboratory for Computer Science, 200 Technology Square. Hidden Markov Model Hämtad från: http://en.wikipedia.org/wiki/hidden_markov_model (2008-09-02) Jurafsky, D. Martin, J. (2000) Speech and Language Processing: An Introduction to Natural Language Processing, Computational Linguistics, and Speech Recognition. New Jersey: Prentice-Hall, Inc. Rabiner, L. (1989) A Tutorial on Hidden Markov Models and Selected Applications in Speech Recognition. Hämtad från: http://www.cs.ubc.ca/~murphyk/bayes/rabiner.pdf (2008-09-02) Rabiner, L. Juang, B-H. (1993) Fundamentals of Speech Recognition. New Jersey: PTR Prentice-Hall, Inc. Russel, S. Norvig, P. (2003) Artificial Intelligence: A Modern Approach, second edition. New Jersey: Pearson Education, Inc. Schmandt, C. (1994) Voice Communication with Computers: Conversational Systems. New York: Van Nostrand Reinhold. Speech recognition Hämtad från: http://en.wikipedia.org/wiki/speech_recognition (2008-09-02) 13