Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 11

MARKOV TULAJDONSÁG

Az a fogalom, hogy valami Markov-tulajdonságú röviden azt jelenti,


hogy adott jelenbeli állapot mellett, a rendszer jövőbeni állapota nem függ
a múltbeliektől. Másképpen megfogalmazva, a jelen leírása teljesen
magába foglalja az összes olyan információt, ami befolyásolhatja a
jövőbeli helyzetét a folyamatnak.

A "rejtett Markov-modell" kifejezésben a "rejtett" jelző arra utal, hogy


mi csak a modell működésének az eredményét, a kimenetet (azaz a
generált szekvenciát) ismerhetjük, a modell maga és a paraméterei
számunkra ismeretlenek. Így mi csak a kimenetből következtethetünk a
modell felépítésére és a működését leíró paraméterekre (az átmeneti és a
kibocsátási valószínűségekre).
HMM ALKALMAZÁSA

A szótár minden egyes eleméhez tanulással – approximációs


eljárással – létre kell hozni egy-egy Markov-modellt, majd a
felismerés során a kiejtett (felismerendő) elemhez ki kell
számítani minden modell esetén azt a valószínűséget, amilyen
valószínűséggel a modell a felismerendő elemet ilyen kiejtéssel
generálhatta. Ha ezek között a valószínűségek között van pontosan egy
kiemelkedő, akkor a felismerés sikeres, és a kiemelkedő valószínűséghez
tartozó szótári elem lesz az eredmény. Tehát az ilyen modellekre épülő
beszédfelismerés tisztán statisztikai alapú. A HMM előnye, hogy elég
egyszerűen kiterjeszthető nagyszótáras, folyamatos beszéd felismerésére,
viszont ebben az esetben célszerűbb kisebb egységekből építkezni
(triádokból, diádokból, hangokból). Ezek összekapcsolásából kaphatjuk
meg a szavak modelljeit (az összekapcsolások általában valamilyen
nyelvtani szabályrendszer alapján történnek), majd végül ezeket
körbekapcsolva egyetlen nagy modellt is kaphatunk.

HMM SZERKEZETE

Beszédhangok esetén általában három állapotú lineáris struktúrájú


modellt (ún. balról – jobbra) szokás választani. Magát a modellezést a
diádok (olyan fonémakapcsolatok, amelyek az első hang felétől a második
hang feléig tart) esetén szintén három állapot végzi, valójában azonban
két további szélső állapotot is találunk, amelyek az egyes beszédelem-
modellek összefűzését biztosítják.

Felismeréskor a rendszer számára minden keret érkezésekor két


lehetőség áll fent, vagy állapotot változtat, vagy helyben marad, bizonyos
valószínűséggel. Ezeket nevezzük állapotátmeneti valószínűségeknek,
melyek becslése a tanítás során történik. Ez a mechanizmus biztosítja
az időbeli illesztést a modell és az aktuális keret között. A rendszer az
adott (belső) állapotból két keret érkezése között egy megfigyelést bocsát
ki, mely tulajdonképpen egy hasonlósági mérték az adott állapotra
jellemző jellemzővektor-eloszlás és az aktuálisan érkezett, a külső
megfigyelést reprezentáló jellemzővektor között. Lényegében azt
mondhatjuk, hogy e hasonlósági mérték a mérőszáma a megfigyelt
jellemzővektor és a modellállapot spektrális illeszkedésének. Egy
állapotra jellemző jellemzővektor-eloszlást általában
sűrűségfüggvényével adunk meg, amelyről feltételezzük, hogy
normális (Gauss) eloszlások lineáris kombinációjából áll elő. Ezt
szokás kibocsátási valószínűségnek is nevezni.

3 állapotú lineáris modell

HMM FELÉPÍTÉSE

Első lépésként a modellezés során definiálnunk kell egy HMM prototípust,


ami alapján létrehozhatjuk az összes szótári elemünkhöz a kiinduló rejtett
Markov-modelljét.

A képen egy 5 állapotú HMM modellt látunk. A modelleket három fő


tartalmi egységekre bonthatjuk:

1. a modell paraméterezését tartalmazó fejlécre;

2. az egyes állapotokat és azok leíró vektorait (mean-átlag,


variance- szórás) tartalmazó törzsrészre;

3. és végül az egyes állapotok közötti átmeneti valószínűségeket


tartalmazó mátrixra.
GAUSS ELOSZLÁSÚ HMM

Létrehozhatók olyan rejtett Markov- modellek is, amelyekben


minden egyes állapot több Gauss eloszlásból tevődik össze. Mivel a
lényegvektorok egy szó elemet képviselnek, melyek értékét befolyásolják
az őket körülvevő szavak képzése, ezért azok állapota többféle lehet,
hiába egy adott elemet képviselnek. Az által, hogy Gauss eloszlást
használunk állapotonként, ezek az egyes állapotok elkülönülhetnek
egymástól a tanítási folyamat során, így hatékonyabban lehet az
állapotokat egymásnak megfeleltetni. Az elkülönülés mértékét az egyes
összetevők súlyainak beállításával lehet változtatni.
A modellekben <NumMixes> kifejezést követő érték adja meg a
keverékek számát állapotonként.  A  <Mixture> kifejezést követő érték
azt jelöli, hogy melyik összetevőről van szó, majd az utána szóközzel
elválasztott érték pedig az adott összetevő súlyát adja meg. A súlyok
összegének mindig eggyel egyenlőnek kell lennie. Megjegyzendő továbbá,
hogy a súlyoknak nem kell minden egyes állapot esetén, ugyanolyan
arányban lennie. A könnyebb érthetőség kedvéért az alábbi példa egy 4
állapotú kevert Gauss eloszlású rejtett Markov-modellt szemléltet.

~o <VecSize> 4 <MFCC_0_D_A>

~h “gausshmm”

<BeginHMM>

<NumStates> 4

<State> 2 <NumMixes> 2

<Mixture> 1 0.4

<Mean> 4

0.3 0.2 0.2 1.0

<Variance> 4

1.0 1.0 1.0 1.0

<Mixture> 2 0.6

<Mean> 4

0.1 0.0 0.0 0.8

<Variance> 4

1.0 1.0 1.0 1.0

<State> 3 <NumMixes> 2
<Mixture> 1 0.7

<Mean> 4

0.1 0.2 0.6 1.4

<Variance> 4

1.0 1.0 1.0 1.0

<Mixture> 2 0.3

<Mean> 4

2.1 0.0 1.0 1.8

<Variance> 4

1.0 1.0 1.0 1.0

<TransP> 4

0.0 1.0 0.0 0.0

0.0 0.5 0.5 0.0

0.0 0.0 0.6 0.4

0.0 0.0 0.0 0.0

<EndHMM>

A HMM ÁLLAPOTSZÁMÁNAK MEGVÁLASZTÁSA


A mi esetünkben a szavak hosszúsága nagyon eltérő, ezért nem egyszerű
feladat a megfelelő HMM megválasztása. A fonémák felismerésére
általában 5 állapotú modellt használnak. Ebből kiindulva
először tanítsunk be 12 állapotú modelleket a felismeréshez kivéve a
szünetet. A HTK kézikönyv ajánlása alapján válasszuk az 5 állapotú
modellt a szünet definiálására.

PARAMÉTEREK
Nyissuk meg a szám_felismerő/tanítás/proto1239 HMM modellt tartalmazó
fájlt és nézzük meg a fejléc tartalmát.

~o <VecSize> 39 <MFCC_0_D_A>

~h "proto1239"

A fejléc első sora (~o) a HMM modell vektorainak hosszát


definiálja és a lényegkiemelés típusát. Ugyanezt adtuk meg
a config_mfc fájlban a célfájl típusaként. Ennek a két típusnak
egyformának kell lennie, különben hibát kapunk a kiindulási modell
betanításakor.

A fejléc második sora (~h) a fájl nevét tartalmazza. Ennek szintén


összhangban kell lennie a valós elnevezéssel különben hibaüzenetet
kapunk.

A törzs részben megadott állapotok száma n állapotú modellek esetén


mindig 2-től n-1-ig definiált, a két szélső állapotot nem definiáljuk. Egy
állapotot leíró áltag vektor kiindulási értékei mindig 0.0, a szórási vektor
kiindulási értékei pedig 1.0 a HTK kézikönyv ajánlása szerint.

Szintén ajánlott az átmeneti valószínűségek mátrixában egy séma


szerint megadni az értékeket:

A kezdeti és vég értékek egyértelműen definiáltak értékben és pozícióban,


a köztes értékeknek pedig mindig ugyanazt az értéket adjuk meg csak az
átló mentén pozícionáljuk őket. A mátrix mindig nxn-es méretű ahol az n a
HMM modell állapotainak a száma.

FELADAT
A feladatunk, hogy létrehozzuk a betanításhoz szükséges szótári egységek
kiinduló rejtett Markov-modelljeit. Ehhez több HTK függvényre is
szükségünk lesz.

Először létre kell hoznunk a kiindulási értékeket tartalmazó prototípust,


majd minden egyes szótárelemnek a prototípus alapján a kiindulási
modelljét.

A label fájlokhoz hasonlóan pedig az összes HMM prototípust egy master


macro  fájlba is össze kell gyűjtenünk.

HCOMPV
A HCompV függvény a teljes adatállomány átvizsgálásával
kiszámítja a globális átlagot és szórást, ezek az értékek lesznek a
kiindulási paraméterek a HMM modellezés esetén. Az eredményeket
egy új HMM modellbe menti le a prototípus mintájára a függvényben
megadott célmappába.

Parancs: HCompV –f 0.01 –m –S szám_tanító.scp –M 1239/hmm0


proto1239

A parancsban szereplő szám_tanító.scp fájl a tanításhoz


szükséges .mfc fájlok elérési útvonalát tartalmazzák, ami alapján a
függvény kiszámolja a globális átlagokat, a –M paraméterrel a létrejövő
fájlok célmappáját adhatjuk meg, a proto1239 pedig maga a HMM fájl
neve.
FELADAT
Hozzuk létre a szünet HMM modelljének prototípusát
a HCompV függvénnyel.

KIINDULÓ HMM-EK LÉTREHOZÁSA


A létrejött proto1239 fájlt felhasználva következő lépésben hozzuk létre az
össze szótári elem modelljét. Ebben az esetben a szótári elemek száma
mindössze 26, ezért kézzel is létrehozhatjuk a modelleket, de
készíthetünk rá scriptet is.

Navigáljunk a számsor_felismerő/tanítás/ mappába és futtassuk az alábbi


parancsot terminálon keresztül:

Parancs: bash create_hmms.sh 1239

A shell script hatására létrejönnek a szavankénti HMM kiinduló modellek.


MASTER MACRO FILE

Végül hasonlóan a label fájlokhoz létre kell hoznunk egy Master Macro


File-t (MMF). A macro fájl tartalmazza az összes szótári elem HMM
modelljét, és ezen felül a vFloors fájl tartalmát is, amit szintén a HCompV
függvény hozott létre a proto1239 mellett. A vFloors egy
szórási macro fájl (a kezdeti szórási értékeket definiálja), amit a Master
Macro fájl elejére kell bemásolni. A vektor paraméter definíciót pedig
elegendő a fájl legelején megadni, amit az összes HMM mintára fog
vonatkozni.

Az előzőleg futtatott script hatására létrejött a hmmdefs1239 MMF fájl is,


csak annyi dolgunk van, hogy kézzel bemásoljuk a vFloors tartalmát a
képen látható helyre majd mentsük a fájlt.
Így létrehoztuk a betanításhoz szükséges HMM kiinduló modelleket.

BETANÍTÁS MENETE
Az előző leckékben megismert és létrehozott fájlokkal már minden a
rendelkezésünkre áll ahhoz, hogy elvégezzük a HMM modellek betanítását.

A betanítást a HERest függvény segítségével fogjuk megvalósítani. A


tanítási folyamat során a parancsot többször fogjuk futtatni, pontosabban
7-szer (korábbi tapasztalatok alapján ennyi ciklus elegendő a sikeres
betanításhoz, de kísérletezhetünk kevesebb vagy több ciklussal is), mert
így tudják a HMM modellek vektorai a megfelelő értékeket felvenni.

Minden egyes tanítási kör után a parancsban megjelölt célmappában létre


fog jönni egy MMF fájl. Ez a mi esetünkben
a számsor_felismerő/tanítás/1239/hmm1….hmm7 mappákat jelenti.

HEREST FÜGGVÉNY
A parancs futtatásához navigáljunk a számsor_felismerő/tanítás/ mappába
a terminálon.

Parancsok:

HERest -I szám_tanító.mlf -t 250. 150.0 1000.0 -S


szám_tanító.scp -L label -H 1239/hmm0/hmmdefs1239 -M 1239/hmm1
szám_lista
HERest -I szám_tanító.mlf -t 250. 150.0 1000.0 -S
szám_tanító.scp -L label -H 1239/hmm1/hmmdefs1239 -M 1239/hmm2
szám_lista

HERest -I szám_tanító.mlf -t 250. 150.0 1000.0 -S


szám_tanító.scp -L label -H 1239/hmm2/hmmdefs1239 -M 1239/hmm3
szám_lista

HERest -I szám_tanító.mlf -t 250. 150.0 1000.0 -S


szám_tanító.scp -L label -H 1239/hmm3/hmmdefs1239 -M 1239/hmm4
szám_lista

HERest -I szám_tanító.mlf -t 250. 150.0 1000.0 -S


szám_tanító.scp -L label1 -H 1239/hmm4/hmmdefs1239 -M 1239/hmm5
szám_lista

HERest -I szám_tanító.mlf -t 250. 150.0 1000.0 -S


szám_tanító.scp -L label -H 1239/hmm5/hmmdefs1239 -M 1239/hmm6
szám_lista

HERest -I szám_tanító.mlf -t 250. 150.0 1000.0 -S


szám_tanító.scp -L label -H 1239/hmm6/hmmdefs1239 -M 1239/hmm7
szám_lista

Az utolsó parancs végrehajtása után, nyissuk meg


a számsor_felismerő/tanítás/1239/hmm7 mappát. A benne
található hmmdefs1239 fájl a mi betanított HMM modellkészletünk,
aminek hatékonyságát a következő leckében fogjuk megvizsgálni.

You might also like