Puheentunnistus

**Puheentunnistus** on joukko kieli- ja puheteknologian alaan kuuluvia hahmontunnistusmenetelmiä, joiden avulla tietokone voi tunnistaa ihmisten puhetta. Puheentunnistusmenetelmien avulla voidaan esimerkiksi valmistaa puheohjattavia laitteita tai taltioida puhetta tekstimuotoiseksi.

## Puheentunnistuksen lajeja

* Ihminen voi ennalta sovittujen puhuttavien komentojen avulla ohjata tietokonejärjestelmää. Tämä on helpoiten toteutettavissa oleva tehtävä.
* Ihminen voi käyttää ennalta sovituista sanoista koostuvia sovitun kielioppisäännöstön mukaisia yhdistelmiä vuorovaikutuksessa tietokonejärjestelmän kanssa. Tällaisen avulla voidaan toteuttaa esimerkiksi lentolipun varausjärjestelmä tai pankkisovellus, missä keskustelussa tarvitaan numeroilmauksia ja niiden yhdistelyä. Tällaiset järjestelmät ovat mahdollisia toteuttaa puhujasta riippumattomina.
* Tärkeiden avainsanojen tunnistamista muuten rajoittamattomasta tekstistä (engl. *word spotting*) tarvitaan sellaisissa vuorovaikutteisessa puheentunnistuksessa, jossa on parempi ohittaa täytesanat ja jahkailut. Esimerkiksi bussiaikataulupalvelussa riittää tunnistaa pysäkkien nimet ja niiden sijamuodot ja pari sanaa. 
* Sanelusovelluksessa kone pyrkii muuttamaan ihmisen vapaan puheen tekstiksi. Tämä on hyvin vaikeaa, jos teksti on rajoittamatonta ja tehtävä onnistuu vain siten, että järjestelmä viritetään kerrallaan yhdelle puhujalle. 

## Puheentunnistuksen menetelmiä
Puhe onääntä ja ääni on ilmanpaineen nopeata värähtelyä, jonka laatu riippuu siitä, miten puhujan hengitys, kurkunpää, kieli, huulet ja muu ääntöväylä äänteitä muodostavat. Todellisuudessa äänisignaalissa on paljon vaihtelua eli samat äänteet ääntyvät eri kerroilla ja eri puhujilla eri tavalla. Signaalissa ei myöskään aina ole niin selvästi fysikaalisesti tunnistettavissa olevia äänteitä toisin kuin ihmiskuulija ne aistii.

Puheen vaihtelevuuden takia puheentunnistusjärjestelmä joutuu usein valitsemaan oikean tulkinnan todennäköisyysmallin eli **kielimallin** perusteella. Mitä selvempiä rajoituksia mahdollisille sanoille on, sen paremmin tulkinta onnistuu.

Puheentunnistusjärjestelmän rakentamisen ja käyttämisen vaiheita ovat
# Analoginen puhesignaali muutetaan digitaaliseksi eli digitoidaan.
# Digitaalinen signaali esikäsitellään esimerkiksi ylipäästösuodattamalla se.
# Signaalista lasketaan **periodogrammi** laskemalla lyhyistä puhesignaalin aikaikkunoista sen eri taajuuksien osuuksia ja suhteita eli spektrejä (Fourier-muunnos, FFT, jne.).
# Periodogrammista irrotetaanpiirteet, kuten esimerkiksi psykoaskustisesti muunnettuja **cepstreja**. Vaikka cepstri on aliavaruusmuunnos periodogrammista, sen elementtien välistä korrelaatiota sekä elementtien lukumäärää voidaan vähentää pääkomponenttianalyysillä (PCA) tai tähän tarkoitukseen soveltuvalla laskennallisesti tehokkammallaDCT-muunnoksella.
# Piirrevektorit luokitellaan foneemeiksi käyttäen jotain luokitinmallia. Puheentunnistuksessa käytetään usein GMM-mallia (Gaussian mixture model).
# Saadut foneemit annetaan syötteenä Viterbi-algoritmille, joka hakee Markovin piilomallin (HMM; engl. Hidden Markov model) antaman suurimman todennäköisyyden luetulle sanalle.
# **HMM-malli** saa sanojen prioritodennäköisyydet **kielimallista**

Tunnistuksen yksikköinä voi olla foneemi tai difoni eli kahden äänteen yhdistelmä, mikä koostuu ensimmäisen äänteen jälkipuoliskosta ja tätä seuraavan äänteen alkupuoliskosta.

## MFCC-piirteet
**MFCC-piirteet** (engl. Mel frequancy cepstrum coefficients) lasketaan syötesignaalista menetelmällä
# ylipäästösuodatetaan signaali
#* yksinkertainen spatiaalitason suodatin h(n) = \{ 1, -1 \}\,
# lasketaan periodogrammi (FFT aikaikkunoille)
# lasketaan periodogrammille **mel-muunnos**
#* psykoakustinen ihmiskorvan herkkyyttä mallintava muunnos m = (1000/\log_{10}2) (\log_{10}(1+f/1000)) \ 
#* helppo toteuttaa **suodatinpankki**-tekniikalla
# lasketaan logaritmi mel-kertoimista
# lasketaan mel-kertoimista DCT

## Kielimalli
Kielimalli on todennäköisyysfunktio seuraavalle odotettavissa olevalle sanalle, kun N edellistä sanaa tunnetaan. Kielimalli on **ehdollinen todennäköisyys**

:P( w | w_0, w_1, ... , w_N)\,.

Kielimalli voidaan määritellä myös sanan osille, kuten **morfeemeille**. Kielimallin perustana käytetään olemassaolevaa tekstiaineistoa eli **korpusta**. Aineisto voi olla peräisin kirjoista, sanomalehdistä, tv-ohjelmien transskripteistä tai vaikka internetistä. Merkitään sanan w\, esiintymien lukumäärää opetusaineistossa C(w)\,:llä ja aineiston kokoa |D|\,:llä. Yksinkertaisin kielimalli on yhden sanan esiintymistodennäköisyyttä mittaava **unigrammi**

:P(w) = \frac{C(w)}.

Yleensä käytetään kuitenkin kielen rakennetta paremmin mallintavaa **tri-grammia**
:P(w | w_1, w_0) = \frac{C(w_0 w_1 w)}{C(w_0 w_1)},

missä C(w_0 ... w_N)\, on sanajonon esiintymien lukumäärä. Tällä tavoin lasketut todennäköisyydet heittelevät paljon riippuen käytetystä aineistosta. Esimerkiksi, jos opetusaineistossa on paljon uutistekstejä, tiettyjen paikan- ja henkilönnimien toistuva esiintyminen vääristää jakaumaa eikä näin ollen välttämättä ole yleistettävissä. Toisaalta puheentunnistustehtävässä kohdataan väistämättä sanoja, joita ei esiinny korpuksessa, mikä osaltaan huonontaa tunnistusjärjestelmän yleistämiskykyä. Yleistämiskykyä voidaan parantaa oikaisemalla todennäköisyysjakaumaa menetelmillä, joita kutsutaan **tasoitukseksi**. Esimerkki tasoitusmenetelmästä on **absoluuttinen poisto**, jossa aineistossa esiintyvien sanojen todennäköisyyksistä vähennetään määrätty osa, joka käytetään mallintamaan aineistossa esiintymättömien sanojen todennäköisyyttä.

## Puheentunnistuksen sovelluksia

* Matkapuhelin, jolle voi opettaa muutaman nimen ja niihin liittyvän puhelinnumeron, johon puhelin soittaa, jos sille toistaa kyseisen nimen.
* Hammaslääkärin tuoli, jolle hammaslääkäri voi antaa äänikomentoja (kun kädet ovat kiinni instrumenteissa).
* Numerotiedotus, jossa käyttäjä sanoo nimen ja järjestelmä antaa luettelosta löytyvän tai löytyviä tilaajia numeroineen.
* Bussiaikataulupalvelu, jossa asiakas soittaa puhelimella ja voi kysyä esimerkiksi "Miten pääsen Hakaniemestä Toukolaan?" ja järjestelmä keskustelee vuorovaikutteisesti tarjoten asiakkaalle vaihtoehtoja.
* Sanelusovellus, jossa puheella ohjataan tekstinkäsittelyohjelmaa.
* Kokouksen puheiden taltioiminen, jossa yksi käyttäjä sanelee selkeällä äänellä ja kieliopillisesti oikein kaikkien henkilöiden puheet.

Erityisesti kokouksen puheiden taltioimisessa sovellus on herkkä ulkopuolisille häiriöille, ja puhuminen saattaa häiritä ulkopuolisia. Näin ollen on kehitetty nk. stenomaski, joka mahdollistaa häiriöttömän sanelun.

Käytännössä suurin osa suomenkielisistä puheentunnistusmarkkinoista on keskittynyt sairaaloihin ja lääkärisaneluihin.

## Katso myös
* Luokitin
* Digitaalinen signaalinkäsittely

## Lähteet
* Kimmo Koskenniemi, Helsingin yliopisto, yleisen kielitieteen laitos, luentomoniste kevät 2004

## Aiheesta muualla