În ultimii ani numeroase probleme precum detectarea fraudelor, detectarea mesajelor nedorite (spam), clasificarea imaginilor, determinarea subiectului unui articol ș.a. au fost rezolvate cu ajutorul inteligenței artificiale. Odată cu creșterea numărului de utilizatori de internet, dimensiunea datelor care trebuie procesate devine tot mai mare, astfel stocarea și procesarea acestora pe un singur server este foarte dificilă, soluția fiind procesarea lor într-un sistem distribuit.
Clasificarea este un proces de luare a unei decizii pe baza exemplelor unor decizii corecte, prin urmare este o tehnică de învățare supervizată, deoarece, pentru luarea deciziilor are nevoie de un set de date preclasificat. Prin procesul de ‚training’ din acest set de date va rezulta care proprietate a datelor indică apartenența la o anumită clasă și va fi salvată într-un model care va fi folosit pentru clasificarea datelor noi.
Procesul de construire a unui sistem de clasificare automată este același indiferent de algoritmul de clasificare folosit, și este alcătuit din mai multe faze: procesarea datelor, training, testare și ajustare, validare (testare finală), livrare în producție.
Clasificarea textului este de fapt asocierea dintre un text și o categorie de text predefinită. Fiecare cuvânt care apare în document este considerat un atribut al documentului, astfel pentru fiecare document se construiește un vector de atribute, conținând cuvintele din text. Pentru a îmbunătăți procesul de clasificare se pot elimina anumite cuvinte care apar foarte des într-un vocabular (ex: și, de, o, un), sau se pot grupa cuvinte în grupuri de 2-3 numite n-gram-uri.
Au fost dezvoltați mai mulți algoritmi prin care se poate rezolva această problemă de clasificare: Naive Bayes, arbori de decizie, rețele neuronale, regresii logistice ș.a..
Unul dintre cei mai folosiți algoritmi pentru clasificarea textului este Naive Bayes. Naive Bayes este un algoritm de clasificare probabilistic, deciziile luate de acesta fiind bazate pe probabilități derivate din setul de date preclasificat.
În procesul de training sunt analizate relațiile dintre cuvintele care apar în documente și categoriile asociate documentelor. Este folosită apoi teorema lui Bayes pentru a determina probabilitatea ca o serie de cuvinte să aparțină unei anumite categorii.
Conform teoriei lui Bayes, probabilitatea ca un eveniment A să apară ținând cont că alt eveniment B a apărut este egală cu probabilitatea că evenimentul B să apară ținând cont că evenimentul A a apărut, înmulțit cu probabilitatea că evenimentul A să apară raportat la probabilitatea apariției evenimentului B.
Astfel aplicat la problema noastră, probabilitatea ca un document să aparțină unei categorii C ținând cont că are în componența vectorul de cuvinte X=(x1, x2, …, xn) este următoarea:
Această formulă este foarte greu de calculat și necesită o putere computațională foarte mare, pentru simplificarea problemei, algoritmul Naive Bayes presupune ca atributele din vectorul X sunt independente (de aici algoritmul își ia numele de “naiv”), astfel formula devine:
În felul acesta timpul necesar procesului de training este mult mai mic, dar în cazul în care avem un număr mare de clase și unul foarte mare de date pentru procesul de training, procesul de training va dura mult prea mult pentru ca algoritmul să mai aibă vreo utilitate practică. Soluția este procesarea distribuită.
Hadoop este un program care permite procesarea datelor în mod distribuit. Acesta vine cu un sistem de fișiere distribuit pentru stocarea datelor. Hadoop poate scala până la câteva mii de calculatoare, ceea ce ar trebui să fie suficient pentru a rezolva orice problemă de clasificare.
Mahout este o librărie ce conține algoritmi scalabili de clusterizare, clasificare, sau filtrare colaborativă. O mare parte din acești algoritmi implementează paradigma map-reduce și rulează în mod distribuit utilizând Hadoop. Viteza de procesare a algoritmilor din această librărie este diminuată comparativ cu alte alternative atunci când dimensiunea datelor este mică, dar Mahout poate scala foarte mult, iar dimensiunea datelor nu este o problemă pentru acesta. De aceea se recomandă a se folosi doar atunci când dimensiunea datelor este foarte mare (mai mult de 1milion de documente folosite pentru training).
Pentru a facilita utilizarea algoritmilor, Mahout pune la dispoziție un utilitar care poate fi executat din linie de comandă. Astfel crearea unui proces scalabil de clasificare automată a textului este mult simplificată.
Primul pas pe care trebuie să-l facem este să transformam textul în vectori de atribute, dar pentru aceasta trebuie să avem documentele în format SequenceFile. Un SequeneFile este un fișier care conține perechi cheie-valoare și este folosit în programele care implementează paradigma map-reduce.
Pentru a transforma datele noastre într-un SequenceFile folosim comanda seqdirectory:
mahout seqdirectory -i datele_initiale -o sequencefile
Transformarea textului în vectori de atribute se face cu ajutorul comenzii seq2sparse care creează un fișier SequenceFile
de tip
:
mahout seq2sparse -i sequencefile -o vectors -wt tfidf
Împărțirea datelor în date de test și date de training este la fel de ușoară precum pașii anteriori, împărțirea este aleatorie putându-se selecta procentul pe care îl reprezintă datele de test din datele totale cu ajutorul parametrului ‚--randomSelectionPct’:
mahout split -i vectors --trainingOutput
train-vectors --testOutput test-vectors
--randomSelectionPct 40 -ow –sequenceFiles
Procesul de training și test se execută utilizând comenzile următoare:
mahout trainnb -i train-vectors -el -o model
-li labelindex -ow
mahout testnb -i test-vectors -m model -l labelindex -ow -o rezultate_test
Rezultatele testării pot fi acum evaluate, și dacă e necesar, pentru a obține un rezultat mai bun se pot modifica datele inițiale și se poate repeta procesul, până când acuratețea clasificării este satisfăcătoare.
Clasificarea textului poate avea multe aplicații, dar acum dimensiunea datelor nu mai este o limitare. Hadoop și Mahout pun la dispoziție instrumentele necesare creării unui proces de clasificare care să lucreze cu un număr de milioane de documente, lucru care altfel ar fi fost foarte greu de realizat.