Strojové učení je zábava Část 6: Jak rozpoznávat řeč s hlubokým učením

Aktualizace: Tento článek je součástí série. Podívejte se na celou řadu: Část 1, Část 2, Část 3, Část 4, Část 5, Část 6, Část 7 a Část 8! Tento článek si můžete také přečíst v jazycích 普通话, 한국어, Tiếng Việt nebo Русский.

Obrovská aktualizace: Na základě těchto článků jsem napsal novou knihu! To nejen rozšiřuje a aktualizuje všechny mé články, ale má spoustu zcela nového obsahu a spoustu praktických kódovacích projektů. Vyzkoušejte to hned teď!

Rozpoznávání řeči napadá naše životy. Je zabudován do našich telefonů, herních konzolí a chytrých hodinek. Dokonce automatizuje naše domovy. Za pouhých 50 dolarů můžete získat Amazon Echo Dot - kouzelný box, který vám umožní objednat si pizzu, získat zprávu o počasí nebo dokonce koupit pytle na odpadky - pouhým nahlas:

Alexo, objednejte si velkou pizzu!

Echo Dot byl v této sváteční sezoně tak populární, že se zdá, že je Amazon neponechává na skladě!

Rozpoznávání řeči však existuje už celá desetiletí, tak proč právě teď zasahuje hlavní proud? Důvodem je, že díky hlubokému učení bylo rozpoznávání řeči dostatečně přesné, aby bylo užitečné i mimo pečlivě kontrolovaná prostředí.

Andrew Ng dlouho předpovídal, že jakmile rozpoznávání řeči klesne z 95% na 99% přesnosti, stane se to primární způsob interakce s počítači. Myšlenka je taková, že tato mezera přesnosti 4% je rozdíl mezi nepříjemně nespolehlivým a neuvěřitelně užitečným. Díky programu Deep Learning konečně vrcholíme.

Naučme se, jak rozpoznávat řeč pomocí hlubokého učení!

Strojové učení není vždy Black Box

Pokud víte, jak funguje překlad neuronového stroje, můžete hádat, že bychom mohli jednoduše nahrát zvukové nahrávky do neuronové sítě a vyškolit je, aby vytvořili text:

To je svatý grál rozpoznávání řeči s hlubokým učením, ale zatím tam ještě docela není (přinejmenším v době, kdy jsem to napsal - vsadím se, že budeme za pár let).

Velkým problémem je, že rychlost řeči se liší. Jeden člověk by mohl říci „ahoj!“ Velmi rychle a další člověk by mohl říci „heeeelllllllllllloooooo!“ Velmi pomalu a produkovat mnohem delší zvukový soubor s mnohem více daty. Oba oba zvukové soubory by měly být rozpoznány jako přesně stejný text - „ahoj!“ Ukázalo se, že automatické zarovnání zvukových souborů různých délek s kusem textu s pevnou délkou je docela těžké.

Abychom to obešli, musíme kromě hluboké neuronové sítě použít některé speciální triky a zvláštní precesi. Uvidíme, jak to funguje!

Přeměna zvuků na bity

První krok v rozpoznávání řeči je zřejmý - musíme do počítače vložit zvukové vlny.

V části 3 jsme se naučili, jak pořídit snímek a zacházet s ním jako s řadou čísel, abychom mohli přímo rozeznat neuronovou síť pro rozpoznávání obrazu:

Obrázky jsou pouhá pole čísel, která kódují intenzitu každého pixelu

Zvuk se však přenáší jako vlny. Jak přeměníme zvukové vlny na čísla? Použijte tento zvukový klip, který mi říká „Ahoj“:

Průběh mě říká „Ahoj“

Zvukové vlny jsou jednorozměrné. V každém okamžiku mají jednu hodnotu založenou na výšce vlny. Pojďme přiblížit jednu malou část zvukové vlny a podívat se:

Chcete-li tuto zvukovou vlnu změnit na čísla, zaznamenáváme pouze výšku vlny ve stejných rozestupech:

Vzorkování zvukové vlny

Tomu se říká vzorkování. Zaznamenáváme tisícekrát za sekundu a zaznamenáváme číslo představující výšku zvukové vlny v daném okamžiku. To je v podstatě všechno nekomprimovaný zvukový soubor .wav.

Zvuk „CD Quality“ je vzorkován rychlostí 44,1 kHz (44 100 čtení za sekundu). Pro rozpoznávání řeči je však vzorkovací frekvence 16 kHz (16 000 vzorků za sekundu) dostatečná k pokrytí frekvenčního rozsahu lidské řeči.

Umožňuje ochutnat zvukovou vlnu „Hello“ 16 000krát za sekundu. Tady je prvních 100 vzorků:

Každé číslo představuje amplitudu zvukové vlny v 1/16 000. sekundy

Rychlý postranní panel při digitálním vzorkování

Možná si myslíte, že vzorkování pouze vytváří hrubou aproximaci původní zvukové vlny, protože pouze občas odečítá. Mezi našimi údaji jsou mezery, takže musíme ztrácet data, ne?

Mohou digitální vzorky dokonale obnovit původní analogovou zvukovou vlnu? A co ty mezery?

Ale díky Nyquistově větě víme, že můžeme použít matematiku k dokonalé rekonstrukci původní zvukové vlny z rozložených vzorků - pokud vzorkujeme nejméně dvakrát tak rychle, než je nejvyšší frekvence, kterou chceme zaznamenat.

Zmíním se o tom pouze proto, že téměř každý se mýlí a předpokládá, že použití vyšších vzorkovacích frekvencí vždy vede k lepší kvalitě zvuku. To není.

Předběžné zpracování našich vzorkovaných zvukových dat

Nyní máme řadu čísel, kde každé číslo představuje amplitudu zvukové vlny v 1/16 000. sekundy.

Tato čísla bychom mohli vložit přímo do neuronové sítě. Ale pokusit se rozpoznat vzorce řeči přímým zpracováním těchto vzorků je obtížné. Místo toho můžeme problém usnadnit provedením předběžného zpracování zvukových dat.

Začněme seskupením našeho vzorkovaného zvuku do 20 milisekundových kousků. Zde je prvních 20 milisekund zvuku (tj. Prvních 320 vzorků):

Vykreslení těchto čísel jako jednoduchého čárového grafu nám dává přibližnou aproximaci původní zvukové vlny za 20 milisekundového časového období:

Tento záznam je dlouhý pouze 1/50 sekundy. Ale i tento krátký záznam je složitou směsicí různých frekvencí zvuku. Jsou tam nějaké nízké zvuky, některé střední zvuky, a dokonce i nějaké vysoké zvuky, které jsou posypány dovnitř. Ale všechny dohromady, tyto různé frekvence se mísí, aby vytvořily komplexní zvuk lidské řeči.

Abychom usnadnili zpracování těchto dat neuronovou sítí, rozložíme tuto komplexní zvukovou vlnu na její součásti. Rozdělíme části s nízkou roztečí, další s nejnižší roztečí atd. Poté, když spočítáme, kolik energie je v každém z těchto frekvenčních pásem (od nízké po vysokou), vytvoříme pro tento zvukový úryvek otisk prstu.

Představte si, že máte na klavíru nahrávku někoho, kdo hraje akord C dur. Tento zvuk je kombinací tří hudebních not - C, E a G - to vše se mísí do jednoho komplexního zvuku. Chceme rozdělit tento komplexní zvuk na jednotlivé noty, abychom zjistili, že se jednalo o C, E a G. To je přesně stejný nápad.

Děláme to pomocí matematické operace zvané Fourierova transformace. Rozděluje složitou zvukovou vlnu na jednoduché zvukové vlny, které ji tvoří. Jakmile máme tyto jednotlivé zvukové vlny, sčítáme, kolik energie je v každé z nich obsaženo.

Konečným výsledkem je skóre důležitosti každého frekvenčního rozsahu, od nízkých tónů (tj. Basových tónů) po vysoký tón. Každé níže uvedené číslo představuje, kolik energie bylo v každém pásmu 50 Hz našeho 20 milisekundového zvukového klipu:

Každé číslo v seznamu představuje, kolik energie bylo v tomto frekvenčním pásmu 50 Hz

Ale to je mnohem snazší vidět, když to kreslíte jako graf:

Uvidíte, že náš 20 milisekundový zvukový úryvek obsahuje hodně nízkofrekvenční energie a ve vyšších kmitočtech málo energie. To je typické pro „mužské“ hlasy.

Pokud tento proces zopakujeme na každých 20 milisekundových kusů zvuku, skončíme spektrogramem (každý sloupec zleva doprava je jeden kus 20ms):

Celý spektrogram zvukového klipu „ahoj“

Spektrum je skvělé, protože ve zvukových datech můžete skutečně vidět hudební noty a další vzory tónů. Neuronová síť může najít vzory v tomto druhu dat snadněji než hrubé zvukové vlny. Jedná se tedy o datovou reprezentaci, kterou skutečně vložíme do naší neuronové sítě.

Rozpoznávání postav z krátkých zvuků

Nyní, když máme zvuk ve formátu, který lze snadno zpracovat, vložíme jej do hluboké neuronové sítě. Vstup do neuronové sítě bude 20 milisekundových zvukových bloků. Pro každý malý zvukový řez se pokusí zjistit písmeno, které odpovídá právě mluvenému zvuku.

Použijeme opakující se neuronovou síť - tj. Neuronovou síť, která má paměť, která ovlivňuje budoucí předpovědi. Je to proto, že každé písmeno, které předpovídá, by mělo ovlivnit pravděpodobnost dalšího dopisu, které předpovídá. Například, pokud jsme doposud řekli „HEL“, je velmi pravděpodobné, že vedle slova „Hello“ řekneme „LO“. Je mnohem méně pravděpodobné, že řekneme něco nevyslovitelného jako „XYZ“. Takže mít tuto paměť předchozích předpovědí pomáhá neuronové síti dělat přesnější předpovědi do budoucna.

Poté, co celý zvukový klip spustíme neuronovou sítí (najednou jeden blok), skončíme mapováním každého zvukového bloku na písmena, která se během tohoto bloku pravděpodobně projeví. Vypadá to, jak to mapování vypadá, když jsem řekl: „Ahoj“:

Naše neuronová síť předpovídá, že jednou pravděpodobnou věcí, kterou jsem řekl, bylo „HHHEE_LL_LLLOOO“. Ale také si myslí, že bylo možné, že jsem řekl „HHHUU_LL_LLLOOO“ nebo dokonce „AAAUU_LL_LLLOOO“.

Máme několik kroků, abychom tento výstup vyčistili. Nejprve nahradíme opakované znaky jedním znakem:

  • HHHEE_LL_LLLOOO se stává HE_L_LO
  • HHHUU_LL_LLLOOO se stává HU_L_LO
  • AAAUU_LL_LLLOOO se stává AU_L_LO

Poté odstraníme všechny mezery:

  • HE_L_LO se stává HELLO
  • HU_L_LO se stává HULLO
  • AU_L_LO se stává AULLO

To nám dává tři možné přepisy - „Ahoj“, „Hullo“ a „Aullo“. Pokud je vyslovíte nahlas, všechny tyto zvuky jsou podobné „Ahoj“. Protože předpovídá vždy jednu postavu, neuronová síť přijde s těmito velmi znělými transkripcemi. Například, když řeknete „On by nešel“, mohlo by to dát jednu možnou transkripci jako „On wud net go“.

Trik je v kombinaci těchto předpovědí založených na výslovnosti s skóre pravděpodobnosti založeným na velké databázi psaného textu (knihy, články ve zprávách atd.). Vyhodíte přepisy, které se zdají být nejpravděpodobnější, a ponecháte přepis, který se zdá být nejrealističtější.

Z našich možných přepisů „Ahoj“, „Hullo“ a „Aullo“ se zjevně „Ahoj“ objeví častěji v databázi textu (nemluvě o našich původních zvukových tréninkových datech), a je tedy pravděpodobně správná. Takže místo „ostatních“ si jako konečný přepis vybereme „Ahoj“. Hotovo!

Počkej!

Možná si myslíte: „Ale co když někdo řekne„ Hullo “? Je to platné slovo. Možná „Ahoj“ je špatný přepis! “

Samozřejmě je možné, že někdo skutečně řekl „Hullo“ místo „Hello“. Ale systém rozpoznávání řeči, jako je tento (vyškolený na americkou angličtinu), v podstatě nikdy neprodukuje „Hullo“ jako přepis. Je jen tak nepravděpodobné, že by uživatel řekl ve srovnání s „Ahoj“, že si bude vždy myslet, že říkáte „Ahoj“ bez ohledu na to, jak moc zdůrazňujete zvuk „U“.

Vyzkoušet to! Pokud je váš telefon nastaven na americkou angličtinu, zkuste přimět svého digitálního asistenta, aby rozpoznal svět „Hullo“. Odmítá to! Vždy to bude chápat jako „Ahoj“.

Nerozpoznání „Hullo“ je rozumné chování, ale někdy najdete nepříjemné případy, kdy váš telefon prostě odmítne porozumět něčemu platnému, co říkáte. Proto jsou tyto modely rozpoznávání řeči vždy rekvalifikovány pomocí více dat, aby byly tyto případy na okraji vyřešeny.

Mohu si vytvořit svůj vlastní systém rozpoznávání řeči?

Jednou z nejlepších věcí na strojovém učení je to, jak jednoduché to někdy vypadá. Získáte spoustu dat, vložíte je do algoritmu strojového učení a potom na magické kartě běží grafická karta AI prvotřídní kvality na vaší grafické kartě přenosného počítače ... Správně?

Taková pravda je v některých případech, ale ne pro řeč. Rozpoznávání řeči je těžký problém. Musíte překonat téměř neomezené výzvy: nekvalitní mikrofony, šum v pozadí, reverb a echo, variace přízvuku a dále a dále. Všechny tyto problémy musí být obsaženy ve vašich tréninkových datech, aby bylo zajištěno, že neuronová síť s nimi dokáže jednat.

Zde je další příklad: Věděli jste, že když mluvíte v hlasité místnosti, nevědomky zvedáte výšku svého hlasu, abyste mohli mluvit o hluku? Lidé nemají problém s porozuměním vám, ale neuronové sítě musí být vyškoleny, aby zvládly tento zvláštní případ. Takže potřebujete tréninková data s lidmi, kteří křičí na hluk!

Chcete-li vybudovat systém rozpoznávání hlasu, který funguje na úrovni Siri, Google Now! Nebo Alexa, budete potřebovat hodně tréninkových dat - mnohem více dat, než můžete pravděpodobně získat, aniž byste si najali stovky lidí, aby je pro vás zaznamenali. A protože uživatelé mají nízkou toleranci vůči systémům rozpoznávání hlasu nekvalitní, nemůžete na to jít. Nikdo nechce systém rozpoznávání hlasu, který pracuje 80% času.

Pro společnost, jako je Google nebo Amazon, jsou stovky tisíc hodin mluveného zvuku zaznamenaného v reálných situacích zlato. To je jediná největší věc, která odděluje jejich prvotřídní systém rozpoznávání řeči od vašeho hobby systému. Celý bod uvedení Google Now! a Siri na každém mobilním telefonu zdarma nebo prodávající 50 dolarů Alexa jednotek, které nemají předplatné, je přimět vás k jejich co největšímu využití. Každá jednotlivá věc, kterou řeknete do jednoho z těchto systémů, se zaznamenává navždy a používá se jako tréninková data pro budoucí verze algoritmů rozpoznávání řeči. To je celá hra!

Nevěříš mi? Pokud máte telefon se systémem Android s Chytrými kartami Google, klikněte sem a poslouchejte skutečné nahrávky sebe samého a řekněte do něj každou hloupou věc, kterou jste kdy řekli:

Ke stejné aplikaci pro Amazon můžete přistupovat prostřednictvím aplikace Alexa. Apple vám bohužel neumožňuje přístup k hlasovým datům Siri.

Pokud tedy hledáte nápad pro spuštění, nedoporučujeme vám vytvořit si vlastní systém rozpoznávání řeči, který by konkuroval společnosti Google. Místo toho vymyslet způsob, jak přimět lidi, aby vám nahrávali samy sebe mluvit celé hodiny. Data mohou být místo toho vaším produktem.

Kde se dozvědět více

  • Algoritmus (zhruba) popsaný zde pro práci se zvukem s proměnnou délkou se nazývá Connectionist Temporal Classification nebo CTC. Původní příspěvek si můžete přečíst od roku 2006.
  • Adam Coates z Baidu přednesl skvělou prezentaci o hlubokém učení pro rozpoznávání řeči na Bay Area Deep Learning School. Video si můžete prohlédnout na YouTube (jeho řeč začíná v 3:51:00). Vysoce doporučeno.

Pokud se vám tento článek líbil, zvažte prosím přihlášení k mému strojovému učení je zábava! seznam e-mailů. Budu vám posílat e-mailem, až budu mít něco nového a úžasného na sdílení. Je to nejlepší způsob, jak zjistit, když píšu další podobné články.

Můžete mě také sledovat na Twitteru na @ageitgey, poslat mi e-mail přímo nebo najít mě na linkedin. Rád bych od vás slyšel, jestli vám nebo vašemu týmu mohu pomoci se strojovým učením.

Nyní pokračujte na Machine Learning is Fun! Část 7!