Komunity a Kohonenove samoorganizačné mapy
Ako som využitím špeciálnych neurónových sietí mapoval komunity na internetových fórach forum.animacia.sk a interforum.interval.cz.
Neurónové siete

Princíp neurónových sietí je založený na zjednodušenom modele reálnych neurónov. Každý neurón môže mať určitý počet vstupov pričom každý vstup môže mať rôznu váhu. Výstup jedného neurónu môže byť vstupom iných neurónov a tak vzniká neurónová sieť.
Vstupy a ich váhy sú s pravidla reálne čísla z intervalu <0,1>. Samotný zjednodušený neurón potom funguje asi tak, že najprv vynásobí každú hodnotu vstupu príslušnou váhou a potom všetky tieto hodnoty sčíta. Toto však nieje všetko. Na tento súčet sa ešte aplikuje tzv. aktivačná funkcia a až jej výsledok je potom výstupom neurónu. Táto aktivačná funkcia zabezpečí aby výstup neurónu bol znova v intervale <0,1> a teda vhodný ako vstup do ďalšieho neurónu. Aktivačná funkcia však môže slúžiť aj na transformáciu výstupu, ale to v mojom pokuse niebolo nutné.
Nasadenie neurónových sietí na daný problém má väčšinou dve fázy. Fázu učenia a fázu používania. Vo fáze učenia sa pomocou testovacích vstupov rôznymi technikami upravujú váhy vstupov neurónov až kým nedávajú požadovaný výsledok. Vo fáze používania potom naučená neurónová sieť reaguje na vstupy pričom dokáže rozpoznávať aj vstupy, na ktoré nebola naučená. Toto je jedna z najväčších výhod neurónových sietí.
Využitie neurónové sietí je veľmi pestré. Dokážu aproximovať ľubovoľnú funkciu čo sa využíva napríklad na prepokladanie vývoja v ekonomike či na burze cenných papierov. Taktiež vedia sami klasifikovať vstupné údaje, čo sa využíva na triedenie a analýzu obrovských množstiev dát. Využívajú sa taktiež pri rozpoznávaní písmen naskenovaného dokumentu,…
Kohonenove mapy

Kohonenove mapy patria k špeciálnemu typu neurónových sietí. Väčšinou sú to dvojrozmerné siete neurónov usporiadané do štvorca či obdĺžnika a každý neurón má len vonkajšie vstupy. Neuróny teda niesú medzi sebou nijako prepojené. Takéto mapy sa potom využívajú na znižovanie dimenzie vstupných vektorov. Človek si totiž dobre vie predstaviť priestor najviac tretej dimenzie (3D) a tak musíme viacrozmerné vstupy upraviť. Hľadať totiž vzťahy medzi viacrozmernými vstupmi by pre človeka bola príliš zložitá úloha.
Proces učenia Kohonenových máp je nekontrolovaný, čo znamená, že k vstupným dátam nepotrebujeme poznať výstupné. Stačí poznať dostatočne veľkú množinu vstupných vektorov, ktoré chceme analyzovať či klasifikovať. Pri procese učenia Kohonenove mapy sami určia ako budú klasifikovať dané vstupy.
Na začiatku učenia sú váhy všetkých vstupov všetkých neurónov nastavené náhodne. Potom sa na neuróny aplikuje náhodne vybraný vstupný vektor zo skupiny vektorov, ktoré analyzujeme a zistí sa ktorý neurón má pre tento vstup najväčší výstup (násobenie zložiek vstupu váhami, následné sčítanie a transformácia aktivačnou funkciou). Nazvime tento neurón víťazný.
Neurónom v určitom okruhu tohto víťazného neurónu upravíme váhy vstupov tak aby boli "bližšie" k váham daného víťazného neurónu. Toto opakujeme dostatočne dlhý čas (stále s inými vstupmi) pričom opäť zistíme víťazný neurón a upravíme váhy neurónom z jeho okolia.
Po určitom počte opakovaní stále zmenšujeme veľkosť okolia víťazných neurónov, čo spôsobí to, že mapa sa bude zjemňovať a koncentrovať aj na menšie odchýlky vstupných vektorov. Takto dospejeme až k nejakej stabilnej mape, ktorá sa už pri ďalšom opakovaní takmer nemení.
Dôsledkom celej tejto krkolomnej procedúry je to, že mapy totiž zhlukujú podobné vstupy vedľa seba a vznikajú tak komunity podobných vstupov. A to je presne to čo som potreboval a využil.
Experimentálna aplikácia
Cieľom môjho experimentu bolo zmapovať komunity čiže ľudí so spoločnými záujmami podľa toho ako často a do akej kategórie (3D grafika, webdesign, PHP, CSS,…) prispievajú. Vychádzal som z toho, že ľudia, ktorí prispievajú do nejakej kategórie tak o nej asi niečo vedia alebo sa o ňu zaujímajú. Navyše čím viac do tejto kategórie prispievajú, tým viac o nej vedia alebo sa o ňu zaujímajú.
V tejto úvahe však niesú zahrnuté tri značné problémy:
- Malý počet príspevkov niektorého človeka nemôže byť meradlom jeho záujmov s dostatočne veľkou presnosťou.
- Nie každá kategória obsahuje rovnaký počet príspevkov. Čiže 20 príspevkov v kategórií s 2000 príspevkami celkovo je zanedbateľních oproti 20 príspevkom v kategórií so 100 príspevkami.
- Človek, ktorý napíše do určitej kategórie 200 zo svojich 500 príspevkov sa určite zaujíma menej o danú kategóriu ako človek čo tam napíše síce len 30 príspevkov ale dokopy ich má len 50.
Prvý problém som odstránil tak, že som bral do úvahy ľudí s minimálne 20 príspevkami. Druhý a tretí problém sa dá jednoducho odstrániť použitím relatívnych hodnôt čiže percentuálneho podielu príspevkov v jednotlivých kategóriach.
Výsledkom je teda vektor ku každému užívateľovi, ktorý má vysokú dimenziu (okolo 30) a obsahuje percentuálnu hodnotu prispievania do kategórií, pričom bereme v úvahu aj "veľkosť" daných kategórií.
Výsledky
Takto prepočítané údaje som vložil do programu na výpočet Kohonenových máp a o zopár hodín (cca 4) som mal hotovú mapu komunít internetového fóra forum.animacia.sk. Neskôr som tento postup zopakoval s inými údajmi a tak som získal mapu komunít na interforum.interval.cz.
Z týchto dvoch máp sa dá vyčítať všeličo zaujímavé. Napríklad čím bližšie k sebe majú dvaja ľudia na mape tým bližšie majú k sebe aj záujmami. Takto možno napríklad v mape animacia.sk nájsť komunitu ľudí zaoberajúcich sa webdesignom (bers, bystro, Dexter, fczbkk, johno, spock,…). Druhá vec, ktorú možno pozorovať sú odtiene jednotlivých buniek. Čím tmavšie pole je medzi dvoma ľudmi, tým väčší je rozdiel v ich záujmoch.
Poďakovanie
Vrelá vďaka za ochotu a podporu patrí administrátorke forum.animacia.sk Petre Štefánkovej a šefredaktorovi portálu Interval.cz Vilémovi Málekovi za poskytnutie nevyhnutných a cenných udájov z databáz internetových fór.
(2. marec 2004)