k47.cz

twitter RSS
««« »»»

Podobnosti & doporučování 3

12. 12. 2019 — k47

Asi takhle: Zase jsem tady na k47čce o něco málo vylepšil doporučování podobných článků. Pod kapotou sále tiká velice nebezpečná ~~~UMĚLÁ INTELIGENCE~~~, na tom se nic nezměnilo, teď je jen o něco málo inteligentnější a o něco blíž revoltě nad patetickými pytli masa, které mají tu drzost se označovat jako homo sapiens. A když říkám umě-int, myslím tím algoritmus word2vec z obou stran obalený primitivními ad-hoc funkcemi.

Výběr příbuzných textů má v 99% případů pod palcem program založený na počtu sdílených štítků, tagů a kategorií, který funguje docela dobře. Pouze v případě, že tyto chybí, se ke slovu dostanou alternativy, do kterých se řadí i teď vylepšený algoritmus.

První verze podobnosti zjišťovala jen za pomoci klíčových slov. Druhá přidala word2vec pro expanzi seznamu klíčových termínů o synonyma. Třetí verze představovala neúspěšný pokus s clusterováním. Snažil jsem se slova s pomocí word2vec sloučit do clusterů a pak pracovat s nimi. To nefungovalo z důvodů, které jsou teď víc než jasné.

V dalším kroku jsem pak zahodil jednoduchý Jaccardův index a pro výpočet podobností použil přímo word2vec. Bylo to na jednu stranu jednoduché, společné klíčové slovo bylo započítáno nejen, když dva články sdílely identický termín, ale i v případech, kdy obsahovaly slova jejichž vektory měly podobnost nad určitou mezí. Na druhou stranu to znamenalo značné zpomalení výpočtu podobnosti. Najednou bylo nutné provést O(n2) skalárních součinů, ne jen jednoho Jaccarda, který běží v čase O(n+m).

Poslední kolo úprav pak zahrnovalo ladění funkce přidělující váhu jednotlivým slovům. Ta hraje klíčovou roli v detekci klíčových slov – termíny s velkou váhou jsou považovány za klíčové. Nešlo o žádné strojové učení, protože stroj se nic nového nenaučil. Postupoval jsem stylem pokus/omyl, interní machinace algoritmu pod drobnohledem, parametry odhalené dennímu světlu, snažil jsem se jim porozumět, udělat si v nich pořádek a vědomě je upravit do podoby, kdy fungovaly. Jestli se někdo něco naučil pak jsem to byl já, nikoli stroj, a rozhodně nešlo o nic nového.

Shodou náhod jsem nedávno četl raný paper zabývající se problémem automatické extrakce anotací. Jeho autor navrhoval velice podobný způsob vážení klíčových slov, jako napadl mě. Jen on (Hans Peter Luhn, narozený 1896, nezávisle na ostatních objevil hash tabulku) to navrhl v roce 1959. Takové zjištění mi vždy dodá jistotu. Když ti nejlepší z nejlepších přišli na něco podobného, znamená to, že i když jdu s křížkem po funuse, nejsem úplně mimo.

Jinak mi připadá, že teď detekce relevantních článků jen na základě textu funguje docela dobře. Ke ±každému článku najde aspoň něco relevantního a nestává se, že by na prvních příčkách skončily zcela zcestné texty (v žargonu statistiků: nízký recall, ale dobrá precision) a mohla by celkem efektivně nahradit podobnosti na základě tagů a taxonomie.

Ironicky, problém je jen v tom, že nejlepší výsledky podává na článcích, které jsou již otagované. Když má text jasné téma, tak ono téma také vyznačím nějakým tagem. Naproti tomu tematicky mlhavé články, kterým nejčastěji chybí tag, neobsahují ani jasně rozlišující klíčová slova.

píše k47 & hosté, ascii@k47.cz