1. Apache Mahout
Bălăoi Bogdan Iulian
bogdan.balaoi@infoiasi.ro
Abstract. Apache Mahout este un proiect open-source de la Apache Software
Foundation care are ca scop principal crearea si implementarea de algoritmi
distribuiti de invatare automata. Are deja peste un an de functionare si a fost
pornit de o echipa care lucra la Apache Lucene cu un activ interes in machine
learning si dorinta pentru robustete, bine documentare, implementari scalabile
ale algoritmilor cunoscuti de invatare automata pentru clusterizare si clasificare.
1. Introducere
Proiectul Apache Hadoop dezvolta software open-source pentru fiabilitate,
scalabilitate, calcul distribuit (distributed computing).
Hadoop include urmatoarele proiecte:
- Hadoop Common: utilitati comune ce suporta alte proiecte Hadoop;
- Avro: sistem de serializare a datelor care ofera integrarea dinamica cu
limbaje de scripting;
- Chuwa: sistem de colectare de date pentru gestionarea de sisteme distribuite
de mari dimensiuni;
- MapReduce: framework pentru procesarea distribuita a seturilor mari de
date privind calculul clusterelor;
- Pig: limbaj high-level de data-flow si executarea framework-ului pentru
calcul paralel;
- ZooKeeper: serviciu de coordonare de inalta performanta pentru aplicatiile
distribuite;
2. 2 Bălăoi Bogdan Iulian
2. Apache Hadoop
Apache Hadoop permite aplicatiilor sa lucreze cu mii de noduri si petabytes de
date. Hadoop a fost inspirat de la Google cu MapReduce si Google File System(GFS).
Acesta este de fapt un proiect Apache de nivel inalt ce a fost construit si utilizat de o
multime de contribuitori din lumea intreaga. De exemplu, aplicatiile si organizatiile ce
utilizeaza Hadoop sunt:
- A9.com-Amazon: se creeaza produse Amazon cu indici de cautare utilizand
streaming API si uneltele existente C++, Perl, Python. Se proceseaza
milioane de sesiuni in fiecare zi pentru analizare, utilizand atat Java cat si
streaming-uri API. Clusterele variaza de la 1 pana la 100 de noduri.
- Adobe: utilizeaza Hadoop si Hbase in multe arii din serviciile sociale pentru
a structura datele stocate si pentru a le prelucra pentru utilizarea interna. In
mod curent are in jur de 30 de noduri care ruleaza HDFS, Hadoop si Hbase
in clustere, variind intre 5 si 14 noduri, ambele de productie si de dezvoltare.
Hadoop mai este folosit la Amazon Web Services, Cooliris, Cornell University
Web Lab, Dropfire, IBM, Last.fm, Facebook, Meebo, etc.
Printre cei care au contribuit la dezvoltarea Hadoop se numara Yahoo, cu cea mai
mare contributie, ei utilizand extensiile in principal la cautarile web si la reclame.
Yahoo Search Webmap este o aplicatie Hadoop care ruleaza pe mai mult de zece
mii de clustere Linux si produce date care sunt apoi utilizate in orice interogare. Mai
nou, IBM si Google au o initiativa majora in a utiliza Hadoop pentru suportul
cursurilor universitare in programe distribuite.
Hadoop consta din Hadoop Core care permite accesul la fisierele de sistem suport.
„Rack awareness” este o optimizare care ia in considerare gruparea geografica a
serverelor; traficul de retea intre serverele din diferite regiuni fiind minimizat. HDFS
(Hadoop Distributed File System) este sistemul de fisiere proprii care este conceput a
scala stocari si pentru a rula partea de sus a fisierelor de sistem care stau la baza.
Deasupra sistemului de fisiere vine motorul MapReduce, care consta dintr-un „Job
Tracker” la care aplicatiile client trimit sarcini MapReduce. MapReduce este un
software framework introdus de Google pentru a suporta calcul distribuit pe un set
mare de date. Framework-ul este inspirat de map si reduce functiile utilizate in mod
3. Apache Mahout 3
obisnuit in programarea functionala. Bibliotecile MapReduce au fost scrise in C++,
C#, Erlang, Java, Python, F#, R si altele.
Sistemul de fisiere HDFS nu se rezuma doar la sarcinile MapReduce. Poate fi
folosit si la alte aplicatii, dintre care multe sunt in curs de desfasurare la Apache. Lista
include baze de date Hbase, sistemul Apache Mahout de machine learning si
operatiile cu matrici.
3. Apache Mahout
Apache Mahout este un proiect open-source de la Apache Software Foundation
care are ca scop principal crearea si implementarea de algoritmi distribuiti de invatare
automata. Are deja peste un an de functionare si a fost pornit de o echipa care lucra la
Lucene cu un activ interes in machine learning si dorinta pentru robustete, bine
documentare, implementari scalabile ale algoritmilor cunoscuti de invatare automata
pentru clusterizare si clasificare. Mahout are drept scop:
- construirea si suportul comunitatii de utilizatori si contribuabile astfel incat
codul sa reziste mai mult decat oricare contribuabil particular implicat sau
orice companie sau universitate;
- focus pe lumea reala;
- furnizare de documentatie de calitate si de exemple;
Desi este relativ nou in ceea ce priveste open-source Mahout are deja un numar
mare de functionalitati, in special in ceea ce priveste clusterizarea CF.
Printre caracteristicile principale se enumera multe implementari de clusterizare
MapReduce activate, incluzand K-Means, fuzzy K-Means, Canopy, Dirichlet si
Mean-Shift, dar si implementari distribuite si complementare ale clasificarilor Naive
Bayes.
Mahout suporta diverse implementari ale algoritmilor de clusterizare, toate scrise
in MapReduce, fiecare cu propriul set de obiective si criterii.
4. 4 Bălăoi Bogdan Iulian
3.1 Clasificarea continutului cu Mahout
Mahout accepta in prezent doua abordari legate de clasificare de continut pe baza
statisticilor bayesiene. Prima abordare este un clasificator simplu Naive Bayes activat
MapReduce. Clasificatoarele Naive Bayes sunt cunoscute a fi rapide si destul de
precise, in ciuda ipotezelor cu privire la date ca fiind complet independente.
Clasificatoarele Naive Bayes de multe ori descompun in cazul in care marimea
exemplelor de antrenament pe clasa nu sunt echilibrate sau cand datele nu sunt
indeajuns de independente. A doua abordare, numita Complementary Naive Bayes,
incearca sa corecteze unele dintre problemele legate de modul de abordare, dar
pastrand totusi simplitatea si viteza.
Pe scurt, un clasificator Naive Bayes este un proces in doua parti, care implica
urmarirea caracteristicilor (cuvintelor) asociate cu un anumit document si categorii,
iar apoi utilizand aceasta informatie va prezice noua categorie, cu un continut
necunoscut. Primul pas, cel de formare, creeaza un model cu privire la exemple de
continut deja clasificat si apoi tine evidenta probabilitatilor ca fiecare cuvant este
asociat cu un anumit continut. Al doilea pas, cel de clasificare, utilizeaza atat modelul
creat in timpul formarii, cat si continutul unui nou document, impreuna cu teorema
Bayes, pentru a prezice categoria documentului trecut. Astfel, pentru a rula
clasificatorul Mahout, trebuie mai intai sa antrenam modelul si apoi sa utilizam
modelul pentru a putea clasifica noul continut.
3.2 Cum ruleaza clasificatorul Naive Bayes
Inainte de a putea rula trainerul si clasificatorul, trebuie facut un pic de lucru de
instruire pentru pregatirea setului de documente. Se pot pregati documentele prin
rularea ant prepare-docs si se pot imparti fisierele de intrare utilizand clasa
WikipediaDatasetCreatorDriver, toate incluse in exemplele de la Mahout.
Documentele sunt impartite pe baza ca fiecare document are o categorie care se
potriveste cu una dintre categoriile de interes. Categoriile de interes pot fi orice
categorie valida Wikipedia, sau orice subsir dintr-o categorie. In exemplul ce va fi
5. Apache Mahout 5
prezentat vor fi incluse doua categorii: Science si History. Altfel, orice categorie de
Wikipedia care are o categorie care contine cuvantul science sau history (nu trebuie sa
fie potrivire exacta) va fi pus in aceeasi parte cu alte documente pentru acesta
categorie. De asemenea, fiecare document este tokenizat si normalizat pentru a se
elimina semnele de punctuatie, marcajele Wikipedia, precum si alte caracteristici care
nu sunt necesare pentru aceasta sarcina.
Rezultatele finale sunt stocate intr-un singur fisier cu eticheta cu numele categoriei,
un document pe linie, care este formatul de intrare pe care Mahout il asteapta. De
asemenea, rularea ant prepare-test-docs face acelasi lucru pentru documentele de test.
Dupa formarea si testarea datelor, se va rula clasa TrainClassifier. Odata finalizat,
se va incerca sa se faca clasificarea folosind modelul care a fost construit in timpul
antrenamentelor. La iesire va rezulta o matrice confuzie, matrice ce descrie modul in
care multe rezultate au fost corect clasificate si cate au fost clasificate in mod incorect
pentru fiecare dintre categorii.
Ca o concluzie a celor explicate, pentru a obtine rezultatele clasificate se vor rula
urmatoarele:
- ant prepare-docs
- ant prepare-test-docs
- ant train
- ant test
Rulandu-se toate acestea s-au obtinut urmatoarele:
In rezumatul de mai sus se observa faptul ca 75 % sunt corecte si doar 25% gresite.
La prima vedere, aceasta pare destul de rezonabil, mai ales pentru ca inseamna ca s-a
6. 6 Bălăoi Bogdan Iulian
facut mai bine decat aleatoriu ghicitul. Mai aproape de examinare arata, totusi, ca s-a
facut foarte bine la estimarea history (aproximativ 95% in mod corect), precum si
foarte prost la estimarea science (aproximativ 15%). In cautarea motivelor pentru
care, o privire rapida la fisierele de intrare pentru antrenare arata ca sunt mult mai
multe exemple de history decat science (dimensiunea fisierului este aproape dublu),
care este probabil o posibila problema.
4. Concluzii
Apache Mahout a reusit sa avanseze foarte mult in putin timp, aproximativ un an,
si a reusit sa obtina rezultate semnificative in ceea ce priveste clusterizarea,
clasificarea si CF, avand deasemenea potentialul de a fi dezvoltat. Se au in vedere
implementarile MapReduce ale deciziilor aleatoare pentru clasificare, regulile de
asociere si multe optiuni de categorisire folosind HBase precum si alte modalitati de
stocare.
5. Bibliografie
[1]Introducing Apache Mahout-Scalable, commercial-friendly machine learning for
building intelligent application, Grant Ingersoll (grant@lucidimagination.com),
Member, Technical Staff, Lucid Imagination, 08 Sept 2009
[2] http://hadoop.apache.org/
[3] http://lucene.apache.org/mahout/
[4] http://en.wikipedia.org/wiki/Apache_Hadoop