Det lyder som dig!
Formål
Vi vil sammen undersøge, hvor godt og hvordan AI kan genkende personer ud fra ganske få sekunders lydklip. Konkret med brug af lydklip med dig og dine klassekammerater.
Undervejs vil du blive introduceret til mange af de centrale begreber om træning af de såkaldte neurale netværk, som AI gør brug af. Dette sker bl.a. med programmet Orange.
Den grimme ælling - oplæst af 4 forskellige personer
Inden vi kommer til jeres egne data, vil jeg gerne vise jer hele processen med brug af vores data. Til det formål har tre af mine kolleger og jeg alle læst den samme tekst op. Du kan høre lydfilerne fra vores oplæsning her: Malene, Lisbeth, Ege og Jan.
Da lydfilerne er 2-2,5 minutter lange, men vi vil arbejde med meget korte lydfiler, opdeles hver lydfil i sekvenser af 3 sekunder. Du kan høre disse små sekvenser her: korte sekvenser.
Neurale netværk
Neurale netværk arbejder ikke direkte på lyd, som mennesker gør - men på såkaldte features. I denne sammenhæng skal vi bruge oplæserens navn, et ID og en række tal, som beskriver frekvenser m.m. i lydfilen på en smart måde. Da det er fysik og ganske svært, vil vi ikke her for alvor gå i dybden, men måske du har haft eller får du noget i fysik om analyse af lyd og svingninger. Du får dog lige en kort introduktion til, hvad det er.
Det vi skal bruge hedder Mel-Frequency Cepstral Coefficients (MFCC), som er en metode, der bruges til at analysere og repræsentere lydsignaler, især tale og musik, ved at fange de vigtigste egenskaber ved lydsignalet, som det opfattes af det menneskelige øre. Mennesker opfatter lyd ikke-lineært med frekvens – vi er mere følsomme over for forskelle i lave frekvenser (f.eks. mellem 200 og 400 Hz) end i høje (f.eks. mellem 5000 og 5200 Hz). MFCC tager højde for dette ved at bruge en Mel-skala, som efterligner, hvordan øret opfatter frekvenser. Detaljerne er på SRP niveau, men hvis du har lyst til at vide mere, så kan du læse her: MFCC
Jeg har i forvejen lavet disse MFCC data for hver af de små lydsekvenser. Jeg har desuden delt op i træningsdata, som vi vil bruge til at træne et neuralt netværk, og testdata, som efterfølgende skal teste, hvor god modellen i det neurale netværk er blevet. Du kan se disse data her: MFCC data
Til træningsdata har jeg brugt 75% af lydsekvenserne for hver af de 4 oplæsere, mens de resterende 25% er anvendt til testdata.
Sammenligning med lineær regression
Det at træne et neuralt netværk minder om at lave lineær regression, som du kender.
I lineær regression har man en række punkter - det er træningsdata.
Hvert punkt består af et x-koordinat og et y-koordinat - x-koordinaten er en feature, og der er kun den ene feature, og y-koordinaten er target.
I lineær sammenhæng er modellen \(y=a\cdot x+b\) 1, og det gælder om at bestemme \(a\) og \(b\), så modellen for featureværdierne (\(x\)-koordinaterne) samlet set bedst muligt rammer targetværdierne (\(y\)-koordinaterne). I forhold til et neuralt netværk vil \(a\) og \(b\) kaldes for vægte.
1 Hvis det skal være helt korrekt er der også et normalfordelt støjled \(N(\mu, \sigma)\), men det undlader man som regel at tage med på gymnasieniveau
I et neuralt netværk er modellen betydeligt mere kompliceret og der er mange flere vægte end de 2 i lineær regression (i store netværk kan der være milliarder af vægte), men ideen er den samme. Man skal også i neurale netværk bestemme vægtene i modellen, så den for featureværdierne samlet set bedst muligt rammer targetværdierne.
I lineær regression skal modellen komme så tæt på targetværdien \(y\) for hver featureværdi \(x\). I vores tilfælde er det anderledes, da vi ikke skal tæt på en talværdi, men i stedet skal vælge mellem de 4 personer - dette kaldes for klassifikation. I lineær regression handler det således om, at linjen (modellen) kommer tæt på punkterne, mens det i klassifikation handler om, at modellen skal forudsige den rigtige oplæser for så mange som muligt af de små lydklip. Man taler derfor om klassifikationsnøjagtigheden (CA), som er andelen af korrekte forudsigelser. Så hvis CA=0.85, har modellen korrekt forudsagt 85% af targetværdierne og dermed 15% forkert.
Det neurale netværk i Orange
Nok snak om teori - vi skal have det afprøvet i praksis.
Vi vil anvende programmet Orange Data Mining til at træne og teste et neuralt netværk på MFCC data for lydfilerne.
Lav opgave 1 - hvis noget driller, kan du måske få hjælp ved at se denne video (video mangler).
Dermed er data klar i Orange, og modellen i det neurale netværk er faktisk også trænet. Men hvor god er modellen blevet?
Når vi før valgte at teste på træningsdata, er det på en måde lidt snyd. Det betyder, at vi først lader modellen træne på træningsdata, og derved tilpasse de mange vægte i modellen 2 så den passer bedst muligt til disse data - og så derefter at se, hvor godt modellen passer til præcis samme data.
2 Der er 124 vægte i dette neurale netværk, så det er betydeligt flere end i den lineære model, men stadig ikke mange, når man taler om neurale netværk
Vi bør i stedet træne modellen på træningsdata, for derefter at teste på nogle helt seperate data, som derfor kaldes for testdata. Derved “snyder” vi ikke længere, da modellen faktisk skal forudsige targetværdier ud fra featureværdier, den ikke brugte til at træne på.
Jeres egne data
Det bliver naturligvis først rigtigt interessant - og sværere for modellen - hvis der er flere end 4 oplæsere.
5 Filerne vil typisk være på 2-4 MB hver, men kan godt med nogle optagere være lavet i højere kvalitet, så filen er ca. 10 MB. Hvis filen er tæt på 100 MB, har man nok i stedet fået lavet en video, hvilket ikke var meningen. Små filer gør det næste skridt hurtigere.
4 Opgaven kan evt. være lavet hjemme i forvejen som en lektie, da det kan være upraktisk, hvis en hel klasse skal læse op samtidig!
3 I kan f.eks. vælge at læse forordet i jeres matematikbog, hvis det er passende i længde og indhold. Så slår I to fluer med ét smæk
6 Python er et meget anvendt programmeringssprog.
7 Colabs er en gratis side online, som kan bruges til Python scripts, så man ikke selv skal igennem en lidt besværlig installation af Python.
Som det næste skal I have opdelt lydfilerne i små sekvenser på 3 sekunder, og derefter lavet MFCC data til hver sekvens. Det bliver lidt teknisk, da I skal bruge et Python-script 6 i Googles Colab 7, men I kan heldigvis gøre det sammen. Hvis der blandt jer er en Python ekspert, kan I også bruge koden på en computer lokalt, hvilket er noget hurtigere.
(endnu en lille video, som ikke er lavet endnu)
Nu bliver det spændende, om Orange kan lave en model, som kan kende forskel på jeres stemmer, eller om nogen af jer lyder for ens.
Indtil nu har vi talt meget lidt om det neurale netværk. Vi vil på ingen måde gå i detaljer, men dog se en lille smule på det. I det neurale netværk er der i første omgang 2 skjulte lag med hver 5 neuroner. Uden at forstå detaljerne, kan vi gøre modellen mere kompliceret, og dermed måske bedre, ved at øge antal neuroner i hvert lag eller ved at lave flere skjulte lag.
Desuden kan vi også beslutte, hvor lang tid Orange må bruge på at justere de mange vægte i modellen, så den passer bedst muligt til vores data. Dette kaldes for iterationer. Flere iterationer tager længere tid, men vil også ofte give et bedre resultat.
Tillykke - du kender nu nogle af de begreber, som indgår i neurale net, der er en meget vigtig del af AI, og har en ide om, hvordan de anvendes i Orange.
Hvis du får lyst til at vide meget mere (og noget sværere), er følgende længere forløb et rigtigt godt sted at forsætte Kunstig neuron.