Konvergence algoritmu k-means

U pohovorů na pozici výzkumníka v Seznamu se ptávám na principy vybraných algoritmů strojového učení, mezi které patří i k-means pro shlukování. Po tom, co algoritmus dáme dohromady, následuje otázka, zda je zaručené, že algoritmus vždy skončí. Tušil jsem, že se dají najít extrémní případy, kdy algoritmus může začít nekonečně dlouho kmitat mezi několika stejně dobrými řešeními, a tak jsem požadoval drobné doplnění ukončovací podmínky (například detekci cyklu), která by ukončení garantovala.

Nedávno jsem však narazil na uchazeče, který byl skálopevně přesvědčený, že standardně definovaný k-means skončí za všech okolností a přísnější kritérium není potřeba. Vzhledem k tomu, že jsem žádný protipříklad připravený neměl, zkusil jsem nejprve zahledat na internetu. A ejhle. Internet je plný „důkazů“ toho, že k-means konverguje. Tvrdí to dokonce i Wikipedie! Nezbylo mi tedy nic jiného, než ten protipříklad vymyslet. Tady je.

Algoritmus k-means

K-means patří do skupiny takzvaných algoritmů strojového učení bez učitele. Jeho cílem je nalezení k shluků daných bodů, kde shlukem rozumíme skupinu bodů, které jsou si navzájem blízko (ve smyslu nějaké metriky). Typickým příkladem použití může být analýza zákazníků internetového obchodu, které chceme podle zájmů a chování roztřídit do předem neznámých kategorií.

Vstupem algoritmu je množina m bodů, které jsou definované souřadnicemi v n-rozměrném prostoru, a číslo k, určující požadovaný počet shluků. Všechny shluky jsou reprezentované svými středy a každý bod potom náleží do shluku, jehož střed je mu nejblíže. Souřadnice středů se určují iterativním způsobem založeným na EM algoritmu. Zde uvádím jeho neformální zápis (zájemci o preciznější definici si ho můžou nastudovat na příklad na Wikipedii):

  1. Pro každý shluk zvol náhodně souřadnice jeho středu (typicky se volí totožně se souřadnicemi náhodně vybraných různých bodů).
  2. Každý bod přiřaď středu, ke kterému leží nejblíže.
  3. Urči nové souřadnice středů jako průměr souřadnic všech bodů, které náleží do daného shluku.
  4. Opakuj od bodu 2, dokud se shlukování neustálí.

Princip algoritmu je ilustrovaný obrázkem 1.

Algoritmus k-means.

Obrázek 1: Algoritmus k-means.

Není obtížné dokázat, že tento iterativní algoritmus neustále zmenšuje chybu, definovanou jako součet vzdáleností všech bodů od středů svých shluků, a spěje tak k nějakému lokálně-optimálnímu řešení. Co však, pokud dojde k tomu, že má jeden bod stejně daleko ke středům dvou nebo více různých shluků? V takovém případě je možné náhodně vybrat libovolný z nich a v tom je kámen úrazu.

Protipříklady

Začněme velmi jednoduchým příkladem. Mějme pouze dva body, které leží přesně na sobě, a hledejme 2 shluky. Pokud budou jejich středy inicializovány do stejného místa jako shlukované body, máme problém, neboť v kroku 2 algoritmu bude mít každý bod stejně daleko ke dvěma středům, a může si tak vybrat odlišný od toho z předchozí iterace. Tím se změní shlukování a algoritmus tak pokračuje dál. Takto je možné kmitat mezi čtyřmi řešeními libovolně dlouho a algoritmus nemusí nikdy skončit.

Dalo by se namítnout, že se v tomto jednoduchém příkladu oba shluky překrývají a nemuseli bychom je tedy považovat za různá řešení. Lze však vymyslet i netriviální příklady.

Mějme 10 bodů v trojrozměrném prostoru, které leží na vrcholech a v polovinách středů hran pomyslného pravidelného čtyřstěnu, a hledejme 6 shluků, jejichž středy A, B, C, D, E, F jsou inicializovány do středů hran, jak je ilustrováno na obrázku 2.

Obrázek 2: protipříklad.

Obrázek 2: Protipříklad.

V takovém případě jsou vždy body na vrcholech stejně daleko od tří různých středů a je možné je tedy přiřadit třem různým shlukům. Existují tři různá shlukování, mezi kterými může algoritmus kmitat, aniž by zkonvergoval. Tato různá řešení jsou znázorněna na obrázku 3.

Obrázek 3: Tři tůzná řešení.

Obrázek 3: Tři tůzná řešení.

Klasický algoritmus k-means tedy v extrémních případech konvergovat nemusí. Opatření, která jeho skončení zajistí jsou však snadná. Nejjednodušším z nich je determinizace výběru shluku v případě, že máme více možností. Shluky si můžeme očíslovat a místo náhodného výběru vybírat například vždy ten s nejnižším identifikátorem. Jinou možností je detekovat kmitání nebo změnit ukončovací podmínku algoritmu a zastavit v případě, že už se chyba shlukování nezmenšuje. Nic takového však standardní definice algoritmu neuvádějí a tvrzení, že k-means vždy konverguje je tedy nesprávné.


Share on FacebookTweet about this on TwitterShare on Google+

Je singularita blízko?

Dnes proběhlo poslední kolo mediálně ostře sledovaného poměřování schopností člověka a stroje. Počítačový program AlphaGo firmy DeepMind ve hře Go definitivně potvrdil své vítězství a porazil tak dosavadního mistra světa Lee Sedola s výsledným skóre 4:1. Go se od šachu nebo jiných her, ve kterých stroje porazily člověka už dávno, liší v obrovské velikosti prostoru herních možností. Tento prostor není možné procházet celý a hledat globálně optimální tah, namísto toho je potřeba využít jakési strojové intuice, která vychází pouze z lokálních znalostí. Intuice, kterou jsme doposud přisuzovali pouze lidem, se v souvislosti s AlphaGo v popularizačních textech zmiňuje poměrně často. Může se tedy zdát, že se přiblížila doba, kdy nás počítače svojí inteligencí překonají.

Vítězství stroje nad šampiónem v Go je bezpochyby významný úspěch vývojářů DeepMind, ale je singularita skutečně blízko? Nemyslím si.

Singularita

Pojem singularita v kontextu umělé inteligence zavedl matematik Stanislaw Ulam v polovině dvacátého století. Jedná se o hypotetickou událost, kdy univerzální umělá inteligence dosáhne úrovně člověka a svojí schopností vylepšovat sebe sama nás začne rychle překonávat. Nemalé množství lidí věří, že se tato chvíle velice rychle blíží.

Jedním z nejznámějších popularizátorů singularity je Ray Kurzweil, který se proslavil především jako autor knihy The Singularity Is Near: When Humans Transcend Biology. Hlavním argumentem pro blížící se singularitu je dosavadní exponenciální růst různých forem technologického pokroku. Tato myšlenka je rozšířením takzvaného Moorova zákona, podle kterého se počet tranzistorů umístěných na počítačový čip zdvojnásobuje zhruba každé dva roky. Jedním z příkladů rozšíření je exponenciální růst výpočetní rychlosti počítačů, ilustrovaný na obrázku 1.

Exponenciální růst výpočetní rychlosti

Obrázek 1: Exponenciální růst výpočetní rychlosti. Zdroj: https://en.wikipedia.org/wiki/The_Singularity_Is_Near

Je ale exponenciální růst výpočetní rychlosti a dalších technologických ukazatelů dostatečným předpokladem k dosažení umělé inteligence, překonávající ve všech ohledech intelekt člověka?

Úspěchy umělých neuronových sítí

Není pochyb o tom, že existuje celá řada oblastí, ve kterých stroje nad lidmi výrazně vynikají. Už od dob prvních počítacích strojů to jsou úlohy, vyžadující mechanické opakování rutinních postupů. V posledních letech však slaví stroje úspěchy i v oblastech, které byly doposud pouze doménou člověka. Jmenujme například rozpoznání obsahu obrázku, kde současný nejlepší algoritmus dosahuje chybovosti 4,58 % (chybovost člověka se údajně pohybuje někde kolem 5 %), algoritmy pro řízení aut a dronů, projekt DeepDream firmy Google, vytvářející psychedelické obrazy, v úvodu zmíněný program AlphaGo, nebo třeba systém, který je schopný psát básně.

Všechny tyto úlohy mají dvě společné vlastnosti. První z nich je vysoká dimenzionalita problému – u algoritmů pro zpracování obrazu je to množství vstupních pixelů, které nedávají velký smysl jednotlivě, ale je třeba se na ně dívat jako na celek, u hry Go je to obrovské množství možných herních scénářů, u generování textů souvisí vysoká dimenzionalita s množstvím různých kombinací slov, které mohou mít pokaždé úplně jiný význam. Druhým jednotícím prvkem je fakt, že současných fascinujících výsledků bylo dosaženo pomocí hlubokých neuronových sítí.

Umělé neuronové sítě však známe již několik desítek let, je tedy legitimní pokládat otázku, co náhlý posun umožnilo. V první řadě je důležité si uvědomit, že se zmíněné úlohy v principu neliší od jiných úloh strojového učení, které už dlouhé roky považujeme za uspokojivě vyřešené. Nikdo se dnes nepozastavuje nad tím, že e-mailový server dokáže s velkou úspěšností správně rozpoznat spam, nebo nad tím, že cílená reklama na internetu velice přesně reflektuje nikde explicitně nespecifikované zájmy uživatele. Rozpoznávač obrázků není nic složitějšího než klasifikátor s komplexní vnitřní strukturou. Strojový generátor básní je svým způsobem také klasifikátor, jenž se na základě předchozího textu snaží predikovat jeho nejpravděpodobnější pokračování.

Systémy řízení dronů nebo algoritmus AlphaGo se od předchozích příkladů liší v tom, že v sobě zahrnují zpětnou vazbu od okolního prostředí, na základě které jsou schopny se dále zlepšovat. Pokud dron provede nějakou akci, kvůli které začne neočekávaně ztrácet výšku, je to pro něj jednoznačná zpráva o provedení chybného manévru, ze které se může poučit. Podobně algoritmus AlphaGo sehrál několik milionů her sám proti sobě, díky čemuž se dokázal naučit lépe odlišovat dobré strategie od horších. Tomuto způsobu učení se říká reinforcement learning a zdaleka nejde o žádný nový vynález natož o něco principiálně odlišného od neuronových sítí s jinou formou zpětné vazby.

Když opomeneme několik inženýrských triků urychlujících trénování, úspěch hlubokých neuronovým sítí v poslední době je způsoben pouze obrovským nárůstem výpočetního výkonu, který sítím v rozumném čase umožňuje vytvářet velmi složité vnitřní struktury a efektivně pracovat s daty vysoké dimenzionality. To však samo o sobě není všespásné.

Budoucnost umělé inteligence

V tuto chvíli umíme strojově efektivně řešit některé jednotlivé problémy, které se na první pohled zdají být složité, ale principálně příliš obtížné nejsou. Pokud bychom chtěli, aby se stroje vyrovnaly lidem ve všem, potřebovali bychom něco víc než jen výpočetní výkon. Pro ilustraci uvedu dva příklady, které přesahují rámec schopností známých algoritmů.

Současná umělá inteligence umí řešit pouze problémy, pro které je vytvořená. Stále je to jen algoritmus, vykonávající postupy naprogramované člověkem, a příliš se tak neliší třeba od výrobní linky v továrně. Oproti tomu člověk je schopný vidět svět v souvislostech a být kreativní. Pokud člověk vytvoří program, který umožňuje generovat básně, přirozeně ho napadne, že by se podobný algoritmus dal použít i pro generování notového zápisu hudby. Stroj ale tuto souvislost nevidí. Když učitel na základní škole přehraje dětem úryvek Smetanovy Vltavy a Blaníku, věřím, že většina žáků dokáže rozpoznat, který úryvek odkazuje k řece a který k rytířům, aniž by nad tím žáci kdykoliv přemýšleli nebo jim někdo řekl, podle jakého klíče se mají rozhodnou.

Jiným příkladem omezenosti stroje je absence jeho vlastního vědomí. Stroje se nerozhodují podle svého vlastního úsudku, ale buď podle pravidel, která jsou získaná z dat (případně jsou přímo součástí jejich algoritmu), nebo statisticky podle napočítaných pravděpodobností. Algoritmus pak sice dokáže provést správné rozhodnutí, ale je velice obtížné zjistit, proč se tak rozhodl. Natož, aby své rozhodnutí dokázal sám zdůvodnit. Při generování básní nemá počítač ponětí o tom, co vytváří, pouze aplikuje obecné vzory získané z dat a vytváří statisticky očekávané posloupnosti písmen.

Na základě svých znalostí a zkušeností si netroufám predikovat, zda se jednou podaří vytvořit univerzální umělou inteligenci, která se ve všem vyrovná člověku a postupně ho překoná. Jsem však přesvědčený, že k tomu teď nejsme o mnoho blíže než v polovině minulého století, kdy Alan Turing vytvořil první teoretický model výpočetního stroje.


Share on FacebookTweet about this on TwitterShare on Google+

Středověk umělé inteligence skončil, seznamte se s neuronovými sítěmi, které umí psát básně

Nikdy jsem si nemyslel, že by jednou počítače mohly nahradit v člověka v tak kreativních a neexaktních činnostech jako je malba nebo skládání básní. Pomalu ale začínám měnit názor.

Není tomu dlouho, co se i v neodborných časopisech začalo psát o neuronových sítích, které dokáží generovat obrazy, připomínající psychedelické výtvory surrealistických malířů. Jak je to ale s automatickým generováním textů? Několik článků na toto téma vzniklo (např. http://karpathy.github.io/2015/05/21/rnn-effectiveness/), ale žádný zatím nezískal takový ohlas jako generátory obrazů. Pojďme tedy tuto oblast podpořit a ukažme si, jak pomocí umělých neuronových sítí vytvořit automatického básníka.

Rekurentní neuronové sítě

Většina neuronových sítí, které jsou používány k analýze i ke generování obrazu, je dopředných. To znamená, že signál v neuronové síti může proudit pouze jedním směrem a nemůže se vracet nebo se např. točit ve smyčce. Sítě, které toto umožňují se nazývají rekurentní. Takové sítě mnohem blíže připomínají lidský mozek a především mají jednu zásadní vlastnost — a tou je možnost uchování informace. Jinými slovy, rekurentní sítě mají paměť. Díky tomu je vyjadřovací schopnost těchto sítí větší než u dopředných neuronových sítí, a je dokonce dokázáno, že je ekvivalentní Turingovu stroji.

Paměť není nutná vždy, pokud však chceme pracovat se sekvenčními daty jako jsou texty, bez paměti se obejdeme jen stěží. Nevýhodou rekurentních neuronových sítí je však obtížnost trénování. Zatím existuje jen několik málo architektur rekurentních sítí, které dokážeme trénovat efektivně. Jednou z nich je takzvaná Long Short-Term Memory (LSTM), kterou použijeme jako stavební prvek našeho automatického básníka.

Jedna paměťová buňka Long Short-Term Memory je znázorněna na obrázku 1, převzatém z http://www.willamette.edu/~gorr/classes/cs449/lstm.html.

Long Short-Term Memory

Obrázek 1: Long Short-Term Memory.

Její jádro tvoří stavový neuron spolu se zpětnovazební smyčkou, označený jako „cell state“. Díky zpětné vazbě je neuron schopný uchovávat informaci, která byla přivedena na vstup i poté, co je vstup odpojen. Připojení a odpojení vstupu je ovládáno neuronem označeným jako „input gate“. Podobně je aktivace výstupu řízena neuronem označeným jako „output gate“.

Automatický básník

Abychom mohli natrénovat neuronovou síť generující básně, potřebujeme jí ukázat, jak takové básně mají vypadat. K tomu by ideálně posloužil velký korpus básní. Vzhledem k tomu, že jsem žádný velký neměl k dispozici, použil jsem databázi písňových textů ze serveru supermusic.sk. Sice nejde o básně, ale písňové texy mají k poezii blízko. Pomocí jednoduché detekce jazyka byly odstraněny nečeské texy a vznikl tak 10 MB velký textový korpus. Kvůli oddělení jednotlivých písní byly jejich názvy ve formě nadpisů převedeny na kapitálky a samotné texty na malá písmena.

Neuronová síť pro generování básní je sestavena z pěti vrstev. Vstupní vrstva sestává ze 157 neuronů (což je počet různých znaků v korpusu). Následují tři vzájemně úplně propojené vrstvy LSTM, přičemž každou vrstvu tvoří 1024 buněk. Výstup je tvořen 157neuronovou softmax vrstvou, jejíž výstupem je pravděpodobnostní rozdělení přes 157 stavů. Architektura celé sítě je znázorněna na obrázku 2.

Automatický básník

Obrázek 2: Automatický básník.

Síť je trénována tak, aby na základě historie a písmene na aktuální pozici v korpusu predikovala následující písmeno. Díky tomu, že síť pracuje na úrovni písmen a ne slov, jak by se nabízelo, je možné se naučit i formátování, specifické pro zápis písňových textů.

Vzrůstající popularita neuronových sítí s sebou přinesla celou řadu hotových nástrojů a knihoven. Není tak už naštěstí potřeba programovat vše od píky. Pro natrénování výše popsané sítě byla použita implementace Char-rnn využívající framework Torch.

Výsledek není vůbec špatný

Poté, co byla síť natrénovaná na písňovém korpusu, bylo možné ji použít pro generování nových textů. Pro účely testování byla inicializována náhodně, ale je možné ji inicializovat například i vložením názvu básně nebo počátečních veršů. Teoreticky může natrénovaná sít vygenerovat neomezené množství různých textů, nechal jsem tedy vygenerovat několik desítek básní a vybral pár nejlepších. Básně jsou přesně v té podobě, v jaké je vygenerovala síť.

Zde je jedna z nejlepších:

PÍSEŇ PODZIMU

proč se nedorazíš?
telefonát není naděje
pořád doma na týhle planetě
čas pro tebe stále dupe svou

na na na...

já vím, že v duchu prozrazuju snář
poznám že nejsem nic víc

Soudě podle tohoto příkladu dokázala síť bezchybně použít českou slovní zásobu, morfologii i syntax. Nejzajímavější ale je, že i obsahově dává báseň víceméně smysl a není úplně hloupá. Dalo by se namítnou, že mohlo dojít k přetrénování a síť jen opakuje verše, které viděla při trénování. Pokud se však podíváme do korpusu, žádný z použitých veršů se tam nevyskytuje.

Je zřejmé, že je tato neuronová síť schopná pochopit i netriviální sémantické konstrukce. Příkladem může být přirovnání „vzácný jako listí“ v následující básni. Opět se jedná o sousloví, které se v korpusu vůbec nevyskytlo:

VŠE PRÝ JE MŮJ HŘÍCH

já nechci slyšet chtíč
tak vzácný jako listí
slzy v očích mám
a měl bych řvát

kdo mi to vášně ukrývá
netuším, každý je tu sám
jen pár let jsem přísahal
že pro mne má smysl žít.

Obecně se dá říci, že čím kratší báseň je, tím větší smysl dává. Je to samozřejmě dáno tím, že v delších textech je větší prostor pro odbočení od tématu. Občas má síť tendenci vytvořit velmi krátkou báseň. Pokud to udělá, téměř vždy se jedná o něco povedeného a úsměvného. Zde jsou dva příklady:

NEJSI TAMARA

jsi ludmila

NEJHEZČÍ DÁREK

50 kčs, tak mám tě rád

Někdy se stane, že si síť vymyslí nové slovo. Pokud k tomu dojde, často se však jedná o velmi zajímavý novotvar jako v názvu následující básně:

DŽÍNOVÁ POKROPANÍ

tak přestaň, smiř se s tím
moje řeč, můj dech, být svá bez peněz
myslím, že jsi žena co dech ti dá
s tebou už nevím co s tím

když večer temně září
chuť ve mně zůstane
jen v klidu mi tvý kroky jdou
už dávno se směje

zkouším se vrátit
nechci se ptát
hledám skrýš
každou noc

a pak se ztratí
neumím lhát
a nejde to vrátit

A na závěr několik dalších výtvorů různých kvalit:

NEJSI

sníh a mrazivá
vím vím

proč zrovna jedna z tebe chce žít
to není možný ty to víš
a já mám ho rád
jen tak promlouvej

ztrácím sílu žít

PROČ SE MI ZDÁ

já vím, že jsem sám
a tak to mám rád
a tak se mi zdá
že tě nechci bít

já vím, že tě nechci bít

já vím, že jsem jen tvůj

ZÁTONÍ

nikdo nemá kolotoč.
krásné paže hostí,
troubí žlutejch koní
a k večeru opilí.

déšť očima život hledá,
musím odeslat je dál,
protože jsi laciná
přece dobře už není.

člověk náš kruh co pustý sen
chceš-li vedle nosit chlast.
oh, jak miliady třeští?
pak mi řekli: nebudeš, tak se střež

KRÁLOVNA VČEL

nebude to divně znít,
pozor na tvůj strach
nesměj se hned
a hned od lidí

proč pocit mi nedáš,
nechci to hned
chceš mi říkat zatím starý poslání
když to ale nevíš, nevadí

poslední ráj,
hledám nahoru a dolů
že je nevěrná
ať není dál

venku je den
tak proč se bojíme
spát

dobře víme
že je něco v ní
a já už to vím

ooou jé

Pokud vás zajímají další příklady počítačem generovaných básní, můžete si zdarma stáhnout mou básnickou sbírku Poezie umělého světa. Pro vygenerování obsažených básní byl použitý vylepšený algortitmus napsaný v TensorFlow a jako trénovací sada posloužily básně ze serveru Písmák.cz.


Share on FacebookTweet about this on TwitterShare on Google+

word2vec – jednoduchá aritmetika se slovy

Když psal Tomáš Mikolov svoji disertační práci, jistě netušil, jaký rozruch její důsledky v celosvětové NLP komunitě vyvolají. Práce se zabývala jazykovými modely postavenými na neuronových sítích. Jazykové modely, které se běžně využívají při strojovém zpracování řeči nebo automatickém překladu, jsou matematické modely, umožňující predikovat slova následující po nějaké posloupnosti slov tak, aby vzniklý text co nejlépe zapadal do daného jazyka. Pokud tedy např. máme posloupnost slov „Šel do lesa na“, je v češtině mnohem pravděpodobnější, že bude následovat „houby“ nebo „dřevo“ než „mikroskop“ nebo „vítr“. Neuronová síť tedy řeší relativně jednoduchou úlohu strojového učení s učitelem, kde jako trénovací data slouží velký korpus textů. Mikolov si však všiml, že synaptické váhy neuronové sítě mezi vstupem a skrytou vrstvou sítě představují vektorovou reprezentaci slov v n-rozměrném prostoru, mající velmi zajímavé vlastnosti.

Prvním důležitým rysem je, že slova, která jsou si významově podobná, leží v daném prostoru blízko sebe a naopak slova nepodobná mají od sebe daleko. Mnohem zajímavější je ale vlastnost, kterou Mikolov nazývá „linguistic regularity“. Rozumí se tím zejména to, že velkou část sémantických i morfologických vlastností slov je možné reprezentovat unikátním vektorem. Pokud tento vektor přičteme k vektoru libovolného slova, posuneme se k těsné blízkosti vektoru slova, které se od původního liší právě touto vlastností (pokud takové slovo existuje). Jednoduchá ilustrace ve dvourozměrném prostoru je znázorněna na obrázku 1 vlevo.

word2vec

Obrázek 1: Vektorová reprezentace slov. Zdroj: T. Mikolovov et al. : Linguistic Regularities in Continuous Space Word Representations, NAACL 2013.

Modré šipky zde představují vektory, reprezentující vlastnost změny pohlaví z mužského na ženské. Z obrázku je vidět, že se vždy jedná o vektor stejného směru a velikosti. Lze ho tedy jednoduše spočítat odečtením vektorové reprezentace libovolné dvojice slov, reprezentujících objekty lišící se pouze pohlavím. Označme vektorovou reprezentaci slova s jako vec(s). Vektor změny mužského pohlaví na ženské potom získáme například jako vec("woman") – vec("man") nebo vec("queen") – vec("king"). Vektor změny ženského pohlaví na mužské bude mít stejnou velikost jen opačný směr.

Takovéto vektorové operace se samozřejmě dají kombinovat, viz obrázek 1 vpravo. Ten se dá interpretovat jako odpověď na dotaz „King“ se má ke „kings“ jako se má „queen“ k? Správnou odpovědí je samozřejmě „queens“. Získáme ji tak, že zahledáme slovo, jehož vektorová reprezentace má nejblíže vektoru vec(„kings“) – vec(„king“) + vec(„queen“). Vhodnou metrikou vzdálenosti vektorů je například kosinová vzdálenost. Pokud máme dostatečně velký a reprezentativní trénovací korpus, můžeme se ptát i na relativně složité dotazy, jako Kdo je prezidentem Mexika? Příkladem vektorových operací, které by vedly k výsledku může být vec(Obama“) – vec(USA“) + vec(Mexico“).

Zpracování velkých korpusů pomocí původního algoritmu však bylo výpočetně příliš náročné. Proto vznikly dva zjednodušené modely, pomocí kterých je možné vygenerovat slovní vektory podobných vlastností mnohem efektivněji – CBOW a Skip-gram. CBOW model je jednoduchá dopředná neuronová síť, která predikuje slovo v korpusu na základě sousedních slov. Model Skip-gram naopak predikuje okolní slova ze slova, které leží mezi nimi. Odkazy na různé implementace těchto dvou modelů lze najít na domovské stránce projektu word2vec: https://code.google.com/p/word2vec/.

Po velkém úspěchu těchto modelů vznikla řada dalších přístupů, jejichž cílem bylo také nalezení vektorové reprezentace slov podobných vlastností. Nejvýraznějším z nich je zřejmě stanfordský model GloVe. Žádný z těchto modelů však kvalitativně výrazně word2vec nepřevyšuje, takže nemá smysl se jimi v tomto článku zabývat.

Zájemci si můžou vyzkoušet on-line word2vec model napočítaný nad anglickou wikipedií například na adrese http://deeplearner.fz-qqq.net.


Share on FacebookTweet about this on TwitterShare on Google+

Analýza prezidentských projevů

Český rozhlas včera na svém webu zveřejnil přepisy vánočních a novoročních projevů všech československých a českých prezidentů od roku 1934 do současnosti. Bezesporu se jedná o velmi zajímavá data, která si zaslouží analýzu. První vlaštovkou byl Michal Dvořák, který si všiml, že náš současný prezident ve svém projevu lehce nadužívá první osobu singuláru, což demonstroval jednoduchou statistikou. Frekvenční analýza, kterou použil, je jistě mocný nástroj, ale nedokáže odhalit složitější zákonitosti. Proto jsem se nad korpusem projevů rozhodl provést Latentní Sémantickou Analýzu.

Nejprve jsem dal dohromady všechny texty jednotlivých prezidentů, ty rozdělil na slova a zlemmatizoval je pomocí nástroje MorphoDiTa. Tím vzniklo 11 dokumentů, každý reprezentující texty jednoho prezidenta. Zájemci si je můžou stáhnout zde. Na každý dokument jsem dále aplikovat frekvenční normalizaci TF-IDF a výsledek transformoval do dvoudimenzionálního prostoru pomocí latentní sémantické analýzy (LSA).

Výsledek je znázorněn na následujícím obrázku.

lsa

Je těžké smysluplně interpretovat jednotlivé osy grafu, můžeme se však dívat na vzdálenosti prezidentů ve vzniklém sémantickém prostoru. Z grafu je vidět, že algoritmus bezpečně oddělil demokratické prezidenty od nedemokratických, kteří vytvořili shluk v pravé horní části grafu. Mezi demokratickými prezidenty stojí trochu stranou T. G. Masaryk. To může být dáno tím, že byl u něho k dispozici pouze jeden velmi krátký projev z roku 1934 a data jsou tak ovlivněna šumem. Velmi zajímavé je postavení M. Zemana a E. Háchy, kteří spolu tvoří samostatný shluk. Stojíme tedy před otázkou, co mají tito dva prezidenti společného. Na LSA je pěkné to, že dokáže zachytit i vztahy, které v textech vůbec nejsou explicitně zmíněné, a dává tak prostor pro zamyšlení. Co je tedy spojuje?


Share on FacebookTweet about this on TwitterShare on Google+