Suopuheen XML-moodi

Suopuhe-projekti XML-moodi eroaa monella tapaa tavallisista puheen merkintäkielistä kuten Speech Synthesis Markup Language (SSML, W3C:n versio, ei samanniminen vanhempi Edinburgissa kehitetty merkintäkieli) ja Festivalissa joten kuten tuettu SABLE. Tämä dokumentti kuvaa XML-moodin versiota 0.6.0 (joka tuskin on se lopullinen versio), ja se toimii yhteen vain syyskuussa 2002 tai sen jälkeen tehtyjen laventimen ja syntetisaattorin version kanssa. Tässä paperissa kuvataan merkintäkieli pääpiirteittäin, tarkat yksityiskohdat lyötyvät itse DTD:stä.

Suopuhe-merkintäkielen kuvaus

Taggauksen alku ja loppu ilmaistaan suopuhe-tagilla. suopuhe sisältää joukon (yhden tai useampia) speaker-puheenvuorotageja ja puheenvuorojen välissä pidettäviä taukoja(pause-tagi). speaker-tagin attribuuteissa voidaan määrittää puhujan nimi, sukupuoli ja ikä, jos ei halua käyttää oletusääntä. Jos nimi on määritetty, olisi hyvä määrittää myös ikä ja sukupuoli, sillä kone ei välttämättä tunnista nimeä. Ikää ei tosin vielä ole tuettu (ei ole tarvittavia difonitietokantoja). Sukupuoli on tuettu. pause-tagi ei ole vielä tuettu.

Kukin puhuja lausuu yhden tai useamman puhunnoksen (utterance-tagi). Puhunnoksen attribuutteina voivat olla puhetapa manner, lausetyyppi type ja sävy tone. Lausetyyppi kertoo minkälaista intonaatiota käytetään (esim. kysymysintonaatio tai nopea luku), mutta sitä ei olla vielä tuettu. Sävy voi olla esim. sarkastinen, mutta eri äänensävyistä ei ole tarpeeksi tietoa, jotta ne voitaisiin kunnolla mallintaa. Puhetapa, esim. kuiskaus, ei myöskään ole toistaiseksi tuettu samoista syistä.

Puhunnos koostuu yhdestä tai useammasta saneesta eli token-tagista. Kahden saneen välissä voi seurata katko break tai fraasiraja phrase. Saneen edessä tai jäljessä voidaan kertoa haluttu ilme facial-tagilla puhuva pää -tyyppisiä sovelluksia ajatellen.

Kukin sana token voi sisältää attribuuttinaan tiedon sanaluokasta (pos), alkuperäisestä muodosta (original), kuulumisesta listaan eli listaintonaatiosta (list) ja sanapainosta (accent). Sanaluokkatietoa käytetään määrittämään, onko kyseessä painotettava vai painottamaton sana. Painon määrittämistä accent-attribuutin avulla ei ole vielä tuettu, mutta periaatteessa se on sanaluokkaa tärkeämpi tiedonjyvä. Myös tokenin sisälle voi tulla break- tai phrase-tagi, jos alkuperäinen sane on sellaisella (plus mahdollisesti muulla tekstistä) korvattu. Samaten alkukahdennus hoidetaan korvaamalla alkuperäinen merkkijono uudella:

<token original="sanopa"> sanoppa </token>

Erot Suopuheen ja muiden merkintäkielten välillä

Suopuhe on kehitetty difonisynteesiä ajatellen, ja siitä puuttuu muissa merkintäkielissä esiintyvät pääasiassa formanttisynteesin kanssa käytettäväksi tarkoitetut piirteet. Tässä vertaillaan suopuhetta SSML-kieleen, ellei toisin ilmaista,

Kappaleen (paragraph-tagi) ja virkkeen (sentence-tagi) sijasta käytämme puhujaa (speaker-tagi) ja puhunnosta (utterance-tagi), jossa puhuja sanoo vuorollaan yhden tai useamman puhunnoksen. Päällekäispuhunnan mahdollisuutta ei ole kummassakaan. Nämä nyt ovat harmittomia tyyli-/näkökulmaeroja. speaker-tagimme vastaa lisäksi myös SSML:n voice-tagia. speaker-tagilla on lisäksi kolme optionaalista attributtia, name, gender ja age. Koska eri syntetisaattoreissa on erinimisiä ääniä, kannattaa name-tagin lisäksi antaa määrittää myös age ja gender. Useimmissa difonisyntetissaatoreissa äänivalikoima on niin pieni, ettei näistä ole mitään iloa... utterance-tagin language-attribuutin avulla määritetään kielin, olkoonkin, ettei tämä ole vielä tuettu suopuheen syntetisaattorissa.

Ensimmäinen iso ero on, että SSML:ssä merkittään yksittäiset saneet, vain jos niihin liitetään jotain ylimääräistä informaatiota. Suopuheessa jokainen sane ja välimerkki menee token-tagin sisälle. Suopuheen token-tagi vastaa lähinnä SSML:n sub-tagia. Jos tokenin sisällä oleva sana on normalisoitu, laitetaan alkuperäinen versio original-attribuuttin, SSML:ssä korvaava versio tulisi sub-tagin alias-attribuuttiin:

<token original="W3C"> World Wide Web Consortium</token>
<sub alias="World Wide Web Consortium"> W3C </sub>

Meillä alkuperäinen versio joutuu attribuutin sisälle, koska korvaava merkkijono voi sisältää tauko- ja fraasirajatageja (break ja phrase). Alkuperäinen muoto tulee toki säilyttää, sillä kuulija voi haluta kuunnella sanan merkki kerrallaan.

Myös numeroilmaukset, lyhenteet ja vastaavat, jotka SSML:ssä tehdään say-as-tagilla, korvataan yllä kuvatun idean mukaisesti. Tämä tehdään mm. siksi, että SSML ei huomio mitenkään numeroiden kongruenssia. SSML:n tekijöitä on kyllä informoitu, että on muitakin kieliä kuin englantia, ja niissä joskus sanat jopa taipuvat, mutta ei ilmeisesti mennyt jakeluun.

SSML:n phoneme-tagi on ihan hyvä idea, mutta suomenkaltaista kieltä, jonka grafeemi-foneemivastaavuus on suuri ei tarvinne kuvata tällä tasolla, ja vieräsperäisten sanojen muutos tehdään sekin token-tagin original-attribuutin avulla.

SSML:n emphasis, joka ilmeisesti yrittää kuvata lausepainoa, on meillä korvattu token-tagin accent-attribuutilla.

SSML:n break-tagia vastaavat meillä break, joka tarkoittaa puhunnokset sisäistä katkoa puheessa ja pause, joka on puhunnoksien välinen tauko.

SSML:n prosody-tagia ei sellaisenaan meillä ole, sillä tagissa muokattavat ominaisuudet ovat mielestämme äänikohtaisia. Lisäksi puhenopeuteen vaikuttava vaikuttava rate on sellaisenaan taas kerran harvinaisen tyhmä, sillä nopeus ilmaistaan sanoina per minuutti, ja joissain kielissä sanojen tavumäärä heittelehtii enemmän kuin englannissa tai kiinassa... Vastaavanlaiseen lopputulokseen voisi pyrkiä muuttamalla suopuhessa utterance-tagin manner-attribuuttia.

Meillä ei ole audio-tagia, mutta vastaavan voisi joskus lisätä. Myöskään mark-elementtiä ei ole, mutta, kiitos utterance-tagien, navigointi tekstissä lienee helppoa ja tagin lisäys olisi triviaali.


Nicholas Volk
Last modified: Wed Sep 18 10:01:35 EEST 2002