Achtergrond

Hoe werkt spraakherkenning?

Software die natuurlijke spraak begrijpt, is niet zo vanzelfsprekend als op het eerste zicht lijkt. Hoe slagen computers erin ons te begrijpen?

Spraakherkenningssoftware maakt gebruik van verschillende processen om te begrijpen wat je zegt. In een ideale wereld zou je een artificieel neuraal netwerk trainen met spraaksamples om een goed functionerende applicatie te creëren. In de praktijk is spraakherkenning jammer genoeg niet zo eenvoudig. Eén persoon praat misschien erg snel, terwijl een ander elke letter uitdrukkelijk uitspreekt. Wanneer beide personen ‘hallo’ zeggen, zou een neuraal netwerk beide samples als hetzelfde woord moeten klasseren. Automatisch audiobestanden met een verschillende lengte op één lijn plaatsen, blijkt echter niet zo eenvoudig. Alvorens je bestanden aan spraakherkenningssoftware geeft, moeten deze samples daarom de nodige voorbewerkingen ondergaan.

Voorbewerking

Je stem wordt opgenomen door een microfoon als geluidsgolven. Aangezien computers geen gebruik maken van analoge maar digitale signalen, wordt de golf omgezet tot een reeks getallen. Hiervoor wordt de hoogte van de geluidsgolf op gelijkmatig verspreide punten gemeten; een techniek die sampling wordt genoemd. Om ervoor te zorgen dat het originele analoge signaal perfect kan worden gereconstrueerd, dien je minstens twee keer zo snel te samplen als de hoogste frequentie die je wilt opmeten.

Dit is het analoge signaal van een man die ‘hello’ zegt.

Wanneer je in een microfoon praat, zal er zelden alleen jouw stem worden opgenomen. Er zal ruis op het signaal zitten en ook achtergrondgeluiden vinden hun weg naar de computer. Alvorens verdere verwerking van het signaal kan gebeuren, dient het daarom gefilterd te worden. De ruis zal op deze manier verdwijnen en het achtergrondgeluid wordt zo veel mogelijk onderdrukt. Bovendien zal het geluid naar een constant volume worden gebracht en wordt het gealigneerd. Niet iedereen spreekt immers even snel.

Spectogram

Uiteindelijk hou je een reeks getallen over die de amplitudes van het geluidssignaal op bepaalde tijdstippen voorstellen. In dit signaal bevindt zich zo weinig mogelijk ruis en achtergrondgeluid, en de data is genormaliseerd naar een constant volume en een gelijke snelheid. Ondanks de verschillende bewerkingen die op het signaal zijn uitgevoerd, blijft het voor een neuraal netwerk moeilijk om letters en woorden in de data te herkennen. Meer voorbewerking is daarom aan de orde.

Dit is het spectrogram van voorgaand signaal. Aangezien het een mannenstem betreft, zit er met name in de lage frequenties veel energie vervat.

Het signaal zal worden opgesplitst in tijdsframes van bijvoorbeeld 20 milliseconden. In deze tijdsframes kan je verschillende frequenties terugvinden die, wanneer je ze samenvoegt, het complexe geluid van menselijke spraak vormen. Bij spraakherkenningstechnologie wordt het complexe geheel van frequenties opgesplitst in frequentiebanden. Door na te gaan hoeveel energie er in elke frequentieband vervat zit, kan je als het ware de vingerafdruk van het geluid bekomen. Deze vingerafdruk wordt een spectrogram genoemd en kan voor iedere tijdsframe worden gecreëerd. Wanneer je de spectrogrammen in de tijd naast elkaar plaatst, krijg je een visuele weergave van het woord dat je hebt uitgesproken. In deze weergave zie je aan de hand van de kleuren hoeveel een frequentieband op een bepaald tijdstip aanwezig is.

Fonemen

Nu het audiosignaal is omgevormd tot een formaat dat eenvoudig te begrijpen is, kan het worden verstuurd naar een artificieel neuraal netwerk. Voor de input wordt gebruik gemaakt van de spectrogrammen van 20 milliseconden lang. De output die wordt gegenereerd, geeft de kansen weer dat het signaal een bepaald foneem voorstelt. Fonemen zijn de verschillende basisklanken die samen onze taal vormen. Zo wordt bijvoorbeeld een ‘d’ door iedereen net iets anders uitgesproken, maar we verstaan de klank bij iedereen wel als zijnde een ‘d’. Aangezien die klank zorgt voor een betekenisonderscheid, waardoor we niet bijvoorbeeld een ‘k’ horen, kunnen we een ‘d’ een foneem noemen. Gemiddeld genomen zijn er 35 fonemen per taal; bij het Nederlands bestaan er 40 verschillende klanken.

Een artificieel neuraal netwerk zal per tijdsframe bepalen wat de verschillende kansen zijn dat het een bepaald foneem betreft.

Trainen

Om ervoor te zorgen dat een artificieel neuraal netwerk de juiste klanken raadt, dien je het te trainen met een grote dataset. Iedereen spreekt fonemen immers net iets anders uit en zelfs jij zal niet altijd precies dezelfde uitspraak hebben. Een slecht getraind neuraal netwerk zal door deze variaties in uitspraak in de war kunnen worden gebracht. Door een grote hoeveelheid trainingsdata te gebruiken, zal het netwerk echter leren om door de variaties heen te kijken en de gelijkenissen van dezelfde fonemen op te merken.

Dit leerproces gaat doorgaans verder wanneer de software al in gebruik is. Spraakherkenningstechnologie die door één iemand wordt gebruikt, zoals Dragon, zal jouw uitspraak gaandeweg beter leren kennen. Dergelijke software zal hierdoor na verloop van tijd erg goed op dingen kunnen reageren die jij zegt. Wanneer je iemand anders tegen je computer laat praten, zal de herkenning echter een stukje slechter verlopen.

[related_article id=”218818″]

Woorden

Zelfs wanneer je erg veel trainingsdata gebruikt, blijft het een hele opgave voor een artificieel neuraal netwerk om klanken om te zetten in letters en woorden. Bij spraakherkenning wordt er daarom doorgaans gebruik gemaakt van een neuraal netwerk met feedback. Het netwerk zal een geheugen hebben van voorgaande bevindingen die invloed heeft op toekomstige schattingen. Wanneer het bijvoorbeeld al heeft achterhaald dat je ‘woor’ hebt gezegd, weet de software dat de kans erg groot is dat een ‘d’ zal volgen. Bovendien zijn bepaalde opeenvolgingen van letters erg zeldzaam. Denk hierbij aan ‘xyz’. Door dergelijke overwegingen te koppelen aan de herkenning van een klank zal het neurale netwerk veel accurater reageren.

Uiteindelijk zal je enkele woorden overhouden, waarvan het netwerk met wisselende zekerheid denkt dat het het juiste woord is. Aangezien het netwerk de woorden per klank probeert te achterhalen, zijn deze woorden nog erg fonetisch geschreven. De software wordt daarom gekoppeld aan een database waarin wordt aangegeven hoe waarschijnlijk het is dat een bepaald woord voorkomt. Deze database is ontstaan door het neurale netwerk erg veel geschreven teksten te laten lezen. Woorden die vaker voorkomen, zullen daardoor vaker worden gekozen.

Correcties

Het voorgaande principe heeft één groot nadeel: zeldzame woorden die lijken op een veel gebruikte tegenhanger zullen nooit worden gekozen. Voorbeelden hiervan zijn wij en wei. Wij met een lange ‘ij’ wordt in allerhande zinnen gebruikt. Slechts bij erg weinig van deze zinnen wordt er gedoeld op een grasveld. Uiteraard bestaan er algoritmes die ook deze problemen zo veel mogelijk weg kunnen werken. Indien ‘wij’ vooraan in een zin staat, kan het bijvoorbeeld niet anders dan dat het om het persoonlijke voornaamwoord gaat.

Bovendien kan je bij spraakherkenningssoftware die wordt gebruikt om teksten te schrijven een foutief woord aanduiden en dit handmatig aanpassen. Op deze manier leert de applicatie zeldzame woorden kennen en koppelt de software het woord aan het opgenomen audiofragment. Door consequent foutief geschreven woorden aan te passen, zal de software een stuk beter werken.

Gerelateerde artikelen

Volg ons

69% korting + 3 maanden gratis

69% korting + 3 maanden gratis

Bezoek NordVPN

Business