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! szaszak@tmit.bme.hu http://smartlab.tmit.bme.hu