TTT4185 Taleteknologi Semesteroppgave 2 1 Introduksjon Denne semesteroppgaven er en praktisk øvelse i å lage en siffer-gjenkjenner basert på helordsmodeller ved hjelp av programpakken for talegjenkjenning Hidden Markov Model Toolkit (HTK) og skriptspråket Python. HTK er laget for Unix-baserte operativsystemer, og basiskunnskaper i Unix/Linux vil derfor være nødvendig. Trening og test av gjenkjenneren vil bli basert på talldelen av den norske taledatabasen Speech- Dat. Denne databasen ble tatt opp over telefonlinje med punktprøvingsfrekvens 8 khz. Zip filen semoppg2.zip inneholder eksempler på Python-skripter for egenskapsuttrekning, trening og testing, og kan lastes ned fra fagets hjemmeside. Disse skriptene kan relativt enkelt modifiseres til å lage en vilkårlig gjenkjenner. 2 Læringsmål Målet med oppgaven er å illustrere hvordan en talegjenkjenner designes i praksis og knytte sammen de teoretiske kunnskapene som presenteres i forelesningene til en enkel applikasjon. Det forventes at du tilegner deg basiskunnskaper i Unix og Python og setter deg inn i HTK-funksjonene som brukes for design av gjenkjennere baserte på helordsmodeller. Det forventes videre at du forstår hvordan disse funksjonene henger sammen med teorien. 3 Forberedelse For å kunne gjennomføre semesteroppgaven er det nødvendig å installere HTK og Python (evt. annet skriptspråk) samt sette seg inn i basisfunksjonalitet i HTK og gjøre seg kjent med eksempelskriptene som finnes på hjemmesiden. 1
3.1 HTK 3.1.1 Installasjon HTK kan lastes ned gratis fra http://htk.eng.cam.ac.uk/download.shtml under forutsetning at du registrerer deg og godtar lisensvilkårene. Last ned HTK 3.4 og pakk ut zip filen. Windows Selv om det er mulig å installere HTK i Windows (med Visual Studio), anbefales det å installere Cygwin, som er en emulering av et Linux-basert operativsystem som kan kjøre under Windows, og å installere og bruke HTK i Cygwin. Installer Cygwin fra www.cygwin.com Bruk standard-oppsett med følgende tillegg Få med gcc og g++ (verktøy for kompilering og lenking av C og C++ programmer) Få med Python og Perl Følg installasjonsinstruksen for Unix/Linux/OSX i README-fila som er i rotkatalogen til HTKdistribusjonen, men ved konfigurasjonen, bruk kommandoen:./configure disable-hslab (NB! 2 bindestreker før disable...) Ta kontakt med Torbjørn Svendsen hvis det er problemer. Unix/Linux/OSX Installering av HTK gjøres enkelt ved noen få steg. En beskrivelse av installeringsprosedyren finner du her: http://htk.eng.cam.ac.uk/docs/inst-nix.shtml. Dersom du har OSX, pass på at du har XCode installert (kan lastes ned gratis her: http://developer.apple.com/tools/xcode/, men finnes også på en av installasjonsfilene som hører til OSX). Dersom du får en feilmelding om at enkelte mapper ikke eksisterer, oppretter du disse f.eks med UNIX kommandoen mkdir dirname. 3.1.2 Grunnleggende HTK Du vil ha bruk for HTK-dokumentasjon som kan lastes ned fra hjemmesiden (HTKBook). Kapitlene 1.1-1.5 gir en fin oppsummering av nødvendig teori, mens kapitlene 2.2-2.3 gir en oversikt over programpakken. Beskrivelse av alle programmene i alfabetisk rekkefølge finnes i kapittel 17. Andre deler av boka gir mer detaljert beskrivelse. For eksperimenter med forskjellige typer egenskapsuttrekning er det nyttig å lese kapittler 5.1-5.4 og 5.6-5.9. For eksperimenter med modellstrukturen bør man lese kapittel 7.2, for live gjenkjenning, er kapitler 3.5 og 5.12 nyttige. Det anbefales å gjøre tutorialen som er beskrevet i kapittel 3 i HTK dokumentasjonen. I denne tutorialen beskriver steg for steg hvordan en genererer og tester en talegjenkjenner. Her blir du kjent 2
med metodene som benyttes senere i denne semesteroppgaven. Tutorialen er ikke spesielt vanskelig eller tidkrevende. HTK kjøres fra kommandolinjen og hver metode har et sett med obligatoriske og et sett med valgfrie parametere. De valgfrie parameterene har alltid et minustegn foran seg for å skille dem fra de obligatoriske. Et eksempel på hvordan en kan kjøre en fiktiv HTK-metode HFoo HFoo -T 1 -C config -f 34.3 -a -s minfil fil1 fil2 Alle valgfrie parametere som har stor bokstav har den samme betydningen for alle metoder i HTK. F.eks -T kontrollerer hvor mye output som skal gies og -C leser en spesifisert konfigurasjonsfil(her config). Ellers har denne metoden 3 valgfrie parametre og 2 obligatoriske, fil1 og fil2. 3.1.3 HTK konfigurasjonsfil Konfigurasjonsfilen kan brukes til å skreddersy HTK miljøet etter behov. Filen består av et sett med parameter-verdi par og kan spesifiseres med -C alternativet i de fleste HTK-metodene (se eksempelet over). I denne oppgaven kan parameterene TARGETKIND, NUMCEPS, ENORMALISE og LPCORDER modifiseres for å gjennomføre de ulike deloppgavene. For å finne de rette verdiene for disse parameterene anbefales det å søke i HTK boken. TARGETKIND: Definerer hvilken type egenskapsvektorer som skal benyttes. NUMCEPS: Definerer hvor mange kepstral-koeffisienter som skal benyttes. ENORMALISE: Dersom denne verdien er satt til T (True) så utføres energinormalisering på lydfilene. LPCORDER: Definerer antall LPC koeffisienter. 3.1.4 HTK-metoder benyttet i semesteroppgave 2 En kort beskrivelse av HTK kommandoene som benyttes i semesteroppgaven er gitt under. Dersom du ønsker mer informasjon om de ulike kommandoene se kapittel 17 i HTK boken. HCopy: Metode som kopierer en eller flere datafiler til en output fil i HTK format. HCopy brukes ofte til å konvertere filer til HTK format, segmentere eller koble filer sammen, og for å parametrisere resultatet. HList: Denne metoden lister ut innholdet av alle filer som har et format støttet av HTK. Brukes til å se på innholdet av talefiler og til å bekrefte at konverteringer er blitt korrekt utført. HCompV: Oppdaterer verdiene for varians og middelverdi basert på observasjonssekvensene i treningssettet. 3
HERest: Brukes i trening av HMM modellene. Utfører embedded Baum-Welch re-estimering av HMM parametere ved hjelp av et sett med observasjonssekvenser. HHed: Laster inn et sett med HMM-er og utfører et sett med spesifiserte operasjoner på modellene og lagrer de transformerte HMM modellene. Typiske operasjoner kan være endre antall blandingskomponenter, endre varighetsparametere, endre transisjonsmatriser ol. HParse: Genererer et ordnettverk fra en grammatikkfil. Dette ordnettverket benyttes videre i gjenkjenningen. HVite: Denne metoden er en Viterbi gjenkjenner som matcher en talefil med et nettverk av HMM-er og returnere en transkripsjon. HResults: HTK s analyseverktøy. Leser inn det gjenkjente resultatet og sammenlikner det med den korresponderende korrekte transkripsjonen. Returnerer statistikk for et sett med filer. 3.2 Python Installasjon Siste versjon av Python kan lastes ned gratis fra: http://www.python.org/download/releases/3.1.2. Grunnleggende Python Sett deg inn i de nødvendige Python-kommandoene i eksempelskriptene. Du finner mye informasjon på www.python.org hvor du også kan søke etter kommandoer du er usikker på. Dersom du trenger en grunnleggende innføring i Python finner du en god beginners guide her: http://wiki.python.org/moin/beginnersguide. 3.3 Filer fra fagets hjemmeside Kopier semoppg2.zip fra fagets hjemmeside og pakk den ut (bruk f.eks. unzip semoppg2.zip -d semoppg2). Pakken inneholder: Skriptfiler semoppg2 inneholder tre python skript som utfører egenskapsuttrekking, trening av akustiske modeller og testing av modellene. featureextraction.py : Utfører egenskapsuttrekning av filer spesifisert i fillisten i variablen files. Metoden makefrontendconfig lagrer konfigurasjonsparametere som f.eks hvilken type egenskapsvektorer og hvilken vindustørrelse som skal benyttes i filen config. Dersom det er ønskelig å endre på disse konfigurasjonsparameterene kan disse endres direkte i denne metoden. Denne konfigurasjonsfilen brukes videre i egenskapsutrekkingen som gjøres av HTK-metoden HCopy og lagres i mappen mfcc. 4
train.py Utfører trening av akustiske modeller med data generert fra egenskapsuttrekkingen (filer spesifisert i trainset.scp). Metoden MakeTrainingConfig generer en konfigurasjonsfil for treningen. Deretter genereres initielle modeller vha. HTK-metoden HInit som lagres i mappen hmm0. Disse modellene re-estimeres vha. HTK-metoden HRest. Deretter vil antallet blandingskomponenter økes med en faktor på 4 til maksimalt antall komponenter nås. Denne verdien kan spesifiseres i variabelen nummix. HTK-metoden HHEd benyttes for å øke antall blandingskomponenter. Modellene reestimeres så igjen. test.py Evaluerer av gjenkjennerens ytelse. Dette skriptet benytter modellene generert av treningsskriptet, leksikonet lexicon.dct og gramatikken grammar til å gjenkjenne filer spesifisert i et testsett spesifisert i variabelen testset. Metoden MakeConfig setter konfigurasjonsvariabler for gjenkjenneren. HTK-metoden HParse konverterer grammatikkfilen til HTK format som igjen benyttes av gjenkjenneren som i HTK er metoden HVite. Resultatet fra denne metoden lagres i filen result/out.mlf. Resultatet sammenliknes så med transkripsjonene vha. metoden HResults. Resultatet lagres i filen result/result.res. makeproto.py Dette skriptet generer en ny protomodell. Kjør python makeproto.py -h for mer informasjon om bruk av dette skriptet. Fillister trainset.scp : Inneholder filer med sifferstrenger som brukes for trening av akustiske modeller. testset1.scp og testset2.scp inneholder filer med hhv. ett siffer og ti sifre for evaluering av gjenkjennerens ytelse. Database Hovedkatalog for databasen. Databasen må pakkes ut og legges i samme katalog som eksempelskriptene da fillistene inneholder filnavn i forhold til denne katalogen. Filene i databasen er lagret i 8 khz, 16 bit, lineær PCM format uten header. Du kan høre på dem med play -sw -t raw -r 8000 filnavn. Transkripsjonfiler MLF filene train.mlf, test1.mlf og test2.mlf inneholder transkripsjoner for filene i fillistene beskrevet ovenfor. Filen train.mlf inneholder i tillegg informasjon om start- og sluttidspunkt for alle sifre i en sifferstreng. Denne informasjonen er generert automatisk og er derfor ikke helt korrekt. Prototypmodeller En protomodell beskriver topologien til HMM-modellene som skal trenes. I denne semesteroppgaven finner du et eksempel på en slik protomodell i lib/proto10. Denne protomodellen beskriver en 10-5
tilstandsmodell basert på MFCC 0 D A egenskaper med 12 kepstralkoeffisienter. I denne oppgaven er det nødvendig å endre denne topologien når antall tilstander, kepstralkoeffisienter eller type egenskapsvektorer endres. Dette gjøres med python-skriptet makeproto.py beskrevet over. Modelliste En modelliste inneholder en liste over de modellene som skal genereres. I en helordsgjenkjenner vil denne listen bestå av ord. I denne oppgaven finner du modellisten i lib/models.list Uttaleordbok En hver talegjenkjenner trenger et leksikon. I denne oppgaven finner du leksikonet her lib/lexicon.dct Gramatikk Grammatikken beskriver hvilke ord som kan følge etter et annet ord. Filen lib/grammar kan benyttes for gjenkjenning av et siffer med stillhet foran og bak. 4 Gjennomføring 1. Utfør egenskapsuttrekning, tren og test gjenkjenneren ved hjelp av eksempelskriptene. 2. Utfør minst et eksperiment fra hver kategori nedenfor (gjør nødvendige modifikasjoner i skriptene): Egenskapsuttrekning: Sammenlign forskjellige typer egenskapsvektorer (MFCC, LPCC, LPC, PLP). Finn effekten av bruk av dynamiske parametre. Finn effekten av bruk av energi eller c 0 i egenskapsvektoren. Varier antall cepstrelparametre i MFCC. Modellstruktur: Gramatikk: Varier antall tilstander i siffermodellene. Varier antall blandingskomponenter i siffermodellene. Gjenkjenning av sifferstrenger når antall sifre er spesifisert (testset2.scp). Gjenkjenning av sifferstrenger når antall siffer er ukjent (testset2.scp, testset1.scp). 6
3. Frivillig oppgave: Live gjennkjenning Test ut gjenkjenner i live modus med dine egne ytringer. Bruk trykk for å snakke heller enn endepunktdeteksjon (les slutten av kap. 5.12.). Hvor godt fungerer gjenkjenneren? Merk: Live gjenkjenning i HTK er kun støttet for Windows og Linux. 4. Skriv en lab-rapport som inneholder følgende: Hvilke eksperimenter som er valgt. Presentasjon av resultater. Diskusjon av resultater. Hvordan stemmer resultatene med det du forventet? Forklar. Dine synspunkter om semesteroppgaven. 7