Pro doplnění kategorií je užitečné štítkování (například kategorii „prodejce aut” doplnit o štítky „Citroen”, „Peugeot” nebo kategorii „restaurace” doplnit o „dětský koutek”, „vegan-friendly” apod.). V tomto článku se se čtenáři podělíme o postup, jakým jsme pro náš firemní katalog automaticky vygenerovali velkou databázi štítků z dostupných popisků firemních poboček. V textu budeme pro jednoduchost o záznamech v katalogu – pobočkách firem – psát jako o firmách.
Z produktového pohledu chceme umožnit správci (uživateli spravujícímu firemní profil) přiřadit firmě doplňující štítky, případně štítky automaticky doplňovat na základě textové shody s popiskem v katalogu nebo obsahem webu firmy. Podle nich je možné firmy filtrovat a dále využít jako klíčová slova při vyhledávání. Pro přiřazování štítků je zásadní poskytnout správci od začátku dostatečně širokou nabídku možných kandidátů jako nápovědu, jaké štítky se mohou jím spravovaných firem týkat. Vhodnou cestou, jak získat databázi vhodných štítků, je extrakce klíčových slov z popisků firem a jejich následné ruční protřídění. Je totiž mnohem snazší promazat návrhy na štítky, než je vymýšlet.
Přehled řešení
Základním postupem, který jsme použili pro tvorbu vhodných štítků, je hledání vhodných sousloví v popiscích firem. Mimo to si pomůžeme zalogovanými dotazy z vyhledávače Seznam.cz, kdy nám hledanost jednotlivých sousloví napoví, jaká je jejich důležitost.
Celkový postup pro zpracování dat se skládá z těchto kroků:
- identifikace jmenných frází v popiscích firem
- výpočet relativní četnosti jmenných frází pro každou kategorii
- získání četných dotazů z Vyhledávání Seznam.cz, které vedou na Firmy.cz
- průnik jmenných frází s velkou relativní četností a dotazů z Vyhledávání
- ruční anotace vzorku vygenerovaných štítků a následná binární klasifikace pomocí strojového učení
Extrakce jmenných frází pomocí morfologických značek
Popis firemní pobočky se zvýrazněnými jmennými frázemi. Některé z nich jsou vhodné jako štítky, například hlídané parkoviště či restaurační stravování.
Přirozenými kandidáty na štítky jsou tzv. jmenné fráze nalezené v popiscích firem. Zjednodušeně řečeno, jmennou frázi ve větě tvoří podstatné jméno s jeho přívlastky. Samozřejmě ne každá jmenná fráze je vhodný štítek, s čímž se vypořádáme později.
Jak lze jmenné fráze identifikovat? Zůstaneme-li u definice jmenné fráze jako podstatného jména s přívlastky, budeme hledat po sobě jdoucí přídavné a podstatné jméno ve stejném pádu, čísle a rodu (přívlastky shodné + podstatné jméno) následované volitelným podstatným jménem v druhém pádě (přívlastek neshodný). Abychom takové skupiny slov mohli identifikovat, potřebujeme u jednotlivých slov určit mluvnické kategorie. Tomuto procesu se říká Part-of-Speech tagging a pro nekomerční použití k tomu můžeme použít například nástroj Morphodita. V Seznamu máme k dispozici tagger vlastní, postavený na Majce.
Slovo | POS tag | Vysvětlení značky |
---|---|---|
ubytování | k1gNnSc1 | podstatné jméno (k1), rod střední (gN), číslo jednotné (nS), první pád (c1) |
ve | k7c6 | předložka (k7), šestý pád (c6) |
dvou | k4 | číslovka (k4) |
a | k8 | spojka (k8) |
vícelůžkových | k2gMnPc6 | přídavné jméno (k2), rod mužský živ. (gM), číslo množné (nP), šestý pád (c6) |
pokojích | k1gMnPc6 | podstatné jméno (k1), rod mužský živ. (gM), číslo množné (nP), šestý pád (c6) |
Tabulka 1: Příklad morfologických značek (POS tagů). Znaky na lichých pozicích jsou atributy (k – kind, tedy slovní druh 1–9, g – gender M/I/F/N, n – number (singulár/plurál), c – case neboli pád 1–7). Na sudých pozicích jsou hodnoty atributů malým písmenem nebo číslem. Uvedené značky jsou podmnožinou tzv. brněnských značek.
Jakmile máme v textu označené morfologické značky, můžeme v nich vyhledávat vzory odpovídající jmenným frázím. Například pomocí vzoru „k2cXnYgZ* k1cXnYgZ k1c2?” (viz obrázek 3) lze identifikovat některé jednoduché jmenné fráze skládající se z přídavných a podstatných jmen. Jmenné fráze můžou být složitější – mohou obsahovat zájmena, číslovky, předložky, o které je možné vzor rozšířit. Jmennou frázi nemusí tvořit pouze po sobě jdoucí slova („dvoulůžkové a třílůžkové pokoje”), ale tuto situaci v našem postupu zanedbáváme, protože důležité jmenné fráze se vyskytují ve více popiscích a alespoň v některých z nich je obvykle detekovat dokážeme.
Vzor pro jednoduché jmenné fráze. Odpovídá posloupnosti libovolného počtu přídavných jmen (i žádného, wildcard*) a podstatného jména shodujících se v pádu, čísle i rodu, následované (volitelně, wildcard?) podstatným jménem v druhém pádě. X, Y, Z jsou proměnné.
Výpočet významnosti jmenné fráze podle její relativní četnosti
Zpracováním databáze firemních popisků získáme seznam všech jmenných frází a jejich četnosti, které nám poslouží k odhadu důležitosti a zprostředkovaně jako skóre „štítkovitosti”. Samotnou četnost nelze použít přímo, protože naším původním záměrem bylo pomocí štítků naopak nabídnout jemné filtrování, takže bychom chtěli detekovat i relativně vzácné sousloví. Pokud si zvlášť spočítáme četnosti pro každou kategorii a porovnáme je s globálními četnostmi, získáme jmenné fráze, které jsou významné pro jednotlivé kategorie a do značné míry tím zredukujeme množství obecných neinformativních frází.
Fráze | Rel. četnost ( R ) | Četnost – celkem ( N ) | Četnost – Auto-moto ( Nc ) |
---|---|---|---|
s nabídkou aditivovaných | 0.99 | 755 | 755 |
zimní řetězy | 0.92 | 83 | 81 |
školení referentů | 0.87 | 73 | 68 |
mytí motoru | 0.72 | 95 | 72 |
IVECO | 0.72 | 183 | 135 |
ze zahraničí | 0.53 | 1184 | 636 |
stavební spoření | 0.00 | 6238 | 1 |
Tabulka 2: Příklady jmenných frází a jejich relativních frekvencí pro kategorii Auto-moto). Relativní četnost se vypočítá pomocí vzorce R = Nc / (N + 5). Konstanta 5 ve jmenovateli ponižuje skóre pro málo četné jmenné fráze.
Průnik jmenných frází a dotazů fulltextového vyhledávání
Z logů ve Vyhledávání Seznam.cz můžeme získat dotazy, pro které uživatelé kliknou na výsledek vedoucí na doménu Firmy.cz. O těchto dotazech jednak víme, že se týkají hledání firem, ale navíc v nich uživatelé často používají klíčová slova, podle kterých by chtěli firmy třídit. Pokud tyto dotazy použijeme pro filtrování jmenných frází z předchozího kroku, získáme množinu štítků, která bude reflektovat potřeby našich uživatelů a správcům profilů nabídne možnost relevantně oštítkovat jejich firmy.
Ve svém projektu jsme použili částečnou shodu jmenné fráze s dotazem a aplikací vhodných prahů na relativní četnost a shodou s dotazem jsme vygenerovali 31 135 kandidátů na štítky napříč 561 kategoriemi.
Závěrečná klasifikace štítků pomocí strojového učení
Relativní četnost se ukázala jako rozumný prvotní filtr, nikoliv ale dokonalý. Například pro štítky, které dávají smysl ve větším množství kategorií z různých podstromů, vyjde poměrně malá. Proto jsme ručně prošli 3 000 kandidátů a označili je podle toho, jestli se jedná o dobrý štítek, nebo ne. S výslednou kvalitou jsme nebyli zcela spokojeni.
Proto jsme tento vzorek využili jako učící data pro finální jednoduchý lineární klasifikátor, který upraví skóre kandidátů na základě 10 jednoduchých signálů (relativní frekvence, četnost dotazu, četnost fráze apod.). Přeskórováním jsme zvýšili podíl vhodných štítků (true positives) o cca 40 % u TOP 20 % kandidátů v porovnání se skórováním relativní četností.
Zbývá ruční práce
Pro katalog Firmy.cz bylo zapotřebí vytvořit prvotní databázi štítků, která administrátorům pomůže k výběru vhodných kandidátů pro zlepšení služby. Vhodným zpracováním popisků z katalogu a logů Vyhledávání Seznam.cz jsme vygenerovali více než 30 tisíc kandidátů na firemní štítky.
Množinu kandidátů následně ručně přebrali a opravili administrátoři služby, čímž vznikla kvalitní databáze štítků pro označení firemních profilů. Takto vytvořená výchozí sada štítků se dále obohacuje o ručně schvalované návrhy správců firemních profilů.