ABONAMENTE VIDEO REDACȚIA
RO
EN
Numărul 148 Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 31
Abonament PDF

Clasificare de Text la Scară Largă

Cristian Raț
Software Developer
@Yardi România



PROGRAMARE


Î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.

LANSAREA NUMĂRULUI 149

Marți, 26 Octombrie, ora 18:00

sediul Cognizant

Facebook Meetup StreamEvent YouTube

NUMĂRUL 147 - Automotive

Sponsori

  • Accenture
  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • Colors in projects