Podobnosti & doporučování 4
Software, který pohání k47čku a tucet dalších webů, stále prochází evolucí i když pomalou. Dosáhl určitého stupně dospělosti a není třeba nic zásadního měnit1 . Zbývá jen donekonečna dolaďovat drobnosti a detaily.
Jedním z nich je systém detekce podobných článků, které se ukazují pod každým textem. Má několik různých úrovní & forem: podle tagů, explicitních metainformací, jestli název nevypadá, že jde o součást série, a nakonec dle obsahu samotného. Poslední mechanismus je nejobecnější, nejméně přesný a nezbytný jako záloha, když všechny předešlé metody selžou.
V minulosti jsem naškrábal pár odstavců, jak se systém postupně vyvíjel do urážlivě triviálních forem po o něco méně primitivní verze. A evoluce pomalu pokračuje. V poslední době jsem přečetl několik paperů pojednávajících o problému detekce klíčových slov a některých přilehlých tématech. Autoři hlásí lepší výsledky, když berou v potaz centralitu grafu. I když pravda – každá akademická publikace vždy hrdě prohlašuje, že jejich věc překonává state of the art a když jich přelouskáte v řadě dvacet, začnete pochybovat, jestli všichni mluví pravdu. Pokud všichni skutečně dosáhli progresu nad každým minulým počinem, neměli bychom žít jako nesmrtelní kyborgové ve futuristické budoucnosti kolonií kolem Jupiteru? Ale to zabíhám…
Centralita grafu znamená page rank a page rank znamená iteraci do konvergence. Z textu se nejdřív nějak vytvoří graf, buď na základě spoluvýskytu termínů (typicky předfiltrovaných a vážených klasickými statistickými metodami) nebo v novějších pracích na základě míry podobnosti vymačkané z word2vec. Pak se na tomhle grafu roztočí page rank a vylezou nejdůležitější termíny – ty nejvíce napojené na ostatní klíčová slova. Pak typicky provedou reranking, který výsledky doladí k dokonalosti. Nebo aspoň tak blízko, jak se k dokonalosti můžou dostat vzhledem k použité metodě. Není to ani zdaleka perfektní, ale asi ±to nejlepší, co může vyprodukovat něco, co není neuronová síť.
Tak tohle jsem naimplementoval tady na k47čku. Tedy něco na ten způsob. Page rank s mnoha iteracemi dokud nedosáhne stabilního stavu není zrovna nejrychlejší & nechce se mi ho provádět na každém článku při každé aktualizaci. Cením si rychlosti, s jakou se web generuje. Není moc věcí, které bych kdy udělal dobře, jak v životě tak mimo něj, musím se držet aspoň téhle triviality & nesnažit se ji anulovat jako cenu za pokroku v jiné oblasti.
Nacvakal jsem lempláckou verzi – slovo dostane váhu dle součtu vah několika nejpodobnějších slov dle word2vec. Odpovídá to jakoby jednomu necelému kolu page ranku. Ten normálně iterativně váží každé slovo dle všech příchozích hran a každá iterace ho posune o něco blíže k finálním vahám. Lajdácká verze výpočet posune kýženým směrem jen trošičku & hned skončí. Omezení na několik nejpodobnějších slov má svůj smysl: klade odpor nespecifické slovní vatě, která je běžných textech běžná, ale nemá informační hodnotu. Takhle to vybere několik nejsilnějších signálů a zbytek zahodí, aby se neutopil v šumu. A vypadá, že to funguje o něco málo lépe, než minulá inkarnace doporučovače.
Klíčová slova v jednom starším textu jsou takováhle:
nová verze: zuck, facebook, demokraticky, institucí, soukromá, zisk, korporace, vlastnické, soc, volená, pravidla, fb, vlastník, korupci, popírání
stará verze: korupci, zuck, institucí, demokraticky, facebook, étos, zisk, vhled, slitování, podepřen, dezinformací, platící, znějí, přebere, xenofobii
Správně to ignoruje nahodilá slova jako étos, vhled, slitování, podepřen, znějí, přebere, xenofobii. Některá z nich jsou častá a příliš obecná, jiná naopak vzácná, ale ani jedno z nich se netýká tématu článku. Nová verze ty vzácné odfiltruje protože nemají oporu v dalším termínu a ty časté, protože podobnost s jinými není vysoká.
Jako vždycky ale netrvá dlouho než se objeví případ, kde to tragicky nefunguje. Třeba texty s anglickými citacemi. Protože jich bývá málo, algoritmus vyhodnotí, že každý anglický úryvek je podobný každému jinému a doporučí ty s aspoň jednou anglickou větou.
- Není to úplně pravda. Mezi okamžikem, kdy byl ten odstavec napsán a kdy se dostal na web, asciiblog zažil pár celkem rozsáhlých zásahů a restrukturalizací.