KATHOLIEKE UNIVERSITEIT LEUVEN |
Faculteit
Economische en toegepaste
economische wetenschappen Departement Toegepaste economische wetenschappen |
|
De
haalbaarheid van spraakherkenning voor de administratie in de welzijnssector
Verhandeling aangeboden tot
het behalen
van de graad van
Handelsingenieur in de beleidsinformatica
Promotor : Prof.
Dr. J. Vanthienen
- 2000 -
Faculteit
Economische en toegepaste
economische wetenschappen Departement Toegepaste economische wetenschappen |
|
KATHOLIEKE UNIVERSITEIT LEUVEN |
De haalbaarheid van spraakherkenning voor de
administratie in de welzijnssector
Korte Inhoud Verhandeling:
Een tekst van
± 10
lijnen
Promotor : Prof. Dr. J. Vanthienen
- 2000 -
Dankwoord
Inhoudsopgave
Algemene Inleiding.............................................................................. 1
Hoofdstuk 1 Kritieke Succes Factoren............................................ 4
1.1 Technologische
aspecten voor het gebruik van spraakherkenning.......................... 6
1.1.1 Bepaling
vande betrokken industrie.............................................................. 6
1.1.2 Strategisch
voordeel.................................................................................... 7
1.1.3 IT
en coördinatie......................................................................................... 8
1.1.4 Opleiding.................................................................................................... 9
1.1.5 Besluit....................................................................................................... 10
1.2 Organisatorische
aspecten voor het gebruik van spraakherkenning:..................... 10
1.2.1 Software-ontwikkelaar.............................................................................. 11
1.2.2 Eindgebruiker............................................................................................ 14
1.2.3 Documentatie............................................................................................ 17
1.3 Succes
en haalbaarheid van spraakherkenning in de praktijk: marktvoorspelling.. 17
1.4 Synthese........................................................................................................... 20
Hoofdstuk 2 Algemene
principes van spraakherkenning.............. 21
2.1 Taak
van een spraakherkenner.......................................................................... 21
2.2 Hoe
werkt spraakherkenning?........................................................................... 22
2.2.1 Codering
door een analoog-digitaalconversie............................................. 23
2.2.2 Transformaties.......................................................................................... 25
2.2.3 Bepalen
van de waarschijnlijkheden........................................................... 30
Hoofdstuk 3 Nederlandstalige
spraakherkenners.......................... 40
3.1 Philips
Speechmagic v 3.1................................................................................. 40
3.1.1 Processen
in Speechmagic......................................................................... 41
3.1.2 Lifecycle
van een citaat.............................................................................. 44
3.1.3 ActiveX
Componenten.............................................................................. 44
3.2 Lernout &
Hauspie Voice Xpress 4 SDK.......................................................... 45
3.2.1 Processen
in Voice Xpress........................................................................ 46
3.2.2 ActiveX
componenten............................................................................... 46
3.3 Uiteindelijke
keuze............................................................................................ 48
Hoofdstuk 4 Toepassing : spraakherkenning voor
pakketten van ACC. 49
4.1 ACC................................................................................................................ 49
4.2 Taaltechnologie
en ACC-software..................................................................... 51
4.3 Medisch
dossier................................................................................................ 52
4.3.1 Waarvoor
dient ‘Medisch Dossier’?.......................................................... 53
4.3.2 Hoe
en waar kan spraakherkenning gebruikt worden................................. 55
Hoofdstuk 5 Proefproject
in Delphi.............................................. 58
5.1 Stand-alone
installatie........................................................................................ 58
5.1.1 Hardware................................................................................................. 58
5.1.2 Installatie................................................................................................... 58
5.1.3 Configuratie.............................................................................................. 59
5.1.4 Delphi-applicatie....................................................................................... 60
5.1.5 Besluit
voor de Stand-alone installatie........................................................ 66
5.2 Gedistribueerd
systeem..................................................................................... 66
5.2.1 Hardware................................................................................................. 66
5.2.2 Installatie................................................................................................... 66
5.2.3 Configuratie.............................................................................................. 67
5.2.4 Toepassingen............................................................................................ 68
5.3 Herkenning....................................................................................................... 69
5.4 Besluit............................................................................................................... 71
Hoofdstuk 6 Programmeren
van spraakherkenning in ‘Medisch Dossier’ 72
6.1 Oracle
Forms.................................................................................................... 72
6.2 Voorafgaande
problemen.................................................................................. 72
6.3 Forms
en ActiveX............................................................................................. 73
6.3.1 Polling
methode......................................................................................... 75
6.3.2 Visual Basic.............................................................................................. 77
6.4 Besluit............................................................................................................... 79
Algemene Inleiding
De laatste vijftien jaar heeft de informatizering in onze maatschappij een onontkenbaar hoge vlucht genomen. Een belangrijke vraag bij deze steeds voortschrijdende informatizering is die naar het praktisch nut van de nieuw ontwikkelde technologieën. Voor spraaktechnologie is deze vraagstelling zeker uitermate belangrijk. Reeds een paar jaar kent de Vlaamse reus op dit gebied, Lernout & Hauspie, een ontzettend groot succes. Dit kan enigszins verbazingwekkend lijken, aangezien er momenteel nog steeds geen sprake kan zijn van een wijd verbreid gebruik van deze technologie. De vraag rijst dan ook of het gigantische succes van de spraaktechnologie misschien een speculatieve luchtbel zou kunnen zijn.
In deze context loont het zeker de moeite om eens in concreto te onderzoeken hoe ver het nu staat met de praktische toepassing van deze nieuwe technologie. Op lange termijn lijkt het evident dat spraaktechnologie een vernieuwing zal teweeg brengen in de manier waarop de gebruiker omspringt met informatica: voor de meeste mensen is spreken een heel natuurlijke vorm van communicatie. Bijgevolg lijkt – vanuit het standpunt van de gebruiker – spraak de aangewezen manier om een computer te bedienen.
Vandaag de dag beginnen de eerstre praktische toepassingen het levenslicht te zien. Eén van de eerste sectoren waar spraaktechnologie zijn nut kan bewijzen blijkt de medische sector te zijn. Hiervoor bestaan tal van redenen: een gezonde welzijnszorg vergt een gigantisch administratief apparaat, waar elke tijdsbesparing van pas komt. Een andere, technische reden is de zeer specifieke woordenschat die in de medische sector gebruikt wordt. Deze specifieke woordenschat maakt de medische, of algemener de hele welzijnssector, uitermate geschikt voor spraaktechnologie.
Daarom zullen we ons in deze thesis, wars van enige hoogdravendheid omtrent de toekomstige mogelijkheden van spraaktechnologie, concentreren op de haalbaarheid van spraaktechnologie in zijn meest concrete toepassing: de welzijnssector. Hiervoor gingen wij te rade bij een informatica-bedrijf dat al jaren software levert aan de welzijnssector. Sinds enige tijd poogt deze onderneming, ACC, spraaktechnologie te integreren in de softwarepakketten die zij aan de welzijnssector levert. Deze benadering werpt een zeer interessant licht op de mogelijkheden en moeilijkheden van het concreet gebruik van spraaktechnologie.
Om een heldere uiteenzetting te geven van dit onderwerp zullen we eerst enkele aandachtspunten bij de implementatie van spraakherkenning analyseren aan de hand van Kritieke Succes Factoren. Hierbij zullen we ons vooral baseren op enkele artikels die de Kritieke Succes Factoren van andere nieuwe technologieën toelichten. Een belangrijk onderscheid dat gemaakt zal worden is dat tussen de ontwikkelaar van applicaties die spraakherkenning gebruiken en de uiteindelijke gebruiker van het spraakherkenningssysteem. Voor ACC is vooral het ontwikkelen van applicaties van belang. Het standpunt van de eindgebruikers wordt hier ingenomen door de administratie in de welzijnssector.
In een tweede hoofdstuk worden de algemene principes van spraakherkenning uitvoerig uitgelegd. Vele linguïsten ten spijt is spraakherkenning vooral een kwestie van statistische berekeningen. Technisch gezien bestaan er enorm veel algoritmes en modellen om spraak om te zetten naar tekst. De lezer zal in dit hoofdstuk dan ook een overzicht krijgen van de verschillende stappen die er nodig zijn om een gesproken signaal om te zetten in een reeks woorden. In een derde hoofdstuk zal er bij de bespreking van Nederlandse spraakherkenners vaak naar deze modellen verwezen worden.
Dit derde hoofdstuk gaat dieper in op de technische werking van de twee spelers op de markt van de Nederlandse spraakherkenners: Philips SpeechMagic en Lernout & Hauspie Voice Xpress. Aangezien de keuze van een van deze producten vooral zal afhangen van de integratiemogelijkheden van deze softwarepakketten in een bestaande applicatie, zullen in dit hoofdstuk vooral de workflowintegratie en de mogelijkheden van een integratie van de spraakherkenners in een bestaande applicatie onderzocht worden. De uiteindelijke keuze van een van deze twee producten zal bepalen welk product gebruikt zal worden voor het pilootproject dat in de laatste twee hoofdstukken zal beschreven worden.
Om een beeld te krijgen van het toepassingsgebied voor het pilootproject, zal in het vierde hoofdstuk een overzicht van het software-aanbod van ACC gegeven worden. Het softwarepakket van ACC dat in aanmerking komt om uitgebreid te worden met spraakherkenning heet ‘Medisch Dossier’. In dit hoofdstuk zal de functionaliteit van ‘Medisch Dossier’ uitgelegd worden en wordt het pakket gesitueerd binnen het aanbod van ACC.
De twee laatste hoofdstukken tenslotte beschrijven op een technische manier het verloop van het pilootproject dat in samenwerking met ACC werd opgezet. De verschillende problemen en aandachtspunten bij de implementatie van een spraakherkenniner en het verloop van het project komen hier aan bod. Voor sommige problemen werden verschillende oplossingen uitgewerkt zodat er later, afhankelijk van ontwikkelingsomgeving en van de configuraties een juiste oplossing kan gekozen worden.
Hoofdstuk vijf geeft het projectverloop voor een stand-alone installatie en een gedistribueerde installatie. De ontwikkelingsomgeving die ineerste intantie gebruikt werd om de integratie van de spraakherkenner te testen was Delphi. Hoofdstuk zes gaat dan over het verloop van de programmatie zoals die in samenwerking met ACC werd uitgevoerd. De ontwikkelingsomgeving bij ACC was Oracle Forms.
Kritieke Succes Factoren kunnen worden beschouwd als methoden om te komen tot de tegenwoordig zo noodzakelijk geachte niet-financiële indicatoren.[1] Deze niet-financiële factoren geven aan welke factoren “leading” zijn voor het behalen van een goed resultaat. In de welzijnssector primeert de kwaliteit van de verleende diensten dikwijls op de financiële aspecten van de dienstverlening. Dit maakt het gebruik van kritieke succesfactoren bij uitstek geschikt om de haalbaarheid van een nieuwe technologie in deze sector te evalueren. Daarom geven we in dit hoofdstuk een overzicht van de Kritieke Succes Factoren die de implementatie van een nieuwe technologie in de welzijnssector beïnvloeden. Aangezien het concrete project dat wij gevolgd hebben specifiek gericht was op de medische sector, zal in dit hoofdstuk het onderzoeksgebied beperkt worden tot de medische sector.
Een artikel van Saxena en Wagenaar over de EDI Technology Transfer biedt een interessant conceptueel kader voor de bespreking van de Kritieke Succes Factoren. Een eerste benaderingswijze kan volgens dit artikel vertrekken vanuit de breedte waarop de nieuwe technologie gebruikt wordt. Deze benadering in de breedte onderzoekt hoe een nieuwe technologie ingevoerd kan worden in een hele industrie of in een specifiek bedrijf. Een tweede benaderingswijze gaat uit van een opdeling in de diepte, waar men de implementatie van EDI op twee manieren bekijkt: een eerste manier legt de nadruk vooral op de technologie die gebruikt wordt en de technische aspecten, de tweede manier kijkt dan eerder naar de organisatorische aspecten van de implementatie van EDI.
De structuur van dit artikel kan ook hier gebruikt worden om de Kritieke Succes Factoren voor de integratie van spraakherkenning te behandelen. Uiteraard bestaat er een belangrijk verschil tussen EDI en spraakherkenning, namelijk dat het succes van EDI afhangt van de gelijktijdige implementatie door verschillende gebruikers. Dit is niet steeds het geval voor spraakherkenning. Om die reden worden bepaalde niveaus uit de breedte- en diepteopdeling hier buiten beschouwing gelaten en wordt de opdeling doorgevoerd tussen de technische en de organisatorische aspecten. Het gaat hier vooral om de analyse van de in gebruikname van een nieuwe informatica-technologie. Zowel op het technologisch als op het organisatorisch niveau van een specifiek bedrijf, zijn er voldoende overeenkomsten tussen EDI en spraakherkenning om deze structurering te verantwoorden. Beide nieuwe technologieën impliceren namelijk een verandering van de gangbare manier van communiceren binnen een bedrijf.
Ook in een ander artikel over videoconferencing (Jane Webster, 1998) vinden we de hierboven voorgestelde opdeling enigszins terug:
Research in systems analysis and design helps highlight those factors
that are important in ensuring the acceptance of new systems (Laudon and Laudon 1995). Within
this theoretical perspective, two competing theories, innovation
characteristics theory and implementation process theory, have helped to
explain the adoption of new technologies. Innovation characteristics theory
assumes that individuals adopt technologies to perform individual tasks and
therefore that technologies need to be designed with the correct
characteristics for these individuals, while implementation process theory
assumes that groups perform interdependent tasks and therefore that managerial
effort needs to focus on the process of implementation (Yetten
et al. 1997).
Net zoals bij EDI
is het succes van een implementatie van videoconferencing afhankelijk van
verschillende gebruikers. Ook hier kan echter het argument aangehaald worden
dat beide technologieën een veranderde manier van communicatie teweeg brengen.
In de volgende paragrafen zal er dus aan de hand van beide artikels een bespreking volgen van de
Kritieke Succes Factoren die ook van toepassing zijn op spraakherkenning.
In een laatste deel van dit hoofdstuk wordt er concreter ingegaan op de marktvoorspellingen voor de integratie van spraakherkenning.
Een industrie moet hier gezien worden als een verzameling bedrijven die allen dezelfde goederen of diensten leveren, of substituten van deze goederen of diensten. De grenzen worden dus bepaald op het niveau van de eindgebruiker. De potentiële voordelen van een nieuwe technologie variëren sterk tussen de verschillende industrieën en tussen productiebedrijven en dienstenbedrijven. Zo leent spraakherkenning zich uitstekend tot toepassingen in de welzijnssector, of specifieker in de medische sector, gezien het beperkte en specifieke vocabularium dat in deze sector gehanteerd wordt. Het is logisch dat de herkenning van een beperkte set woorden voor een computer eenvoudiger verloopt dan de herkenning van een breed en uitgebreid woordgebruik. Niet alleen stijgt de accuraatheid van de herkenning wanneer het aantal mogelijk te herkennen woorden kleiner wordt, ook de berekeningen worden eenvoudiger, hetgeen dan weer minder rekenkracht vergt van de computer. Bovendien leert de communicatietheorie ons dat de informatiedichtheid van een woord stijgt naarmate de kans van gebruik van dat woord daalt. Hiervoor wordt het begrip entropie gehanteerd (J. Vanthienen, 1999)[2].
Dit alles leidt ertoe dat administratie in de medische sector veel meer nut kan ondervinden van de ontwikkelingen in de spraaktechnologie dan meer globale toepassingsdomeinen zoals bijvoorbeeld de administratie van managementfuncties. Gezien de snelheid van de technologische veranderingen in de medische gegevensverwerking, is voor vele ontwikkelaars van software voor medische doeleinden, een uitbreiding van hun producten met spraakherkenning noodzakelijk om hun positie op de markt te behouden. Naast deze concurrentiële drijfveer is ook de klantenvraag één van hoofdredenen tot integratie van spraakherkenning. Vanuit het standpunt van de klant is tegelijkertijd de noodzaak voelbaar om deze technologische ontwikkelingen op te volgen.
Het is dan ook niet verwonderlijk dat er momenteel in de administratie van de medische sector volop geëxperimenteerd wordt met spraakherkenning. Vele ontwikkelaars van medische softwarepakketten gaan, op impliciete vraag van hun klanten, hun pakketten uitbreiden met spraakherkenning.
Los van de specifieke industrie die men gaat bekijken, zal elke nieuwe technologische toepassing bijna altijd een strategisch doel hebben. Het uitstippelen van een strategie gaat automatisch gepaard met een analyse van de huidige bedrijfsomgeving en de mogelijkheden van een nieuwe toepassing in die omgeving. Uit deze analyse volgt dan logischerwijze het tactisch en operationeel plan.
De huidige bedrijfsomgeving kan men volgens Saxena en Wagenaar (1994) karakteriseren door een hoge velocity, equivocality en een niet-lineariteit.[3] Omgevingen met hoge velocity zijn omgevingen waar er snelle en onregelmatige veranderingen optreden en die sterk afhankelijk zijn van een veranderende wetgeving. Equivocality betekent dat er in een bedrijfsomgeving gewerkt wordt waar zeer veel informatie vereist is. In de meeste gevallen zijn er meerdere en conflicterende interpretaties mogelijk van een bepaalde situatie. Met de niet-lineariteit van de omgeving wordt bedoeld dat zowel de interne bedrijfsrelaties als de relaties met de buitenwereld zeer complex en dus moeilijk te voorspellen zijn.
In zulke omgevingen is het absoluut noodzakelijk om de opkomende veranderingen tijdig te ontdekken en snel te interpreteren. Het huidig gebruik van spraaktechnologie kan men in deze context dan ook beschouwen als een tijdig inspelen op veranderingen in de evoluerende informatisering. Ondanks het feit dat spraakherkenning nog niet volledig op punt staat, heeft een dadelijke onderkenning van de mogelijkheden van spraakherkenning een hoge toekomstwaarde. Dit laat toe dat ondernemingen, die reeds ervaring hebben met spraakherkenning en nieuwe technologieën in het algemeen, voordeel halen uit de reeds opgedane ervaringen. Algemener kan men dit omschrijven als de indirecte voordelen die men haalt uit het gebruik van nieuwe technologieën.
Toegepast op medische software, blijkt dat zowel de leverancier van de software als de uiteindelijke gebruiker gediend zijn met een innovatieve, strategische visie. Hier dient wel opgemerkt te worden dat de uiteindelijke strategische doelen van beide partijen duidelijk verschillen.
Uit het oogpunt van de applicatie-ontwikkelaar is het uiteindelijke strategische doel de continuïteit van de onderneming. Middelen om deze continuïteit te garanderen zijn winstmaximalisatie en hiermee gepaard gaand, de concurrentiële positie. Innovatie en het up-to-date houden van de software zijn dan op hun beurt noodzakelijke vereisten om de concurrentiële positie van een softwarebedrijf te behouden.
De eindgebruiker van de medische software van zijn kant heeft als strategisch hoofddoel het leveren van gezondheidszorg. In deze sector speelt het behouden van de concurrentiële positie dan ook een ondergeschikte rol aan het maatschappelijk doel een efficiënte verzorgingsdienst te verschaffen. Het hoeft geen verwondering te wekken dat nieuwe technologieën ook voor het bereiken van dit doel een grote bijdrage kunnen leveren.
Sectoren die reeds sterk geïnformatiseerd zijn, zijn uiteraard veel geschikter voor nieuwe technologieën zoals spraakherkenning. Zoals de technologie van de spraakherkenning er momenteel voorstaat, zullen stand-alone systemen voor spraakherkenning nog wat op zich laten wachten. Het inbouwen van spraakherkenning in een bestaande workflow is technisch wel realiseerbaar, op voorwaarde dat de informatie-omgeving duidelijk afgelijnd is. Enkel dan kunnen enkele welbepaalde fasen van de informatieverwerking door middel van spraakherkenning gebeuren. Dit vereist uiteraard een gestructureerd en gecoördineerd informatiebeleid. Verder is het ook noodzakelijk dat er duidelijk kan aangegeven worden welke taken beïnvloed zullen worden door een nieuwe technologie zoals spraakherkenning. Eenmaal deze taken bepaald zijn, kan er per taak nagegaan worden welke veranderingen er zullen optreden. Op die manier is het mogelijk de eindgebruiker duidelijk te informeren over de wijzigingen die zijn taak zal ondergaan.
Bekijken we de praktische implementatie van spraakherkenning, dan is een groot voordeel dat er voor een deel van de eindgebruikers in de medische sector weinig of geen verandering optreedt. Zo maakt het voor een dokter bijvoorbeeld niet uit hoe zijn gedicteerd rapport uiteindelijk wordt omgezet in een uitgeschreven rapport. De zogenaamde user-acceptance is hier dan ook 100%. Voor de administratieve verwerking van zo een rapport kan er wel een nieuwe manier van werken ontstaan, en er moet dan ook eerst grondig onderzocht worden welke de gevolgen zullen zijn van deze nieuwe technologie, en vooral in welke mate die nieuwe technologie aanvaard en gebruikt zal worden.
De specifieke industrietak en IT infrastructuur bepalen in welke mate de integratie van spraakherkenning in een bestaand systeem succesvol zal zijn. Het belangrijkste is echter het daadwerkelijk gebruik van spraakherkenning en de tijdswinst die daarmee gerealiseerd kan worden. De eindgebruiker moet er zich ten volle van bewust zijn dat een spraakherkenner pas na langdurige training echt goede resultaten levert. Indien deze bewustmaking niet gebeurt, kan de eindgebruiker ontgoocheld raken bij een eerste gebruik van het systeem, met als gevolg dat hij het nut van het uitgebreid systeem uit het oog verliest.
Het kan hier interessant zijn het in het artikel van Jane Webster (1998) aangehaalde verschil tussen de betrouwbaarheid van een systeem en het gebruik ervan te vermelden. De meeste mensen zouden verwachten dat hoe hoger de betrouwbaarheid van een systeem is, hoe meer het gebruikt wordt. Nochtans is uit een onderzoek van Goodhue en Thompson (1995) gebleken dat er een negatieve correlatie tussen beide factoren bestaat. Zij verklaren deze opmerkelijke bevinding door het feit dat mensen die een systeem veel gebruiken, ook veel gefrustreerder raken wanneer het systeem niet werkt. Deze mensen zullen het systeem dan ook veel gemakkelijker als onbetrouwbaar evalueren. Het kan belangrijk zijn rekening te houden met deze relatie bij het gebruik van een spraakherkenningssysteem.
Zoals reeds vermeld in de vorige paragraaf maakt het bepaalde personen soms niet uit wat er gebeurt met hun dictaat. Toch lijkt het noodzakelijk ook deze mensen goed op de hoogte te houden van de ontwikkelingen en veranderingen die er plaatsvinden bij de implementatie van spraakherkenning. Zo zal een arts na het inspreken van een rapport er soms toch belang bij hebben het verwerkingsproces van zijn rapport na te kunnen gaan, ook al zag hij daar aanvankelijk het nut niet van in.
Een ander aandachtspunt is de werkwijze die volgt uit het gebruik van een spraakherkenner. Zo komen sommige taken, gezien hun karakter, eenvoudigweg niet in aanmerking voor spraakherkenning. Het is bijvoorbeeld denkbaar dat een samenvatting van een medisch verslag beter wordt ingegeven met een toetsenbord, dan met een spraakherkenner. De ingave met het toetsenbord laat de gebruiker in dit geval toe om zijn gedachten beter te ordenen, waar dat bij het rechtstreeks inspreken van de samenvatting soms voor moeilijkheden kan zorgen. De persoonlijke voorkeur van de eindgebruiker moet hier de doorslag geven om te beslissen of er al dan niet spraakherkenning zal gebruikt worden.
Samenvattend kan men stellen dat de strategie een doel geeft aan het gebruik van spraakherkenning, de technische infrastructuur geeft de mogelijkheid tot implementatie en de opleiding biedt de nodige kennis om spraakherkenning te gebruiken. Om succes te garanderen moeten deze drie aspecten gecoördineerd worden en daarom is ook de coördinatie een belangrijk onderdeel van de implementatie.
Zoals in het eerste deel reeds gezegd, moet men voor het bepalen van de succesfactoren van spraakherkenning het onderscheid maken tussen de producenten van de spraakherkenningssoftware en de afnemers of de eindgebruikers ervan. Dit verschil vormt een eerste onderverdeling in deze paragraaf. Verder dient er op organisatorisch niveau ook een onderscheid gemaakt worden tussen de verschillende fasen van de integratie van spraakherkenning. Een eerste fase is de ontdekkingsfase en de kritieke factoren in deze fase houden meestal verband met de waarde die het management aan spraakherkenning geeft. De tweede fase is de operationele fase. In deze fase is enerzijds de betrokkenheid van het management bij het project zeer belangrijk en anderzijds behoeft de houding van de afnemers van de software voldoende aandacht. De laatste fase die zal bekeken worden, is de strategische fase.
Volgende factoren moeten op het niveau van de organisatie onderscheiden worden in deze eerste fase:
a)
Bedrijfsvisie
De uitbreiding van een toepassing met spraakherkenning moet passen binnen de
algemene bedrijfsvisie. Het doel is dan een duurzaam concurrentiëel voordeel te
realiseren.
b)
Kosten en baten van de
implementatie
Een uitgebreide schatting van de kosten en de baten van het project dient
uitgevoerd te worden tijdens de ontdekkingsfase. Bij de interpretatie van deze
analyse dient er echter rekening gehouden te worden met de indirecte
opbrengsten van het project en de toekomstige concurrentiële positie die hieruit
voortvloeit.
c)
Top Management
Het is ook absoluut noodzakelijk het top management te overtuigen van de
haalbaarheid van het project. De kansen van het welslagen van het project zijn
in grote mate afhankelijk van de motivatie van het top management. Als het top
management het project zelf initieert, neemt de slaagkans van het project
drastisch toe.
d)
Opleiding
In sommige gevallen kan het nuttig zijn om bepaalde mensen, die actief
betrokken zullen zijn bij het project, een opleiding te laten volgen. Zij kunnen
dan optreden als experts met betrekking tot spraakherkenning en hebben liefst
de nodige technische achtergrond om applicaties te ontwikkelen.
Deze fase volgt na een beslissing tot gebruik van spraakherkenning. Meestal bestaat zij uit het opzetten van een pilootproject. Volgende punten verdienen aandacht:
a)
Implementatie
Spraakherkenning is een vrij nieuwe technologie en het kan soms moeilijk zijn
om mensen te vinden die voldoende kennis van deze technologie hebben. Dit
probleem wordt nog eens benadrukt door het feit dat spraakherkenning nog steeds
in volle evolutie is en dus nog steeds verandert. Vele ondernemingen beginnen
dan ook met een pilootproject om de mogelijkheden van spraakherkenning te
testen, maar verliezen de verdere ontwikkelingen uit het oog. Het parallel
laten lopen van het pilootproject met de bestaande software kan zeer nuttig
zijn, maar er dient dan wel op gelet te worden dat de concrete overstap tijdig
gemaakt wordt. Door de twee projecten samen te laten lopen, loopt men namelijk
soms het gevaar te lang het oude systeem te gebruiken, zonder dat de
eindgebruiker gedwongen wordt het nieuwe product te gebruiken. Door snel genoeg
over te schakelen naar de nieuwe implementatie kan dit euvel vermeden worden.
b)
Betrokkenheid van het
management
De betrokkenheid van het management in de ontdekkingsfase is absoluut
noodzakelijk om de nieuwe technologie te initiëren. Het belang van deze
betrokkenheid neemt tijdens de operationele fase zeker niet af, maar uit zich
vooral door het ter beschikking stellen van middelen en de operationele steun
aan het project door het management.
c)
Leiderschap voor het project
Een minstens even belangrijke factor als de betrokkenheid van het management
voor het welslagen van het project, is de interne motivatie en steun die het
project krijgt. Het projectteam moet bestaan uit verschillende
vertegenwoordigers uit de verschillende functionele afdelingen. Al deze mensen
komen dan onder het leiderschap van een enthousiaste en bekwame projectleider,
die de markt goed kent en nauwe relaties met de klanten onderhoudt.
d)
Marketing activiteiten
Goede marketing activiteiten hebben een dubbel doel: ze kunnen er ten eerste
toe leiden dat de bestaande klanten een upgrade doorvoeren van hun bestaande
applicaties. Dit komt de klantentevredenheid zeker ten goede. Ten tweede kunnen
er met aangepaste marketingactiviteiten nieuwe klanten aangetrokken worden. Het
is belangrijk dat de marketingactiviteiten pas starten in de operationele fase,
zodat het mogelijk is om (potentiële) klanten een demonstratie van de
spraakherkenner te geven. Het pilootproject kan dan bijvoorbeeld dienen als
demoversie voor deze klanten.
Zoals reeds vermeld bij de technische benadering van de strategische succesfactoren, heeft de uitbreiding van een softwarepakket met spraakherkenning een strategisch doel. Dit is zeker zo voor de software-ontwikkelaar, die uiteindelijk zijn product wil verkopen en zijn marktpositie wil behouden. Volgende punten verdienen extra aandacht om de strategische doeleinden van de organisatie te realiseren:
a)
De Productmix
In welke mate is de uitbreiding met spraakherkenning binnen een bestaande lijn
van softwareproducten wenselijk om aan productdifferentiatie te doen?
Afhankelijk van de concrete toepassing die uitgebreid wordt, moet er gekeken
worden hoe de productlijn van de software-ontwikkelaar er uit ziet. Zo kan het
op termijn bijvoorbeeld nuttig blijken de hele lijn uit te breiden met
spraakherkenning. Een andere mogelijkheid is dat er enkel bepaalde softwareproducten
worden uitgebreid, en dat deze producten dan naar voor worden gebracht als
up-to-date producten. Zoals reeds gezegd moet dit alles bekeken worden binnen
de bestaande lijn van producten, rekening houdend met het ‘imago’ dat deze
productlijn en de onderneming hierdoor krijgt.
b)
Nieuwe opportuniteiten
Spraakherkenning kan ook nieuwe opportuniteiten aan het licht brengen. Door een
geslaagde initiële introductie van spraakherkenning in de producten van de
software-ontwikkelaar, kunnen nieuwe interne toepassingen opduiken. Het is best
mogelijk dat er na de ontwikkeling van een applicatie die gebruik maakt van
spraakherkenning, bij de ontwikkelaars zulk een
groot enthousiasme ontstaat dat zij zelf ook de overstap naar deze
nieuwe technologie willen maken. Algemener gesteld kan het ontwikkelen en het
verkopen van spraakherkenning hier dus een aanleiding zijn om zelf
spraakherkenning te gaan gebruiken.
Als we de reclameboodschappen van de
spraakherkenningspakketten moeten geloven, kan een spraakherkenner reeds na 10
minuten gelijk welke zin herkennen met een accuraatheid van ongeveer 98%. In
praktijk draait het wel eens anders uit en zien we dat de kwaliteit van de
herkenning vooral in het begin evenredig toeneemt met de trainingstijd die men
er in steekt. Een verbetering van de herkenning met één percent kan op het
eerste zicht wel weinig lijken, maar men moet hierbij vooral de uitgespaarde
verbeteringstijd voor ogen houden. Het verschil tussen een spraakherkenner die
98 percent van de woorden herkent en één die 99 percent van de woorden herkent
kan op het eerste zicht miniem ( slechts 1 percent) lijken. Bij nader inzicht
blijkt deze verbetering namelijk een halvering van de verbeteringstijd in te
houden, hetgeen zeker niet verwaarloosd dient te worden. Mijn persoonlijke
ervaringen leren ook dat bij het gebruik van een spraakherkenner het meeste
tijd in de verbetering van een dictaat kruipt, zeker als die verbetering ook
door middel van spraakherkenning gebeurt. In deze paragraaf zullen dan ook
enkele punten aangehaald worden die door de eindgebruiker in acht moeten
genomen worden om de accuraatheid van spraakherkenning te verbeteren. Volgende
6 factoren dienen in acht genomen te worden om een goede spraakherkenning
mogelijk te maken:
Dit is een van de belangrijkste zaken waarop gelet moet worden, nog voor de spraakherkenningssoftware wordt aangekocht. Een slechte geluidskwaliteit ten gevolge van een kwalitatief lagere geluidskaart maakt een spraakherkenner volledig nutteloos. De herkenning is dan zo slecht dat er nauwelijks tijd gewonnen wordt. Bij het gebruik van een laptop-computer is de geluidskaart meestal niet kwalitatief genoeg voor spraakherkenning. Een mogelijke oplossing is hier het gebruik van een USB[4]-microfoon, waar de A/D-conversie (zie paragraaf 1.2.1) in de microfoon zelf gebeurt en dus geen storingen ondergaat ten gevolge van magnetische stralingen die in de computer aanwezig zijn.
Uit vele praktijktesten is ook gebleken dat de microfoons die standaard met een spraakherkenner worden meegeleverd verre van optimaal zijn. Voor een optimaal gebruik van spraakherkenning kan het dan ook nuttig zijn gebruik te maken van een professionele studiomicrofoon. De microfoon die meegeleverd werd met de spraakherkenner kan dan als reservemicrofoon dienen.
Algemeen kan men stellen dat de systeemvereisten die door de ontwikkelaars van een spraakherkenningspakket worden aanbevolen nogal laag uitvallen. Om echt goed aan spraakherkenning te doen, is er momenteel een processor van minstens 350 MHz en een intern geheugen van 128 MB RAM nodig. Deze specificaties kunnen wel wat variëren van product tot product. Uiteraard dienen deze vereisten nog te worden verhoogd als er naast het spraakherkennen nog andere taken lopen die veel processorkracht of werkgeheugen vereisen.
Met een goede plaatsing van de microfoon wordt de relatieve plaatsing van de microfoon ten opzichte van de mond bedoeld . De microfoon moet steeds op ongeveer 2 centimeter van de mondhoek verwijderd zijn en mag niet recht voor de mond gehouden worden om het geluid van de ademhaling te vermijden.
Om een consistente plaatsing van de microfoon te garanderen dient de microfoon steeds op dezelfde plaats en afstand gehouden te worden. Vooral tussen verschillende sessies kan dat van belang zijn. Zo is er bijvoorbeeld veel verschil tussen het geluid dat rechts van de mond wordt waargenomen en het geluid aan de linkerkant van de mond. Vooral bij het initiëel gebruik en bij de training van de spraakherkenner heeft de consistente plaatsing van de microfoon veel belang omdat de eerste trainingen het zwaarst doorwegen. (zie paragraaf 1.2.3.5). Eventueel kan er in het begin gebruik gemaakt worden van een spiegel om de juiste plaatsing van de microfoon te bepalen.
Het doorlopen van de hele trainingssessie klinkt vrij logisch, maar wordt door vele gebruikers achterwege gelaten. Om een redelijke herkenning te garanderen is er minimaal een training van 30 minuten nodig. Het is ook noodzakelijk dat alle getrainde zinnen correct herkend werden. Vele spraakherkenners bieden de mogelijkheid om ondanks een foute herkenning toch door te gaan met de volgende zin. Dit moet zo veel mogelijk vermeden worden.
Verder moet de eindgebruiker er ook op letten dat er tijdens de training niet overdreven wordt bij de articulatie. Omdat het model steunt op de uitspraak zoals die tijdens de training gebeurt, is het dus belangrijk om tijdens de training zo normaal mogelijk te articuleren en te spreken. Vele gebruikers menen ten onrechte, dat een spraakherkenner na een training waarin overdreven gearticuleerd wordt, zeker een normaal uitgesproken zin zal kunnen herkennen. Dit neemt niet weg dat een duidelijke articulatie tijdens het gebruik een goede herkenning teweeg brengt.
Voor het uitbreiden van de woordenschat kunnen enkele documenten gebruikt worden die een woordgebruik vertonen dat typisch is voor het herkenningsgebruik Het is uiteraard efficiënter zoveel mogelijk woorden op voorhand in het lexicon op te nemen dan ze later, tijdens de herkenning, woord voor woord te moeten verbeteren. Bovendien is het waarschijnlijk dat de eindgebruiker tijdens het concrete gebruik minder tijd zal kunnen vrijmaken om de spraakherkenner op de nieuw aangeleerde woorden te trainen.
Het
goed in acht nemen van de vorige 5 punten zou reeds een accuraatheid van om en
bij de 95 percent herkende woorden tot gevolg moeten hebben. De enige manier om
daarna het herkenningspercentage nog op te voeren, bestaat erin eigenhandig de
fout herkende woorden te verbeteren en
deze verbeteringen in te voeren in het systeem. Dit hele proces kan tot twee
weken duren. Deze periode zou ook moeten volstaan om de gebruiker bekend te
maken met de typische gebruiksfuncties. Het is tevens aan te raden om tijdens
deze twee weken, aantekeningen te maken van wat er moet gedicteerd worden,
alvorens daadwerkelijk te dicteren. Een goed dictaat vergt oefening en enkele
aantekeningen kunnen daarbij zeker van pas komen.
Het belang van goede documentatie voor zowel de software-ontwikkelaar als voor de eindgebruiker kan hier niet genoeg benadrukt worden. Voor elk project is in elke fase een uitgebreide documentatie vereist om de kansen op slagen van een project te verhogen. Een gebrek aan documentatie leidt in vele gevallen tot een onderschatten van de functionaliteit van verschillende softwarepakketten. Op die manier gaan vaak vele efficiënties en synergieën verloren.
Voor de eindgebruiker zal deze documentatie voornamelijk bestaan uit een duidelijke uiteenzetting van de gebruiksmodaliteiten, zodat de kans op een efficiënte benutting van de mogelijkheden van het systeem zo groot mogelijk wordt. Voor de software-ontwikkelaar daarentegen zal de documentatie, naast de technische en organisatorische factoren die reeds werden behandeld, zeker ook een analyse van de marktsituatie inhouden. De huidige marktsituatie wordt dan ook in de volgende paragraaf behandeld.
Na deze theoretische analyse zal onderzocht worden in welke mate spraakherkenningssystemen effectief in de markt geïntegreerd geraken. Het uiteindelijke doel van de Kritieke Succes Facoren is tenslotte het beslissen of een product al dan niet gelanceerd zal worden. Daarom is het in deze context belangrijk om ook de huidige situatie en de verwachte tendenzen te evalueren. Het belang van deze evaluatie wordt duidelijk aangetoond door volgend voorbeeld van Noll A. M. (1992):
The development of picturephone service is estimated to have cost
AT&T $500 million. Its market failure in the early 1970’s was a complete
surprise to AT&T...If the true reasons for picturephone’s failure in the
1970’s involved a lack of needs and even a basic dislike by most consumers and
potential users for face-to-face visual telecommunaction, than any
reintroduction of picturephone service would be doomed to repeat the market
failure of the past.
Noll suggereert hier dat het falen van beeldtelefonie in de jaren 70 mogelijks te wijten was aan een gebrek aan marktpotentiëel voor deze nieuwe technologie. Uit Vanhaverbeke (1990) leren we dat het bepalen van het marktpotentiëel gebeurt aan de hand van marktvoorspellingen. Het feit echter dat producten of markten voor zowel de producent als de consument nieuw zijn en een gebrek aan enige historische gegevens maken deze voorspellingen zeer moeilijk.
Voor spraaktechnologie merken we dat er de laatste jaren er zowel in de media als in de financiële wereld veel interesse is voor de nieuwe technologie, ook al gaat het hier voornamelijk over de toekomstige waarde van de betrokken bedrijven. We denken hier bijvoorbeeld aan de faam die Lernout&Hauspie verworven heeft, onder andere door de participatie die Microsoft op 11 september 1997 in dit Vlaamse bedrijf nam. Hieruit blijkt toch wel dat het fenomeen spraakherkenning ingeburgerd geraakt, maar of dit impliceert dat er een concrete marktvraag naar spraakherkenningsproducten is, blijft vooralsnog onzeker. Men moet namelijk goed in acht nemen dat ook de beurs de toekomstige waarde van een nieuwe technologie kan overschatten.
Een tweede aandachtspunt dat men bij
marktintroductie van een nieuw high tech product niet uit het oog verloren mag
verliezen, is het verschil tussen succesvolle experimenten met nieuwe producten
en werkelijke efficiëntie voor de eindgebruiker. In een artikel van Jane Webster (1998) lezen we:
Although it would have been preferable to study a client site, the
developer site was chosen because it is the only known large scale
implementation of desktop videoconferencing in the world.
Uit dit citaat blijkt het belangrijke verschil tussen experimenteerfase en het eindgebruik van high tech producten. Daarom zijn wij van mening dat het ook bij spraakherkenning aangewezen is om de verwachtingen ten aanzien van spraakherkenning enigszins te temperen. Volgende figuur (Figuur 1) uit 1997 illustreert dit voor de medische sector. In 1997 stond de technologie voor spraakherkenning in de medische sector al op punt. Pas drie jaar later ziet men in sommige ziekenhuizen de eerste implementaties met een daadwerkelijke efficiëntieverbetering opduiken. Een reden voor deze lange periode tussen het op de markt brengen en de concrete toepassingen kan gezocht worden in het reeds vermelde verschil tussen het gebruik van een spraakherkenner en het halen van resultaten ermee (zie paragraaf 1.1.2).
Figuur 1 Voorspelling van het gebruik
van spraaktechnologie door de 1000 belangrijkste bedrijven in de U.S.A.
(Comerford, Makhoul & Schwartz)
Een KSF-analyse laat ons toe na te gaan of – los van de strikt-financiële kosten-batenanalyse – de introductie van een nieuwe technologie succesvol kan zijn. Vanuit de verschillende invalshoeken blijkt dat de combinatie van spraaktechnologie en medische administratie, mits voldaan wordt aan een aantal voorwaarden, zeker een toekomst voor zich kan hebben.
Het loont dus alleszins de moeite in het perspectief van deze combinatie de technische evoluties inzake spraaktechnologie verder te analyseren.
Spraakherkenning is een eenvoudig concept: men spreekt iets in, en de computer interpreteert het. Hij voert het bevel uit of hij schrijft de ingesproken tekst uit. De technologie die er achter zit, is echter veel ingewikkelder en voor velen is spraaktechnologie dan ook een onbekend domein. Daarom zal er in dit hoofdstuk een uiteenzetting gegeven worden omtrent het vakgebied van de automatische spraakherkenning. Alvorens op de details in te gaan wordt eerst de globale taak van een spraakherkenner aangegeven. Vervolgens wordt er dieper ingegaan op de technische aspecten van spraakherkenning. Omwille van het zeer brede domein dat spraakherkenning bestrijkt, worden hier enkel de belangrijkste en de meest gebruikte werkwijzen dieper bestudeerd.
Ron Cole (1996)[5] beschrijft spraakherkenning als het proces dat een akoestisch signaal, dat opgenomen werd door een microfoon of een telefoon, omzet in een orthografische sequentie van woorden die deze geluidssignalen voorstellen. Deze sequentie van woorden kan het eindresultaat vormen, of kan dienen voor andere toepassingen zoals command & control. Wiskundig bekeken bestaat de taak van een spraakherkenner dus uit het afbeelden van een spraaksignaal op een rij symbolen of woorden. Om deze taak te vervullen, berekent de computer de kans op een klasse (woord of zin) w, gegeven de uiting y van deze woorden. Deze kans wordt voorgesteld door P(w|y). Aangezien enkel de kans van voorkomen van een woord P(w) en de kans van voorkomen van een akoestisch signaal op voorhand bekend zijn, dient de stelling van Bayes gebruikt te worden. Deze wordt gegeven door:
P(w|y) = P(y|w) * P(w) / P(y)
De enige onbekende in deze formule is P(y|w), de kans op uiting y gegeven
sequentie van woorden w en deze waarde moet dus gezocht worden. Later zal
blijken dat er nog andere manieren zijn om P(w|y) te berekenen. Maar voordat
het zover is moet er nog een en ander gebeuren.
Ten eerste moet de spraak geparametriseerd worden. De spraakherkenner heeft namelijk een symbolische representatie van de spraakdata nodig om bovenstaande kansen te kunnen berekenen. Dit parametriseren van spraak gebeurt met technieken uit de signaalanalyse. De volgende paragraaf behandelt dan ook enkele basale technieken en ideeën uit de signaalanalyse.
Een tweede taak van een spraakherkenner is het creëren van een omgeving waarbinnen de feitelijke spraakherkenning plaatsvindt. De standaard hiervoor is het gebruik van Hidden Markov Modellen (HMM's). Deze modellen kunnen eerst automatisch getraind worden en daarna zijn ze klaar voor gebruik. In de laatste paragraaf van dit hoofdstuk zal hier op ingegaan worden. Eerst zullen Hidden Markov Models in het algemeen behandeld worden, vervolgens zullen we het hebben over een aantal keuzes die gemaakt dienen te worden en daarna zal het trainen van en het herkennen met HMM’s beschreven worden.
Zoals vermeld in de vorige paragraaf, is de eerste fase van de spraakherkenning het parametriseren van het spraaksignaal. Een spraaksignaal is namelijk een fysische golfvorm die door een computer, die binair rekent, niet rechtstreeks gebruikt kan worden. Eerst zullen wat algemene technieken uit de signaalanalyse behandeld worden en vervolgens wordt er doorgegaan naar de signaalanalyse die belangrijk is voor spraakherkenning. In een volgende paragraaf komen de transformaties die op het gedigitaliseerde signaal worden uitgevoerd aan bod. Het laatste en belangrijkste deel behandelt het zoekproces naar een orthografische sequentie van woorden door de waarschijnlijkheden van voorkomen van deze woorden te bepalen. Figuur 2 geeft een overzicht van de verschillende componenten van een spraakherkenningssysteem.
Figuur 2 De componenten van een spraakherkenningssysteem. (Zue & Cole)
Om een gesproken signaal te converteren naar een voor een computer verstaanbaar formaat, is er een analoog-digitaalconversie (A/D conversie) van het ingesproken signaal nodig. Dit gebeurt tegenwoordig in elke PC dankzij de geluidskaart. Deze conversie bestaat uit het op regelmatige tijdstippen meten van de sterkte van het inkomend signaal en deze metingen dan binair voor te stellen zodat ze door de computer gebruikt kunnen worden. De tijd tussen de verschillende metingen bepaalt de zogenaamde samplingfrequentie. De kwaliteit van de metingen wordt bepaald door de bitresolutie.
Nemen we als voorbeeld een inkomend sinussignaal van 1 KHz, dan kunnen we bijvoorbeeld om de 0.125 milliseconden een meting doen. Als we een bitresolutie nemen van 8 bits, dan hebben we 2^8 (256) mogelijke waarden per meting. De computer moet dan 8000 keer per seconde 1 byte (8 bits) opslaan. Dit wordt weergegeven in Figuur 3 voor de eerste twee metingen. De sampling frequentie is in dit geval 8000 Hz en de bitrate is 8 bits. Aangezien het menselijk oor tonen tot 20 kHz kan waarnemen, volgt volgens de stelling van Nyquist[6] dat een samplingfrequentie van 40 kHz zou gebruikt moeten worden. In de praktijk wordt er voor CD’s, geluidskaarten, samplers, …een samplingfrequentie van 44,1 kHz gebruikt. Een bitresolutie van 16 bit is momenteel de standaard en komt overeen met een theoretische dynamiek van 96 dB[7], hetgeen meer dan voldoende is.
Figuur 3 Eerste 2 metingen aan 8KHz in 8bit
Omdat de menselijke stem kan maar tonen tot ongeveer 8 Khz kan voortbrengen, is voor het verstaan en het bewerken van een ingesproken opname een samplingfrequentie van 16kHz tot 20 kHz genoeg. Voor de bitresolutie volstaan waarden tussen 12 of 16 bits. Voor spraakherkenning moet er voor ogen gehouden worden dat het menselijk oor steeds beter blijft dan het computeroor en dat computers het dus moeilijk zullen hebben met geluid van lage kwaliteit. De keuze van de samplingfrequentie en van de bitresolutie hangt dus in hoge mate af van specifiek uit te voeren spraakherkenningstaak en van de beschikbare computerkracht.
In een volgende stap moet het begin en het einde van een gesproken signaal achterhaald worden. Als we een redelijke stille achtergrond gebruiken kan dit gemakkelijk gebeuren door de energie of de amplitude van het signaal te bekijken. De DC-offset is een DC-signaal ten gevolge van magnetische velden in de buurt van de AD-convertor. Dit DC-offset-niveau wordt gebruikt om de zero-crossing te bepalen. De zero-crossing is de plaats waar het signaal de DC-offset snijdt, of dus van positief naar negatief gaat. Daarom wordt er bij spraakherkenning meestal een meting van de stilte genomen om zo de DC-offset en energie van de continue ruis te achterhalen. Aan de hand van de frequentie van de zero-crossing en de amplitudes kunnen we dan de energie van het signaal bepalen. Als de energie dan de ruisenergie met een bepaalde waarde overschrijdt, kunnen we een ingesproken signaal veronderstellen.
Met een gedigitaliseerd signaal alleen hebben we onvoldoende informatie om spraak te herkennen. Om gesproken klanken te identificeren worden verschillende transformaties uitgevoerd op het digitale signaal. De drie belangrijkste zijn de windowing-transformatie, het opstellen van het vermogensspectrum en de Fourieranalyses.
De samplewaarden zoals die in de vorige paragraaf bekomen werden, gaan vervolgens door een bewerking (de representatie) voorgesteld worden als een opeenvolging van vectoren met hun zogenaamde parameters. Deze representatie bestaat eruit om op bepaalde tijdstippen (10 a 30 milleseconden) een nieuwe vector te genereren met een twintigtal parameters. Om deze tijdstippen te bepalen kapt men het signaal op twee plaatsen af en kan het tussengelegen stuk signaal gebruikt worden voor latere transformatie. Aangezien de zero-crossing gebruikt wordt om de frequentie te bepalen is het belangrijk dat het afkappen op de juiste plaats gebeurt. Het is bijvoorbeeld mogelijk dat er juist voor en juist na een zero-crossing afgekapt wordt waardoor er een soort dubbeltelling onstaat van het aantal zero-crossings, hetgeen dan weer een foute frequentieweergave tot gevolg heeft. Als de tijdsduur van een afgekapt signaal dus niet een geheel aantal keer de verschillende trillingstijden die in het signaal aanwezig zijn omvat, dan treden er onregelmatigeheden op in het spectrum..Zeker als het spectrum op een logaritmische as afgebeeld wordt zijn de problemen met het rigoureus afkappen van het signaal duidelijk zichtbaar, zoals men kan zien in Figuur 4. Dit fenomeen wordt windowing genoemd.
Figuur 4 Windowing (Werkstuk Spraakherkenning, Rens Kortmann, 1996[8])
In spraak zijn zoveel verschillende trillingstijden bevat dat nooit aan de voorwaarde van de trillingstijden kan worden voldaan. De enige mogelijkheid is dan het signaal aan de randen langzaam naar nul te laten gaan. Hiervoor kan een zogenaamd 'tapered window' gebruikt worden. Het tijdssignaal wordt met dit window vermenigvuldigd en het resultaat is een geleidelijk naar nul lopende figuur waar van het spectrum berekend kan worden. Het meest gebruikte window is een zogenaamd Hamming window.
Om de zo bekomen opeenvolging van vectoren met elk hun parameterwaarden verder te analyseren wordt er gebruik gemaakt van fonemen. Fonemen zijn de kleinste klankeenheden met een betekenisonderscheidende functie.[9] Zo telt het Nederlands 45 verschillende fonemen.[10] De opeenvolging van vectoren met elk hun parameterwaarden zoals die in de vorige paragraaf beschreven werd, wordt dan gebruikt om de waarschijnlijkheid te bepalen dat het inkomende signaal overeenstemt met de gehypotheseerde fonemen. Concreet interageert de bewerking van het inkomend signaal naar een geparametriseerde vector vaak met het bepalen van de waarschijnlijkheden dat een bepaald signaal overeenstemt met een bepaalde foneem, en is het onderscheid tussen beide processen niet echt duidelijk.
De bedoeling van dit proces is om zo veel mogelijk informatie uit het inkomend signaal te halen om de fonetische identiteit van een stukje gesproken tekst te achterhalen. Het gaat er hier hoofdzakelijk om factoren als sprekersidentiteit, akoestische effecten zoals achtergrondgeluiden en paralinguïstische factoren zoals emoties in de stem te elimineren. Het resultaat is dan een zo compact mogelijke voorstelling van het signaal.
Om dit te bekomen moeten de eigenschappen van het signaal die te wijten zijn aan vocale factoren onderscheiden worden van de eigenschappen ten gevolge van excitatie in het signaal. Daarom moet er vooral gekeken worden of er vibratie in het signaal zit of niet (stem of geen stem) en moet de eigenlijke frequentie van het signaal geëlimineerd worden (excitatie). Dit kan men bekomen door een vermogensspectrum van het signaal op te stellen. Het vermogensspectrum kan bekomen worden door de energieniveau’s van de verschillende frequenties te berekenen.[11] Het meest gebruikte algoritme om vermogensspectra te berekenen is de Welch's Averaged Periodogram Method.[12] Het voordeel van een vermogensspectrum is dat de fase (en dus ook de frequentie) van het signaal geen invloed meer heeft op de voorstelling van het signaal. Dit kan geen kwaad aangezien de fase van een signaal door mensen ook niet kan waargenomen worden en dus niet bijdraagt tot het “verstaan” van een signaal. Faseringen treden immers meestal op ten gevolge van kamereffecten en deze moeten toch geëlimineerd worden.
Het vermogensspectrum wordt in een laatste fase dan op logaritmische schaal voorgesteld. Dit biedt vele voordelen om ruis en veranderingen in het volume van het signaal weg te werken.[13] Aangezien de log van nul oneindig is, kan men heel lage energieniveaus niet voorstellen. Daarom wordt er een minimum op de waarde van het vermogen gezet en is tegelijkertijd de gevoeligheid voor zwakke ruissignalen weggewerkt. Om het gemiddelde van het spectrum af te vlakken wordt het inkomend signaal teznslotte met 6dB verhoogt door middel van een filter die op de relevante frequenties van het inkomend signaal werkt.
De Fourieranalyse is de belangrijkste stap uit de signaalverwerking voor automatische spraakverwerking. Om de korte vermogensspectra te berekenen bekijkt men overlappende stukjes (frames) van het signaal. Meestal wordt per tijdsframe van typisch 10 milliseconden een vector van parameters berekend, omdat in die tijdsduur spraak ongeveer stationair kan worden geacht. Uit 10 milliseconden valt echter niet genoeg informatie te halen, zodat om de 10 milliseconden een tijdsframe van 25 milliseconden wordt geanalyseerd. Het begin en het einde van elk frame wordt dan afgevlakt door middel van het reeds besproken tapered window, en vervolgens voert men een Fourieranalyse uit op het stukje signaal.
Bij een Fouriertransformatie ondergaat het signaal een tweede meting die de wiskundige beschrijving van het signaal vanuit het tijdsdomein naar het frequentiedomein transformeert. Dat wil zeggen: een functie van de tijd wordt omgezet in een functie van de diverse frequenties die in het signaal verborgen zitten. De Fourier getransformeerde van een functie is namelijk volledig gelijkwaardig aan die functie: het is enkel een andere manier om de functie weer te geven of te beschrijven.[14] Voor spraakherkenning is het vaak veel praktischer te werken met de Fouriergetransformeerde van een functie dan met de oorspronkelijke functie.
Het door de Fouriertransformatie bekomen spectrum bevat nog veel redundante informatie omwille van de harmonische boventonen. Deze boventonen worden weggewerkt met een onderdoorlaatfilter en vervolgens voert men een omzetting van de frequentiebanden naar logaritmische schaal door. Aangezien het ingesproken signaal (de menselijke stem) vrij gelijkmatig verloopt, zijn de energieniveaus in de opeenvolgende frequentiebanden sterk gecorreleerd. Deze correlatie is redundant en kan weggewerkt worden door gebruik te maken van een cosinustransformatie (een soort Fouriertransformatie waarbij men enkel cosinussen als basisfunctie gebruikt) in plaats van een gewone Fouriertransformatie. Het resultaat van deze cosinustransformatie op de log energieniveaus zijn de zogenaaamde spectraalcoëfficiënten. Deze spectraalcoëfficiënten zijn vrij ongecorreleerd en zorgen dus nog voor een verdere reductie in het aantal parameters. De eerste spectraalcoëfficiënt (C0) geeft de vorm van het cos-spectrum aan, onafhankelijk van het niveau. C1 geeft dan de verhouding tussen het bovenste en het onderste gedeelte van het spectrum aan. De hogere coëfficiënten geven steeds gedetailleerdere informatie over het spectrum.
Figuur 5 geeft de fouriergetransformeerde en het oorspronkelijke signaal weer van het Finse woord ‘kaksi’, dat ‘twee’ betekent. In de fouriertransformatie kunnen we duidelijk zien dat het woord begint met overwegend signalen rond 1 Khz (a-klank), vervolgens komen er hoge tonen rond de 4.5 Khz voor (s-klank) en tenslotte terug enkele lagere tonen rond de 2 Khz (i-klank). Bij het eerste signaal rond 1 Khz is aan de donkere plekken rond 2 en 3 Khz te zien dat de harmonische boventonen niet volledig weggefilterd zijn.
Tijd Fre- Quen-tie Ampli- tude
Figuur 5 Fouriergetransformeerde en oorspronkelijke signaal van het Finse woord ‘kaksi’ (Phonetics and Theory of Speech Production[15])
Alternatieven om de spectraalcoëfficiënten te berekenen zijn Linear Predictive Coding (LPC), Perceptual Linear Prediction (PLP) en z-transformatie. LPC geeft de effecten van een all-pole filter weer op het ingangssignaal om de parameters te berekenen. Op die manier wordt het signaal samengevat in een aantal coëfficiënten en geeft een hoge datareductie met een klein verlies aan informatie. Het grote voordeel bij LPC is dat het spectrum zelf nooit berekend moet worden. PLP voert ook een all-pole filtering uit op de energieniveaus, nadat deze door een filterbank werden gehaald. Met de zo bekomen parameters berekent men dan de spectraalcoëfficiënten. De z-transformatie wordt voornamelijk gebruikt in de meet- en regeltechniek. De getransformeerde functie in het z domein is nu een lineaire combinatie van verschillende machten van z geworden.
Vele systemen voegen aan het vermogensspectrum
nog informatie over de verandering in het vermogen toe. Dit doet men door over
vijf tot zeven frames een lineaire trend te voorspellen. Om informatie over de
tweede orde afgeleide van het vermogen weer te geven, wordt er ook lineair
geschat, maar dan over 15 tot 20 frames.
Zoals reeds vermeld kunnen ruisfactoren en DC-offset gemakkelijk weggewerkt
worden in het spectrum. Dit doet men ook frame per frame.
In deze fase moeten de bekomen spectraalcoëfficiënten vergeleken worden met een referentiemodel dat de verschillende fonemen voorstelt. Aangezien de spectraalcoëfficiënten ongecorreleerd zijn kan men hiervoor gebruik maken van de Euclidische afstand tussen het vooropgestelde en het bekomen model. Hierbij geeft men aan elke coëfficiënt een wegingsfactor mee. Voor het bepalen van de wegingsfactoren kan men gebruik maken van statistische methodes. Men kan een coëfficiënt bijvoorbeeld omgekeerd evenredig laten doorwegen met zijn standaardafwijking. De meest gebruikte methode is echter het Hidden Markov Model (HMM). Eerst zal kort aangehaald worden wat Hidden Markov Modellen zijn, dan volgt een beschrijving van wat Akoestische en Language Modellen zijn, en tenslotte wordt het gebruik van Hidden Markov Modellen voor de training van spraakherkenning en voor spraakherkenning uitgelegd.
Het belangrijkste foneemgebaseerde akoestisch kerkenningsparadigma van de laatste 10 jaar is het Hidden Markov Model (HMM). Gewone Markov Modellen bestaan uit een aantal toestanden, waarin een waarneming gedaan wordt. Deze waarneming is in het geval van spraakherkenning bijvoorbeeld een letter. Tussen de verschillende toestanden zijn paden aangebracht, zodat het mogelijk is om van de ene toestand in de andere toestand te geraken. Of deze overgang van toestanden werkelijk plaatsvindt wordt bepaald door de overgangstoestanden. In Hidden Markov Modellen (HMM) is de waarneming die in de verschillende toestanden wordt gedaan verborgen. Deze wordt namelijk aangegeven door een serie waarnemingswaarschijnlijkheden. Alle waarnemingen die kunnen worden gedaan krijgen een bepaalde kans om waargenomen te worden.
In spraakherkenning worden meestal per model drie toestanden gebruikt, die van links naar rechts doorlopen kunnen worden. Hierbij is het wel mogelijk om vanuit een toestand weer in dezelfde toestand terecht te komen en soms ook om juist een toestand over te slaan (zogenaamd skip transitions). Deze modellen worden ook wel 'left-to-right models' genoemd, dit in tegenstelling tot de zogenaamd ergodische modellen, waarin vanuit een toestand ook 'achteruit in de tijd' verplaatst kan worden. Verder is het vermeldenswaardig dat HMM's in spraakherkenning twee 'non-emitting' toestanden heeft, dat wil zeggen toestanden waarin geen waarnemingen worden gedaan. Dit zijn in praktijk de eerste en de laatste toestand van een model. Zij zijn toegevoegd vanwege de voordelen die ze leveren als later in het bouwproces de HMM's gekoppeld worden in een netwerk.
De opeenvolging van de verschillende frames, zoals die uit het geluidssignaal wordt afgeleid, wordt gezien als een realisatie van een reeks elementaire processen zoals beschreven door een Hidden Markov Model. Het HMM bestaat dan uit de volgende twee stochastische processen: een Hidden (onderliggende) Markov reeks die tijdelijk kan veranderen, en een observeerbare reeks die kan afgeleid worden uit de spectraalcoëfficiënten. Deze methode blijkt flexibel en goed genoeg te zijn om spraak te herkennen met een vocabularium van duizenden woorden.
Het HMM laat dus toe de kans te bereken dat een bepaalde reeks spectraalcoëfficiënten Yti, die uit de Fouriertransformatie zijn afgeleid, wordt waargenomen als de uitgesproken woorden X zijn. Gegeven de observeerbare reeks Yti wordt een schatting van W gemaakt aan de hand van volgende formule:
Ŵ = max{x} ( P( Yti | X) * P( X ) )
Ŵ is dan het meeste
waarschijnlijke a-posteriori onderliggende woord. Men kan
P (Yti | X) berekenen aan de hand van een Akoestisch Model (AM). P (X) kan
berekend worden met een Language Model (LM).
Een Hidden Markov Model is niets meer dan een
paar stochastische variabelen (X,Y). Hierin stelt X de eerste orde Markov reeks
voor, en is dus niet rechtstreeks observeerbaar. Y is een variabele om de reeks
spectraalcoëfficiënten voor te stellen, of algemener gesteld zijn dit de
observaties.
Bij het gebruiken van HMM’s voor spraakherkenning zijn er drie algoritmes nodig. Ze zijn ontwikkeld om drie belangrijke gegevens uit een HMM te halen, zodanig dat spraakherkenning toegepast kan worden. De eerste twee hebben te maken met het herkennen van een serie observaties en het derde met het trainen van het model. De gegevens zijn:
1. De Evaluatie: Wat is, gegeven een model X en een serie waarnemingen Y, de
kans dat het model deze serie waarnemingen heeft gegenereerd?
2. Het Padvinden: Wat is, gegeven een model X en een serie waarnemingen Y, het meest waarschijnlijke pad door het model dat deze serie waarnemingen oplevert?
3. Het Trainen: Hoe moeten, gegeven een model en een aantal waarnemingen Y, de parameters van een model ingesteld worden, zodat het model een hoge waarschijnlijkheid heeft om de observaties te produceren?
In 1 moet een kans berekend worden. In 2 moet een pad met de hoogste kans
bijgehouden worden. En in 3 moeten per trainingssessie de parameters van het
model bijgesteld worden.
Deze kansen bepalen de kansverdelingen van de overgangen tussen de
verschillende toestanden. Als men de waarden voor de verschillende dimensies
van de geparametriseerde vectoren discreet houdt, heeft men een zogenaamd
Discreet HMM. Elk van de Q dimensies van elke geparamitriseerde vector kan dan
maar N verschillende waarden aannemen zoals te zien is in Figuur 5.
0,4 Source 1
Figuur 6 Discreet HMM (HMM Methods in Speech
Recognition[16])
Anderzijds kan men de continue ruimtes gebruiken voor de observaties, en
heeft men dus continue verdelingen in het HMM. In het continue geval moeten er
wel sterke beperkingen opgelegd worden aan de verdelingsfuncties om het aantal
te schatten parameters beheersbaar te houden. Meestal gebruikt men
n-dimensionale Gauss- of Laplaceverdelingen en laat men enkel de parameters van
deze verdelingen variëren. De berekeningen voor het discrete model zijn
uiteraard eenvoudiger dan die voor het continue model, maar gaan echter ten
koste van de accuraatheid.
Door onafhankelijkheid te onderstellen tussen de verschillende dimensies,
kan men de kansen van de verschillende overgangen simpelweg berekenen door het
product te nemen van de kansen van de overgangen van iedere dimensie apart. De
resultaten van deze vermenigvuldigingen vormen samen met de trainingsgegevens
(zie
paragraaf 2.2.3.5) het Akoestisch Model.
Het Language Model berekent de waarschijnlijkheid dat een zekere sequentie
van woorden uitgesproken wordt. Dit kan zeer algemeen uitgedrukt worden:
P ( W ) = p (w1,w2,w3,...wn) = Π {i=1..n} p ( wi | w0,..,w(i-1) )
Deze kansen kunnen op voorhand bepaald worden en zijn onafhankelijk van de
spreker. Ze worden voorgesteld in een N-gram. Een N-gram is een statistisch
model dat de kans op een woord geeft naar aanleiding van een aantal voorgaande
woorden. Het meest succesvolle N-gram model van de laatste 2 decennia is het
trigrammodel. Bij dit model worden de laatste 2 herkende woorden gebruikt om de
waarschijnlijkheid van voorkomen van het nieuwe woord te bepalen.[17]
Aan de evaluatie van een inkomend signaal is het Forward algoritme verbonden. Het Forward algoritme berekent de kans om op tijdstip t in toestand j te zitten en waarnemingen y(1) t/m y(t) al gedaan te hebben. Het algoritme werkt recursief, waarbij op elk tijdstip de som genomen wordt van de kansen in de voorgaande toestanden, vermenigvuldigd met de overgangswaarschijnlijkheden naar de huidige toestand. Dit wordt dan weer vermenigvuldigd met de waarnemingswaarschijnlijkheid in de huidige toestand. Zo kan recursief toegewerkt worden naar het laatste tijdstip. De toestand waarbij de kans het grootst is, is dan de eindtoestand. Dit algoritme wordt ook vaak logaritmisch uitgevoerd, omdat er nogal veel vermenigvuldigingen in voorkomen. Logaritmisch mag je deze vermenigvuldigingen vervangen door optellingen, wat veel minder rekentijd kost.
Bij het Padvinden (paragraaf 2.2.3.2) wordt veel gebruik gemaakt van het Viterbi
algoritme. Het Viterbi algoritme is een aanpassing van het Forward algoritme.
Waar in het Forward algoritme een sommatie plaats vindt over de kansen die bij
elkaar kwamen, daar vindt in het Viterbi algoritme een selectie plaats. De
selectie is gebaseerd op het hoogste product van kans in een vorige toestand en
de overgangswaarschijnlijkheid naar de huidige toestand. Deze meest
waarschijnlijke voorganger wordt dan ook onthouden en zo wordt het meest
waarschijnlijke pad bijgehouden. Ook hier wordt vaak de logaritmische variant
toegepast.
Het Forward-Backward algoritme, ook wel het Baum-Welch algoritme genoemd, berekent de zogenaamde state occupation probability, die de kans weergeeft om op tijdstip t in toestand j te verkeren. Hierbij wordt gebruik gemaakt van de Forward probability, zoals hierboven beschreven, maar ook van de Backward probability. De Backward probability is analoog aan de Forward probability, maar de recursie begint nu aan het eind van de uiting, ten einde uit te komen op de kans om in tijdstip t in toestand j te verkeren, terwijl waarnemingen y(t+1) t/m y(T) nog gedaan moeten worden. Op grond van deze drie probabiliteiten worden de overgangs- en waarnemingswaarschijnlijkheden aangepast om het model te trainen volgens het Baum-Welsch algoritme.
Bedoeling van een training is de fonemen van een spreker zo juist mogelijk te achterhalen. Zoals reeds vermeld in paragraaf 2.2.2.1 is een foneem de kleinste significante eenheid in een gesproken signaal. Als in het geparametriseerde spraaksignaal precies staat aangegeven welke vectoren bij welk foneem horen, dan kan per foneem een HMM worden gemaakt. Eerst wordt een initieel model gemaakt wat gebeurt door zogenaamde Viterbi training. Bij Viterbi training wordt de gemiddelde vector van de distributie van een bepaalde toestand eenvoudigweg berekend door het gemiddelde te nemen van de inputvectoren die bij die toestand horen. Bij geïsoleerde spraak wordt er door de spreker een korte pauze ingelast tussen elk woord. Er is dan bekend welke inputvectoren bij welke woord hoort aangezien de computer tijdens de training op voorhand weet welke woorden er worden uitgesproken. Daarna vindt eenvoudige Baum-Welch reestimation plaats, zoals hoger beschreven. Elke trainingssessie wordt de state occupation probability uitgerekend en op grond daarvan worden de overgangs- en waarnemingswaarschijnlijkheden aangepast. Dit gaat zo door totdat de waarschijnlijkheden niet meer veranderen. Dan is het model goed getraind.
Bij continue spraak kan Viterbitraining niet meer plaatsvinden, omdat de spraak
immers niet meer gesegmenteerd is. Hier wordt begonnen met een zogenaamde Flat
Start. Als initiële waardes van de HMM parameters worden de globale gemiddelden
genomen van alle inputvectoren. Het Baum-Welch reestimation algoritme wordt
aangepast tot embedded reestimation. Dit houdt in dat stukken spraak die langer
zijn dan een foneem in hun geheel worden bekeken, samen met de transcriptie van
dat stuk spraak. Dit heeft als voordeel dat geen labels tussen de verschillende
woorden hoeven aangebracht te worden - dus minder onnauwkeurigheden daarin- en
dat er rekening wordt gehouden met de uitspraak van een woord afhankelijk van
de sequentie woorden waarin het woord voorkomt.
De hierboven beschreven methodes leveren basis HMM's, die verder verbeterd kunnen worden. Methodes hiervoor zijn bijvoorbeeld het contextafhankelijk maken van modellen, het introduceren van Gaussische mixen en het binden ervan. Hoe dit in zijn werk gaat zal hieronder beschreven worden.
Bij het contextafhankelijk maken van modellen worden modellen voor monofonen
omgezet in modellen voor di- of trifonen. Zo kan bijvoorbeeld uit de monofone
modellen van de letters E, U en R een difoon model gemaakt worden voor de E+U
of een trifone model voor de E+U+R. Dit gebeurt door middel van het klonen van
de modellen, dit wil zeggen dat de modellen van de afzonderlijke monofonen
worden gekopiëerd en achter elkaar gezet worden. Dan vindt er weer training
plaats om de nieuw gecreëerde trifone modellen nieuwe parameters te geven. Door
het contextafhankelijk maken van de modellen, vindt er een aanmerkelijke
verbetering bij de herkenning plaats, wat ook te begrijpen is, omdat een EU
klank nu eenmaal heel anders klinkt dan een aparte E en U.
Een tweede manier om HMM's te verbeteren is het introduceren van Gaussische mixen. Hierbij wordt de waarnemingswaarschijnlijkheid niet bepaald door één Gaussische verdeling zoals in paragraaf 2.2.3.2 werd beschreven, maar door verschillende verdelngen met elk een eigen gemiddelde en standaarddeviatie. Tevens worden er gewichtswaardes aan de verschillende verdelingen toegekend die bepalen in hoeverre ze bepalend zijn in het berekenen van de waarnemingswaarschijnlijkheid. Deze gewichtswaardes moeten ook getraind worden met de hierboven genoemde Baum-Welch methode. Het mixen van Gaussische verdelingen leidt tot een verbetering van de herkenning, maar niet zo spectaculair als dat gebeurt bij het klonen van modellen.
Een derde methode om de HMM's te verbeteren is het zogenaamde parameter tying. Dit gebeurt vaak in combinatie met een van de hierboven beschreven technieken. Zo kunnen de diverse Gaussische mixen allemaal dezelfde matrix van standaard deviatie delen (tied mixtures). Of kunnen bi- en tri-fonen die erg op elkaar lijken gebruik maken van dezelfde Gaussische distributies (gegeneraliseerde bi- en tri- fonen). In elk van deze gevallen wordt een zogenaamd Gaussisch Codebook aangelegd waarnaar verwezen kan worden. Het voordeel van tying is verkorting van de rekentijd en het meer robuust maken van de HMM's. Een nadeel is de verminderde nauwkeurigheid.
Geïsoleerde spraak is eenvoudig te herkennen, juist omdat de foneem- en woordgrenzen gegeven zijn. Het is dus zaak om per segment het model te vinden dat het beste past. Dit kan gemakkelijk gebeuren door toepassing van het Forward algoritme. Het model met de hoogste kans stelt dan het herkende symbool of woord voor. Verder is een Language Model aanwezig dat van de herkende symbolen, meestal fonemen een grotere symboolstructuur maakt, in dit geval woorden. Figuur 7 geeft een voorbeeld van hoe zo een model er kan uitzien. Als tevens het doorlopen pad door de modellen gevonden moet worden, dan wordt het Viterbi algoritme toegepast.
Figuur 7 Language Model (Helpbestand van Philips
Speechmagic)
Bij continue spraakherkenning zijn er geen grenzen gegeven tussen de verschillende woorden. Het Viterbi algoritme wordt dan uitgebreid met een zogenaamde 'token passing' optie. Eerst moet een netwerk worden aangelegd waarin alle woorden in dit netwerk zijn opgebouwd uit de HMM's van de fonemen. In alle knopen van dit netwerk bevinden zich tokens, die aangeven wat de maximale kans is om in die knoop te komen en tevens de volgorde van de modellen die daarvoor al doorlopen is. Door tokens door te geven wordt het pad bijgehouden dat de hoogste kans heeft de inputvectoren te herkennen. Zo worden alle modellen parallel doorlopen. Als het eind van een woord bereikt is wordt het laatste token -het exit- token- weer teruggevoerd naar de begintoestanden van alle woorden. Daar vindt de Recording Decision procedure plaats: Elk tijdstip wordt er van alle terugkomende exittokens de beste gekozen en er wordt een Word Link Record (WLR) aangelegd, waarin de Forward probability, het tijdstip, het verkozen woord en een link naar het vorige woord opgenomen is. Op die manier ontstaat een heel netwerk van woorden, dat van rechts naar links doorlopen kan worden. Het netwerk blijft zich na elk tijdsframe uitbreiden met een WLR totdat de laatste inputvector verwerkt is. Dan wordt de WLR met de hoogste Forward probability gekozen en via de links wordt de herkende zin afgelezen.
Bovenstaand algoritme zal in praktijk veel tijd in beslag nemen, vanwege alle token passings en Forward algoritmes die uitgevoerd moeten worden. Daarom zal in praktijk Beam Search toegepast worden. Bij Beam Search zijn HMM's ofwel actief ofwel inactief. In het begin zijn alle modellen actief, maar ze worden gedesactiveerd als hun Forward probability onder een waarde daalt, die afhankelijk is van de hoogste Forward probability in alle actieve modellen. Pas als deze inactieve modellen opnieuw een token ontvangen van een vorig model, worden ze weer actief en kunnen ze zelf ook tokens doorgeven. Op deze manier wordt het aantal tokens dat per tijdsframe wordt doorgegeven beperkt en daarmee ook de rekentijd.
Een ander probleem bij het primitieve token passing model is het feit dat er nogal veel beslag wordt gelegd op het werkgeheugen. Alle Word Link Records moeten namelijk in het geheugen blijven staan totdat de gehele spraakuiting verwerkt is. Dit is niet nodig omdat veel WLR's niet op actieve paden liggen. Daarom laat men alleen veelbelovende paden bestaan. Dit wordt Partial Traceback and Garbage collection genoemd.
Een derde aanvulling op het primitieve token passing model is de toevoeging van een Language Model (paragraaf 2.2.3.3). Op grond van deze N-Grams zullen sommige paden niet doorzocht worden, wat weer reductie van de rekentijd betekent.
In dit hoofdstuk worden 2 Nederlandstalige spraakherkenners besproken. Hierbij zal er vooral gekeken worden naar de mogelijke integratie met een workflow van beide producten. Ook de praktische werking en de technische aspecten van beide pakketten worden hier behandeld. Per product worden dan de verschillende processen en de verschillende componenten besproken.
SpeechMagic v3.1 is het continue
spraakherkenningprogramma van Philips. SpeechMagic bestaat niet als
afzonderlijk systeem, maar is uitdrukkelijk bedoeld om geïntegreerd te worden
in workflow-geöriënteerde applicaties. Deze integratie kan gebeuren met een
traditionele API of met ActiveX. Verder is er een hele reeks zogenaamde
contexten beschikbaar. Contexten bestaan uit een Language Model en een lexicon
die specifiek gericht zijn op een bepaald toepassingsgebied, zoals bijvoorbeeld
advocatuur, radiologie,... Deze contexten kunnen afzonderlijk aangekocht
worden, afhankelijk van de specifieke eisen van de gebruiker en van het
toepassingsgebied van de applicatie. Naast deze contexten wordt er door
SpeechMagic ondersteuning geboden voor 4 talen: Engels, Duits, Frans en
Nederlands.
Een groot voordeel van SpeechMagic is de client-server mogelijkheid van het
programma. In dit systeem staat de client enkel in voor het opnemen van het
gesproken signaal. Door gebruik te maken van de CELP_FB[18] compressie is hier slechts 14.5 MB/uur nodig op de locale harde schijf
voor de tijdelijke opslag van een dictaat. Een nadeel van deze compressie is
wel dat er heel wat rekenkracht voor vereist is. Praktisch is er minstens een
Pentium II 300 Mhz nodig. Indien er gewone ongecompresseerde
PCM-geluidsbestanden[19] gebruikt worden, beperken de minimumvereisten zich tot een Pentium 166
Mhz. Eenmaal het dictaat af is kan het doorgestuurd worden naar de server voor
de omzetting in tekst.
.
De bedoeling van de training is het opmaken en
aanpassen van een gebruikersspecifiek referentiebestand. In dit bestand zit
alle informatie die nodig is voor de herkenning van de spraak die eigen is aan
een bepaalde gebruiker. Concreet wordt er vertrokken met een referentiebestand
voor een man of een vrouw. Dit referentiebestand wordt dan na een initiële
training van minimum 10 minuten aangepast aan de spreker. Tijdens deze initiële
training moet de gebruiker een tekst voorlezen. Nadat het initiële
referentiebestand is opgesteld, wordt het incrementeel aangepast. Dit wil
zeggen dat er steeds rekening wordt gehouden met de vorige aanpassingen. Vooral
voor de akoestische aanpassing is dit van belang, omdat er voor een goede
akoestische aanpassing minstens een uur gesproken gegevens noodzakelijk zijn en
deze gegevens praktisch nooit in een keer beschikbaar zijn.
Tijdens de herkenning worden de gesproken
signalen omgezet in een reeks vectoren. SpeechMagic berekent vervolgens de
kansen van alle varianten van al de mogelijke woorden, en kiest het woord (of
de woorden) met de hoogste waarschijnlijkheid van voorkomen. Hierbij wordt
gebruik gemaakt van de regel van Bayes zoals werd uitgelegd in paragraaf 2.1.
P (A | W) * p (W)
P (W | A) =
Constante
A = de akoestische vector
W = een bepaald woord of een opeenvolging van woorden
P (A | W) = kans dat het inputsignaal A het woord W voorstelt = Akoestisch Model
P (W) = kans dat een woord of een woordenreeks gebruikt wordt (onafhankelijk
van hetgeen ingesproken werd) = Language Model
Aangezien de kansen van de woorden enkel onderling vergeleken moeten worden,
kan in de oorspronkelijke formule van Bayes de noemer P (A) vervangen worden
door een constante of gewoon weggelaten worden.
De
akoestische referenties die nodig zijn voor de spraakherkenning zijn
afhankelijk van de spreker. Zij geven een representatie van de typische fonemen
van de spreker. Voorts houdt SpeechMagic ook nog rekening met de gekozen
context voor een bepaald dictaat om dit dictaat te herkennen.
1.
Minstens
1 fonetische transcriptie, maar er zijn er meerdere mogelijk. Wanneer een nieuw
woord opduikt, wordt dit woord automatisch omgezet naar zijn fonetische transcriptie.
2.
Formatting
flags: dit is bijvoorbeeld de CAP flag die bepaalt dat de volgende letter een
hoofdletter moet zijn. Voorts zijn er nog flags om spaties en dergelijke te
plaatsten.
3.
De
woordklasse: er worden 9 woordklassen gebruikt zoals NC (nummers), EN
(opsommingen), DM (maand), TM (minuten),...
4.
De
datum waarop het woord voor het laatst gebruikt werd
5.
De
frequentie van gebruik van het woord
6.
Nummer
voor de interne identificatie van het woord
Naast het contextgebonden lexicon heeft
SpeechMagic ook nog een background lexicon. Dit biedt het herkenningssysteem
een lexicon aan voor woorden die niet in het specifieke lexicon voorkomen. Het
gaat hier voornamelijk om zeer algemene woorden. Dit lexicon dient wel
afzonderlijk geïnstalleerd te worden. Periodiek worden de oudste en minst
gebruikte woorden uit het lexicon verwijderd, dit om de grootte van het lexicon
wat binnen de perken te houden.
Het Language model hoort steeds bij een
bepaalde context. Zoals hoger reeds vermeld, wordt het afgeleid van een
initieel Language Model en vervolgens aangepast tot een gebruikersspecifiek
model.
Dit is eigenlijk een tekst post processor en is
bijvoorbeeld verantwoordelijk voor het omzetten van voluit geschreven cijfers,
data,... in het juiste formaat. Dit gebeurt bij SpeechMagic in een Finite State
Network dat eigen is aan de bepaalde context.
De Correctie Editor dient om woorden die niet,
of fout herkend werden te verbeteren. Bij SpeechMagic werkt de Correctie Editor
als een add-in voor Word, meer bepaald gaat het om een template met de nodige
macro’s om het dictaat synchroon met de cursor te laten afspelen. Het uitvoeren
van deze macro’s blijkt in praktijk niet zo evident.
Philips biedt wel de mogelijkheid om het afspelen van de tekst te controleren
met een pedaal (de zogeheten footswitch).
Hier kan een onderscheid gemaakt worden tussen
de contextaanpassingen en de akoestische aanpassingen.
Alle nieuwe woorden worden uit een verbeterd
tekstbestand gehaald. Deze lijst wordt dan gebruikt om het lexicon bij te
werken en om het Language Model aan te passen. Om het lexicon correct bij te
werken wordt op het moment van de update aan de gebruiker gevraagd of het om
een ‘normaal’ of om een ‘speciaal’ woord gaat. Indien het een speciaal woord
is, moet het programma geholpen worden bij het opstellen van de fonetische
transcriptie. De gebruiker kan ook ingeven dat het woord uit het lexicon
verwijderd moet worden.
Om het Language Model bij te werken gebruikt
SpeechMagic een acoustic daemon. Deze daemon zorgt er voor dat dictaten die
volledig verbeterd werden, een tweede keer verwerkt worden, met dit verschil
dat er nu een aangepast lexicon beschikbaar is. Op basis van deze herkenning wordt
het referentiebestand van de gebruiker dan bijgewerkt.
Lernout & Hauspie (L&H) levert bij zijn
Voice Xpress 4 een SDK[20] die programmeurs de mogelijkheid biedt de L&H Voice Xpress continue
spraaktechnologie te integreren in zelfgebouwde applicaties. De SDK kan enkel
gebruikt worden als Voice Xpress geïnstalleerd is. Net zoals bij SpeechMagic
van Philips, zijn er ook hier verschillende contexten beschikbaar.
Lernout&Hauspie noemt ze ‘specialiteiten’, maar ze komen volledig overeen
met de contexten zoals die bij Philips SpeechMagic genoemd worden. Naast de 4
beschikbare talen wordt er bij Voice Express nog een onderscheid gemaakt tussen
het Vlaams en het Nederlands.
De SDK van Lernout&Hauspie biedt enkel de
mogelijkheid om applicaties uit te breiden met real-time spraakherkenning. Ook
de server-client architectuur zoals die bij SpeechMagic voorkomt, behoort niet
tot de functionaliteiten van Voice Express. Indien de gebruiker dus een batch-processing systeem wenst, moet
dit expliciet geprogrammeerd worden in de hosttaal. Ook de client-server
uitbreiding is de volledige verantwoordelijkheid van de programmeur.
Voice Express bevat naast de spraakherkenningcomponenten ook text-to-speech
componenten en een Language Tool. De Language Tool biedt de
applicatieontwikkelaar de mogelijkheid een bestaande specialiteit aan te passen
door er woorden aan toe te voegen en de statistische eigenschappen van bepaalde
woorden te veranderen. De Language Tool zorgt voor de verwerking van deze
aanpassingen zodat ze onafhankelijk van de spreker kunnen gebeuren.
Aangezien Voice Xpress enkel in real-time kan
werken, is er hier geen sprake van verschillende processen. Zoals reeds vermeld
in de vorige paragraaf wordt de ontwikkeling van de workflow van een dictaat
volledig aan de applicatie-ontwikkelaar overgelaten. Zodoende is er ook niet
echt sprake van de lifecycle van een dictaat in Voice Xpress.
ACC-SSC-INTEC
is een groepering van drie dienstverlenende organisaties die samenwerken om aan
de gezondheidszorg- en welzijnsvoorzieningen een optimale service te kunnen
bieden. Samen staan zij in voor de dienstverlening aan 881 aangesloten
instellingen waaronder ziekenhuizen, rusthuizen, instellingen voor kind-,
jeugd- en gehandicaptenzorg en medische, sociale en pedagogische instellingen.
SSC
(Sociaal Secretariaat Caritas VZW) houdt zich als erkend sociaal
secretariaat vooral bezig met
loonberekingen en juridisch advies in de welzijnssector. De leden kunnen ook
rekenen op assistentie bij formaliteiten die zij als werkgever moeten
vervullen.
INTEC is
een CV die zorgt voor een prestatiegebonden dienstverlening zoals tarifering,
facturering voor de ziekenhuizen en individuele dienstverlening. Verder
bemiddelt deze afdeling bij de aankoop of verkoop van apparatuur en software.
ACC staat
voor Administratie Centrum Caritas en is een VZW die al meer dan 35 jaar
informatiseringsoplossingen aanbiedt, exclusief voor de gezondheidszorg en
welzijnssector. De voornaamste taak is het uitwerken en het aanbieden van
geïntegreerde totaaloplossingen voor de gezondheidssector. Dit houdt een
automatisatie in van zowel de administratieve, de financiële als de medische of
medisch-technische en zorgondersteunende taken van een bedrijf uit de
gezondheidssector. Verder worden ook logistieke assistentie en andere
organisatorische aspecten verzorgd. Momenteel werkt ACC met 525 aangesloten
instellingen. Tabel I toont de verdeling van deze 525 instellingen naar hun
activiteiten.
Tabel I : Verdeling naar activiteiten van
instellingen (http://www.accnet.be)
Aangesloten instellingen |
|
Ziekenhuizen |
65 |
Rusthuizen en rust- en
verzorgingstehuizen
|
227 |
Voorzieningen jeugd- en
gehandicaptenzorg
|
98 |
Kinderdagverblijven |
74 |
Medische, sociale en
pedagogische instellingen |
|
- centra voor geestelijke
gezondheidszorg |
10 |
- congregaties |
8 |
- beschut wonen |
21 |
- psychiatrische
verzorgingstehuizen |
7 |
- diversen |
15 |
TOTAAL |
525 |
Om deze
taken zorgvuldig uit te voeren, dient ACC lange termijnrelaties met zijn
klanten aan te gaan. Alle producten worden ontwikkeld in nauw overleg met en op
maat van de gebruikers uit de diverse ziekenhuizen, rusthuizen,
kinderdagverblijven,... In uitzonderlijke gevallen worden soms ook individuele
aanpassingen doorgevoerd. Verder is ook het onderhouden, het up-to-date houden
en het verbeteren van de softwarepakketten een permanente taak. Zo zijn vele
functionaliteiten van de verschillende pakketten sterk afhankelijk van de
wettelijke bepalingen inzake de facturering. Elke wetswijziging met betrekking
tot deze bepalingen moet dan ook een onmiddellijke aanpassing in de
functionaliteit van pakketten tot gevolg hebben. Maar ook aan de nieuwe
ontwikkelingen dient er voldoende aandacht besteed worden. Er worden constant
nieuwe modules aan de bestaande pakketten toegevoegd. Zo werd er onlangs een
integratie met SAP verzorgd voor de applicatie voorraad- en aankoopbeheer in
ziekenhuizen.
De bedoeling van het project dat gerealiseerd werd bij ACC was vooral de nodige voorbereidingen te treffen om spraaktechnologie te introduceren in de ACC-toepassingssoftware. Het ideale geval zou zijn dat vanuit de gedicteerde protocols zoals die door een dokter ingesproken worden, de nodige codering rechtstreeks en automatisch zou gegenereerd worden. Deze codering gebeurt door middel van Minimale Klinische Gegevens (MKG’s). De MKG’s zijn de gegevens die door de overheid vereist zijn telkens iemand in een ziekenhuis wordt opgenomen. Ze worden opgesteld per aandoening van een patiënt en dienen vooral voor de budgettering van de subsidies die een ziekenhuis verkrijgt. Verder kunnen ze ook nuttig zijn om de geschiedenis van een patiënt na te gaan. Naast de diagnosen zoals die door een dokter gesteld worden, bevatten MKG’s ook gegevens over de verschillende ingrepen of procedures die uitgevoerd werden. Deze procedures kunnen opgesplitst worden in chirurgische en niet-chirurgische ingrepen.
Het is duidelijk dat de informatie die vereist is voor het opstellen van MKG’s vooral van de verschillende dokters komt. De praktijk wijst echter uit dat deze informatie meestal onvolledig is. Zo stellen vele dokters zich tevreden met het onzorgvuldig vermelden van slechts 1 diagnose en 1 procedure. Daarom worden deze gegevens in de praktijk steeds nagekeken door een medische registratie-equipe. Zij halen vele fouten uit de rapporten van de dokters, maar kunnen uiteraard niets verhelpen aan de onvolledigheid. De medische registratie-equipe is ook verantwoordelijk voor het opstellen van ICD-9-CM-codes. ICD-9-CM codes zijn eigenlijk gewoon unieke identificaties van alle mogelijke aandoeningen. Het opstellen van deze codes is in de praktijk een tijdrovende bezigheid die eigenlijk alleen bestaat uit het opzoeken van ICD-9-CM-codes voor elke aandoening die vermeld wordt in een medisch dossier dat door een arts werd opgesteld. De ICD-9-CM-codes zijn zeer belangrijk bij het opstellen van MKG’s.
Een eerste stap in de uitbreidingen van de ACC-software zou bestaan uit het
automatisch genereren van deze ICD-9-CM-codes met behulp van taaltechnologie.
Het bedrijf L&C biedt hiervoor een zogenaamde codefinder aan.
Een tweede stap is het uitbreiden van de bestaande software met
spraakherkenning (zie hoofdstuk 6).
ACC beschikt reeds over een pakket voor het registreren van Minimale Klinische Gegevens. Het initiële opzoekwerk van de correcte ICD9-codes op basis van medische informatie is momenteel voornamelijk een manueel werk, waarbij sterk gesteund moet worden op de ervaring, expertise en inzichten van de codeur. De L&C-codefinder zal precies op dit vlak ondersteuning bieden aan professionele codeurs. Het systeem zal op basis van een aantal medische diagnoses (of een combinatie van trefwoorden) die ICD9-codes voorstellen die relevant zijn voor de ingave. De belangrijkste voordelen van deze manier van werken, zowel voor het ziekenhuis als voor de registratiedienst zelf, zijn:
Het pakket
dat in aanmerking komt voor een uitbreiding met spraaktechnologie heet ‘Medisch
Dossier’. Dit pakket heeft als doel het administratief aspect van
patiëntendossiers in ziekenhuizen te
beheren. Aldus past ‘Medisch Dossier’ in een waaier van softwarepakketten die
praktisch de hele welzijnssector beslaan (zie Figuur 8).
De bedoeling van de uitbreiding van ‘Medisch Dossier’ met
spraakherkenning is vooral om de nodige
voorbereidingen te treffen om later spraaktechnologie te introduceren in de andere pakketten van ACC.
In het licht van deze thesis geeft het practisch programmeren van deze
uitbreiding een idee van de mogelijke problemen en de aandachtspunten die kunnen
optreden bij het uitbreiden van een softwarepakket met spraakherkenning.
Figuur 8 Plaats van 'Medisch Dossier'
binnen het aanbod van ACC (http://www.accnet.be)
De
inschrijving van een patiënt wordt gedaan in een administratief systeem. Van
zodra deze inschrijving gedaan is, wordt ze overgenomen door het ‘Medisch
Dossier’ systeem. Vanuit het ‘Medisch Dossier’ kan men dan administratieve
informatie over de patiënt opvragen, maar verder kan men deze informatie niet
wijzigen.
Bij het kiezen van een patiënt kan van verschillende elementen gebruik gemaakt
worden, zoals bijvoorbeeld de naam, de voornaam, geboortedatum,geslacht,...Een
andere mogelijkheid om een patiënt te selecteren is door de computer van
waaruit gewerkt wordt, uit te rusten met een magnetische kaartlezer. De
patiëntenkaart wordt dan gebruikt om rechtstreeks en snel het medisch dossier
van een patiënt op te vragen.
Eenmaal een
patiënt geselecteerd is, kan men vanuit de patiëntnavigator via ‘patiënt info’
extra administratieve gegevens raadplegen. Deze gegevens kunnen dan gebruikt
worden om semi-automatisch brieven en formulieren op te stellen.
Een belangrijke functie van ‘Medisch Dossier’ is het kunnen opvolgen van de
vooruitgang van aangevraagde technische onderzoeken en interdisciplinaire
consultaties. Zowel het al dan niet beschikbaar zijn van resultaten als de
eventuele data van afspraken voor onderzoeken kunnen hier in een scherm gevolgd
worden. In dat zelfde scherm worden ook ontvangen aanvragen voor advies
weergegeven.
Eens deze medische gegevens beschikbaar gesteld worden aan andere
gezondheidswerkers via een computersysteem kunnen diagnostische of
therapeutische beslisslingen genomen worden op basis van deze gegevens. Om de
opvolgbaarheid van deze secundaire beslissingen te kunnen waarborgen mogen deze
gegevens nooit meer gewijzigd of verwijderd worden. Anderzijds, als er fouten
geslopen zijn in de gegevens moet men het verder gebruik ervan beletten en
tevens de verbeterde gegevens ter beschikking stellen. Om aan deze voorwaarden
te voldoen werd de volgende werkwijze in het programma geïmplementeerd:
Sommige
bewerkingen in het medisch dossier zijn bedoeld om informatie aan het dossier
zelf toe te voegen, terwijl andere bedoeld zijn als orders aan andere diensten.
Voorbeelden hiervan zijn: labo-aanvragen, radiologie-aanvragen,...
Een groot
deel van ‘Medisch Dossier’ is bedoeld om de workflow van de verschillende
documenten doorheen een instelling op te volgen. Het opmaken van verslagen
gebeurt in de module tekstredactie van ‘Medisch Dossier’. Na integratie
van spraakherkenning in deze module, zou de gebruiker moeten kunnen kiezen hoe
hij zijn document tot stand brengt. Als hij kiest voor het dicteren van een
tekst, dan staat het hem nog steeds vrij te bepalen hoe zijn dictaat omgezet
zal worden naar tekst, namelijk door manuele transcriptie[21] of met behulp van spraakherkenning.
Figuur
9 geeft de verschillende manieren weer waarop een
document verwerkt kan worden en de workflow die hiermee gepaard gaat. Deze
figuur maakt duidelijk welke plaats ACC toekent aan spraakherkenning binnen het
geheel van de tekstredactie in het pakket ‘Medisch Dossier’. Opmerkelijk is dat
er in alle gevallen een validatie van de documenten vereist wordt, welke ook de
manier van ingave is.
Figuur 9 Workflow van een document (ACC)
In de
vorige paragraaf werd reeds vermeld dat aan de hand van bestaande gegevens in
‘Medisch Dossier’ een document of een dossier kan opgesteld worden over een patiënt.
Dit gebeurt niet in de module tekstredactie. De module die deze dossiers
samenstelt komt echter in een later stadium ook in aanmerking voor een
uitbreiding met spraakherkenning. Het doorgeven van de gegevens uit het
‘Medisch Dossier’ gebeurt in deze module door een template. Deze template wordt
dan in MS Word geladen waarna de gebruiker verdere wijzigingen kan aanbrengen
met MS Word. Een uitbreiding met spraakherkenning voor MS Word kan momenteel
met elk standaard-spraakherkenningspakket gebeuren en zal hier dan ook niet
nader beschreven worden.
Gezien de
gestructureerde aanpak die Delphi aan de aangebruiker oplegt, en de ervaring
die reeds opgedaan werden in deze ontwikkelingsomgeving, werd eerst een
Delphi-applicatie geschreven die gebruikt maakt van de Speechmagic
ActiveX-componenten. Dit in de eerste plaats om de verschillende componenten te
leren gebruiken en vooral om goed vertrouwd te geraken met de properties,
methods en events van deze componenten.
In een
eerste fase werd een stand-alone installatie doorgevoerd, pas in een tweede
fase werd SpeechMagic in een netwerk ingeschakeld.
Bij een
stand-alone installatie is een zelfde PC zowel een recognition- en fileserver
als een werkstation. Hiervoor werd een AMD ATHLON 650 Mhz gebruikt met 128MB
RAM. Deze PC was uitgerust met een SpeechMike van Philips.
Omwille van
de stabiliteit werd de PC uitgerust met Windows 2000. De installatie kon dan
beginnen op een ‘clean’ systeem. Na de installatie van het SpeechMagic
programma en de installatie van het workstationprogramma op dezelfde PC, vraagt
de setup om een reboot. Dit omdat tijdens de installatie DAO[22]
geïnstalleeerd wordt, en omdat de driver voor de Speechmike geactiveerd moet
worden. Na een reboot dook een eerste probleem op met een DLL. Het installatieprogramma gaf volgende error:
Unable to call DLLRegisterServer
Unable to load file : c:\Progam Files\Common
Files\System\OLE DB\msdaps.dll to register it.
Bij nader
inzicht bleek het bestand wel te bestaan, dus daar zat de fout niet.
Uiteindelijk werd de dll dan maar manueel geregistreerd met:
Regsrv32.exe c:\Progam Files\Common Files\System\OLE DB\msdaps.dll
Op zich
bleek dit te lukken, maar toen de herkenningsserver moest opgestart worden gaf
ook deze een foutmelding:
Smrcgsrv.exe: Unable to find msdaps.dll
Na heel wat
reboots en configuratie-aanpassingen werd er besloten om de mensen van Philips
te contacteren in verband met het probleem. Zij wisten ons enkel te vertellen
dat er inderdaad problemen waren met Windows 2000, maar dat Windows NT 4.0 met
service misschien wel een oplossing kon bieden. Vervolgens werd de installatie
geprobeerd met NT 4.0 zonder service pack, met service pack 5 en met service
pack 6. Telkens bleef dezelfde fout met de msdaps.dll opnieuw opduiken. De
mensen van Philips werden nogmaals gecontacteerd en het enige passend antwoord
dat zij konden geven was dat een installatie van MS Access eventueel wel kon
helpen, aangezien het probleem iets met OLE DB te maken had. MS Access werd dan
geïnstalleerd, maar ook hier weer zonder resultaat. Uiteindelijk werd besloten
om voor de server de installatie in Windows 98 eens te proberen. Dit bleek wel
te lukken en de problemen met de dll bleven uit.
Eenmaal
alles geïnstalleerd is, kan de configuratie beginnen. Dit houdt in dat de
recognitionserver en de dispatcher een naam moet krijgen, en de verschillende
gebruikers van het systeem moeten aangemaakt worden. Uiteraard zijn in dit
geval de herkenningsserver en de dispatcher gewoon de locale PC. Vervolgens
moeten ook de verschilllende achtergronden en de specifieke contexten
(Advocaat, Radiologie,...) geïnstalleerd worden. Dit verliep allemaal
probleemloos. Een aandachtspunt hierbij is wel dat de eerste gebruiker die
aangemaakt moet worden ‘Admin’ moet heten en er geen passwoord voor deze
gebruiker kan ingesteld worden.
Bij het uittesten van de verschillende applicaties bleek alles goed te werken,
behalve de correctie-editor. Aangezien de correctie slechts in de laatste fase
plaatsvindt, werd er besloten met de huidige configuratie voort te gaan voor de
programmatie.
Dit
programma is vooral bedoeld om de volgorde van aanroepen van de verschillende
methodes en de programmastructuur te illustreren. Specifieke Delphi code wordt
hier zo veel mogelijk gemeden. Op die manier kan er later, wanneer bijvoorbeeld
naar een andere ontwikkelingsomgeving zoals Oracle Forms (zie paragraaf 6.1) wordt overgegaan, teruggekeken worden naar het
Delphi-programma om de structuur van het nieuwe programma te achterhalen.
Om de ActiveX-componenten in Delphi te krijgen, moet men gewoon
‘Component-import ActiveX control’ in menu’s van Delphi kiezen. Voorwaarde om
de componenten te importeren is wel dat de componenten in Windows geregistreerd
zijn, maar dit gebeurt automatisch bij de installatie van SpeechMagic. Indien
het de bedoeling is om het uiteindelijke programma te laten installeren zonder
dat er een installatie van Speechmagic nodig is, moet er wel rekening gehouden
worden met het registreren van de componenten. Dit moet dan gebeuren in het
installatieprogramma van het uiteindelijk programma. Na de registratie kunnen
de componenten dan gebruikt worden in elke applicatie die ActiveX compatibel
is.
De method
Initialize is verantwoordelijk voor de initialisatie van de control. Ze zorgt
voor de aangepaste taal die in de interface gebruikt wordt en geeft de
properties van de control de default waarden. Initialize moet voor alle
componenten van SpeechMagic aangeroepen worden om de componenten te kunnen
gebruiken. Er zijn vier componenten nodig om met de herkenningsengine van
SpeechMagic te communiceren: SMRecorder, SMAction, SMAuthentication en
SMJoblist. De functionaliteit van deze vier componenten werd reeds eerder
besproken (zie paragraaf 3.1.3). Het programma begint dan ook met de initialisatie
van deze vier componenten.
Eenmaal de
vier componenten geïnitialiseerd zijn, kan er begonnen worden met het ingeven van
een dictaat. Dit lukt in ieder geval als er een SpeechMike aanwezig is. De
SpeechMike bevat naast en microfoon en een trackball, ook 6 knopjes om doorheen
een geluidsbestand te navigeren. Door op het ‘record’ knopje te duwen en
vervolgens op de ‘play’ knop start de opname.
Wanneer er
geen SpeechMike is, moet de programmeur zelf instaan voor de opname van een
geluidsbestand. De SMRecorder-control moet dan niet gebruikt worden. Om de
functionaliteit van de SMRecorder te vervangen, moet het opnemen van een
geluidsbestand in Delphi gebeuren met de Mediaplayer-component. Deze component
bevat standaard de nodige buttons om zowel de opname en de weergave van, als de
navigatie doorheen een geluidsbestand te besturen. Het grote probleem dat
opdook bij deze control was het juist initialiseren van de audio-devices. Dit
kan wel automatisch gebeuren door de ‘DeviceType’ property van de
Mediaplayercomponent de waarde ‘dtAutoSelect’ mee te geven, maar dit werkt
enkel op voorwaarde dat er een bestaand bestand geopend wordt. Een mogelijke
oplossing is dan om een wav-bestand aan te maken dat 0,0 seconden duurt.
Vervolgens dient het bestand dan bij elke nieuwe opname gecopieerd te worden
naar de naam en het pad van het nieuwe bestand. In een laatste stap moet dit nieuwe
bestand dan geopend worden in de mediaplayer-component met de ‘file’ property
van deze component. Vanaf dan kan de opname van het dictaat beginnen door op de
record-knop van de mediaplayer component te klikken.
Omdat deze
methode nogal omslachtig is en ze in ieder geval niet in andere
ontwikkelingsomgevingen kan gebruikt worden omwille van de TmediaPlayer
component die specifiek bij Delphi hoort, werd in de applicatie een andere
manier van programmeren gebruikt. Dit gebeurde door gebruik te maken van de
Multimedia API’s van Windows, zoals die standaard in Windows zitten. Deze
interface, die specifiek op multimediatoepassingen gericht is, wordt Media
Control Interface (MCI) genoemd en biedt standaard commmando’s om
multimediadevices aan te spreken. Het grote voordeel van MCI is dat het in de
meeste Windows-ontwikkelingsomgevingen kan gebruikt worden en dat de code dus
zeer gemakkelijk kan overgezet worden naar andere software, zoals die van ACC.
Er werden
vijf procedures gebruikt om het opnemen van een geluidsbestand te realiseren:OpenMedia,
RecordMedia, StopMedia, SaveMedia, CloseMedia. Deze procedures zullen kort
toegelicht worden.
Deze procedure dient om de nodige audio-devices te openen. Daarbij is TMCI_Open_Parms de belangrijkste variabele. Deze is als volgt gedefinieerd in de SDK van Windows:
typedef struct {
DWORD
dwCallback;
MCIDEVICEID wDeviceID;
LPCSTR
lpstrDeviceType;
LPCSTR
lpstrElementName;
LPCSTR
lpstrAlias;
} MCI_OPEN_PARMS;
De dwCallback moet een handler geven voor bepaalde events. De hoofdform kan hier als handler gebruikt worden. De waarde die WdeviceID zal krijgen, geeft aan de applicatie door welk device verder gebruikt moet worden voor de opname. De andere waarden in TMCI_Open_Parms zijn pointers naar bijkomende informatie over het te openen device. Om de strings om te zetten in pointers kan de functie PChar gebruikt worden. Eenmaal TMCI_Open_Parms zijn waarden heeft gekregen, kan het MCI-open commando gegeven worden om het te gebruiken deviceID te bepalen. Het MCI-open commando kan gegeven worden met het mciSendCommand:
MCIERROR mciSendCommand(
MCIDEVICEID IDDevice,
UINT uMsg,
DWORD fdwCommand,
DWORD dwParam
);
uMsg moet hier de waarde mci_Open krijgen om aan te geven dat het om het open-commando gaat. IDDevice is de waarde de we willen achterhalen en juist daarom voeren we het open-commando uit. IDDevice moet dus logischerwijs steeds gelijk aan nul zijn als uMsg gelijk aan mci_Open is. DwParam is een pointer naar het adres van de eerder besproken Openparameters.
Het recordtype van de parameters wordt bij Delphi standaard meegeleverd in de
unit mmsystem.pas en heet TMCI_Open_Parms. De declaratie gebeurt dus:
OpenParameters: TMCI_Open_Parms;
Op implementatieniveau kan mciSendCommand gewoon aangeroepen.
Fout:=mciSendCommand(0, mci_Open,Flags,LongInt(@OpenParameterss));
//fout = longint
if FoutMyerror <> 0
then begin
mciGetErrorString(Fout, S, SizeOf
(S)); // S is een string
showmessage('Error : ' + StrPas(S));
end
else FDeviceID:=OpenParameters.wDeviceID;
//FdeviceID is een word
FdeviceID is nu een word dat het device bepaalt.
Deze functie komt in grote lijnen overeen met de vorige functie, met dit verschil dat er een mci_record commando gegeven wordt aan device FdeviceID. Bij de parameters moeten er 2 getallen opgegeven worden die het begin en het einde van de opname bepalen.
mciSendCommand(FDeviceID, mci_Record, Flags,Longint(@MyRecordParms));
Ook hier weinig verschillen behalve dan dat uMsg van mciSendCommand gelijk aan mci_Stop moet zijn. Ook hier komt het recordtype voor in mmsystem.pas onder de naam TMCI_Generic_Parms.
Het recordtype van de save parameters wordt niet geleverd door Delphi. Het is dus nodig om zelf het recordtype te gaan aanmaken. Als we naar de definitie in de SDK kijken,
typedef struct {
DWORD
dwCallback; // hier moet naar een
handler verwezen worden
LPCSTR lpfilename; // bestandsnaam die gesaved moet worden
}
MCI_SAVE_PARMS;
geeft dit in Delphi het volgende:
type
Tmci_Save_Parmeters = record
dwCallback: DWord; // hier moet naar een
handler verwezen worden
lpstrFileName: PAnsiChar; // bestandsnaam
end;
Nu kunnen we de SaveParameters declareren als een Tmci_Save_Parmeters. Het aanroepen van het mciSendCommand kan nu gebeuren, met uMsg gelijk aan mci_Save. Het lpstrFileName veld van SaveParameters geeft het het pad en de bestandsnaam.
SaveParameters.lpstrFileName:=PChar('c:\dictaat.wav');
Hier wordt het zelfde type parameters gebruikt als voor het MCI stopcommando. Als het MCI stopcommando lukt, kan FDeviceID terug op nul gezet worden.
De closeprocedure wordt best aangeroepen bij een exception. De procedure Application.onexception verwijst dan naar een procedure die op haar beurt CloseMedia aanroept.
Willen we nu de opname starten van een nieuw bestand, dan moeten enkel
OpenMedia en RecordMedia aangeroepen worden. Om het opnemen te stoppen worden achtereenvolgens
StopMedia, SaveMedia en CloseMedia aangeroepen.
De SMAction
component moet zorgen voor de naamgeving van het dictaat en van de job, de
prioriteit van de verwerking, de te gebruiken context,… Hierbij traden niet
veel problemen op. De meeste van deze gegevens kunnen namelijk uit de
properties van de SMAuthentication component gehaald worden. Enkel bij de
naamgeving van de jobs dient er door de programmeur voor gezorgd te worden dat
er geen duplicaten optreden.
Met deze component waren er in eerste instantie geen problemen. Toen er echter meerdere users werden aangemaakt en er gebruik gemaakt werd van paswoorden, bleek het onmogelijk om een paswoord in te geven voor een gebruiker. Ook hier kan het gebruik van API’s misschien een oplossing bieden.
De SMJoblist dient om een overzicht te geven van de herkende dictaten. Vanaf daar kan de correctie-editor in gang gezet worden. Het probleem was echter nog steeds dat de correctie-editor niet werkte (zie paragraaf 5.1.3). Er werd dan geprobeerd hem aan de gang te krijgen door de template vanin MS Word te laden en hem daar eventueel te debuggen. Maar de macro gaf steeds een error ‘file not found:SmCED.dll’, terwijl dit bestand ondertussen al in bijna elke mogelijke directory stond. Vervolgens werd geprobeerd om de correctie-editor aan de praat te krijgen door hem uitdrukkelijk aan te roepen vanuit de SMJoblist in de Delphi-applicatie. Ook hier werd er echter geen resultaat geboekt.
Daarom moest er een andere manier gezocht worden om de herkende tekst in de Delphi-applicatie te krijgen. Geen enkele van de ActiveX componenten biedt echter een toegang tot de herkende tekst. Er bleven dan ook twee oplossingen over voor dit probleem.
Een eerste mogelijkheid was om het formaat van de herkende bestanden te achterhalen en dan vervolgens een procedure in het programma in te bouwen om deze omzetting naar tekst door te voeren. Helaas mochten de mensen van Philips het formaat van de herkende bestanden niet vrijgeven.
Een tweede mogelijkheid is het gebruik van de API’s van SpeechMagic. Spijtig genoeg zijn de datatypes die in die API ’s gebruikt worden niet beschikbaar voor Delphi, en een manuele invoer ervan is monnikenwerk. Uiteindelijk werd de vraag nog maar eens aan de mensen van Philips gesteld, maar ook zij konden ons niet verder helpen.
Al bij al verliep de stand-alone installatie niet zo vlot. Na vele moeizame configuratie-aanpassingen, bleven er drie fundamentele problemen over. Ten eerste bleek een installatie op een NT-platform onmogelijk. Dit kan toch als een zware tekortkoming van SpeechMagic aanzien worden. Zoals we evenwel later zullen zien, biedt een gedistrubueerde installatie wel de mogelijkheid om in Windows NT te werken. Een tweede probleem was dat de correctie-editor niet functioneerde. Door toeval ontdekten we ook voor dit probleem een oplossing bij een gedistribueerde installatie. Een laatste euvel was het gebruik van de API’s van Windows. Hier kwam heel wat extra programmeerwerk bij kijken om de verschillende recordtypes te definiëren. Eenmaal deze recordtypes correct gedefinieerd zijn, functioneert het programma vlot. Het probleem is echter dat het bij een foute definitie in Delphi, het bijna onmogelijk is te achterhalen in welke definitie de fout juist zit.
Om de
client-server architectuur ten gronde te testen werd er eerst een netwerk
opgezet, bestaande uit een onder andere een recognitionserver met een Pentium
III 500Mhz en 256MB RAM, een file-server met een Pentium II 3530Mhz en 64MB
RAM, en een client met een AMD K6 300 Mhz en 128MB RAM. Aangezien SpeechMagic
zowel op Windows 95 en 98 als op Windows NT 4.0 en Windows 2000 kan draaien,
werd voor de recognitionserver voor Windows 2000 Professional geopteerd. De
fileserver draaide Windows 98 en op de client-zijde werd Windows 2000
Professional geïnstalleerd. Als netwerktopologie werd Microsoft Networks
gebruikt over TCP/IP.
De client
was ook uitgerust met een SpeechMike van Philips.
De eerste
fase van de installatie bestaat uit het opzetten van de fileserver. De enige
manier om het systeem duidelijk te maken dat er een gedistribueerde installatie
moet gedaan worden, is door de fileserver vanop een andere computer (een
client) te installeren. Concreet moet op elke client een drive gemapt worden
naar de installatiedirectory van SpeechMagic op de fileserver. De
stationsaanduiding en het pad moeten op alle werkstationcomputers identiek
zijn. Zo kreeg dus elke client een H-drive die verwijst naar ‘c:\Speechmagic’
van de fileserver.
Dan kan de
installatie van de fileserver starten vanop een client. Het systeem vraagt dan
waar Speechmagic dient geïnstalleerd te worden. Hier dient dus ‘h:\’ opgegeven
te worden. Aangezien ‘h:\’ verwijst naar een netwerkdrive, weet het systeem
vanaf nu dat er een gedistribueerde installatie dient uitgevoerd te worden. Als
de installatie van de fileserver voltooid is, staat er op de fileserver een
directory /WSSETUP. Elke client kan nu geïnstalleerd worden door
‘h:\WSSETUP\Setup.exe’ uit te voeren. Dit verliep probleemloos en ondanks het
feit dat alle clients Windows 2000 machines waren, bleven de problemen met de
msdaps.dll zoals die in de stand-alone installatie opdoken uit.
De
configuratie gebeurt op een clientmachine en gebeurt op dezelfde manier als in
de stand-alone versie. Een van de twee clients werd als recognitionserver en dispatcher
geconfigureerd. Aangezien de herkenning van spraak veel resources vereist, werd
hiervoor de Pentim III 500Mhz met 256 RAM gekozen. De tweede client (K6 300Mhz
met 128 RAM) werd dan als werkstation voor de spraakherkenning gebruikt. Tegen
alle verwachtingen in bleek de correctie-editor hier wel te werken. Blijkbaar
stond op die machine een versie van MS Word 95 geïnstalleerd. Aangezien de
correctie-editor gewoon een Macro is die in MS Word moet uitgevoerd worden,
kunnen de problemen met de correctie-editor zoals die vroeger opdoken
waarschijnlijk aan de versie Word worden toegeschreven. Daarom werd er bij
wijze van test geprobeerd om de correctie-editor op de recognitionserver, die
MS Word 2000 draait, te laten werken. Zoals verwacht lukte dit niet.
Het updaten
van de fileserver werd ook uitgetest. Philips had een patch meegeleverd voor de
huidige versie 3.1 van SpeechMagic. Deze patch kan net zoals de installatie
vanop eender welke client gebeuren. Vanop die client zoekt het patch-programma
de fileserver en voert dan de update uit. Eenmaal de update van de fileserver
doorgevoerd is, wordt er van alle clients die aanloggen op de fileserver ook
automatisch een update gedaan. Hiervoor wordt er telkens wanneer een client
opstart een check uitgevoerd. Deze check wordt soms uitgevoerd alvorens de
netwerkverbinding naar de fileserver tot stand is gekomen. De link naar het
opstartprogramma op de fileserver werkt dan nog niet en het opstartprogramma
dient dan later manueel uitgevoerd te worden. Dit is misschien eerder een
probleem van MS Windows dan van SpeechMagic.
De door
Philips meegeleverde toepassingen werken vrij goed. Af en toe crashte de
client-applicaties echter, waarna een reboot vereist was. Maar aangezien alle
dictaten rechtstreeks op de fileserver worden opgeslagen, kan het systeem zich
steeds herstellen, zolang de fileserver draaiende blijft.
Ook de
herkenningsserver liet het af en toe afweten en gaf dan volgende fout:
Fatal error: CmainFrame::OnTimer(1)
non CsmException-type exception thrown
Wanneer zo
een crash zich voordoet, laten alle clients die op dat moment
herkenningsapplicaties draaien het ook afweten. Sporadisch deden zich nog
andere kleine crashes voor, maar die kunnen ‘normaal’ geacht worden in een
Windows-omgeving.
Als laatste
test werd de eerder geschreven Delphi-applicatie uitgevoerd in de gedistribueerde
omgeving. Deze applicatie leek op het eerste zicht goed te werken. Toen er
echter een gebruiker werd geselecteerd die een paswoord had ingegeven, bleek
het onmogelijk om het paswoordveld van de SMAuthentication-component in te
vullen. De enige oplossing was in dit geval het paswoord van die gebruiker te
veranderen en niets op te geven als nieuw paswoord. Voor de rest bleek de
Delphi-applicatie probleemloos te lopen.
De
herkenning zou volgens Philips zonder enige initiële training reeds een
bruikbaar resultaat moeten geven. Het al dan niet gedistribueerd zijn van het
systeem heeft uiteraard geen invloed op de herkenning. Uit de volgende
voorbeeldjes blijkt dat de initiële training wél een grote invloed op juistheid
van de herkenning heeft. Volgende dictaten werden met en zonder initiële
training aan SpeechMagic aangeboden:
Algemeen: Beste leden
KOMMA NIEUWE REGEL
Zoals jullie reeds weten KOMMA heeft onze volgende activiteit aanstaande
dinsdag plaats KOMMA als het weer wat meezit PUNT Indien het zou gaan
regenen KOMMA gaan we gewoon naar de
film PUNT We spreken in ieder geval af om TWEE uur aan de kerk PUNT Vergeet
jullie fototoestel niet UITROEPTEKEN NIEUWE REGEL
Vriendelijke Groeten
Dit gaf volgende resultaten, respectievelijk zonder en
met initiële training (fouten zijn onderlijnd). In beide gevallen werd exact
het zelfde wav-bestand gebruikt, enkel het profiel van de gebruiker werd
veranderd. De eerste gebruiker had helemaal geen trainingsessie gedaan, de
tweede gebruiker had de volledig training (ongeveer 1,5 uur) achter de rug.
Zonder training: Het beste weten,
zoals u reeds weten, heeft om de volgende activiteiten
aanstaande dinsdag plaats, als het weer wat muziek. Indien het zou eindigen,
van voormelde feiten. Ik spreek in ieder geval af om twee
uur aan de Kerk. Begin juli voor de door zijn niet!
Vriendelijke groeten
Met training: De Beste leden,
zoals u reeds weten, heeft onze volgende activiteiten aanstaande
dinsdag plaats, als het meer had BV. Indien het zou gaan regelen,
gaan voeren naar de film. Te spreken in ieder geval was om
twee uur aan de Kerk. Het geschil fototoestel niet!
Vriendelijke groeten
De training heeft duidelijk een invloed op de herkenning. Waar er zonder training vooral volledig foute zinsdelen opduiken, beperken de fouten zich na de training tot zinsdelen of woorden. Of de tekst er duidelijker op wordt, is een andere zaak.
In een tweede test werd een dictaat ingevoerd dat gebruik maakt van zogenaamde vakterminilogie. Zoals in paragraaf 3.1 reeds vermeld gebruikt SpeechMagic contexten voor de herkenning van dictaten uit een bepaald vakgebied. De contextgebonden herkenningen bleken veel accurater. Volgend voorbeeldje kan dit illustreren. De tekst die werd ingesproken is hieronder vermeld.
Contextgebonden: PUNT VIER Het doel der vennootschap zal in de statuten
nader worden omschreven als volgt DUBBELE PUNT NIEUWE REGEL
PUNT A de vennootschap stelt zich ten doel de uitoefening van een bloemkwekerij
KOMMA NIEUWE REGEL
PUNT B de vennootschap
is tevens bevoegd tot het oprichten en het verwerven van KOMMA het deelnemen in
KOMMA het samenwerken met of het op enigerlei andere wijze betrokken zijn bij
KOMMA het voeren van directie over KOMMA alsmede tot het ROND HAAKJE OPENEN
doen ROND HAAKJE SLUITEN financieren KOMMA ook door middel van het stellen van
zekerheden KOMMA van andere ondernemingen KOMMA met name van die waarmee de
vennootschap in een groep is verbonden KOMMA NIEUWE REGEL
Dit gaf
volgende resultaten, repectievelijk zonder initiële training en met initële
training (fouten zijn onderlijnd). Ook
hier werd 2 keer het zelfde wav-bestand gebruikt.
Zonder training: . Hier bedoelde vennootschap
zal de statuten nader worden omschreven als volgt:
a. de vennootschap stelt zich ten doel de uitoefening van een bloemkwekerij,
b. de vennootschap is tevens bevoegd tot oprichting en het verwerven van, een
deelneming in, het samenwerken met of het op enigerlei andere wijze
betrokken zijn bij, het doel van directie over, alsmede tot het Hof
(doen) financieren, ook door middel van het stellen van zekerheden, van andere
ondernemingen, met name van die waarmee de vennootschap in goed is
verbonden,
Met training: De heer 4. bedoelde
vennootschap zal in de statuten nader worden omschreven als volgt:
h. de vennootschap stelt zich ten doel de uitoefening van een
bloemkwekerij,
b. de vennootschap is tevens bevoegd tot oprichten en het verwerven van, het deelnemen
in, het samenwerken met of het op enigerlei andere wijze betrokken zijn bij,
het voeren van directie over, alsmede tot het (doen) financieren, ook door
middel van het stellen van zekerheden, van andere ondernemingen, met name van
die waarmee de vennootschap in goed is verbonden,
De herkenning is ook hier merkelijk beter na een initiële training. De tekst die verkregen werd binnen een specifieke context en na initële training is bijna perfect. Opmerkelijk is dat er in alle gevallen fouten aan het begin van het dictaat optreden. Dit werd ook vastgesteld in andere testdictaten.
De
stand-alone versie werd niet aan de praat gekregen op de NT-platformen, maar in
Winodws 98 doken er behalve de problemen met de correctie-editor weinig
problemen op. Eenmaal de installatie voltooid is, is het programmeren van een
eigen applicatie met de ActiveX-componenten van SpeechMagic in Delphi vrij
eenvoudig. Het gebruik van de Speechmike is zeker aan te raden om enerzijds het
initialiseren van de geluidsbestanden en de audio-devices te vereenvoudigen, en
anderzijds vergemakkelijkt de SpeechMike
de navigatie doorheen een geluidsbestand.
De
gedistribueerde versie leek het probleem van de installatie onder NT op te
lossen. De applicaties crashten echter duidelijk meer dan in de stand-alone
versie. Sommige fouten kunnen misschien wel toegeschreven worden aan het
netwerk, dat soms onbetrouwbaar werkt omwille van de vrij lange kabels die
gebruikt werden. Voorts bleek het wel nuttig dat alle informatie steeds op een
fileserver opgeslagen wordt. Door de fileserver te scheiden van de eigenlijk spraakherkenningsapplicaties,
gaan er door het crashen van de applicaties geen spraakgegegevens verloren.
Tot slot
kan als nadeel vermeld worden dat er via de API of ActiveX-componenten geen
onmiddelijke toegang tot de herkende tekst is. De enige mogelijkheid om een
herkende tekst op te vragen is langs de correctie-editor die in MS Word loopt.
Als laatste
opmerking kan hier vermeld worden dat de kwaliteit van de herkenning enkel in
zeer specifieke contexten, en na een initiële training, hoog genoeg is om echt
bruikbaar te zijn.
Na de eerste kennismaking met SpeechMagic die in het vorige hoofdstuk werd beschreven, konden we beginnen met het pakket in te passen in de ACC omgeving. In dit hoofdstuk zullen we een bondig verslag geven van het verloop van deze inpassing. Problemen die reeds in het vorige hoofdstuk beschreven werden zullen hier uiteraard niet meer vermeld worden.
‘Medisch Dossier’ is volledig gebaseerd op een Oracle database. De implementatie van ‘Medisch Dossier’ is dan ook volledig gebeurd in Oracle Forms, een Rapid Application Development (RAD) Tool van Oracle die specifiek gericht is op het schrijven van applicaties voor verschillende GUI-omgevingen. Zo ondersteunt Forms zowel Windows als Unix omgevingen.
De drie belangrijkste componenten in Forms zijn de Designer, de Generator en de Runtime. De Designer wordt gebruikt om de applicatie te ontwikkelen en is verantwoordelijk voor het integreren van de verschillende modules tot een eindapplicatie. De Generator is verantwoordelijk voor het omzetten van de 4GL-code zoals die in de Designer wordt ontwikkeld naar een executable. De Runtime wordt door de programmeur gebruikt om weer te geven hoe de ontwikkelde applicatie er uiteindelijk zal uitzien voor de eindgebruiker. PL/SQL is de procedurale programmertaal die gebruikt wordt om de applicatielogica in te geven en om de interactie met de database te verzorgen. Deze PL/SQL-code wordt in gang gezet door middel van triggers. Deze triggers kunnen vergeleken worden met de events zoals die in Delphi bestaan.
Oracle Forms is dus net als Delphi een objectgeöriënteerde ontwikkelingsomgeving. Gezien de grote overeenkomsten tussen beide ontwikkelingsomgevingen, kon de structuur van het Delphi-programma grotendeels worden overgenomen voor de programmering in Oracle Forms. De installatieproblemen van SpeechMagic doken ook hier op, maar na lang proberen lukte het toch de componenten te registreren zodat we konden beginnen met het programmeren. Een bijkomend probleem dook op toen bleek dat de geluidskaart niet juist geconfigureerd was. Zoals in vele bedrijfsomgevingen waren de PC’s wel voorzien van een geluidskaart, maar werd deze zelden of nooit gebruikt. Het gevolg was dat de drivers voor deze kaart ook niet geïnstalleerd waren. Na het installeren van deze drivers werkte de kaart echter nog niet. Na veel heropstarten en wijzigen van de IRQ’s en drivers werd uiteindelijk besloten om de computer te voorzien van een nieuwe geluidskaart. Hieruit blijkt duidelijk dat het ook voor de eindgebruiker belangrijk is rekening te houden met de veelal gebrekkige installatie van geluidskaarten en de hiermee samenhangende problemen.
Forms ondersteunt ook ActiveX, maar spreekt de componenten op een iets andere manier aan. De componenten worden namelijk niet echt geïmporteerd in de ontwikkelingsomgeving; er is enkel een interface voorhanden die het mogelijk maakt de componenten aan te spreken. Dit heeft als gevolg dat er voor elke trigger een pointer moet verkregen worden die naar de ActiveX component verwijst. Deze pointer werkt locaal en moet dus voor elke trigger opnieuw gedeclareerd worden. De when-new-form-instance trigger zag er dan bijvoorbeeld als volgt uit:
declare
joblist_obj ole2.obj_type;
authentication_obj ole2.obj_type;
action_obj ole2.obj_type;
recorder_obj ole2.obj_type;
begin
joblist_obj:=
form_ole.get_interface_pointer(‘SPEECHBLOCK.OLE_JOBLIST);
ole2.invoke(joblist_obj,’Initialize’);
authentication_obj:=
form_ole.get_interface_pointer(‘SPEECHBLOCK.OLE_AUTHENTICATION);
ole2.invoke(authentication _obj,’Initialize’);
action_obj:=form_ole.get_interface_pointer(‘SPEECHBLOCK.OLE_ACTION);
ole2.invoke(action_obj,’Initialize’);
recorder_obj:=
form_ole.get_interface_pointer(‘SPEECHBLOCK.OLE_RECORDER);
ole2.invoke(recorder _obj,’Initialize’);
joblist_obj:=
form_ole.get_interface_pointer(‘SPEECHBLOCK.OLE_JOBLIST);
ole2.invoke(joblist_obj,’Activate’);
authentication_obj:=
form_ole.get_interface_pointer(‘SPEECHBLOCK.OLE_AUTHENTICATION);
ole2.invoke(authentication _obj, ’Activate’);
action_obj:=
form_ole.get_interface_pointer(‘SPEECHBLOCK.OLE_ACTION);
ole2.invoke(action_obj, ’Activate’);
recorder_obj:=
form_ole.get_interface_pointer(‘SPEECHBLOCK.OLE_RECORDER);
ole2.invoke(recorder _obj, ’Activate’);
end;
Vervolgens kon er net zoals in Delphi worden voortgegaan met het toevoegen van de verschillende triggers. Maar al snel dook er een probleem op met de componenten. Er was duidelijk te zien dat de componenten zonder foutmeldingen geactiveerd waren. De functionaliteit liet het echter volledig afweten. Zo kon een dictaat wel worden opgenomen, maar het daarna doorsturen naar de herkenningsserver lukte niet.
Na wat debugwerk kwamen we er achter dat het probleem lag bij de commmunicatie tussen de verschillende componenten. De oorzaak hiervan bleek te zijn dat ActiveX-componenten binnen een Oracle Forms omgeving geen « awareness » bezitten voor de verschillende activiteiten die kunnen optreden. Dit betekent concreet dat de componenten wel zelfstandig kunnen werken, maar Forms kan een event van deze componenten niet zelfstandig detecteren. Een tweede beperking die Forms oplegt aan het gebruik van ActiveX componenten is dat niet alle properties van de ActiveX componenten at design time een waarde kunnen toegewezen krijgen. Een oplossing voor het tweede probleem kan gemakkelijk verkregen worden door in een when-new-form-instance trigger de ActiveX componenten de juiste waarden toe te kennen.
Een oplossing voor het eerste probleem is minder evident. Na heel wat opzoekingswerk bleven twee mogelijkheden over: de eerste maakt gebruik van een timer[23] en gebruikt de When-Timer-Expired trigger om veranderingen te ‘pollen’. Een andere mogelijkheid is om de Forms omgeving te verlaten en de spraakherkenning in Visual Basic te programmeren. Hier volgt een korte analyse van beide methoden.
De polling methode gaat er impliciet van uit
dat elk event van een ActiveX component, een verandering van de properties van
die component tot gevolg heeft. In praktijk bleek dit niet steeds zo te zijn.
De bedoeling is dan om met behulp van een Timer-component, periodiek de
properties van de ActiveX componenten na te kijken op veranderingen. Om deze
methode te testen, hebben we in Forms een internetbrowser geschreven, gebruik
makend van een ActiveX component en van de polling methode. De ActiveX
component die gebruikt werd, neemt al de browserfunctionaliteit voor zijn
rekening.
Het programma begint met de declaratie en de creatie van de timer:
When-new-form-instance
declare
timer_id Timer;
one_second NUMBER(5) := 500;
BEGIN
timer_id := CREATE_TIMER('emp_timer', one_second, REPEAT);
END;
De waarde die aan de variabele one_second wordt toegewezen bepaalt het interval waarbinnen er opnieuw zal gepold moeten worden. Voor een browser is 500 milliseconden ongeveer goed. Voor spraakherkenning zal dit interval waarschijnlijk veel kleiner moeten genomen worden.
Vervolgens wordt de code toegevoegd die moet pollen naar de status van de browser. De browser kan ofwel bezig zijn, ofwel niet. Dit reflecteert zich door de kleur van een logootje dat werd toegevoegd; rood of groen. Men kan nu omwille van het ontbreken van awareness van de componenten niet eenvoudigweg de kleur van het logo laten veranderen bij een event. De programmeur is nu volledig verantwoordelijk voor het pollen van de status van de browser, om daaruit dan de geschikte kleur voor het logootje te bepalen. Ook de synchronisatie tussen de browsercomponent en de url-balk waar het internetadres wordt ingetypt, moet door de programmeur verzorgd worden. Dit geeft volgende code voor de when-timer-expired trigger:
declare
browser_obj ole2.obj_type;
browser_obj2 ole2.obj_type;
hulpveld number;
BEGIN
browser_obj := forms_ole.get_interface_pointer ('Browser.BROWSER');
hulpveld:=internetexplorer_iwebbr_3.busy(browser_obj);
if hulpveld = -1 then /* in
busy status */
read_image_file('p:\lib\acc1.gif','GIF','browser.busy');/*rood
logo*/
browser_obj := forms_ole.get_interface_pointer
('Browser.BROWSER');
else
read_image_file('p:\lib\acc.gif','GIF','browser.busy');/*groen
logo*/
browser_obj :=
forms_ole.get_interface_pointer ('Browser.BROWSER');
if :SYSTEM.CURSOR_ITEM = 'BROWSER.URL' then
null; /* indien ik in de url-balk sta doe dan geen refresh*/
else
:browser.url:=internetexplorer_iwebbr_3.locationurl(browser_obj);
synchronize; /* laadt de url in het browser-venster en
synchroniseer alle objecten */
end if;
end if;
end;
Tenslotte
werd aan de verschillende buttons nog de nodige functionaliteit meegegeven.
De
resultaten waren zeer ontgoochelend. Zelfs met een poll-interval van een halve
seconde bleek het programma op een Pentium II 350 Mhz met 128 MB RAM veel te
traag te werken. De cursor bleef ook constant flikkeren tussen de ‘busy’ status
en de gewone status. Een iets wat hoger poll-interval kon hier wel beterschap
in brengen, maar maakte de reactie van het programma op de invoer van de
gebruiker veel te traag. Het is duidelijk dat er voor spraakherkenning een nog
veel kleiner poll-interval nodig is, hetgeen veel te belastend zou zijn voor
het systeem.
De tweede
mogelijke oplossing was om deze applicatie in Visual Basic te schrijven. Visual
Basic biedt namelijk uitstekende ondersteuning voor ActiveX-componenten.
Concreet werd er in Visual Basic een nieuwe ActiveX-component aangemaakt die
alle nodige logica voor de spraakherkenning in ‘Medisch Dossier’ bevatte. Deze
nieuwe component bestaat dan uit de 4 AcitveX componenten van SpeechMagic
zodanig dat hij alle functionaliteit kan leveren van de 4
spraakherkenningscomponenten. Hierbij dient er op gelet te worden dat al de
communicatie die tussen de vier componenten onderling plaats heeft, in Visual
Basic geprogrammeerd moet worden. Het is dus belangrijk op voorhand te weten
welke onderlinge communicatie er tussen de 4 componenten vereist is. Eenmaal de
component in Visual Basic geprogrammeerd is, kan hij in Oracle Forms gebruikt
worden als gewone ActiveX component.
In Visual
Basic bestaat er een AcitveX Control Interface Wizard die het bouwen van
ActiveX-componenten vergemakkelijkt. Volgende stappen dienen doorlopen te
worden :
Eenmaal
deze AcitveX Control Interface Wizard doorlopen is, moet de code voor de nieuwe
component geschreven worden.
Een
probleem stelde zich ten gevolge van methods die de 4 componenten
gemeenschappelijk hadden. Zo hebben alle vier de componenten bijvoorbeeld een
method ‘Initialize’ (zie paragraaf 5.1.4). Om deze 4 methods ook in de nieuwe
component beschikbaar te hebben heeft men 2 mogelijkheden :
mapped
mapped |
Authentication.Initialize |
||
mapped |
Action.Initialize |
||
mapped |
Recorder.Initialize |
||
Newcomponent.JoblistInitialize |
Joblist.Initialize |
Aangezien
de 4 componenten echter steeds geïnitialiseerd moeten worden, werd er voor
geopteerd de tweede methode te gebruiken. Na het uitgebreid testen van de
component (zie bijlage1), werd de ocx-file gesaved en vervolgens geregistreerd
in Windows met
Regsrv32.exe Newcomponent.ocx
In Oracle Forms werd dan een nieuwe module aangemaakt die enkel bestaat uit één form die kan geopend en gesloten worden. Verder werd er niets in Forms geprogrammeerd. Op die form wordt de nieuwe ActiveX component dan geïmporteerd. Het is belangrijk dat de nieuwe ActiveX component eerst geregistreerd wordt in Windows met regsvr32.exe. Op deze manier werd het programma vrij eenvoudig verkregen en het uiteindelijke programma draaide zeer goed.
Algemeen Besluit
Hier formuleert u het algemeen besluit van uw thesis.
Bijlagen
Bijlage 1 :
To Do list om een UserControl te testen
Below is a To Do list of items required to complete
the testing, debugging, and bullet-proofing of your UserControl.
A) Create a test program for your UserControl
There are two ways to set up a test program for
your UserControl, depending on whether you inserted the control in a Standard
EXE, or created an ActiveX Control project for it.
If you created an ActiveX Control project, the
following steps will set up a test program:
1) Save your
UserControl.
2) Close
your UserControl's designer, to put the control in run mode.
3) If you
haven't already created a test project, add a Standard EXE project by selecting
Add Project from the File menu.
4) In the
Toolbox, double-click your UserControl's icon to place an instance of your
UserControl on Form1, in the Standard EXE project. You can move and resize the control as
needed.
5) Save the
project group. In later development and test sessions, you can open both
projects at once by opening the project group.
If you inserted the UserControl in an existing
Standard EXE project, follow these steps:
1) Save your
UserControl.
2) Close
your UserControl's designer, to put the control in run mode.
3) In the
Project window, double-click Form1 in the Standard EXE project, to open its
designer.
4) In the
Toolbox, double-click your UserControl's icon to place an instance of your
UserControl on Form1. You can move and
resize the control as needed.
B) Test your control's behavior at design time, and
at run time.
1) Select
the control you placed on Form1 in the test project, and press F4 to open the
Properties window. Verify that you can see and change the properties you added
to your control.
2) Close
Form1 and reopen it, and verify that the property values for your control were
correctly saved and retrieved.
3)
Double-click the control you placed on Form1, and verify that the
appropriate events appear in the right-hand (Procedure) drop down of the code
window.
4) Add test
code to the event procedures for your control.
5) Add other
controls, and put code in their event procedures to test the run-time behavior
of your control's properties and methods.
6) Press F5
to run the test project, and test your control's run-time behavior.
C) Making a Bullet-Proof, Full-Featured Control
(Adding code details the Wizard doesn't provide)
1) If you
have constituent controls on your form, some events and properties may need to
be mapped to multiple constituent controls.
For example, a BackColor property probably should map to the BackColor
properties of the UserControl AND any label controls. The MouseMove event needs to map to the
MouseMove events of ALL constituent controls.
2) Add
coordinate translation to all events (such as MouseMove) that specify X and Y
coordinates.
3) For all
properties that have enumerations (for example, MousePointer and BorderStyle),
change the data type of the property to the appropriate enumeration name (in
this case, MousePointerConstants and BorderStyleConstants) so that enumeration
elements will show up in the Properties window.
4) Add any
custom enumerations you need for your own properties, plus code to validate
them.
5) Add error
trapping to the ReadProperties event, to protect against invalid values or bad
data types that might be manually edited into an .frm file. For each property, add code to switch to the
default setting when such an error occurs.
(See "Saving the Properties of Your Control" and "Creating
Design-Time-Only, Run-Time-Only, or Read-Only Run-Time Properties" in
Books Online.)
6) If you
have constituent controls, add code to UserControl_Resize to resize them when
the control is resized.
7) Set the
Procedure ID for the Enabled property, so your control will behave the same as
other ActiveX controls when enabled and disabled.
8) The
wizard maps properties of your control to constituent control (or UserControl)
properties of like name. In some cases,
you may want to map a property to a property with a different name (for
example, ShapeLabel maps its BackColor to the constituent Shape control's
FillColor); this remapping must be done manually.
9) Any
properties that might affect the size of your control (such as font size, in a
control that has an AutoSize property) should call your resize code from the
Property Let.
10) For user-drawn controls, add code to the
UserControl's Paint event to paint your control's appearance. (See "User-Drawn Controls" and
"How to Handle Focus in Your Control" in Books Online.)
11) If one
or more properties of your control will be data-bound, see "Binding a
Control to a Data Source," in Books Online.
12) Add
additional features to your control. You
may find it useful to peruse the topics in "Visual Basic ActiveX Control
Features," in Books Online.
Lijst van Figuren
Figuur 1
Voorspelling van het gebruik van spraaktechnologie door de 1000 belangrijkste
bedrijven in de U.S.A. (Comerford, Makhoul & Schwartz)........................................................................... 20
Figuur
2 De componenten van een spraakherkenningssysteem. (Zue & Cole)..................... 23
Figuur 3
Eerste 2 metingen aan 8KHz in 8bit...................................................................... 24
Figuur 4
Windowing (Werkstuk Spraakherkenning, Rens Kortmann, 1996)....................... 26
Figuur 5
Fouriergetransformeerde en oorspronkelijke signaal van het Finse woord ‘kaksi’
(Phonetics and Theory of Speech Production)............................................................................................................... 29
Figuur 6
Discreet HMM (HMM Methods in Speech Recognition)...................................... 33
Figuur 7
Language Model (Helpbestand van Philips Speechmagic)..................................... 38
Figuur 8
Plaats van 'Medisch Dossier' binnen het aanbod van ACC (http://www.accnet.be) 53
Figuur 9
Workflow van een document (ACC).................................................................... 56
Lijst van tabellen
Tabel I :
Verdeling naar activiteiten van instellingen (http://www.accnet.be)......................... 50
Bronnen
Boeken
Hall M., Knapp J. & Winston Ch. (1961). Distribution in
Geraadpleegde tijdschriften
Boyd H.W. & Piercy I. (1963). Marketing to the
British Consumer.
Business Horizons, 6(1), pp 77-86.
Artikel in boek
Taylor B. Financing Tables and the Future. In: Taylor B. (1970). Investment Analysis and
Portfolio Management.
Interne nota's en wetteksten
[1] Kritieke Succes Factoren en de Balanced Scorecard – een kwestie van complementariteit, Ir. P.M.G van Veen-Dirks RC en Dr. M.F.C.M. Wijn
[2] In de communicatietheorie wordt de entropie van een boodschap gegeven door de volgende vergelijking:
E(M) = -Σp(mi)log p(mi) i = 1..n
Zie Prof. Dr. J.
Vanthienen, Knowledge Based Systems, Expert Systems, p. 149
[3] K. B. C. Saxena, R. W. Wagenaar, Critical
Success Factors of EDI Technology Transfer: A conceptual Framework, p.5
[4] Universal Serial Bus
[5] Zue V. & Cole R. (1995)
http://cslu.cse.ogi.edu/HLTsurvey/ch1node4.html#parameters
[6] De stelling van Nyquist zegt
[7] Dynamiek
= 20 * log (u/u0) dB = 20 * log (2^16) = 20 * log 65536 = 96,33 dB
Hierbij stelt 0dB de maximale luidsterkte en -96dB de digitale stilte voor. Zie ‘Die standart 16 Bit gleich 96dB’, http://www.joogn.de/privat/dipl/dipl-19.html
[8] http://tcw2.ppsw.rug.nl/~rens/spraak/signaal.html
[9] Spraak- en taaltechnologie: een overzicht, Stefaan Dennekin, 1999, p.8
[10] Basic Concept of Speech Recognition, R. Honis,
G. Loehnert, 1999, p.16
[11]A Little Background: Why study Linear Algebra?,
http://ciips.ee.uwa.edu.au/~mike/linalg/Linalg/node4.html
[12]
http://www.lerc.nasa.gov/WWW/MMAP/PIMS/HTMLS/analysis.html
[13] Signal Representation,
http://cslu.cse.ogi.edu/HLTsurvey/ch1node5.html#SECTION13
[14] Elektronica, automatisering en informatietechnologie, Guido François, hoofdstuk 14, p.11, 1998
[15] http://www.acoustics.hut.fi/~slemmett/dippa/chap3.html
[16] http://cslu.cse.ogi.edu/HLTsurvey/ch1node7.html#SECTION15
[17] Spraak- en taaltechnologie: een overzicht, Stefaan Dennekin, 1999, p.12
[18] Code Excited Linear Prediction: Het gesproken signaal wordt vergeleken met een analytisch model van de stem en de foutenmarges worden vervolgens opgeslagen.
[19] Pulse Code Modulation: standaard formaat voor audio. De term betekent dat ieder signaal (elke amplitude) als een puls wordt gezien die dan binair gecodeerd wordt, onafhankelijk van de voorgaande pulsen. Tegenwoordig gebeurt deze codering in 16bit.
[20] Software Development Kit
[21] Bij de transcriptie van verslagen wordt de tekst, die op band werd ingesproken, ingetypt in een tekstverwerker. Deze taak wordt meestal uitgevoerd door administratief personeel.
[22] Data Access Objects: biedt een framework aan om code te genereren die databases manipuleert
[23] Bijna alle O.O.-ontwikkelingsomgevingen leveren een timercomponent die op bepaalde tijdstippen een event afvuurt.