Személyre szabott keresési találatok - Dmlab

Személyre szabott keresési találatok

Nagy-Rácz István

2014.02.10. • olvasási idő:

A felhasználók múltbéli böngészései és viselkedése alapján sok webes szereplő szeretné személyre szabottá tenni oldalát, hogy az ügyfelei minél inkább úgy érezzék, hogy a gondolataikat is ki tudja találni az adott rendszer. Az orosz keresőóriás, a Yandex is azon igyekszik, hogy a bejelentkezett felhasználói korábbi keresési viselkedése alapján sorrendezze a keresési találatokat.

Az “orosz Google” egy adatbányászati verseny keretein belül kérte a data scientist-ek közösségét, hogy egy anonim felhasználói adatbázis alapján javítsák a személyre szabott sorrendezési algoritmusukat. A versenyen kollégánk, Simon Gábor sikeresen szerepelt és elhozta a 8. helyezést.

Hányadik lettél a versenyen?

8.

Hányan indultak a versenyen?

194, ebből 92-en verték meg a default benchmark-ot, a többiek közül elég sokan csak beküldték a benchmark-ot, nem értem hogy ez miért volt jó nekik (Megjegyzés: Ennek az a célja, hogy még az ilyen alapmegoldások is előrelendítik a Kaggle felhasználóit a rendszer összesített ranglistáján.).

Mi volt a probléma, amit meg kellett oldani?

A Yandex az ”orosz Google”, és azt szerette volna, hogy egy keresésre eredetileg felhasználófüggetlen módon visszaadott találatokat az egyes felhasználók korábbi keresési session-jei és az adott session-beli előzményei alapján rendezzük újra személyre szabott módon. Tehát ez egy ’learning to rank’ feladat volt.

Miért döntöttél úgy, hogy nevezel?

Kíváncsi voltam, hogy mennyire vagyok képes egy átlagos személyi számítógéppel, mennyire tudok megbirkózni ekkora adatmennyiséggel, és maga a feladat is érdekes volt.

Milyen adatelőkészítési műveleteket csináltál?

Először is a nyers click log fájlokból python-nal létrehoztam táblázatos formájú fájlokat (ezzel a kezdeti 16 GB-ból ennek több mint kétszerese lett), amiket KNIME-ban manipulálgattam tovább. Számos különböző aggregációt végeztem, például hogy egy bizonyos keresőkifejezésnél egy adott url-re mennyi az átlagos relevancia stb., és ezeket hozzájoin-oltam a vizsgált keresési találatokhoz. A modellépítéshez a tanítóhalmaz 5 736 333 user-jéből csak 200,000-et használtam fel, de az aggregátumokat az egész tanító adathalmazon számítottam. Ezen kívül próbáltam például külön modellezni az alacsonyabb illetve a magasabb click entrópiájú kereséseket (minél ”egyértelműbb”, annál alacsonyabb a click entrópiája), de ezt nem hozta az elvárt javulást.

Milyen modelleket használtál?

Az R GBM implementációját (a KNIME-os R Extension-ön keresztül hívva), mert annak volt egy olyan változata, amely eleve csoportonkon belüli rangosorolást tanul, és közvetlenül lehetett vele a verseny célfüggvényére (NDCG) optimalizálni.

Mi volt a legérdekesebb/legfontosabb/legmeglepőbb felismerés az adatokban?

Érdekes volt, hogy a Yandex titokban tartotta, hogy az adatokban használt időegység mennyi tényleges időnek felel meg, pl. ha egy kattintás után 50-399 időegységig nem kattintott új találatra, az releváns találatnak, ha 400+ időegységig nem kattintott új találatra, az pedig nagyon releváns találatnak számított, de azt nem tudhattuk, hogy ez hány másodperc. A felhasználók, a keresési term-ek, a domain-ek, és az url-ek mind anonimizálva voltak.

Milyen eszközöket használtál?

Adatelőkészítésre python és KNIME, modellezésre R.

Tanulságok a verseny kapcsán?

Bizonyos pontoknál összedobtam egy quick&dirty megoldást, hogy lássam, hogy van-e értelme annak, amit csinálok. Néha viszont erre is építettem a következő lépéseket, és amikor vissza kellett menni kicserélni a hack-et, az nem volt annyira kellemes. A versenyt végül is egy Yandex-es ürge nyerte meg (aki így díjra nem is volt jogosult), tehát ők valószínűleg elég jól csinálják amit csinálnak…