Ohjeet: Aalto-ASR – puheen automaattinen tunnistus sekä puheen ja tekstin automaattinen kohdistaminen

Tämä ohje vastaa Aalto-ASR-tunnistimen versiota 2.1. Ohjetta on viimeksi päivitetty 28.2.2022.

CSC:n Puhti-palvelimella on käytettävissä Aalto-yliopistossa kehitetty automaattinen puheentunnistusjärjestelmä nimeltä Aalto-ASR. Sen avulla voi alustavasti litteroida suomenkielisen puhenäytteen (työkalu kaldi-rec) tekstitiedostoon tai annotaatiotiedostoon. Jos ääninäytteestä on jo olemassa valmis tekstimuotoinen litteraatti, voit kohdistaa tekstin karkeasti äänen vastaaviin kohtiin (työkalu kaldi-align). Kohdistaminen onnistuu tällä hetkellä suomen, ruotsin, pohjoissaamen, viron, komin ja englannin kielillä. Uusi Aalto-ASR on saatavilla myös Docker-säiliönä, jonka voi tarvittaessa asentaa omaan laiteympäristöön.

Esivaatimukset

Puheentunnistimen käyttämiseen tarvitset CSC:n käyttäjätunnuksen, jonka voit tarvittaessa hakea MyCSC -palvelun kautta (ks. ohje tunnuksen hakemiseen).

Projektillasi on oma tila Puhdissa, jossa voi tehdä isompia töitä. Uutta projektia voit hakea MyCSC-palvelussa. Siellä voit myös tarkistaa projektin levytilan määrän tai jäljellä olevien laskentayksiköiden määrän ja hakea tarvittaessa lisäresursseja.

Puhti-palvelimelle kirjautuessasi päädyt superklusteriin kuuluvaan ns. login-noodiin. Login-noodissa voit koekäyttää puheentunnistinta suoraan komentoriviltä yksittäisillä lyhyillä ääninäytteillä. Isompia puheentunnistustöitä kannattaa kuitenkin ajaa pelkästään eräajoina, sillä login-noodista käynnistetyt komennot kuluttavat muiden kirjautuneiden käyttäjien kanssa jaettuja resursseja.

Jotta voit käyttää Puhtia komentoriviltä, tarvitset ssh-pääteohjelman (esim. PuTTY Windowsille, Macissa on valmiina Terminal). Pääteohjelma on ”ikkuna” palvelimelle, ja sen avulla voit esimerkiksi tutkia palvelimella sijaitsevia hakemistojasi, käynnistää puheentunnistustyökalun ja seurata työn edistymistä tietyillä komennoilla.

Tiedostojen siirtämiseksi oman koneen ja palvelimen välillä tarvitaan myös ohjelma, esim. WinSCP Windowsille tai Cyberduck Macille. Macin Terminal-pääteohjelmassa voit myös käyttää scp-komentoa suoraan komentoriviltä.

Äänitiedoston ja mahdollisen ääneen kohdistettavan litteraattitiedoston valmistelu

Tunnistimelle syötettävien tiedostojen nimissä ei saisi olla välilyöntejä tai ääkkösiä, jotka saattavat aiheuttaa hankaluuksia sekä pääteohjelman että unix-pohjaisen laiteympäristön merkistöasetusten vuoksi.

Tunnistinta kannattaa kokeilla ensin lyhyillä ääninäytteillä. Muunna tunnistettava tai kohdistettava äänitiedosto tarvittaessa tunnistimen käyttämään tiedostomuotoon. HUOM. Tällä hetkellä tunnistin tukee vain WAV-muotoisia äänitiedostoja. (Myöhemmin on tulossa mahdollisuus käyttää mm. MP4-tiedostoja sekä tunnistaa puhetta esimerkiksi YouTubessa olevista videoista.)

  • Tästä voit halutessasi ladata koneellesi valmiin WAV-muotoisen äänitiedoston (ääneen luettu tarina) puheentunnistimen kokeilemista varten:
    pohjantuuli_ja_aurinko.wav
  • Tästä löytyy esimerkkiäänitettä vastaava teksti, jos haluat kokeilla sen kohdistamista ääneen:
    pohjantuuli_ja_aurinko.txt

Tunnistin pyrkii muuntamaan annetut äänitiedostot tarvittaessa sopivampaan muotoon ennen varsinaisen tunnistustyön alkamista. Itse tunnistin käsittelee äänisignaaleja, joiden näytetaajuus on 16 000 Hz (=16 kHz) ja näytekoko 16 bittiä. Tunnistin ei tarvitse stereonäytteitä.

Jos et halua, että ohjelma yrittää itse muuttaa wav-tiedoston oikeanlaiseksi, niin Puhdissa voit tehdä sen itse esimerkiksi seuraavalla tavalla:

sox audio.wav -r 16000 -c 1 -b 16 audio_new.wav

Jos aiot kohdistaa tekstimuotoisen litteraatin äänitiedostoon, varmista, että kohdistettava teksti on tallennettu raakatekstimuodossa (plain text) – ei siis esimerkiksi Word-muotoisena. Tekstitiedoston merkistökoodauksena pitää olla UTF-8 (Unicode), jotta mahdolliset erikoismerkit välittyvät tunnistimelle oikein. Älä jätä tekstin joukkoon varsinaisen puheen sisältämien sanojen (ja tavanomaisten välimerkkien) lisäksi ylimääräisiä merkintöjä, koska kohdistin ei automaattisesti osaa jättää niitä huomiotta.

Tiedostojen siirtäminen palvelimelle

Siirrä tunnistettava äänitiedosto ja tarvittaessa siihen kohdistettava tekstitiedosto Puhti-palvelimelle (ks. ohjeet). Kaikki tunnistimella käsiteltävät tiedostot kannattaa tallentaa Puhdissa suoraan projektin omaan scratch-hakemistoon.

Esimerkiksi Macin Terminal-pääteohjelman kautta siirto onnistuisi tähän tapaan:

scp -r /Users/omatunnus/data/pohjantuuli_ja_aurinko.* csctunnus@puhti.csc.fi:/scratch/project_2000000/data/

Scratch-hakemisto sopii mainiosti isojen aineistojen säilytykseen tilapäistä prosessointia varten. Scratch-hakemistojen sisältö näkyy oletuksena vain kyseisen projektin jäsenille. Huomaa kuitenkin, että scratch-hakemistot eivät ole pysyviä: niistä poistetaan automaattisesti tiedostot, jotka ovat olleet käyttämättä vähintään 90 päivää. (Lisätietoa CSC:n levyhakemistoista)

AaltoASR-työkalun käytön aloittaminen Puhdissa

Jos käytät puheentunnistinta Puhdin login-noodissa, kokeile vain lyhyehköjä tunnistustöitä. Suurempia aineistoja kannattaa käsitellä eräajotöinä (batch job), jolloin voit hyödyntää superlaskentaympäristöä tehokkaasti.

Avaa pääteyhteys Puhtiin. Kirjautuminen tapahtuu CSC:n käyttäjätunnuksella tähän tapaan:

ssh csctunnus@puhti.csc.fi

Siirry projektisi scratch-hakemistoon:

cd /scratch/project_2000000

Aalto-ASR-moduulin lataaminen

Jotta voit käyttää AaltoASR-työkaluja, sinun on ensimmäiseksi ladattava käyttöön kyseinen moduuli. Anna komentorivillä (tai eräajoskriptissä) seuraava komento:

module load aalto-asr

Valitse sen jälkeen alla olevista komennoista sopiva.

Puheentunnistus, kun tiedostoa ei ole vielä litteroitu (kaldi-rec)

Kun haluat pelkästään tunnistaa äänitiedoston sisällön ja tallentaa tuloksen tekstimuotoon ja/tai annotaatiotiedostoon, voit kokeilla kaldi-rec-toimintoa. Puheentunnistus pelkästä äänitiedostosta onnistuu toistaiseksi vain suomenkieliselle aineistolle.

Ääninäytteestä tunnistetun tekstin voi saada raakatekstitiedostona (–txt), ELANin EAF-muotoisena annotaatiotiedostona (–eaf) tai SRT-muotoisena tekstitiedostona (–srt). Käsiteltävän äänitiedoston lisäksi on määriteltävä sen kansion nimi, jonne uudet tiedostot halutaan tallentaa (huom. kansion on oltava olemassa). Tässä muutama esimerkkikomento, joissa oletetaan, että äänitiedosto sijaitsee alihakemistossa nimeltä data ja tulokset halutaan alihakemistoon nimeltä data_out:

kaldi-rec --eaf data/audio.wav data_out/
kaldi-rec --txt data/audio.wav data_out/
kaldi-rec --srt data/audio.wav data_out/

kaldi-rec --txt --eaf --srt data/pohjantuuli_ja_aurinko.wav data_out/

Puheentunnistuksen voi toistaiseksi ajaa vain yksittäisille tiedostoille, ts. tunnistin ei osaa käsitellä koko kansiollista kerralla. Useiden tiedostojen tunnistuksessa voi kuitenkin käyttää bash-silmukkaa, jolla saman komennon saa toistettua kaikille hakemistossa oleville wav-päätteisille tiedostoille. Tähän tapaan:

for wav in data/*.wav;
    kaldi-rec --txt $wav data_out;
done

Litteraatin kohdistaminen äänitiedostoon (kaldi-align)

Jos sinulla on jo valmiina mahdollisimman sanatarkka litteraatti, jonka sisällön haluaisit kohdistaa vastaavaan äänitiedostoon, voit käyttää automaattista kohdistusta (automatic forced alignment). Aalto-ASR-paketissa oleva kohdistustoiminto on nimeltään kaldi-align. Kohdistuksen tulokseksi saadaan aikaleimatut annotaatiotiedostot sekä ELAN-ohjelman käyttämässä EAF-muodossa että Praat-ohjelman TextGrid-muodossa.

Esimerkki äänitteeseen kohdistetusta tekstistä: Pohjantuuli ja aurinko -tarina

Kuva pohjantuuli_ja_aurinko.txt-tiedoston sisällöstä
Kohdistettavan tekstitiedoston sisältö voi näyttää esimerkiksi tällaiselta.
Kuvakaappaus ELAN-ohjelmalla avatusta tiedostosta, jossa Pohjantuuli ja aurinko -tarinan saneet on kohdistettu äänitiedoston vastaaviin kohtiin.
Ääneen luetun Pohjantuuli ja aurinko -tarinan teksti näyttää ELAN-ohjelmalla tältä, kun yksittäiset sanat on kohdistettu vastaavaan äänitiedostoon.

Kohdistin olettaa, että sille annetussa kansiossa on wav- ja txt-muotoisia tiedostoja pareittain samoilla nimillä, jolloin kukin .txt-päätteinen tiedosto sisältää samannimistä .wav-päätteistä äänitiedostoa vastaavan tekstin. –datadir -kansiossa voi olla useita wav- ja txt-tiedostojen pareja.

Kohdistimessa tällä hetkellä toimivia kieliä ovat suomi (fi), ruotsi (sv), pohjoissaame (se), viro (et), komi (kv) ja englanti (en). Halutun kielen malli valitaan käyttöön kytkimellä –lang. Esimerkiksi suomenkielisen tekstin kohdistus vastaavaan äänitteeseen käynnistetään seuraavasti:

kaldi-align --datadir data data_out --lang fi 

Kohdistimen tuottamat tiedostot tallennetaan erilliseen alikansioon, jossa on työn päivämäärä ja kellonaika, esim.: data_out/2021_08_22_18_36_21

Kohdistimen tuottamat virheilmoitukset

Ennen varsinaista puheentunnistusta tekstitiedosto muunnetaan kielikohtaisen ”sanakirjan” ja/tai yksinkertaisten sääntöjen avulla karkeaksi äännesegmenttien jonoksi (tässä yhteydessä niistä käytetään nimitystä ”foneemit”; grapheme-to-phoneme). Näille segmenteille kohdistin pyrkii sitten löytämään mahdollisimman hyviä vastineita äänitteestä. Tekstin laventamisessa käytettävä skripti antaa varoituksia, jos litteroidusta tekstistä löytyy määritellylle kielelle vieraita merkkejä, erikoissymboleita, tarkemerkkejä tms. kohtia, jotka eivät kunnolla noudata valitun kielen sääntöjä. Virheilmoitusten alussa näkyvien poikkeavia merkkejä koskevien listausten perusteella voit etukäteen muokata litteraattia tunnistimelle sopivammaksi, jolloin kohdistus onnistuu.

Vaikka kohdistimessa onkin vain muutamia valmiita kielimalleja, niitä voi joskus yrittää käyttää myös muille kielille, joiden oikeinkirjoitusjärjestelmä on samankaltainen.

Miten voin parantaa tunnistustuloksen laatua?

Aalto-ASR-puheentunnistinta ja tunnistuksessa käytettäviä malleja kehitetään jatkuvasti ja työkaluista voi olla hyötyä eri tarkoituksiin. Tutkimusaineiston käsittelyssä on kuitenkin hyvä muistaa, että automaattinen puheentunnistin tekee virheitä, joiden määrä voi tapauskohtaisesti vaihdella. Työkaluja ja eri asetuksia kannattaakin testata pienemmällä aineistolla, jotta voit arvioida, onko tulos omaan tarkoitukseesi riittävä.

Tunnistus- ja kohdistustuloksen laatuun vaikuttavat käsiteltävän aineiston tekninen laatu ja taustamelun määrä, puhujien lukumäärä, valitun akustisen mallin sopivuus tunnistettavan puhujan äänelle sekä valitun kielimallin (ts. lähinnä sanaston) sopivuus tunnistettavalle kielelle ja sen murteelle tai puhetyylille.

Tunnistimelle esimerkiksi suomenkielinen vapaa arkinen keskustelu tai murreaineisto voivat vielä olla haastavia. Huonoimmassa tapauksessa automaattisella raakatunnistuksella ei saada aikaan kelvollista litterointitulosta vaan aineisto on litteroitava käsityönä. Parhaassa tapauksessa automaattinen litteraatti voi olla miltei virheetön.

Kohdistin toimii verrattain hyvin ts. litteraatin mukaisten sanojen rajat kohdistuvat yleisesti ottaen lähelle sellaisia kohtia, joihin ihminenkin niitä merkitsisi. Hyvä tulos kuitenkin edellyttää, että litteroitu teksti vastaa täsmällisesti puhenäytteessä esiintyviä sanoja.

Miten kauan tunnistus tai kohdistus kestää?

Aalto-ASR-tunnistin ja -kohdistin eivät toimi reaaliaikaisesti. Töihin kuluvaa kokonaisaikaa on vaikea arvioida, sillä se riippuu jonkin verran käsiteltävästä aineistosta. Puheentunnistus ilman etukäteen kirjoitettua litteraattia kestää yleensä kauemmin kuin vastaavan näytteen kohdistaminen valmiiseen tekstimuotoiseen litteraattiin. Tunnistuksen kesto voi olla alkuperäisen äänitteen keston jokin kerrannainen, kun taas kohdistus saattaa valmistua alkuperäisen näytteen kestoa lyhymmässäkin ajassa.

Puheentunnistukseen kuluvaan aikaan vaikuttavat sekä tunnistettavan tai kohdistettavan ääninäytteen kesto että mm. näytteen hälyisyys. Tunnistusaika pitenee, jos äänite on laadultaan heikompi tai sopii huonommin käytössä olevaan kielimalliin ja äännemalliin.

Sekä tunnistus- että kohdistustyön kestoon vaikuttaa myös käytettävissä oleva laskentateho. Jos tunnistettavana tai kohdistettavana on paljon tiedostoja, töitä voi etukäteen koota yhteen vaikkapa bash-skriptillä siten, että esimerkiksi kaikki tietyssä hakemistossa olevat tiedostot käsitellään peräkkäisinä komentoina. Puhdissa tällainen skripti suoritetaan sitten eräajona (ks. alla). Toistaiseksi Aalto-ASR-työkalut eivät pysty suoraan hyödyntämään rinnakkaislaskentaa. Erittäin suuria aineistoja voi kuitenkin jakaa sopivan kokoisiksi eräajotöiksi, joita voidaan käynnistää samanaikaisesti. 

Tiedossamme on, että joissakin tilanteissa kohdistus voi katketa virheeseen. Toistaiseksi kannattaa varautua siihen, että esimerkiksi eräajoja joutuu käynnistämään uudelleen, ja katkokset tietenkin hidastavat työskentelyä jonkin verran. Virheitä voi välttää esimerkiksi varmistamalla, ettei kohdistettava litteraatti sisällä järjestelmälle tuntemattomia erikoismerkkejä.

Eräajojärjestelmän hyödyntäminen puheentunnistuksessa

Isommat tunnistustyöt kannattaa tehdä eräajona. Tällöin mm. työkalumoduulin käyttöönottoa ja tunnistustoimintoa vastaavat komennot lisätään eräajojärjestelmälle lähetettävään skriptiin. Kun eräajotyö on siirretty jonoon odottamaan vuoroaan, voit kirjautua ulos Puhdista ja saat tiedon eräajon valmistumisesta automaattisesti esimerkiksi omaan sähköpostiin.

Katso ohjeet eräajoskriptin luomiseen ja käynnistämiseen.

Lisätietoa laskenta-ajan käytöstä

Projektissa käytetty laskenta-aika kuluttaa projektille myönnettyjä laskutusyksiköitä. Puheentunnistuskokeiluissa pääsee hyvin alkuun niillä laskutusyksiköillä, jotka myönnetään jokaiselle uudelle projektille suoraan. Jos käsittelet suuria aineistoja ja laskutusyksiköt loppuvat kesken, voit hakea lisää resursseja (ks. ohje).

Lisätietoa puheen litteroinnista ja annotoinnista