Párování zboží pomocí CatBoost a praktické zkušeností ze Zboží.cz

12. 1. 2021
Doba čtení: 5 minut

Sdílet

Na Zboží.cz najdete u každého produktu nabídky jednotlivých e-shopů. Uvidíte, za kolik jej prodávají či zda ho mají skladem. Potřebujeme ke každému produktu v databázi automaticky najít vystavené nabídky e-shopů, které ho prodávají.

Mohlo by se zdát, že automatické párování nabídek na produkty je úkol, který by student jakékoli IT školy zvládl naprogramovat za víkend. Stačí k tomu přece pracovat se shodou EANu (číslo čárového kódu) mezi nabídkou a produktem. Co když ovšem nabídka nebo produkt EAN vůbec nemá, nebo je EAN u nabídky uveden špatně? I s takovými problémy si musí automatické párování umět poradit. To se přitom snaží najít nejlepší z milionů produktů pro každou z více než stovky milionů nabídek.

Automatický párovač Zboží donedávna využíval rozhodovací lesy vygenerované RCRankem, což je interní technologie Seznamu. Letos jsme se rozhodli přejít na novější knihovnu CatBoost. Díky technologické změně se na Zboží.cz podařilo snížit chybovost v některých případech párování i o více než třetinu.

Automatické párování využívá Sphinx a strojové učení

Párovač pro každou nabídku najde produkty v lokálním Sphinx indexu. Pro jednotlivé kandidáty pak spočítá skóre pomocí modelu strojového učení. Na kandidáta s nejvyšším skóre se pokusí nabídku napárovat. Ovšem ani takový kandidát nemusí být ten pravý.


Ukázka chybného EANu nabídky (úplně nalevo) vs. produktů. Shoduje se EAN, a přesto nabídka k produktu nepatří, protože se jedná o dva odlišné výrobky.

U produktu už může být například ručně napárovaná jiná nabídka stejného e-shopu (rozhodnutí člověka věříme více). Nebo existuje v rámci stejného e-shopu nabídka, která by pro daný produkt měla vyšší skóre. Cílem je mít pro každou nabídku vybraný odpovídající produkt, pokud na Zboží.cz existuje.

Párovač nově využívá knihovnu CatBoost vyvinutou týmem strojového učení v Yandexu. Tato knihovna se zabývá generováním takzvaných gradient boosted rozhodovacích lesů. Hlavní výhody práce s CatBoostem jsou jednoduché nastavování mnoha hyperparametrů pro ladění výsledné kvality modelu, rychlost učení modelu a užitečné nástroje dodávané přímo s knihovnou.


Jeden z interaktivních nástrojů dodávaných s CatBoostem pro vizualizaci metrik počítaných během učení.

Generování rozhodovacích lesů je metoda strojového učení s učitelem, pro trénování modelu tudíž potřebujeme mít dostatek anotovaných dat. Z těchto dat pak vygenerujeme signály (features). V tuto chvíli se natrénovaný model párovače rozhoduje pomocí 77 různých signálů, které vznikají rozličným porovnáním atributů nabídky a produktového kandidáta, například titulku, popisu, produktového čísla, ceny, EANu, ISBN, výrobce a dalších.

Sběr dat pro učení

Data na Zboží.cz sbíráme dvěma způsoby. Jednou za čas provádíme ruční kalibrace, které jsou hlavním zdrojem anotací. To znamená, že v databázi náhodně vybereme několik tisíc nabídek, a k nim vyhledáme kandidátní produkty. Takto vzniklé dvojice následně kolegové, kteří se starají o produktovou databázi, označí a určí, zda by nabídku na produkt napárovali, či nikoliv. Kvalita výsledného modelu je závislá na kvalitě trénovacích dat, proto v některých případech necháme stejné dvojice prohlédnout více kolegy a zkoumáme shodu. Díky tomu v průběhu anotací dokážeme měřit i jejich chybovost.

Druhým ze způsobů sbírání anotací jsou průběžná data, která získáváme při každodenním ručním posuzování požadavků na napárování nabídky na produkt. Průběžná data přidáváme k trénovacím datům, ale přikládáme jim mnohem nižší váhu než datům z ručních kalibrací. Při posledním generování modelu měla tato data váhu pouze 1/60 dat z ručních kalibrací.

Pro vyhodnocení modelů si hned po skončení ručních kalibrací oddělíme 20 % dat. Modely vyhodnocujeme hlavně na základě dvou metrik. První je precision (přesnost), tedy podíl nabídek, které by model napároval správně. Druhá je recall (pokrytí/úplnost): jaký podíl vzorků, které by model měl ideálně napárovat, skutečně napáruje.

Podle požadovaného poměru těchto metrik volíme práh (threshold) shody: minimální skóre, které nám postačí k napárování. Pokud budeme požadovat stoprocentní přesnost, musíme práh nastavit hodně vysoko, a o to méně nabídek se nám napáruje. Naopak při dostatečně nízkém prahu můžeme napárovat úplně cokoli, pouze s o to větší chybovostí. Je proto nutné hledat přijatelný kompromis. Pro hledání ideálního prahu pomáhá vykreslit si tyto metriky do grafu.

Kalibrace a přechod na CatBoost přinesly nárůst správných rozhodnutí

Na následujícím grafu vidíme precision-recall křivku pro různé hodnoty thresholdu. Nejzajímavější je porovnání křivek v pravé horní části grafu. Model, jehož křivka je blíže k 1 na obou osách zároveň, totiž při stejné přesnosti provede více správných rozhodnutí.

Je zde vidět, že křivka nového CatBoost modelu (červená) dosahuje v podstatě ve všech svých bodech lepších hodnot precision i recall než křivka původního RCRank modelu (modrá).


Pro stanovení thresholdu v produkci pak používáme graf následující. Na ose x se vynáší threshold a na osu y hodnota dané metriky (precision, recall). Křivky červenou barvou jsou opět křivky CatBoost modelu a křivky modré jsou křivky původního RCRank modelu.


Jako produkční threshold jsme nakonec zvolili hodnotu 0,505, kde CatBoost model dosahuje precision 80,1 % a recall 92,8 %. Tuto hodnotu jsme volili tak, aby recall zůstal stejný jako u dosud nasazeného modelu (abychom zachovali přibližně stejný počet napárovaných nabídek). Původní model RCRank na aktuálních evaluačních datech dosahoval při tomto recallu (threshold 0,65) precision 71,3 %. Zlepšení o 8,8 procentního bodu v precision nezní špatně. Zároveň říká, že počet chybně napárovaných nabídek se snížil o téměř 31 %, což jistě potěší mnohé uživatele.

Nový model nejvíce pomohl párování telefonů a navigací

Při vyhodnocení modelů jsme šli ještě o kousek dál. Zajímalo nás, jak si modely na Zboží.cz stojí v hlavních kategoriích, tedy těch nejblíže kořenu stromu kategorií. Srovnání precision můžeme vidět v následujícím grafu.

bitcoin_skoleni


Z něj je patrné, že v žádné z kategorií precision u nového CatBoost modelu dramaticky nepoklesla. Zároveň ale vidíme obrovský skok k lepšímu v kategorii Telefonů a navigací. Stejné srovnání jsme provedli také pro metriku recall, to ukazuje následující graf.


Zde v některých segmentech, například Oblečení a móda, můžeme vidět drobný pokles, ale to pro nás není tak významné jako nárůst precision. Je pro nás důležitější napárovat kvalitně, než mít více nekvalitních párování. Párovači se dále věnujeme a postupně ho vylepšujeme. Aktuálně zkoumáme nové signály, které by mohly kvalitu automatického párování ještě více zlepšit.

Odkazy

Autor článku

Vystudoval obor Informační Technologie na Technické univerzitě v Liberci a nyní už více než čtyři roky pracuje ve společnosti Seznam.cz jako vývojář na službě Zboží.cz. Ve volném čase se zajímá o novinky ve světe open source.