NUANCE TUTORIAL TALTEKNOLOGI KURSEN VT2006 Labkonstruktör: Rebecca Jonson Labhandledare: Håkan Burden Laboration 3 börjar med en Nuance-tutorial som först och främst går ut på att lära sig lite hur Nuance fungerar och vilka program som finns. Större delen av den här tutorial innebär att utveckla en språkmodell för klockslag med de verktyg taligenkänningssystemet Nuance ger för att på så sätt få kännedom om Nuances vanligaste kommandon och om hur man skriver och utvärderar grammatiker och språkmodeller. Som utgångspunkt har labgrupperna en korpus med klockslag (som vi kan tacka Karin Cavallin för ) samt inspelningar av klockslag. Alla fil/regel-namn som innehåller sekvensen NAMN i LabPM står för ett namn som ni själva sätter till filen, regeln eller biblioteket. Vi kommer ha flera processer igång samtidigt under labben så se till att ha flera terminalfönster igång. DEL 1 Skapa en Språkmodell med Nuance 1. Börja med att hämta korpusen från labkontot: cp../../klockkorpus. 2. Ta en titt på korpusen 3. Sätt igång Nuance license manager i ett nytt terminalfönster a. $NUANCE/run_nlm 4. Gör en språkmodell med Nuance. a. Ställ er i biblioteket med filen klockkorpus b. Skriv train-slm -help och titta på de alternativ som finns, discounting etc. c. Programmet generar default en trigrammodell med good-turing-discounting. d. Skriv: train-slm corpus klockkorpus slm ModellNAMN e. Vad ger programmet för output? Hur många trigram fick ni? f. Som resultat får ni en pfsg-fil och en slm-fil (NAMN.pfsg och NAMN.slm) som är er språkmodell i två olika format. 5. Skriv en grammatik som inkluderar språkmodellen a. Skapa en fil med filtyp.grammar t ex GramNAMN.grammar b. Skriv följande i filen där namnet på regeln måste vara med stor bokstav:.top RegelNamn RegelNamn:slm ModellNAMN.pfsg =[] 6. Kompilera grammatiken ni skapat (GramNAMN.grammar) a. Skriv: nuance-compile och ta en koll på vad det här kommandot gör b. Skriv: nuance-compile GramNAMN.grammar Swedish o PaketNAMN auto_pron dont_flatten i. Swedish står för det val av akustiska modeller som ska användas ii. auto_pron skapar uttal för de ord som inte finns i Nuances uttalslexikon (ni kan ta en titt på dessa i filen X.missing som skapas)
c. Som resultat av nuance-compile får ni flera olika filer i biblioteket PaketNAMN. Kolla så att det skapats en hög filer där. När kompilering går fel säger Nuance till och om det är något fel i grammatiken brukar det står Rule:NR som hänvisar till en rad i grammatiken. Om det klagar på NL interpretation så är det bara att förbise (eftersom vi inte vill köra någon tolkning). d. Uttal med Nuance i. Med kommandot pronounce kan ni kolla uttalet för ett ord eller en fras i språkpaketen, pröva lite olika fraser och ord. 1. pronounce Swedish tjugo 2. pronounce Swedish fem minuter över tio 3. pronounce English.America enough 7. Sätt igång taligenkänningsservern i ett nytt terminalfönster a. Skriv: recserver package PaketNAMN lm.addresses=localhost 8. Sätt igång applikationen JSCApp för att köra taligenkänning i ett nytt terminalfönster a. Skriv: java JSCApp package PaketNAMN lm.addresses=localhost b. Ni får då upp en javaapplikation c. Se till att ert headset är inkopplat och tryck på recognize och säg ett klockslag (se till att micen sitter rätt och är påslaget med lagom volym) d. Låt alla i gruppen pröva olika klockslag och se hur taligenkänningen fungerar e. Finns det några klockslag som den inte klarar? f. Pröva också följande fraser: i. 27 minuter i 12 ii. 3 minuter över halv 12 iii. Kvart över fem iv. 15 minuter över fem 9. Ta fram perplexiteten på er språkmodell med process-slm a. Kopiera filen klocktest till ert labbkonto: i. cp../../klocktest. b. Titta på filen klocktest: det är en fil med klockslagsfraser c. process-slm ModellNAMN -ppl-corpus klocktest d. Vad får ni för värden? Vad betyder de? DEL 2 Skapa en klassbaserad språkmodell Nu när ni har sett hur taligenkänning med Nuance går till, vet vilka steg som tas för skapa en språkmodell utifrån en korpus och sedan sett hur man använder den språkmodellen i taligenkänningen, är tanken att ni ska modifiera den korpus ni har för att skapa en språkmodell som fungerar lite bättre än den ni har. Som ni kanske märkte fungerade inte en del klockslag. Detta beror på att de inte finns med i korpusen. Korpusen täcker inte allt. Det finns två sätt att lägga till saker: direkt i korpusen eller så skapar man klasser och lägger till definitioner i en klass. 1. Vi väljer att lägga till en klass a. Kvart finns inte med i korpusen, bara motsvarigheten 15 minuter b. Vi skapar klassen Kvart (med stor bokstav) som motsvarar 15 minuter samt kvart i en taggningsgrammatik TagGramNAMN.tagging.grammar:
.Tagging Kvart Kvart [ kvart (femton minuter)] c. Skapa ett taggningspaket med: 1. nuance-compile TagGramNAMN.tagging.grammar Swedish 2. vi får biblioteket TagGramNAMN.tagging som output d. Tagga korpusen med nl-tag-tool med klassen Kvart: 1. nl-tag-tool -package TagGramNAMN.tagging - grammar.tagging -no_output <klockkorpus >klockkorpus.tagged 2. Vi får filen klockkorpus.tagged 3. Öppna den och sök på Kvart e. Träna upp en ny språkmodell med den taggade korpusen 1. train-slm -corpus klockkorpus.tagged -slm TAGLMNAMN f. Skapa en ny grammatik TagNAMN.grammar som inkluderar den taggade grammatiken TagGramNAMN.tagging.grammar.Top Klockslag Klockslag:slm "TAGLMNAMN.pfsg"=[ ] #include "TagGramNAMN.tagging.grammar" g. Kompilera grammatiken: 1. nuance-compile TagNAMN.grammar Swedish o TAGPAKETNAMN -auto_pron -dont_flatten 2. Innan vi kör igång en ny igenkänning se till att ni fortfarande har licensmanagern igång och stäng den gamla recservern samt javaapplikationen JSCApp. 3. Kör igång recserver med det nya paketet (motsv. TAGPAKETNAMN) och kör sedan igång JSCApp med följande kommando (se till att ni inte står i paketbiblioteket): a. java JSCApp package TAGPAKETNAMN lm.addresses=localhost rec.numnbest=3 rec.donbest=true b. Pröva taligenkänningen för er nya modell, ni kommer nu få en n-bästa lista från taligenkänningen när den känner igen. Gör gui:n lite större och om ni tar expand på mappen där ni tidigare fick igenkänningen kommer ni nu se flera alternativ med olika konfidenstal (som representerar taligenkänningens konfidens på dess val). c. Pröva de klockslag ni lagt till, t ex kvart i fem 4. Ta fram perplexiteten på er nya språkmodell med process-slm med samma testset som innan a. process-slm TAGLMNAMN -ppl-corpus klocktest b. Vad får ni för värden nu? Jämför med värden för modellen i del1. DEL 3 Skapa talgrammatiker med Nuance Nu är tanken att ni ska fortsätta att utvidga språkmodellen till att klara av inte bara klockslag utan hela svar på frågor såsom: Vad är klockan?, När vill du åka? Vilken tid vill du spela in
filmen? När börjar mötet? D v s vi tänker oss att den ska användas som en delspråkmodell i olika dialogsystem (t ex videodomänen, resebyrå, väckarklocka, kalender). Detta gör vi genom att skapa en grammatik som anropar språkmodellen. 1. Skapa en ny grammatik KlockslagNAMN.grammar som anropar Klockslagsspråkmodellen enligt följande:.top TalaOmTidREGELNAMN TalaOmTidREGELNAMN [ (klockan Klockslag)] Klockslag:slm "TAGLMNAMN.pfsg" #include "TagGramNAMN.tagging.grammar" 2. Den här grammatiken har en regel som definieras av exempeluttrycket klockan Klockslag. Grammatiken anropar vår taggade språkmodell samt vår taggningsgrammatik. 3. Nu kan man säga saker som klockan fem. Fundera ut och lägg till fler TalaOmTidyttranden än klockan KLOCKSLAG som en användare kan tänkas svara till ovannämnda frågor (enligt NuanceSyntaxen). 4. Kompilera grammatiken med nuance-compile (som i del 1 uppg 6b med dont_flatten) till ett nytt igenkänningspaket och testa igenkänning av era tillagda TalaOmTid-fraser, starta JCSApp med paketet och n-bästa parametrar. (OBS! glöm inte stänga er gamla recserver och JSCApp, kör igång dem på nytt med det nya paketet och se till att run_nlm fortfarande är igång). 5. Testa om de yttranden ni tänkte på när ni utvidgade grammatiken verkligen fungerar genom att parsa dem. a. parse-tool package PAKETNAMN grammar.top b. skriv in de yttranden ni tror grammatiken bör kunna parsa eller inte Del 4 Utvärdering av en talgrammatik eller språkmodell Taligenkänning utvärderas genom att testa systemet med inspelningar och dess motsvarande transkriberingar. Taligenkänningens resultat jämförs mot transkriberingarna och antal ordfel som begåtts beräknas. Nuance använder sig av kommandot batchrec för att göra detta. Vi behöver en talgrammatik eller en språkmodell konverterat till ett taligenkänningspaket samt inspelningar av yttranden och transkriptioner för varje yttrande. På kurskontot finns filerna klocktestset och klocktransset som motsvarar dessa. Utvärdera era språkmodellspaket (SLM eller KLASSSLM). Kopiera från kurskontot filerna klocktestset och klocktransset: cp../../klockt*. Hämta också biblioteket klockyttranden därifrån som innehåller ljudfiler med klockyttranden. cp r../../klockyttranden. Nu har ni ett antal inspelade yttranden samt dess transkriptioner till godo. Utvärdering görs med kommandot batchrec. 1. Ta en titt på filerna klocktestset och klocktransset.
2. batchrec package PAKETNAMN testset klocktestset transcriptions klocktransset rec.donbest=true rec.numnbest=10 rec.confidencerejectionthreshold=0 3. Vad får ni för word error rate (WER) för de olika filerna samt totalt? 4. Jämför paketen från Del 1 och Del2 5. Vad verkar gå fel? Finns rätt kandidat längre ned i N-Bästa Listan? Del 5 Spela in egna filer Med javaprogrammet CorpusRecorder (@David Hjelm) kan ni pröva att spela in egna ljudfiler som kan användas för testning. Skapa först en fil med yttranden som ni vill testa och skriv ner ett yttrande per rad (små bokstäver, inga siffror): klockan fem klockan sju sju Sätt sedan igång CorpusRecorder med er nyskapta korpus (CORPUS) och ert namn.../../spelain corpus CORPUS speaker ERTNAMN Nu kommer ni se de yttranden ni har skrivit ner på skärmen och kan spela in dem och lyssna på dem. Spela in allihop och testa sedan taligenkänningen för något av era paket som i Del 4 med den testset-fil som skapas från CorpusRecorder. Verkar den känna igen er?