Door Olaf Weijers

Redacteur

Spraakassistentie zonder cloud

Bescherm je privacy met zelfbouw

16-10-2023 • 06:00

79

Singlepage-opmaak

De lagen van een spraakassistent

Spraak-naar-tekstherkenning is geen nieuwe techniek. Sommigen zullen zich misschien nog de Dragon NaturallySpeaking-software herinneren, die het jaren geleden al mogelijk maakte om tekst te dicteren naar de tekstverwerker op je computer.

Voor spraakherkenning zijn diverse opensourcesystemen te verkrijgen. Enkele bekende zijn Kaldi, Whisper en DeepSpeech. Om een van deze systemen te gebruiken, zul je het eerst moeten trainen. Gelukkig hoef je dit in veel gevallen niet (helemaal) zelf te doen, maar zijn er kant-en-klaar getrainde spraakmodellen beschikbaar in verschillende talen.

Spraak die wordt aangeboden aan een spraakmodel, wordt door het model opgebroken in losse klanken of fonemen. Deze fonemen worden vergeleken met de getrainde klanken die het systeem bevat, waarbij elk herkend foneem gepaard gaat met een waarschijnlijkheidsscore. Alle fonemen worden vervolgens ‘aan elkaar gelijmd’ en op dit resultaat voert het model een statistische analyse uit om de fonemen om te zetten in woorden en vervolgens de woorden in zinnen.

Intentieherkenning

Om je smarthome te bedienen, is boven op spraak-naar-tekst nog een extra laag nodig. In deze laag wordt de herkende tekst geanalyseerd en bekeken of er om actie of informatie wordt gevraagd. Dit heet intentieherkenning en vormt het verschil tussen horen en begrijpen voor een spraakassistent.

Een model voor intentieherkenning kan heel star zijn.Een model voor intentieherkenning kan heel star zijn. Er zijn modellen die alleen reageren op zinnen die je vooraf hebt gedefinieerd, in feite een vast menu aan keuzes waarvan je niet al te ver kunt afwijken. Het commando 'Zet de lichten in X aan' kan zo herkend worden als een actie voor lichten die ingeschakeld moeten worden. Op de plek van X kun je het model een optielijst aanbieden van alle ruimtes in je huis.

Andere intentieherkenningsmodellen werken in de breedte en zoeken steekwoorden in de aangeboden tekst om zo de intentie te bepalen. Als je zo’n model de tekst 'Wat is de weersvoorspelling voor Haarlem voor morgenochtend?' aanbiedt, zal deze veelgebruikte lidwoorden, voorzetsels en dergelijke overslaan, en zichzelf richten op 'voorspelling', 'Haarlem' en 'morgenochtend'. Met die woorden kan het intentiemodel de zin aanduiden als een vraag om een weersvoorspelling. Het model kan hierbij ook de context van de tekst die al herkend is, gebruiken om preciezer te analyseren.

In het voorgaande voorbeeld herkende het model het woord 'voorspelling', terwijl de aangeboden tekst 'weersvoorspelling' bevatte. Het woord 'weer’ is normaal niet zo interessant voor het model. In een zin als 'Zet het licht weer aan' is het beter om dat woord niet mee te nemen. Bij de herkenning van het woord 'voorspelling' kan een algoritme ervoor kiezen om opnieuw de overgeslagen woorden te analyseren en te kijken of ze de herkende context extra kracht bijzetten. Een model dat deze techniek inzet, kan hierdoor met veel meer zekerheid aangeven dat de vraag in het geval van ons voorbeeld een weersvoorspelling betreft.

Tekst naar spraak

Spraakassistentie in onderdelen
Spraakassistentie in onderdelen

Als je om het weer vraagt, is het fijn als je spraakassistent zelf een stem heeft om te kunnen antwoorden op die vraag. Hiervoor heb je een tekst-naar-spraaksysteem nodig dat gebruikmaakt van een spraaksynthesizer die de gewenste spreektaal ondersteunt. Net als bij spraakherkenningsmodellen kun je verschillende talen en stemmen toevoegen als losse dataset, waardoor een systeem verschillende talen kan spreken met verschillende stemmen. Vaak kun je die spraak afstellen, bijvoorbeeld het tempo waarin gesproken wordt of de toonhoogte van de stem. Uitgebreidere modellen maken de stem natuurlijker door kleine willekeurige variaties aan te brengen in de snelheid of toonhoogte waarmee sommige klanken worden uitgesproken.

Dialoogmanagement

Nu je dingen aan je spraakassistent kunt vragen en je spraakassistent kan antwoorden, is er dialoogmanagement nodig. Heel ingewikkeld is de werking niet; dialoogmanagement voegt een sessienummer toe aan elke spraakopdracht. Bij een tekst-naar-spraakopdracht die voortkomt uit een eerdere vraag, kan het smarthomeplatform die sessie-id bijvoegen. Daarmee kan het spraakassistentieplatform het antwoord op de juiste satelliet afspelen.