Deep Learning a gyakorlatban Python és LUA alapon Szaszák György
Beszédfelismerés (ASR)
http://smartlab.tmit.bme.hu
Nagyházik December 1, csütörtök Botz TensorFriends Ideiglenes név Bájösz VB train_validate_test_repeat December 6, kedd Epochalypse TensorBiceps Rhinos Fully-connected team YOLO December 8, csütörtök Rolling in the deep MorphoDeep
2/48
Nagyházik Sorsolt sorrend: https://github.com/BME-SmartLab-Education/vitmav45/blob/master/Nagyhazi-beszamolo-sorrend.ipynb
15+5 perc / csapat Használjátok a sablont, feltöltés előző nap éjfélig a github-ra Legyetek itt egymás beszámolóján Aláírás feltétele (vagy 4-es/5-ös megajánlott jegy) 3/48
Jogi nyilatkozat Jelen előadás diái a „Deep Learning a gyakorlatban Python és LUA alapon” című tantárgyhoz készültek és letölthetők a http://smartlab.tmit.bme.hu honlapról. A diák nem helyettesítik az előadáson való részvételt, csupán emlékeztetőül szolgálnak. Az előadás diái a szerzői jog védelme alatt állnak. Az előadás diáinak vagy bármilyen részének újra felhasználása, terjesztése, megjelenítése csak a szerző írásbeli beleegyezése esetén megengedett. Ez alól kivétel, mely diákon külső forrás külön fel van tüntetve. 4/48
Nem vagyunk egyformák…
5/48
Dinamikus idővetemítés
6/48
Dinamikus idővetemítés
7/48
Keretképzés
8/48
Nem is olyan egyszerű probléma Nehézségek: időbeli dinamikus változatosság → “dinamikus idővetemítés” frekvenciatartománybeli eltérések (egyének között) → távolságszámítás (vektorok között) bonyolult a nyelv is → nyelvi modell + témabehatárolás 9/48
Józan paraszti ésszel... Ötlet: - tároljunk mintákat, képezzünk kereteket, aztán dinamikusan vetemítsük hozzájuk a bemondást - közben úgyis mérünk távolságot, azt átlagoljuk - a legközelebbi minta nyer Mi legyen a minta? - Mondatok… túl sok kellene (kb. végtelen) - Szavak… 20-100 ezer szóval 90-98% fedés: rengeteg szó - Beszédhangok... ...alakul: viszonylag homogének is (spektrumban) 10/48
Beszédhang alapú felismerés Felismerési alapegység: beszédhang Azt szeretnénk csinálni, hogy felveszünk mintákat, aztán hozzájuk hasonlítunk. Érdemes többet is felvenni (kiejtés változatos), mert javulnak az esélyeink. Ha már úgyis többet veszünk fel, össze is vonhatjuk az egy beszédhanghoz tartozókat: → adjuk meg a spektrális eloszlásukat (ez a modellünk) 11/48
Spektrális eloszlás modell Ha van sok mintánk, akkor statisztikai módszerekkel remekül tudunk eloszlást becsülni. Frekvenciatartományban szélesebb/hegyesebb sűrűsödéseket figyelhetünk meg: → több normális eloszlásból össze tudjuk pakolni (centrális határeloszlás tétel miatt amúgy is normális) Ez a Gauss-keverékmodell (Gaussian Mixture Modell, GMM) Paraméterei: összetevők súlya, várható értéke, szórása 12/48
Spektrális eloszlás modell Ha van sok mintánk, akkor statisztikai módszerekkel remekül tudunk eloszlást becsülni. Frekvenciatartományban szélesebb/hegyesebb sűrűsödéseket figyelhetünk meg: → több normális eloszlásból össze tudjuk pakolni (centrális határeloszlás tétel miatt amúgy is normális) Ez a Gauss-keverékmodell (Gaussian Mixture Modell, GMM) Vegyük észre, hogy ezzel egy osztályozónk van! 13/48
Spektrális eloszlás modell
14/48
Spektrális eloszlás modell
15/48
Útban a felismerés felé Osztályozó megvan. Vegyünk mintákat a bejövő beszédből, és osztályozzuk. ablakolás (kb 25 ms) FFT (aztán MFCC, mert a spektrum redundáns, ill. azt halljuk) ablak léptetése átfedéssel (10 ms = keretidő) A baj: a kipotyogó beszédhangsorból lehetetlen feladat értelmes szavakat, mondatokat rekonstruálni, mert csak kb. 70% a pontossága (a fülünké sem sokkal jobb!) 16/48
Jelfeldolgozás
17/48
Miben jobb az ember? Ismeri a nyelvet! Ha abból indulunk ki, hogy aki beszél, kitalálta, mit akar mondani és utána kimondja: → valamilyen rejtett folyamat generálja a beszédet. → próbáljuk meg modellezni a rejtett folyamatot, mögötte ott van az a mondat, ami ahhoz vezetett, amit hallunk! → olyat tudunk csinálni, hogy ha a mondat megvan, akkor megmondjuk, hogy akusztikailag hogy nézhet ki, ha kimondják (GMM erre alkalmas!) 18/48
Milyen mondatok jöhetnek szóba? Lényegében bármi (végtelen féle)... Nyelvi modellnél láttuk, hogy a nyelvre közelítéssel megáll a Markov-tulajdonság: → nem kellenek mondatok, elegek a szósorozatok. → ilyen szó alapú nyelvi modellt tudunk csinálni → rejtett Markov-modell (HMM): egy folyamat szóról szóra bolyongva és a szavakon végighaladva generál valamilyen hangvektorokat, amelyeket megfigyelünk. Maga a folyamat rejtett előlünk. Kérdésünk, hogy merre járhatott (milyen szavakon át) e közben a folyamat? 19/48
A matematika nyelvén...
20/48
Hogy lehet ebből működő felismerőt csinálni? Lexicon: a kiejtési szótár (L) Grammar: a nyelvi modell (G) HMM: Beszédhangok akusztikai modelljei (H) Context: Beszédhangok környezetfüggése (C) HCLG kompozíciója véges automatává (FST) Utána: bemenet illesztése HCLG-re Viterbi-algoritmussal
21/48
Hogy lehet ebből működő felismerőt csinálni? Lexicon: a kiejtési szótár (L) Grammar: a nyelvi modell (G) HMM: Beszédhangok akusztikai modelljei (H) Context: Beszédhangok környezetfüggése (C) HCLG kompozíciója véges automatává (FST): G szavainak (FST-ben reprezetált) kibontjuk a kiejtését (LG) A kiejtés alapján megmondjuk, milyen spektrális eloszlást várunk (HCLG) FST → WFST (Weighted FST: nyelvi modell súlyai) 22/48
L és G
23/48
H és C
24/48
HCLG
25/48
Hogy lehet ebből működő felismerőt csinálni? Language: a szótár (L) Grammar: a nyelvi modell (G) HMM: Beszédhangok akusztikai modelljei (H) Context: Beszédhangok környezetfüggése ( C) HCLG kompozíciója véges automatává (FST) Utána: bemenet illesztése HCLG-re Viterbi-algoritmussal Viterbi: végigmegy az összes lehetséges úton, és megmondja, mennyire valószínű amellett a megfigyelt kimenet. A legvalószínűbb nyer: felismert szósorozat. 26/48
Felismerés ( HMM / GMM )
27/48
Tanítás Sok embertől (>1000) Sok hanganyag (>100-1000 óra) Modell paraméterbecslés / DNN tanulás Amit tudnunk kell: hol mi van a beszédben, de legalább, hogy mi milyen sorrendben van ott.
28/48
Felismerés (tesztelés is) Felismerési hálózaton végigvezetjük a bemenetről érkező megfigyeléseket Az illeszkedést mérjük, közben idővetemítés A végén derül ki, melyik útvonal illeszkedik a legjobban (akusztikai score és nyelvi score)
Szóhiba-Arány (WER, Word Error Rate) Real Time Factor (RTF)
29/48
Hogy jön ide a deep learning? 1. Lehet vele klassz osztályozót csinálni (GMM helyett) bemenet: MFCC;
kimenet: az egyes hangok valószínűsége
2. Lehet vele jellemzőket tömöríteni, látens reprezentációkat kinyerni az audió jelből (bottleneck, encoder) 3. Lehet vele nyelvi modellt csinálni (RNN) 4. Lehet vele az egész feladatot lefedő end-to-end rendszert csinálni (ami akár a kipotyogó beszédhangokkal is tud már mit kezdeni! BLSTM) 30/48
Beszédhang osztályozás (HMM/DNN hibrid)
31/48
Jellemzőkinyerés (bottleneck és tandem)
32/48
Nyelvi modell copy ide az N-gram rajzot
33/48
Nyelvi modell vázlat, keras model = Sequential() # N-gram, voc_size=ahány szó van model.add(Dense(100, input_shape=(num_train_samples,N-1,voc_size))) model.add(Dense(voc_size)) model.add(Activation('softmax')) model.compile(loss='categorical_crossentropy', optimizer='rmsprop')
34/48
End-to-end ASR
35/48
End-to-end ASR modell vázlat, keras model = Sequential() # 7 keret egyszerre (splice), 20 dimenziós szűrősoros elemzés model.add(Bidirectional(LSTM(1024, return_sequences=True), input_shape=(num_train_samples,7,20))) model.add(Bidirectional(LSTM(1024, return_sequences=True))) model.add(Bidirectional(LSTM(1024, return_sequences=True))) model.add(Bidirectional(LSTM(1024, return_sequences=True))) model.add(Dense(1024)) model.add(Activation('softmax')) model.compile(loss='categorical_crossentropy', optimizer='rmsprop')
36/48
End-to-end ASR Sequence to sequence akusztikai megfigyelések -> beszédhang- (karakter)sorozat A karaktersorozatra vonatkozhatnak kényszerek (nyelvi modell) Alternatív költségfüggvény - előzetesen nem ismert a keret-beszédhang hozzárendelés - keresztentrópia helyett CTC: Connectionist Temporal Classification
37/48
Keret-beszédhang hozzárendelések Alapfelállás: Ismerni kell a hozzárendeléseket: - szegmentálás (kézzel bejelölni) - kényszerített illesztés (felismerő bejelöli) Flat-start: - szószintű átirat (lejegyzés) mindenképp kell - egyenlően elosztjuk (N beszédhangnak egyenlő időszeleteket) - iteratívan tanítjuk (sok iteráció kell)
38/48
CTC „alma” Beszédhang sorozat: a, l, m, a Tegyük fel, hogy T keretünk van (T*10 ms hosszú a bemondás)
39/48
CTC „alma” Beszédhang sorozat: a, l, m, a Tegyük fel, hogy T keretünk van (T*10 ms hosszú a bemondás)
40/48
CTC „alma” Beszédhang sorozat: a, l, m, a Tegyük fel, hogy T keretünk van (T*10 ms hosszú a bemondás)
41/48
CTC „alma” Beszédhang sorozat: a, l, m, a Tegyük fel, hogy T keretünk van (T*10 ms hosszú a bemondás)
42/48
CTC C++ lib wrappelése python alá Ajánlott olvasmány: https://github.com/sherjilozair/ctc/
43/48
Tanító adatbázisok Wall Street Journal • Felolvasott újságcikkek • Kb. 73 óra • Előre definiált tanító, validációs és teszthalmazok • Melléklet szótár (lexicon, átiratokkal) Komolyabb rendszerekhez • Hatalmas online adatbázis (Google) • Több ezer óra • Több ezer beszélő • Folyamatosan gyűjtik
44/48
Benchmark eredmények Wall Street Journal
Modell
Nyelvi modell
WER [%]
HMM/GMM
Trigram
9.51%
HMM/DNN
trigram
7.14%
End-to-end
trigram
7.87%
End-to-end
-
26.92% 45/48
Milyen feladatokra alkalmas • • • •
Beszédfelismerés (beszéd --> szöveg) Beszélőfelismerés Beszélőazonosítás Kulcsszókeresés (hanganyagban)
• Érzelem (sentiment) beszédből • Diagnosztika • …
46/48
Kaldi (+Eesen) Kaldi: open source ASR fejlesztőkörnyezet http://kaldi-asr.org/ Eesen (end-to-end kiterjesztés Kaldihoz) https://github.com/srvk/eesen
47/48
Köszönöm a figyelmet!
[email protected]
http://smartlab.tmit.bme.hu