ASR3 Språkmodeller Taligenk änningsgrammatiker Talteknologi VT2006 Rebecca Jonson Litteratur Jurafsky &Martin: kap 6 (witten-bell och good-turing översiktligt, ej 6.5), sid 316, s 573-577577 Blomberg&Elenius: s16-17, 17, 19 Young: kap 5 Gen Gorrells artikel Ordsekvenser P(Ord) I naturliga språk finns det syntaktiska, semantiska och pragmatiska restriktioner som har effekten att vissa ordsekvenser är mer sannolika än andra Prediktion Glass är det bästa jag To be or not to.. And the Award goes to.. Prediktion Vi använder oss av ordprediktion i mänsklig igenkänning. Vi gissar oss till nästa ord innan det sagts Genom att titta på föregående ord får vi en ledtråd till vad som kan komma På så sätt kan vi känna igen trots att talaren säger fel (t ex yttrar ett icke existerande ord) I d like some dream and sugar, please En fock och tjet katt. Dessutom får vi en hjälp i tolkningen av den akustiska signalen genom att testa vår hypotes. Hypotesen bygger på djup kunskap om språket och världen. Ordföljdskunskap Lingvistisk kunskap i ASR är minimal För att modellera något som liknar mänsklig prediktion dvs vilka ord som brukar följa varann använder sig taligenkänningssystem av: statistiska språkmodeller (n-gram) taligenkänningsgrammatiker
Bayes regel i ASR Kombinerar akustisk och språklig kunskap P( Ord / Akustik P ( Akustik / Ord ) P ( Ord ) ) = P ( Akustik ) P(Ord/Akustik) är sannolikheten för en ordföljd givet den akustiska information. P(Akustik/Ord) är sannolikheten att ordföljden genererar den akustiska informationen och beräknas i ett träningsmaterial. (akustisk modell, HMM) P(Ord) ges av språkmodellen och är a priori sannolikheten för ordföljden (N-gram) oberoende av den observerade signalen. P(Akustik) kan ses som en konstant eftersom den är oberoende av ordföljden och kan ignoreras Statistiska Språkmodeller Statistical Language Models (SLMs) P(Ord): Sannolikheter för ordföljder Statistiska modeller som tränas med korpus Modellerar lokala dependenser Motsvarar P(Ord) i Bayes regel där Ord är en sekvens av ord. Inkluderar både syntaktisk, semantisk och pragmatisk info P(W)=? P(W k W 1,,W k-1 ) En ordsekvens sannolikhet fås genom att multiplicera sannolikheten av det första ordet med sannolikheten av det andra givet det första, multiplicerat med sannolikheten för det tredje givet det första och andra osv. N-gram är en förenkling av detta där ett följande ords sannolikhet endast är beroende av de N-1 tidigare orden. Unigram 1-gram Bigram 2-gram Trigram 3-gram Språkmodeller (LMs) Unigram= ett ords frekvens Bigram (ordpar) Nästa ords sannolikhet beräknas genom bigramssannolikheten och föregående ords sannolikhet: P(heter jag)= P(jag heter)/p(jag) Trigram (treordsföljd) Beror på 2 föregående orden: P(bio gå,på)=p(gå på bio)/p(gå på) P( W) P( W) n P( wi i= 1 n P( wi i= 1 wi w i 2 1), wi 1) P(ten pots fell over) Sannolikheten för frasen ovan med: Unigram P(ten) P(pots) P(fell) P(over) Bigram P(ten Start) P(pots ten) P(fell pots) P(over fell) Trigram P(ten Start) P(pots Start ten) P(fell ten pots) P(over pots fell) N-gram uppskattning N-gram beräknas genom frekvensberäkning ur en träningskorpus P(over fell)= C (fell over) / C(fell) Där C är antalet sekvenser som finns I korpusen
Exempel: Tremeningarskorpus till bigrammodell <s> John read her book </s> <s> I read a different book </s> <s> John read a book by Mulan </s> P(John <s>)= C(<s>,John)/C(<s>) = 2/3 P(read John)=C(John,read)/C(John)=2/2 P(a read)=c(read,a)/c(read)=2/3 P(book a)=c(a,book)/c(a)=1/2 P(</s> book)=c(book,</s>)/c(book)=2/3 P(John read a book) P(John <s>) * P(read John) * P(a read) * P(book a) * P(</s> book)= 0.148 P(Mulan read her book)= 0!!! För P(read Mulan) finns inte! Utdrag ur korpus (Berkely Restaurant Project) I m looking for Cantonese food I d like to eat dinner someplace nearby Tell me about Chez Panisse Can you give me a listing of the kinds of food that are available? I m looking for a good place to eat breakfast I definitely do not want to have cheap Chinese food. When is Caffe Venezia open during the day? I don t wanna walk more than ten minutes. Språkmodellexempel (Bigram) Beräkna sannolikheten av ett yttrande Eat on.16 Eat some.06 Eat lunch.06 Eat dinner.05 Eat at.04 Eat a.04 Eat British.001 Eat Chinese.03 Eat Indian.04 <s> I.25 <s> I m.02 I want.32 I don t.08 Want to.65 Want some.04 To eat.26 To spend.09 British food.60 British lunch.01 Sannolikheten för ett yttrande beräknas genom att multiplicera de ingående bigramsannolikheterna, dvs sannolikheten att I följer meningsstarten (<s>) gånger sannolikheten att Want följer I etc. P(I want to eat British food)= P(I <s>) P(Want I) P(to want) P(eat to) P(British eat) P(food British) =.25 *.32 *.65 *.26 *.002 *.60 =.000016 Normalt anges sannolikheterna i logaritmerad form för att undvika numeriskt underfl öde (pröva att multiplicera 0.000016 med 0.00025! Blir väldigt många decimaler att hålla reda på och om vi inte vill ha så många decimaler tappar vi värdet) Därför ser de ofta ut enligt följande= -1.715103, -3.529606, -0.325608 där högsta sannolikheten är -0325608 av dessa tre Hur genererar man språkmodeller? Input: Korpus (textmassa) Helst talspråkskorpus men även textkorpus Oftast en mening per rad, bara ord ej utrops och skiljetecken Inga stora bokstäver, stavfel bort, ta bort stakningar, repetitioner Ibland sätts meningsstart och slut med <s> och </s> Räknar sedan förekomster av ord i korpusen och förekomster av lokala ordföljder n-gram. Vad får man som resultat? Vokabulär Språkmodell (n-gram med sannolikheter) med sannolikheter för ordförekomster och ordsekvenser i den korpus man använt Korpus Hur mycket korpus krävs och vilken typ? Beror på språket det ska täcka men ju större desto bättre Men oftast behövs en stor korpus (miljoner ord) Helst en talspråkskorpus men kan mixas med skrift Ska helst vara anpassad till uppgiften (rätt genre) Ordsekvenser från Shakespeare kommer antagligen inte representera vanliga ordsekvenser i en tågbiljettbokningsdomän
Trigramsmodeller Det vanligaste i taligenkänning är att använda sig av trigramsmodeller En trigramsmodell innehåller trigram, bigram och unigram n-gram där n>3 har prövats men leder ofta inte till bättre resultat då fyrordsföljder oftast inte är så återkommande för att få bra sannolikheter Exempel från trigram-modell MP3- domänen ngram 1=374 ngram 2=3345 ngram 3=16425 \1-grams: -3.259434 irma -3.719205-3.259434 isaksson -3.719205-2.279764 ja -2.959741-3.25999 jackie -3.718688-1.455534 jag -5.268905-3.25999 jagad -3.795347 \2-grams: -1.594445 jag undrar 0-0.3344347 jag vill -3.751501-6.945933e-05 jagad av-3.627253-0.4609596 jaha </s> -4.475221 jajamen </s> \3-grams: -2.920642 skulle vilja välja -3.002028 skulle vilja ändra -3.506515 skulle vilja återuppta -3.227204 skulle vilja öka -0.8259719 <s> vilka album -0.76798 <s> vilka har -0.2770076 <s> vilka låtar -0.8259719 <s> vilka skivor -0.5412561 du vilka album -0.4832641 du vilka har -1.018377 du vilka låtar -0.5412561 du vilka skivor -0.5411798 fråga vilka album -0.4831879 fråga vilka har -1.018301 fråga vilka låtar Verktygslådor för SLM-generering CMU SLM toolkit (gratis) SRI SLM toolkit (gratis) Nuance CMU toolkit Tar som input en korpus och levererar filer där frekvenser för unigram, bigram och trigram har beräknats samt en språkmodell med sannolikheter för olika ordföljder Kan även användas för att få ut frekvenser av ord i en korpus (t ex jämföra vanligaste orden i talspråk vs skrift). nedbantad version av CMULM på nätet: QuickLM Bokstavssannolikheten är inte likfördelad utan beror på språkets fonotax. I det här exemplet tränade jag en språkmodell med en lista med spanska ord. Det blir dock för spanskt om man vill kunna bokstavera utländska ord eller förkortningar. Cambridge Cambrides Fick lägga till utländska ord och vanliga förkortningar i korpus för att kompensera för den extrema spanskheten och generera om Korpus för bokstavering <s> J U D O </s> <s> J U D O K A </s> <s> J U D Y </s> <s> J U E C E S </s> <s> J U E G A </s> <s> J U E G A N </s> <s> J U E G A S </s> <s> J U E G E </s> <s> J U E G O </s> <s> J U E G O S </s> <s> J U E G U E </s> <s> J U E G U E C I T O </s> <s> J U E G U E N </s> Språkmodeller i Nuance I Nuance används programmet train-slm för att generera språkmodeller: train-slm corpus CORPUS slm SLM Resultatet är två filer en XOUT.slm och en XOUT.psfg + info om hur många olika n-gram som fångats. Språkmodellen är tyvärr binär och man kan inte se sannolikheterna. Psfg-filen refereras sedan i en grammatik som kompileras och skickas till taligenkänningen. Detta får ni pröva på er Nuance Tutorial.
Turtle exempel Korpus: GO [direction] [number] [unit] ROTATE [direction] [number] [unit] Språket innehåller meningar såsom: GO FORWARD TEN METERS and ROTATE RIGHT FORTY FIVE DEGREES. Klasser Innehåller klasser som måste definieras: direction, number, unit i en klassfil [direction]: FORWARD BACKWARD RIGHT LEFT Input till CMUs QuickLM Korpus, en mening per rad, satsbrytare: <s> GO [direction] [number] [unit] </s> <s> ROTATE [direction] [number] [unit] </s> Klassdefinitionen Output Vokabulär Språkmodell Sparse data Sannolikheterna för ordföljder ges genom att räkna antal förekomster i en korpus Ju större korpus desto bättre värden Korpusar oftast för små för att fånga den rätta sannolikheten, många korrekta ordsekvensföljder saknas Möjliga trigram för en vokabulär är Unigram 3 (många möjliga kombinationer som kanske inte finns eller bara återfinns ngn gång i korpus) 1000 ord 1000000000 olika trigram Språket har en LNRE-distribution:large number of rare events class of distribution Vissa ord och sekvenser är extremt frekventa men majoriteten är extremt ovanliga. För att undvika noll-sannolikheter eller extremt låga sannolikheter för trigram används olika metoder för att kompensera för den här feldistribuerade sannolikheten som kallas smoothing-tekniker Smoothing Med smoothing försöker man fördela sannolikhetsmassan lite jämnare genom att ta från de rika och ge till de fattiga Icke-noll-sekvenser till noll-sekvenser Man fördelar helt enkelt om genom att ta bort lite sannolikhetsmassa på extremt höga värden (discounting) och lägga denna på lägre värden. Use the count of things you ve seen once to help estimate the count of things you ve never seen Metodersom finns är: Add-one smoothing (enkel men dålig metod) Witten-Bell discounting (mer komplex och bättre) Good-Turing Discounting (ännu mer komplex) Backoff-smoothing (bra metod tillsammans med goodturing)
Add-one smoothing Minns ni P(Mulan read a book)=0? P(read Mulan) hade noll sannolikhet vilket gav hela meningen noll sannolikhet. Men intuitivt borde ju mening ha ngn sannolikhet, eller? En enkel teknik är att räkna att alla bigram finns en gång extra i korpusen P(read Mulan)= C(Mulan read) + 1/(C(Mulan) +1*Voc) P(Mulan read a book)=0.000084 P(John read a book) =0.00035 Discounting Använder sig av förväntade frekvenser för att uppskatta n-gram värden. Hur många av sekvenserna har vi bara sett en gång? Om många så är det troligt att vi kommer stöta på nya sekvenser som vi inte sett förut. Hur mycket av sannolikhetsmassa bör vi reservera för osedda fall? Utgår från den fördelning som finns. Backoff (J&M 6.4) För att undvika noll-sannolikheter för bigram och trigram används modeller med unigram, bigram, trigram i kombination. Back-off = Om sannoliketen för N är noll så lutar vi oss tillbaka till sannolikheten på lägre n-gram-sannolikheter dvs N-1. P(bigram) = Backoffvärde * P(unigram) P(read Mulan) = Backoff * P(read) P(trigram) = Backoffvärde * P(bigram) P(book read a)=backoff * P(book a) -1.3802 ROTATE -0.2632 P(Rotate one) -0.2632 * -1,3802= -0.3633 För att distribution av sannolikhet ska stämma måste vi också ta bort sannolikhetsmassa från trigram med hög sannolikhet (discounting) En av de bättre metoderna! Fördelar med trigrammodeller Verkar fånga väldigt mycket information på ett enkelt sätt (syntax, semantik, pragmatik) Närmaste kontexten har stort inflytande Fungerar förvånansvärt bra Enkelt att bygga upp och generera, behöver bara en korpus, inga regler eller grammatik. Fungerar bra för språk med strikt ordföljd Vi kan modellera disfluenser genom att ha med dem i korpus. Problem med trigrammodeller Databrist Vokabulär med N ord ger N 3 möjliga trigram Många trigram kommer inte finnas i träningsdata eller få ggr Unknown words Svårt att hitta rätt sorts korpus (WOZ, talspråkskorpus) Tar inte hänsyn till långdistansdependenser Vissa ord triggar andra Jag tänkte gå bio och skulle vilja veta vad biljetterna kostar Fungerar sämre för språk med friare ordföljd Svårt att täcka språk med mycket böjningar (franska) Språkmodeller med klasser Ett annat sätt att kompensera för databrist är att samla likvärdiga ord i klasser och ge dem samma sannolikhet. Kan vara POS-klasser (ordklasser) eller andra kategorier. Ex: Alla telefonnummer skulle vara likvärdiga. Jag vill åka till Borlänge lika sannolikt som Jag vill åka till Gävle. I Berkelykorpusen skulle alla restauranger vara likvärdiga. CIUDAD = Paris, Madrid, Londres, Milan etc. 1-gram: -3.529606 CIUDAD -1.719005 3-gram: -1.715103 vamos a CIUDAD -1.839484 estoy en CIUDAD -9.883758 estoy por CIUDAD -0.247359 estoy por aquí
Klassmodeller I want to go to Göteborg I want to go to Stockholm I m travelling to Malmö from Gävle Vi taggar korpusen med de klasser vi valt så att alla ord som ingår I en klass ersätts av klassens namn I want to go to CITY I want to go to CITY I m travelling to CITY from CITY Vi definierar vilka ord som varje klass innefattar. Sekvensen to CITY kommer nu få sekvenserna to Gbg, to Sthlm och to Malmö s samlade frekvenser. Göteborg och Stockholm kommer vara lika sannolika i modellen. Klassmodeller i Nuance I Nuance kan vi klasstagga en korpus genom att: Skapa en taggningsgrammatik där vi definierar klasser och dess medlemmar Tagga korpusen med programmet: nl-tag-tool Som resultat får vi en klasstaggad korpusen som vi kan använda för att träna en klassspråkmodell Entropi Entropi är ett informationsteoretiskt mått som i när det gäller språk utgår från sannolikheter för ordsekvenser Genomsnittligt överraskningsvärde För att utvärdera språkmodeller använder vi oss av måttet perplexitet som är relaterat till entropi: Perplexitet = 2 entropi eller 2 H Entropi=H(Language)= -? P(W) 2 log(p(w)) Vad är Perplexitet? Bedömning av uppgiftens svårighet på lingvistisk nivå Perplexitet ger ett mått på det sannolikhetsviktade genomsnittliga antalet ord som kan följa efter ett givet ord. Exempel: För siffersekvenser är Perplexiteten=10 om alla siffror är lika sannolika i alla positioner. Om så inte är fallet sjunker perplexiteten. Utvärdering av språkmodeller Utvärdering av språkmodellen hur väl fångar språkmodellen språket den beskriver? Hur bra är språkmodellen på att predicera kommande ord? Jämför olika språkmodeller med varann. Vilken är bäst? Perplexitet ger ett mått på det genomsnittliga antalet ord som kan följa efter ett givet ord (förgreningsfaktor) i det givna språket (eller i språkmodellen) Perplexitet forts. Exempel: Sifferigenkänning Perplexiteten=10 om alla siffror är lika sannolika i alla positioner. Om så inte är fallet sjunker perplexiteten. Normal perplexitet för dagens system är 45-160 med trigrammodeller Efter varje ordgräns kan 45-160 olika ord följa Mänsklig perplexitetär ofta 1/3 av ett systems (Lippman) Perplexitet tar inte hänsyn till akustisk likhet mellan ord t ex att uppgiften är svårare om många ord är akustiskt lika (t ex känna igen alfabetet)
Perplexitet med våra verktygslådor Taligenkänningsgrammatiker Testa modellen mot en testkorpus (10% av träningskorpusens storlek) som inte använts för att generera korpusen Nuance Process-slm SLM ppl-corpus TESTCORPUS CMU Evallm arpa SLM.arpa >evallm: perplexity text TESTCORPUS Resultat presenteras som perplexitet och som bits. Ju lägre desto bättre modell! Taligenkänningsgrammatiker Istället för språkmodeller används ofta kontextfria grammatiker i taligenkänning. De används i dialogsystem för att fånga vilka ord som kan följa varandra i en mindre domän där grammatikens täckning oftast är väldigt begränsad. P(W) är 1 eller 0 beroende på om sekvensen accepteras av grammatiken eller inte Accepterar bara det som grammatiken beskriver Ingen korpus behövs. Utan grammatiken skrivs för hand. Utvecklaren försöker förutse vad användaren kommer säga. Beskriver ordföljder och fångar syntax, semantik och pragmatik Kan fånga längre dependenser Används för mindre domänspecifika uppgifter Nuance Grammatiksyntax (GSL) Symboler med Stora bokstäver motsvarar grammatiker: City Symboler med Små bokstäver motsvarar ord: göteborg Ur Nuance-manualen: The symbols A, B, C, and D in the following table denote a grammar or word name. ( ) concatenation (A B C... D) A and B and C and... D (in that order) [ ] disjunction [A B C... D] One of A or B or C or... D? optional?a A is optional + positive closure +A One or more repetitions of A * kleene closure *A Zero or more repetitions of A GSL-uttryck och det de beskriver [morning afternoon evening] morning, afternoon, evening (good [morning afternoon evening]) good morning, good afternoon, good evening (?good [morning afternoon evening]) good morning, good afternoon, good evening, morning, afternoon, evening (thanks +very much) thanks very much, thanks very very much, and so on (thanks *very much) thanks much, thanks very much, thanks very very much, and so on Exempelgrammatik.Top [Greeting Goodbyes Thanxs] Greeting [hejsan (hej?hopp) tjaba] Goodbyes [hejdå (hej svejs) (vi ses?senare) (hej hej)] Thanx [ (+tack (tack så *jätte mycket))]
Talgigenkänningsgrammatiker (SRG) vs Språkmodeller (SLM) (G.Gorrelll) Taligenkänningsgrammatiker ger bättre resultat när användaren följer grammatiken. Språkmodeller är mer robusta mot yttranden som inte följer grammatiken. De är mer flexibla och inte lika restriktiva. Språkmodeller bättre för domän-oberoende applikationer och större domäner. SLM är bättre när många förstagångsanvändare ska använda systemet (Na ïve users) Grammatiker är bättre när användarna känner till systemet och vad som kan sägas. (Expert users) SLM:er fångar inte långdepenser som grammatiker gör. Utvecklingstid SRG-SLM Grammatiker går snabbare att utveckla men svårt att bygga en komplett grammatik och förutse vad användarna kommer att säga. Tar inte heller hänsyn till disfluenser. Kan ta tid att skriva en bra grammatik SLM kräver insamling av stor korpus som representerar språket i domänen. När man väl har en korpus är det straightforward. I dagens kommersiella system används både och beroende på vilken typ av applikation och vilken typ av miljö. Hybrida approacher har också föreslagits.