Aalto-ASR – automaattinen puheentunnistin

CSC:n Taito-palvelimella on käytettävissä Aalto-yliopistossa kehitetty automaattinen puheentunnistin nimeltä Aalto-ASR. Tunnistintyökaluin voi

  • tuottaa suomenkieliselle puhenäytteelle alustavan tekstiversion (työkalu aaltoasr-rec)
  • kohdistaa ääninäytteen perusteella litteroidun tekstin karkeasti äänen vastaaviin kohtiin (työkalu aaltoasr-align).

Huomaa, että puheentunnistin on vielä koekäytössä ja sitä kehitetään edelleen.

Osa AaltoASR-työkalun toiminnoista on käytettävissä helposti Myllyssä.

Esivaatimukset

  1. Puheentunnistimen käyttämiseen tarvitset CSC:n käyttäjätunnuksen, jollaista voi pyytää Kielipankin oikeudet -palvelutse. (Huom. CSC-tunnuksen salasana voi olla eri kuin HAKA-tunnuksen)
  2. Puheentunnistinta pystyy lyhyillä ääninäytteillä koekäyttämään Taito-shell-palvelimella, jonne ei tarvitse hakea erikseen laskentaresursseja. Isompia puheentunnistustöitä kannattaa kuitenkin ajaa vain Taito-supertietokoneella. Jotta voisit käyttää Taitoa, sinun on haettava projektillesi laskenta-aikaa. Hakemuksen voi tehdä CSC:llä, jos sinulla on ennestään CSC:n käyttäjätunnus. Katso myös, kuinka kohdistat laskenta-ajan käytön oikealle projektille.
  3. Jotta voit käyttää Taitoa 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. Voit myös kokeilla Tutkijan käyttöliittymästä löytyvää SSH Console (SSH-konsoli) -palvelua. Se vaatii kuitenkin koneen Java-tukea eikä välttämättä toimi joka paikassa.
  4. Tiedostojen siirtämiseksi oman koneen ja palvelimen välillä tarvitaan myös ohjelma, esim. WinSCP Windowsille tai Cyberduck Macille. (Macissa voi käyttää myös Terminal-pääteohjelmassa toimivaa scp-komentoa.)

Esimerkiksi noin yhden tunnin mittaisen, murrepuhetta ja jonkin verran taustahälyä sisältävän ääninäytteen tunnistukseen ilman pohjalitteraattia kuluu Taidossa ao. asetuksilla noin pari tuntia siitä alkaen, kun työ siirtyy palvelimen erätyöjonosta käsittelyyn. Mikäli äänite on laadultaan heikompi tai sopii huonommin käytössä olevaan kielimalliin ja äännemalliin, voi tunnistusaika olla paljon pitempi. Puolen minuutin mittaisen ääneen luetun tarinan tekstin ja äänen kohdistaminen kestää Taidossa vain vajaat 10 sekuntia, ja pelkkä tunnistus ilman litteraattiakin noin 3 minuuttia. Hipulla saman tarinan tunnistus ilman litteraattia kesti noin kolminkertaisen ajan Taitoon verrattuna.

Jos haet Taidolle laskentaresursseja, et luultavasti tarvitse ensi alkuun valtavaa määrää laskentayksiköitä. Jo muutamalla tuhannellakin selviät aika pitkään, ellei aineistosi ole jättimäinen ja/tai karttuva. Laskenta-aikaa voi hakea tarpeen vaatiessa lisää, ja kokemuksen perusteella voit itse parhaiten arvioida jatkossa tarvitsemasi määrän.

Äänitiedoston ja mahdollisen ääneen kohdistettavan litteraattitiedoston valmistelu

  • Muunna tunnistettava tai kohdistettava äänitiedosto tarvittaessa johonkin tunnistimen käyttämään tiedostomuotoon (kaikki yleisimmät tiedostomuodot kelpaavat). Jos voit valita, käytä WAV-muotoista äänitiedostoa, joka on näytteistetty vähintään 16 kHz:n (= 16 000 Hz) taajuudella ja 16-bittisenä.
  • Huom. Järjestelmä muuttaa myös pakatut äänitiedostoformaatit ensin WAV-muotoon. Tiedostokokoa on siis syytä arvioida pakkaamattoman WAVin mukaan.
  • Stereoääni miksataan automaattisesti monoksi ennen tunnistusta.
  • Tunnistinta kannattaa kokeilla ensin lyhyillä näytteillä, etenkin jos käytät Taito-shell-palvelinta.
  • Huomaa, että ylimääräiset hälyäänet ja runsas taustakohina hidastavat tunnistusta. Tunnistusprosessin kestoon vaikuttaa myös se, miten hyvin puheen sisältö vastaa tunnistimen tällä hetkellä käyttämää melko yleiskielistä sanastoa/kielimallia, ts. vapaa keskustelupuhe ja murteet tunnistuvat hitaimmin.
    • Tästä voit halutessasi ladata koneellesi valmiin WAV-tiedoston pohjantuuli_F1_1.wav puheentunnistimen kokeilemista varten.
  • Jos haluat kohdistaa tekstimuotoisen litteraatin äänitiedostoon, varmista ensin, että tekstitiedosto on merkistökoodaukseltaan latin 1 -muodossa (huom. normaalista käytännöstä poiketen UTF-8-merkistökoodaus ei toimi AaltoASR:ssa). Tällä hetkellä vain suomenkielisen tekstin/litteraatin kohdistaminen onnistuu.
  • Tiedostojen nimissä ei pidä olla välilyöntejä tai ääkkösiä, koska nämä aiheuttavat usein hankaluuksia sekä pääteohjelman että unix-alustan käyttäjäkohtaisten merkistöasetusten vuoksi.
  • Tekstitiedosto muunnetaan ennen puheentunnistusta karkeaksi ”foneemi”- ts. äännejonoksi yksinkertaisilla säännöillä. Tämä tekstin lavennusvaihe ei onnistu ja tunnistusprosessi voi pysähtyä alkuunsa, jos tiedosto sisältää erikoissymboleita tai tarkemerkkejä.
  • Tekstinlavennusskripti saattaa myös antaa varoituksia mutta jatkaa toimintaansa, jos litteroidusta tekstistä löytyy vaikkapa kohtia, jotka eivät kunnolla noudata suomen kielen mukaista tavutusta. (Tällaisia tapauksia ei taida voida välttää, jos kyseessä on vapaa puhe eikä ääneenluenta.)

Tiedostojen siirtäminen palvelimelle

Siirrä tunnistettava äänitiedosto ja tarvittaessa siihen kohdistettava tekstitiedosto Taito-palvelimelle (ks. ohjeet).

  • Äänitiedostot kannattaa tallentaa palvelimelle omaan työhakemistoosi, /wrk/käyttäjätunnus/. Kyseinen hakemisto ei ole pysyvä eikä sitä varmuuskopioida, mutta tiedostot säilyvät siellä vähintään viikon, usein kauemminkin, joten se sopii mainiosti isojen aineistojen prosessoimiseen ja tilapäiseen säilytykseen. (Huom. Hipun ja Taidon /wrk-hakemistot ovat erillisiä.)

Kertaluonteisia esivalmisteluja palvelimella

  • Voit luoda työhakemistoosi vastaisen varalle snd/-alihakemiston, jossa säilytät tunnistettavia äänitiedostoja. Luo hakemisto kirjautumalla Taitoon pääteyhteydellä sekä kirjoittamalla komentoriville mkdir /wrk/käyttäjätunnus/snd ja painamalla rivinvaihtonäppäintä. Siirrä sinne myös tunnistettava äänitiedosto.
    Jos ehdit jo siirtää äänitiedoston kotihakemistoosi, voit siirtää sen työhakemiston alle komennolla mv tiedostonimi.wav /wrk/käyttäjätunnus/snd/
  • Mikäli käytät tunnistinta Taito-palvelimella, luo työhakemistoosi myös logs/-niminen alihakemisto eräajojärjestelmän ja tunnistimen tuottamia ilmoituksia varten, mikäli tällaista alihakemistoa ei siellä ennestään ole:mkdir /wrk/käyttäjätunnus/logs

AaltoASR-työkalun käynnistäminen Taidossa ja Taito-shellissä

Jos käytät puheentunnistinta Taidolla, seuraavat komennot on lisättävä ns. eräajoskriptin loppuun. Skriptin luominen ja käynnistäminen Taidossa on kuvattu alempana. Sen sijaan Taito-shell-palvelimella voit testata tunnistinta suoraan komentoriviltä, mutta kannattaa käyttää vain lyhyitä äänitiedostoja.

Avaa pääteyhteys Taito-shelliin (taito-shell.csc.fi) tai Taitoon (taito.csc.fi). Kirjautuminen tapahtuu jälleen CSC:n käyttäjätunnuksella.

Huomaa kuitenkin, että tunnistus Taito-shellissä voi kestää kauan. Mikäli pääteyhteys Taito-shelliin välillä katkeaa, myös tunnistustyö katkeaa kesken ja se on aloitettava alusta. Taidolla ei tarvitse pitää yllä pääteyhteyttä, joten voit kirjautua palvelimelta ulos heti, kun työ on lähetetty eräajojärjestelmälle.

Työkalumoduulin ottaminen käyttöön

Jotta voit käyttää AaltoASR-työkaluja, sinun on ensimmäiseksi ladattava moduuli käyttöön (sekä Hipussa että Taidolla käyttämässäsi eräajoskriptissä): module load aaltoasr

Valitse sen jälkeen allaolevista komennoista sopiva.

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

  1. Jos haluat pelkästään tunnistaa äänitiedoston speech.wav sisältämän puheen sisällön ja tallentaa tuloksen uuteen tekstitiedostoon nimeltä tunnistettuteksti.txt nykyisessä hakemistossa, kirjoita esimerkiksi aaltoasr-rec -s 300 -n 16 -o tunnistettuteksti_pohjantuuli.txt -T test_pohjantuuli.TextGrid /wrk/kayttajatunnuksesi/snd/pohjantuuli_F1_1.wav
    • Em. komento yrittää jakaa pitkän äänitiedoston 5 min mittaisiin pätkiin ja tunnistaa pätkät 16 rinnakkaisena prosessina, mikäli tämä on palvelimella mahdollista. Tämän pitäisi jonkin verran nopeuttaa tulosten saamista (vaikutusten tarkempi selvitys on vielä kesken).
  2. Katso tarvittaessa tarkempia ohjeita komennolle annettavista parametreista englanninkieliseltä manuaalisivulta.

Litteraatin kohdistaminen äänitiedostoon

  1. Jos haluat kohdistaa tekstitiedostossa litteraatti.txt olevan suomenkielisen tekstin äänitiedostoon speech.wav ja tallentaa kohdistustuloksen TextGrid-muotoiseen tiedostoon nimeltä speech.TextGrid, kirjoita esimerkiksi aaltoasr-align -t /wrk/kayttajatunnuksesi/snd/pohjantuuli_ja_aurinko.txt -T kohdistettu_pohjantuuli.TextGrid /wrk/kayttajatunnuksesi/snd/pohjantuuli_F1_1.wav
  2. Katso tarvittaessa tarkempia ohjeita komennolle annettavista parametreista englanninkieliseltä manuaalisivulta.

Huom. Kohdistustoimintoa käytettäessä ei ole toistaiseksi mahdollista automaattisesti pilkkoa pitkää tiedostoa pieniin osiin ja kohdistaa sitä rinnakkaisina tehtävinä.

Eräajoskriptin luominen, muokkaaminen ja käynnistäminen Taidolla

Mikäli aiot käyttää puheentunnistinta Taito-palvelimella, luo ja tallenna omalla koneellasi jotakin tekstieditoria käyttäen tekstitiedosto, joka sisältää seuraavat tekstirivit. (Voit vaihtoehtoisesti käyttää jotakin tekstieditoria suoraan Taito-palvelimella, esim. nano puheentunnistus.sh, tallenna valmis tiedosto komennolla Ctrl-X.)

#!/bin/bash -l
#SBATCH -J puheentunnistustesti
#SBATCH -o /wrk/kayttajatunnuksesi/logs/output_%j.txt
#SBATCH -e /wrk/kayttajatunnuksesi/logs/errors_%j.txt
#SBATCH -t 06:00:00
#SBATCH -n 1
#SBATCH --nodes=1
#SBATCH --cpus-per-task=16
#SBATCH -p serial
#SBATCH --mail-type=ALL
#SBATCH --mail-user=sahko.posti@osoitteesi.fi
#SBATCH --mem-per-cpu=2000

WEV=/wrk/kayttajatunnuksesi/wev-$SLURM_JOB_ID
mkdir $WEV ; cd $WEV

module load aaltoasr
echo "Puheentunnistus"
aaltoasr-rec -s 300 -n 16 -o tunnistettuteksti_pohjantuuli.txt -T test_pohjantuuli.TextGrid /wrk/kayttajatunnuksesi/snd/pohjantuuli_F1_1.wav

Tärkeät kohdat em. batch-skriptissä:

  • Vaihda kaikkiin niihin kohtiin, joissa lukee ”kayttajatunnuksesi”, oma CSC:n myöntämä käyttäjätunnuksesi.
  • #SBATCH -J puheentunnistustesti määrittelee sen nimen, jolla työtä palvelimella kutsutaan. Nimi näkyy työjonossa ja mm. saamissasi sähköpostiviesteissä. Nimen kannattaa siis olla lyhyt mutta kuvaava. Se ei saa sisältää ääkkösiä tai välilyöntejä.
  • #SBATCH -t -rivillä määritellään, paljonko laskenta-aikaa työ enintään vaatii. Tämä aika vaikuttaa prioriteettiin palvelimen työjonossa. Aikaa kannattaa antaa mieluummin reilusti, koska työ katkeaa tylysti kesken, mikäli sille jyvitetty aika ei riitäkään. Toisaalta laskentaprojektisi kiintiöstä vähennetään vain se määrä laskentayksiköitä, joka on todella kulunut laskentaan, vaikka työlle olisi varattu paljon enemmän.
  • #SBATCH –mail-user=sahko.posti@osoitteesi.fi muista täydentää tälle riville oma sähköpostiosoitteesi, jotta saat tiedon työn aloituksesta, valmistumisesta ja/tai keskeytymisestä.
  • #SBATCH –mem-per-cpu=2000 – Tässä määritellään kullekin laskentaan käytettävälle ytimelle (=cpu) varattava muistin määrä. Lukua joissakin tilanteissa olla tarpeen muuttaa.

Tekstitiedoston viimeisellä rivillä käynnistät joko tunnistusskriptin aaltoasr-rec, jos haluat tunnistaa äänitiedoston sisältämän suomenkielisen puheen, tai kohdistusskriptin aaltoasr-align, jos sinulla on käytettävissä tiedoston tarkka litteraatti, jonka haluat kohdistaa äänitiedostoon. Kyseistä riviä sinun on muokattava sen mukaan, mitä aiot tehdä ja minkänimisillä tiedostoilla. Yleiset ohjeet kumpaankin käyttötapaukseen ovat edellä.

Anna tiedoston nimeksi esimerkiksi puheentunnistus.sh tai vastaava, jotta muistat mitä tarkoitusta varten se on tehty.

Siirrä sitten valmis eräajoskripti Taito-palvelimelle omaan kotihakemistoosi. Katso ohjeet.

Eräajon siirtäminen työjonoon ja työn edistymisen seuraaminen

  1. Kirjaudu Taitoon pääteohjelmalla.
  2. Kirjoita komentoriville seuraava komento: sbatch tiedostonimi.sh Saat vastauksesi uuden erätyön ID-numeron, esimerkiksi Submitted batch job 6594 Muokkaamasi eräajoskripti on nyt siirretty palvelimen työjonoon ja se käsitellään aikanaan sen mukaan, paljonko palvelimella on ruuhkaa ja kuinka paljon palvelinresursseja olet työlle varannut.
  3. Jos haluat jostakin syystä peruuttaa työsi ja poistaa sen jonosta, voit kirjoittaa scancel NNNN (korvaa teksti NNNN työn ID-numerolla).
  4. Jos haluat nähdä, missä tilassa kaikki lähettämäsi erätyöt on tällä hetkellä, voit kirjoittaa squeue -l -u käyttäjätunnuksesi
  5. Saat viestin siitä, kun erätyö siirtyy laskentaan sekä siitä, kun työ valmistuu tai keskeytyy siihen sähköpostiosoitteeseen, jonka kirjoitit erätyöskriptin riville #SBATCH –mail-user= . Viestin otsikossa mainitaan työn ID-numero ja miten työn tila on muuttunut. Mikäli jokin meni pieleen, voit jälkikäteen käydä tutkimassa työhakemistoosi tallentuneita lokitiedostoja (/wrk/kayttajatunnuksesi/logs/ tai kyseisen työnumeron mukaisen hakemiston sisältö yhtä tasoa ylempänä).
  6. Voit halutessasi lähettää palvelimen käsittelyyn useitakin tunnistustöitä peräjälkeen (esimerkiksi saman tiedoston tunnistus useilla eri puhujamalleilla). Muista tällöin tarkistaa, että jokaisessa skriptissä määritellään eriniminen tiedosto tunnistustuloksia varten (esim. tunnistettuteksti1.txt, tunnistettuteksti2.txt jne.), sillä muuten kaikki prosessit yrittävät tallentaa tuotostaan samaan paikkaan.
  7. Lisää SLURM-eräajojärjestelmän käyttöohjeita
Kuukauden tutkija: Krista Lagus

 

Yhteystiedot

Kielipankin tekninen ylläpito:
kielipankki (ät) csc.fi
p. 09 4572001

Aineistoihin ja muuhun sisältöön liittyvät asiat:
fin-clarin (ät) helsinki.fi
p. 029 4140599 / 029 4129317