Computing n-Gram Statistics in MapReduce Klaus Berberich, Srikanta Bedathur EDBT/ICDT 2013 Joint Conference
Csóka Győző (cikk feldolgozás) Polgár Ákos (prezentáció) Zvara Zoltán (bemutató program)
Bevezetés n-gramok előfordulásának gyakorisága elosztott adatfeldolgozási módszerrel végzett n-gram statisztikák
Probléma fontossága Google & Microsoft legfeljebb 5 szó hosszú n-gramok
Cél Hadoop MapReduce implementációjával több algoritmust is adaptáltak teljesítmény lényegesen javítható
Alapfogalmak Prefix Szuffix r az s részsorozata(r ◊ s) Pl: ax ◊ caxb r s-beli gyakorisága
MapReduce nagy adathalmazok feldolgozása párhuzamosan, egy szerverfürtön elosztottan Mapper Reducer
Word count
Példa τ = 3 és σ = 3 d1 = d2 = d3 =
Példa τ = 3 és σ = 3 d1 = d2 = d3 = : 3 : 5 : 7 : 3 : 4 : 3
Naiv algoritmus Map kiválasztja az összes legfeljebb σ hosszúságú n-gramot Reduce elhagyja azokat, amik τ-nál kevesebbszer szerepelnek
Eredmények Hadoop teszt MongoDB implementáció – Körülményes megvalósítás – Reduce függvény algebrai tulajdonságai
Példa d1 =
Példa d1 =
Műveletigény Ο(|d| 2 ) kulcs-érték pár (σ > |d|) páronként Ο(|d|) hosszú Ο(|d| 3 ) byte transzfer
Apriori scan Ötlet: Részsorozatból
Apriori scan Szöveget többször olvassuk Lista k. olvasás-> legalább τ-szor szerepelt k-gramok Felhasználjuk előző (k-1) gramokat
Apriori scan Mapper: kiszűrés Reduceren nem változtatunk
Példa az apriori scanre 3. olvasásra már csak marad Pl -et elhagyjuk, mert túl ritka τ = 3 és σ = 3 d1 = d2 = d3 =
Műveletigény legfeljebb σ olvasás Nem javítottunk a transzfereken
Apriori index Mapper#1 Reducer#1 Létrehoz egy indexet az összes gyakori, legfeljebb K hosszú n-gram pozíciójához Mapper#2 Reducer#2 K-gram meghatározásához (k-1) gramok összefűzése, kulcs-érték párokkal
Példa az apriori indexre : τ = 3 és σ = 3 K = 2 d1 = d2 = d3 =
Műveletigény Bajok: - a címkelisták száma és mérete - listákat bufferelni kell Nem javítottunk a transzfereken
Suffix- σ Ötlet Az alábbi 3 n-gram kiválasztása (,, ) pazarló. Elsőből meghatározható a másik kettő, mint prefixek Elég kiválasztani a szöveg minden pozíciójához egyetlen kulcs-érték párt a pozíciótól kezdődő szuffixet használva kulcsként
Suffix- σ Probléma n-gramot egy még nem látott beérkező szuffix is reprezentálhat, nem tudjuk elég korán kiválasztani az előfordulási gyakoriságával Sok memória
Suffix- σ Ötlet kulcs-érték párok rendezési sorrendje, amiben a reducerek megkapják őket, befolyásolható
Suffix- σ Egy reducerhez az azonos kulcsú key value-k kerülnek Partícionálás kezdőbetűvel Reducernek sortolva küld Reverse lexiografikusan
Példa τ = 3 és σ = 3 d1 = d2 = d3 = :
Suffix- σ stack termscounts b 0 :
Suffix- σ stack x 0 b 0 :
Suffix- σ stack x 1 x 0 b 0 :
Suffix- σ stack x b 0 :
Suffix- σ stack b 2 :
Suffix- σ stack a 0 b 2 :
Suffix- σ stack x 2 a 0 b 2 :
Suffix- σ stack a 2 b 2 :
Suffix- σ stack b 4 :
Műveletigény Ο(|d|) kulcs-érték pár (σ > |d|) páronként Ο(|d|) hosszú Ο(|d| 2 ) byte transzfer => Javítottunk
Eredmények Hadoop teszt – A szavak hasítva elegánsan (hálózati költségek) MongoDB implementáció – Nincs saját rendező a fázisok között – Nincs partícionáló függvény (finalize) – Reducer algebrai tulajdonságai
Teljes futás / Byte transzfer
Futási idő
Byte transzfer
Kulcs-érték párok