Tal, ljud och lite text

I lektionerna 14 och 15 tittar vi på en teknik för att känna igen talade ord och även ljud i allmänhet.

Först en minimal app för talkommandon, sedan en större mera avancerad app och till slut tittar vi på Google Översätt.

14) Ljud - spektrogram

Talade kommandon kan användas för att till exempel styra en smart högtalare.

Ett CNN kan tränas för att känna igen talkommandon (enstaka ord).

Det kan kanske verka konstigt men ljudet (från det talade ordet) översätts till en bild.

Bilden kan sedan kännas igen på samma sätt som vi har sett för vanliga bilder.

När du säger ett ord tas ljudet upp av mikrofonen och digitaliseras av ljudkretsarna.

Webbläsaren kommer åt det digitaliserade ljudet som kan ges (efter diverse behandling) till appens modell.

Ljudet kan ses som en bild, ett spektrogram.

Appen Command

Command är en minimal app för röstkommandon. Det finns en video med en demo av appen överst på sidan.

Appen finns på https://kurser.gubboit.se/command/

Starta appen och låt den använda mikrofonen.

Kolla att det indikeras i fliken till appen att mikrofonen används.

Eftersom appen är mycket enkel öppna Javascript-konsolen (F12) för att se resultaten.

Säg zero och se om appen uppfattat kommandot rätt.

OBS: Det kan vara problem med mikrofonen på en laptop. På min gamla laptop är det mycket viktigt att locket står i rätt vinkel (nära 90 grader) för att kamera och mikrofon ska funka.

Appens modell (ett CNN) är förtränad på många spektrogram för de 18 orden. Modellen har alltså 18 klasser, en för varje ord.

Spektrogrammet från ditt ord skickas in i modellen och vi får en klass (ett ord) om sannolikheten är tillräckligt bra.

Ljudet behandlas alltså som bilder och det är egentligen fråga om bildigenkänning.

En titt på koden

index.html

index.js


Koden är ganska enkel. Svårigheterna är dolda för oss. Svårigheterna hanteras av biblioteket speechCommands som importeras i början av koden.

1) Först skapas ett recognizer-objekt med valen att webbläsaren ska hantera ljudet och att en förtränad modell med 18 ord ska användas.
2) Sedan anropas funktionen loadAndListen() som först väntar på att modellen laddas över nätet och sedan anropar funktionen start_listen()



3) Funktionen start_listen() innehåller en callback-funktion som anropas varje gång ett ord kommer in via biblioteksrutinerna.
4) För att ett ord ska godkännas krävs en sannolikhet på minst 75%. Om det bästa svaret från modellen har en sannolikhet som är mindre än tröskelvärdet fås inte något svar. Du såg kanske det i videon först i lektionen - problem med 'one'.

Som vanligt används Tensorflow.js.

För en beskrivning av modell mm se Speech Command

Hur bra funkar det?

Du har kanske problem med vissa ord – det har jag.

Modellen är inte tränad för din röst och dessutom är det engelska ord.

Det här ett generellt problem.

För att modellen ska funka bra krävs det att den är tränad på många typer av röster: ljusa och mörka, gamla och unga, olika dialekter och brytningar, talfel osv. Det är inte lätt.

Det bästa är förstås att modellen tränas med din egen röst före användningen men den möjligheten har vi inte här. Om det funkar dåligt försök ändra din röst till exempel till en ljusare. Härmar jag min fru funkar det perfekt.

Fungerar bäst om det är ganska tyst i rummet. En tickande klocka kan ställa till det.

Knacka med nageln på tangentbordet. Det tolkas som ordet 'up'.

Det funkar lika bra eller bättre om du säger bara delar av ordet t.ex dow i stället för down, lef i stället för left, righ i stället för right.

När ord väljs för röststyrning bör ord väljas så att de är så olika som möjligt. Då blir det lättare för modellen att skilja på orden och appen funkar bättre.

Modellen tränas för ljud och ljudet måste förstås inte vara ett talat ord.

I en av uppgifterna tränar du modellen att skilja på hund (vov) och katt (mjau).

Smarta högtalare

Google Nest Mini

En smart högtalare kan styras med röstkommandon på liknande sätt som för vår lilla app. Med röststyrning kan en smart högtalare funka så här:

1) Först ett "wake word" (t.ex. "Hej Google") som gör att högtalaren börjar lyssna efter vad den ska göra (en uppmaning)
2) Uppmaningen (tal) översätts till text.
3) Texten tolkas till en åtgärd - t.ex. starta en timer på 5 min (för att koka ägg)
4) Åtgärden utförs


AI används åtminstone för steg 1-3.

Nationella varianter

Svenskan är ett problem ur AI-synpunkt både i tal och skrift.

För engelska språket finns modeller som är gratis men inte för svenska språket.

Att träna egna tal- eller språkmodeller är inte lätt.

Så småningom kommer det troligtvis att finnas bra svenska modeller som är helt gratis.

Hur kan vi få en svensk version av appen?

Vi kan göra så här (men vi gör det inte, är inte så lätt):

  1. Vi översätter orden till svenska till exempel noll, ett, två, tre, fyra, fem, sex, sju, åtta, nio, upp, ner, vänster, höger, starta, stopp, ja, nej
  2. Nu ska modellen tränas med de nya orden. Det finns en app för det. Se en uppgift som beskriver hur det går till.
  3. Modellen sparas sedan ner till webbläsarens local storage (en webbläsare kan aldrig skriva direkt på disk). Det finns en knapp för det.
  4. Nu måste modellen i local storage läsas och sparas på disk. Det är inte svårt men det behövs lite Javascript-kod.
  5. Sedan ska modellen göras om till ett format som TensorFlow.js förstår – eller om det redan är ok, jag har inte kollat.
  6. Sedan måste vi ändra vår app så att den läser den nya modellen i stället för den gamla

Summering

I den här lektionen har vi sett hur talade ord kan omvandlas till bilder (spektrogram) som kan behandlas i ett vanligt CNN för bildigenkänning.

I nästa lektion ska vi titta på en större app för talade kommandon.

<< Bakåt Framåt >>