Vyhledávání v multimediálních databázích Tomáš Skopal KSI MFF UK 8. Metrické přístupové metody (MAM) 3. část – M-strom a varianty
Osnova M-strom PM-strom principy Slim-tree vícecestné vkládání a zobecněný slim-down algoritmus PM-strom motivace struktura
M-strom dynamický, vyvážený, a stránkovaný metrický strom (vychází z B+-stromu, resp. principů R-stromu) v listech jsou shluky datových objektů ve vnitřních uzlech jsou směrovací záznamy (routing entries), které reprezentují sférické metrické regiony, které ohraničují všechny objekty v příslušném podstromu metrické axiomy dovolují odfiltrovat irelevantní větve M-stromu (a tím i irelevantní objekty) během vyhodnocování dotazu (euklidovský 2D prostor)
Uzly M-stromu – detaily (1) listový uzel M-stromu obsahuje datové (ground) záznamy grnd(Oi) = [Oi, Dp, oid] Oi je reprezentace datového objektu (tj. Oi S) Dp je vzdálenost k rodičovskému směrovacímu objektu oid je identifikátor skutečného DB objektu (např. obrázku) příslušného k Oi vnitřní uzel M-stromu obsahuje směrovací (routing) záznamy rout(Oi) = [Oi, rOi, Dp, ptr] Oi a rOi tvoří je kulový region (Oi, rOi) (Oi se nazývá směrovací objekt – routing object) Dp je vzdálenost k rodičovskému směrovacímu objektu ptr je pointer na podstrom – tzv. pokrývající podstrom (covering subtree)
Uzly M-stromu – detaily (2) invarianty hierarchie M-stromu: vyváženost (ala B+-strom) data v listech (ala B+-stromu), neduplikují se hnízdící invariant M-stromu: listová data podstromu příslušnému směrovacímu záznamu spadají dovnitř regionu směrovacímu záznamu konstrukční důsledky regiony směrovacích záznamů na stejné úrovni stromu se mohou překrývat child-regiony mohou „čouhat ven“ z rodičovských regionů, pokud je splněn hnídzící invariant filtrační důsledky pokud dotazový region nepřekrývá region směrovacího záznamu, může být příslušný podstrom odfiltrován jako irelevantní dotaz může na stejné úrovni stromu překrývat více regionů, tj. při vyhledávání se prochází více větví M-stromu (a to i v případě bodového dotazu, kvůli možnému překryvu „sousedních“ regionů)
Rozsahový dotaz v M-stromu Během vyhodnocování rozsahového dotazu je M-strom procházen stylem LIFO. Vstupuje se pouze do těch uzlů, jejichž regiony překrývají dotazový region. (euklidovský 2D prostor) rozahový dotaz
Optimalizace filtrace Vzdálenost k rodičovskému směrovacímu objektu Dp lze využít k pokusu o odfiltrování regionu (v nelistech) nebo objektu (v listech), aniž by se musela počítat vzdálenost regionu/objektu k dotazu. Princip: Vyrobím „prstenec“ z rodičovského směrovacího objektu, kde menší poloměr je rozdíl vzdálenosti k rodiči Dp,a poloměru testovaného regionu rOi (anebo nula, pokud je rozdíl záporný). Větší poloměr je součtem Dp a rOi.Pro listový objekt má prstenec nulovou tloušťku. Pokud se tento prstenec neprotíná s dotazem, nemůže se protínat ani žádná koule uvnitř prstence, tj. ani testovaný region. Test průniku prstence a dotazu je „zadarmo“, protože vzdálenost rodičovského směrovacího objektu k dotazu už jsme spočítali na vyšší úrovni M-stromu.
Konstrukce M-stromu dynamicky: podobně jako u R-stromu nalezení vhodného listu pro vložení objektu případné štěpení uzlu (v nejhorším případě štepení všech uzlů na „vkládací cestě“) různé politiky štěpení staticky: bulk-loading algoritmus dávkový algoritmus, kdy je potřeba celou sadu rychle a najednou zaindexovat – vychází z principů bulk-loading algoritmů v R-stromu využívá se klasický k-cestný algoritmus shlukování s tím, že shluky se rekurzivně „hierarchizují“ do stromu (aby to mohl být M-strom, je navíc potřeba vyvažovat) rychlejší než dynamické vkládání ale horší hierarchie M-stromu (větší „objemy“ a více překryvů regionů) – experimentálně dynamicky/staticky + postprocessing (viz slim-down algoritmus dále)
M-strom, dynamické vkládání –jednocestné nalezení listu Prochází se po jediné větvi M-stromu a to tak, že je zvolen ten podstrom daného uzlu, jehož směrovací region nemusí být po vložení objektu rozšířen a/nebo jehož směrovací objekt je nejblíže ke vkládanému objektu. O(log(|S|)) složitost. O v O O u w O O j p rout) (O 1 grnd(O ) l m i rout(O 1j k z rout) (O w Onew rout) (O 1 w rout) (O 1 u grnd(O ) grnd(O ) w u grnd(O ) grnd(O ) z v
Štěpení uzlu M-stromu Algoritmus štěpení uzlu: vyberou se směrovací objekty pro nové dva uzly, z nich se vytvoří směrovací záznamy, vybírá se podle tzv. promoting policy objekty se rozdělí do nových uzlů, rozděluje se podle tzv. partitioning policy jeden nový uzel nahradí původní, druhý je alokován oba směrovací záznamy se vloží do rodičovského uzlu (původní směrovací záznam je nahrazen jedním z nových) pokud rodičovský uzel přeteče, štěpí se stejně – pokud se rozštěpí uzel, strom povyroste o jednu úroveň
Štěpení uzlu M-stromu – promoting policies random náhodně se vyberou dva objekty složitost O(1) – nepočítá se žádná vzdálenost minMax, minAvg každé dva objekty jsou kandidáty, ke každé dvojici se „cvičně“ provede rozdělení ostatních objektů podle partitioning policy (viz příští slide) – tím vzniknou dva kulové regiony (každý obsahuje „svoje“ objekty) vybere se ta dvojice kandidátů, pro jejichž regiony platí (vzhledem k ostatím kandidátům), že větší z obou poloměrů nejmenší – v případě minMax průměr obou poloměrů nejmenší – v případě minAvg složitost O(n3), z čehož se počítá O(n2) vzdáleností a O(n)-krát se rozdělují objekty (CPU costs) sampling variace minMax a minAvg s tím, že se nezkoumají všechny dvojice, ale nasampluje se menší vzorek složitost O(n) až O(n3)
Štěpení uzlu M-stromu – partitioning policies Objekty se přidělí ke dvěma směrovacím objektům, nejvzdálenější objekt zároveň definuje poloměr. U rozdělování směrovacích objektů, tj. vlastně regionů (když se štěpí vnitřní uzel) je vzdálenost k regionu definována jako horní hranice, tj. vzdálenost ke směrovacímu objektu + poloměr. vyvážené dělení objekty uzlu se setřídí vzestupně podle vzdálenosti ke směrovacímu objektu (zvlášť pro oba směrovací objekty) střídavě se přidělují objekty k bližšímu směrovacímu objektu v pořadí příslušném setřídění pro daný směrovací objekt zajišťuje vyváženost – oba uzly obsahují stejný počet objekty obecně větší překryvy než u dělení dělení nadrovinou objekty se přidělí k bližšímu směrovacímu objektu kombinace nejprve vyvážené dělení – do limitního využití uzlu (např. 30%) potom dělení nadrovinou
Slim-strom vychází z M-stromu, má dvě vylepšení levnější dělení uzlu základní slim-down algoritmus () dělení uzlu podle minimální kostry grafu všem dvojicím objektů v děleném uzlu se spočítá vzdálenost – obdržíme úplný graf podle Kruskalova algoritmu se nalezne minimální kostra (kostra, kde suma vah hran je minimální) – angl. MST – minimum spanning tree odstraní se nejdelší hrana z MST – vzniknou dvě komponenty, které tvoří obsah nových uzlů (musí se z nich ještě vybrat směrovací objekty) složitost O(n2 log(n)), z čehož se počítá O(n2) vzdáleností (úplný graf)
k-NN dotazy v M-stromu heuristický branch-and-bound algoritmus (vychází z algoritmu pro R-strom) modifikace rozsahového dotazu, ale poloměr dotazu rQ je dynamický rQ se zmenšuje z nekonečna až do vzdálenosti ke k-tému sousedovi využívají se dvě struktury: prioritní fronta PR and setříděné pole NN PR: uchovává požadavky na zpracování dosud neodfiltrovaných uzlů požadavek má tvar [směrovací záznam k uzlu N, dmin(N)], kde dmin(N) je dolní hranice vzdáleností od Q ke všem možným objektům v N, tj. dmin(směr. zázn. k N) = max {0 , d(Q , Oi) – rOi}, kde (Oi , rOi ) je region směrovacího záznamu pro uzel N požadavky jsou v PR udržovány setříděny vzestupně podle dmin(N)) NN: uchovává k kandidátů na nejbližší sousedy (nebo horní hranice vzdáleností) na konci NN obsahuje výsledek, tj. k nejbližšch sousedů položka NN má tvar [kandidátský objekt Oi, d(Q,Oi)] nebo [ - , dmax(N)], kde dmax(·) is horní hranice vzdáleností od Q ke všem možným objektům v N, tj. dmax(směr. zázn. k N) = d(Q , Oi) + rOi PR udržuje ty požadavky, jejichž dmin(·) < dmax(·), ostatní jsou odstraňovány, tj. jsou odstraňovány ty (resp. filtrovány příslušné uzly), které nepřekrývají dynamický region dotazu (Q , rQ) – rQ je vzdálenost posledního prvků (kandidáta) v NN Vykonání dotazu: požadavky v PR jsou zpracovávány FIFO stylem → načte se uzel N, přičemž PR a NN se aktualizují o záznamy z N PR je inicializována na ([root , ∞]), NN je inicializována k záznamy [-,∞] to ([- ,∞] , [- ,∞] , ...) I/O optimalní (totožné I/O náklady jako rozsahový dotaz (Q , d(Q , NN[5]) ) )
k-NN dotazy v M-stromu: příklad (k=2) rQ = ∞ dmax(I.) dmax(II.) načti root načti uzel(II.) dmin(I.) dmin(II.) = 0
k-NN dotazy v M-stromu: příklad (k=2) dmax(D) dmax(C) dmin(C) dmin(D) dmax(O5) dmax(O6) načti uzel(D)
k-NN dotazy v M-stromu: příklad (k=2) dmax(O4) načti uzel(I.) dmin(B) načti uzel(B) 5 uzlů načteno, stejně jako v případě rozsahového dotazu (Q , d(Q,O5) )
Revize M-stromu důležitější je rychlost vyhledávání mnoho uživatelů a dotazů ve stejném čase náklady na konstrukci indexu mohou vzrůst aktualizace jsou daleko méně časté než dotazy
M-strom, vícecestné vkládání List pro vložení nového objektu se hledá tak, že se provede série bodových dotazů, která označí (neplné) listy, do kterých objekt „padne“. Z nich se vybere ten nejbližší. Pokud takový neexistuje, provede se klasické jednocestné vložení. O(|S|) složitost O v O O u w O O j p rout) (O 1 grnd(O ) l m i rout(O 1j k z rout) (O w Onew rout) (O 1 w rout) (O 1 u grnd(O ) grnd(O ) w u grnd(O ) grnd(O ) z v
Jednocestné vs. vícecestné vkládání výhody vícecestného vkládání menší objem a překryvy regionů, tj. vyšší efektivita vyhledávání vkládání dovnitř listu, tj. minimalizace rozšiřování regionů (rozšiřuje se pouze při jednocestném vkládání) vkládá se do neplných listů, tj. dochází méně často ke štěpení – a štěpení často nárůst objemu a překryvů vyšší využití uzlů, tj. vyšší efektivita vyhledávání a nižší náklady na uložení indexu díky vkládání do neplných listů se „málo štěpí“ a „více zahušťuje“ nevýhody výrazně vyšší náklady na konstrukci – místo jedné cesty se prochází více cest
M-strom, zobecněný slim-down algoritmus Post-process metoda inspirovaná jednodušší variantou u Slim-tree. V principu jde o redistribuci listových záznamů (jako u Slim-tree) a také o redistribuci směrovacích záznamů (zobecnění) uvnitř již zkonstruovaného M-stromu. Redistribuce se se provádí po úrovních M-stromu, tj. pro každý objekt (uvnitř uzlu) na jedné úrovni M-stromu se nalezne nejlepší uzel, kam lze daný uzel přemístit. Nejlepší uzel se nalezne sérií dotazů, kde dotazem je přemisťovaný směrovací nebo datový objekt a kandidátní jsou ty uzly, které jsou na stejné úrovni (jako je objekt) a region objekt se vejde dovnitř regionu nalezeného uzlu. Z kandidátních uzlů se vybere ten, který je nejblíže. Algoritmus začíná na listové úroveni M-stromu. Výhody: - výrazné zmenšení objemů a překryvů regionů, což zvyšuje efektivitu dotazování - stabilní algoritmus (může být kdykoliv přerušen a opět spuštěn) Nevýhody: - velké náklady – jak I/O, tak výpočetní (pro každý objekt v indexu se v podstatě provede dotaz)
M-strom, zobecněný slim-down algoritmus (příklad) Mějme korektně, ale „mizerně“ zkostruovaný M-strom. Regiony se vysoce překrývají a jejich objem je velký. Dva listové objekty přemístíme do „lepších“ listů. Slimming the leaf level (Level 0)
M-strom, zobecněný slim-down algoritmus (příklad) Poloměry (tj. i objemy) listových a dokonce i nelistových regionů se zmenšily. Zmenšily se i překryvy. Dva směrovací záznamy na předlistové úrovni přemístíme do „lepších“ uzlů. Slimming Level 1
M-strom, zobecněný slim-down algoritmus (příklad) Opět, poloměry i překryvy regionů se zmenšily. Kořen už nejde zpracovat, protože nemá rodiče a tedy není co zmenšovat. The slimmed M-tree
Motivace pro PM-strom metrické regiony M-stromu jsou zbytečně velké indexují se velké kusy prázdného prostoru (mrtvý prostor - the “dead” space) vyšší pravděpodobnost průniku s regionem dotazu nižší efektivita vyhledávání redukce „objemu“ metrického regionu region by měla vést k efektivnějšímu filtrování irelevantních podstromů otázka je jak specifikovat kompaktní metrický region, který ohraničuje všechny datové objekty více „těsně“ zobecnění M-stromu pro jiné reprezentace „tvaru“ metrického regionu
Tvar kompaktního regionu (1) Čtyři požadavky na optimální reprezentaci „tvaru“ metrického regionu: kompaktní uložení - vnitřní uzly by měly v paměti zabírat daleko méně prostoru než listy kompaktní tvar - malý „objem“ mrtvého prostoru jednoduchý test průniku - průnik regionu a dotazu by měl být jednoduše spočitatelný jednoduché vytvoření nadregionu z množiny regionů - kvůli štěpení vnitřních uzlů je potřeba konstruovat nadregion ohraničující rozdělované (nad)regiony - tento požadavek je specifický pro dynamické hierarchické aktualizace (zobecnění štěpení B+-stromu)
Tvar kompaktního regionu (2) Oi Hyper-koule (původní region M-stromu) O2 O5 O4 O3 O6 rOi O1 O2 O5 O4 O3 O6 „Zrnitý“ region Reprezentace regionu: (Oi,rOi) kompaktní uložení nekompaktní tvar jednoduchý test průniku (jediný výpočet vzdálenosti) jednoduché vnořování (koule) Reprezentace regionu: (O1, O2, O3,...) nekompaktní uložení (všechny objekty v podstromu) kompaktní tvar (nulový objem mrtvého prostoru) drahý výpočet průniku (mnoho výpočtů vzdálenosti) jednoduché vnořování (sjednocení)
Tvar kompaktního regionu (3) ? ? O5 O4 O6 O1 O2 O3 Reprezentace regionu: ??? docela kompaktní uložení docela kompaktní tvar docela jednoduchý test průniku docela jednoduché vnořování
Region PM-stromu využití globálních pivotů (inspirováno LAESA metodou) dána pevná množina p globalních pivotů Pi (vybraných z dat) je definováno p hyper-prstencových regionů (Pi , HR[i]) pro každý směrovací záznam pole HR p intervalů <HR[i].min, HR[i].max> každý interval HR[i] ohraničuje vzdálenosti objektů ke každému pivotu Pi region PM-stromu = region M-stromu + pole HR (pivoty Pi jsou sdíleny pro všechny regiony) průnik hyper-koule a hyper-prstenců tvoří menší region ohraničující všechny objekty v listech čím víc pivotů, tím těsnější ohraničení regionu PM-strom je budován stejně jako M-strom, tj. hyper-prstence pouze „ořezávají“ kouli M-stromu
PM-strom, vykonávání dotazu před vykonáním dotazu (Q,rQ), se spočítají vzdálenosti d(Q, Pi) i ≤ p metrický region je relevantní k dotazu právě v případě, že všechny prstence (a koule) protínají region dotazu čím více prstenců, tím nižší pravděpodobnost průniku s dotazem pro test průniku žádné další výpočty vzdáleností nejsou potřeba dotaz dotaz Q Q region M-stromu region PM-stromu
PM-strom, uložení prstenců směrovací záznamy uzlů PM-stromu jsou zvětšeny o další informaci – HR pole intervalů aby režie uložení byla minimální, je potřeba kompaktní uložení intervalu HR[i] vytvoří se histogram vzdáleností pro každý pivot Pi, a vybere se interval <dimin, dimax> tak, že např. 90% vzdáleností v histogramu padne do tohoto intervalu každá hodnota HR[i].min, HR[i].max se přeškáluje do intervalu <dimin, dimax> pomocí jediného bytu, tj. každý prstenec HR[i] zabere 2 byty uložení pole HR záznam uzlu M-stromu Oi, r, ptr(T), ... HR[1],HR[2],...,HR[p]
Srovnání hierarchie M-stromu a PM-stromu
Experimentální srovnání (syntetická sada) syntetická sada vektorů (4D – 60D); 100,000 vektorů; 1000 shluků velikosti diskových stránek: 1 KB – 4 KB; velikosti indexů: 4.5 MB – 55 MB
Experimentální srovnání (databáze obrázků) WBIIS databáze obrázků; cca 10,000 256D-vektory (histogramy šedi) velikost diskových stránek: 32 KB; velikost indexů: 16 MB – 20 MB