Framework Pentru Analiza Discursului Si Sugestii de Imbunatatire
Cuprins
1 Introducere 6
1.1 Context 6
1.2 Rezumat 7
1.3 Motivație 7
1.4 Structura lucrării 8
2 Capitolul 1. Aplicații existente în domeniul analizei de discurs 9
2.1 Tropes 9
Analiza morfo-sintactică 10
Analiza lexico-semantică 11
Analiza cognitivo-discursivă 11
2.2 RO-Balie 12
3 Capitolul 2 Tehnici utilizate în analiza de discurs 13
3.1 Inteligența artificială și învățarea automată 13
Inteligența artificială 13
Învățarea 13
Criticul. 14
Generatorul de probleme. 14
Învățarea prin întărire. 14
Învățarea nesupervizată. 14
Învățarea supervizată. 14
Preprocesarea datelor 15
Normalizare. 15
3.2 Tehnici și algoritmi de clasificare 16
Algoritmi de clasificare 16
3.3 Clasificatorul Naive Bayes 16
Calsificatorul Naive Bayes Multinomial. 16
Calsificatorul Naive Binar Multinomial. 17
Calsificatorul Naive Binar Bernoulli. 17
Teorema lui Bayes – definiție 17
4 Capitolul 3 Arhitectura aplicației și tehnologii utilizate 19
4.1 STS 19
Spring Tool Suite 3.6.4 RELEASE 19
4.2 Spring, Spring Security și Spring MVC(11) 20
Spring 20
Spring Security 4.0.0 Release 21
Spring MVC 21
4.3 Apache Tiles 22
Exemplu de definire în cadrul aplicației a șablonului principal folosind Tiles 23
Exemplu de extindere a șablonului principal 23
4.4 Apache Commons FileUpload 23
4.5 Hibernate 23
4.6 Concluzii 24
5 Capitolul 4 Descrierea aplicației și detalii de implementare 25
5.1 Identificarea greșelilor de scriere (en: LanguageSpellChecking) și sugestii de îmbunătățire 27
5.2 Identificarea părților părților de vorbire (en: LanguageTool POSTagging) 28
5.3 Identificarea tipului de discurs 29
Reprezentarea resurselor/datelor de antrenament necesare procesului de clasificare 29
DocumentData 29
TrainingData 29
DataForNaiveBayesClassifier 30
Antrenarea clasificatorului Naive Bayes 30
Clasicarea textului și aplicarea algoritmului 31
5.4 Diagrame, statistici și apeluri Ajax 32
Exemplu de ajax call către server pentru preluarea listei paragrafelor clasificate 33
5.5 Încărcarea și salvarea fișierelor 35
5.6 Interacțiunea între modulele aplicației 35
5.7 Concluzii 36
6 Capitolul 5 Evaluarea rezultatelor 37
6.1 Evaluarea la nivel de text/fișier 37
6.2 Evaluarea la nivel de paragrafe 38
Corectitudinea clasificării 38
6.3 Concluziile evaluării 39
7 Capitolul 6 Direcții de dezvoltare 40
Lărgirea sferei de analiză, extinderea la nivel lexical și compararea soluțiilor 40
Profil utilizator pe baza analizelor realizate. 40
Identificarea sentimentelor și analiza tonalității folosite 40
8 Capitolul 7 Elemente de noutate 41
9 Concluzii finale 42
10 Bibliografie 43
Introducere
Context
Încă de când au început să apară primele calculatoare s-a pus problema ca acestea să poată fi capabile să culeagă informații din mediul înconjurător, să analizeze datele colectate și să interpreteze rezultatele obținute, pentru ca, pe baza interpretărilor, să se poată obține răspunsuri și soluții pentru probleme din ce în ce mai complicate și complexe.
În categoria problemelor complicate, ce se doresc a fi rezolvate cu ajutorul calculatorului, se încadrează și problema analizei și interpretării textelor și a diferitelor tipuri de discurs.
Nevoia de analiză și interpretare a textelor a apărut, mai ales ca o consecință a dorinței umane de a exprima totul cât mai clar, mai coerent și corect, pentru ca datele exprimate să poată fi înțelese de cei cărora le sunt adresate. Astfel redactarea corectă a discursurilor și implicit, exprimarea clară a ideilor ce se doresc a fi transmise, a devenit practic o necesitate pentru comunicarea cu ceilalți oameni.
Termenul de “discurs” se referă la relația limbajului cu parametri ai realității non-lingvistice, aspect ce conduce la încadrarea discursului ca aparținând domeniului cercetării interdisciplinare și nu doar al celei strict lingvistice. Când vorbim de “discurs”, văzut ca o realitate în sine, și nu doar ca un reflex al realității, automat, trebuie luată în considerare tratarea celor două procese fundamentale aflate în strânsă legătură și anume: analiza și interpretarea.
Analiza discursului este un proces complex ce vizează stabilirea apartenenței unui anumit tip de discurs la o anumită categorie, identificarea, atât a trăsăturilor specifice categoriei din care face parte, precum și a trăsăturilor particulare, proprii textului analizat, identificarea structurii gramaticale, semantice, verificarea corectitudinii structurale și colectarea acestor informații pentru a putea fi folosite mai apoi în procesul de interpretare. În urma procesului de analiză sunt evidențiate o serie de relații de incluziune, de excluziune, dar și o coerență argumentativă, structurală și referențială.
Imediat următor procesului de analiză, este procesul de interpretare, care, pe baza datelor colectate, oferă o imagine de ansamblu asupra discursului pentru a facilita înțelegerea textului și a informațiilor ce se doresc a fi transmise.
Fie că facem referire la domeniul strict informatic, fie la domeniul lingvistic, literar, sau orice alt domeniu, problema analizei și interpretării discursurilor este una dificilă, mai ales datorită criteriilor multiple care pot fi luate în considerare în procesul de clasificare precum și a “ imposibilității de a le cuprinde pe toate într-o schemă ideală”.
În acest context, prezenta lucrare de Licență propune tratarea unor probleme de actualitate din domeniul lingvisticii computaționale și anume: Analiza și interpretarea diferitelor tipuri de discurs redactate în limba română.
Aplicația are ca scop principal analiza gramaticală a conținutului, încadrarea textului într-o categorie de discurs, identificarea posibilelor greșeli ce țin de structura gramaticală a textului, de ortografie, sau de exprimare, toate, cu intenția de a facilita, prin propunerea unor tehnici de îmbunătățire, redactarea corectă a discursului în funcție de categoria din care face parte.
Prin prezenta lucrare se dorește a se oferi un instrument de analiză la nivel de text ce poate fi folosit pentru îmbunătățirea abilităților de redactare și înțelegere a textelor.
Rezumat
Aplicația oferă utilizatorilor posibilitatea de a încărca fișiere de tip text pentru a aplica asupra lor operații precum: analiza textului pentru identificarea eventualelor greșeli de ortografie sau de gramatică, identificarea tipului de text încărcat, prin încadrarea acestuia în categoria de discurs corectă, precum și posibilitatea obținerii unor sugestii ce pot conduce la îmbunătățirea calității textului.
Totodată, la încărcarea fișierului, utilizatorul are posibilitatea de a alege tipul de discurs pe care vrea să îl obțină în urma prelucrării textului de către program.
Motivație
Fie că este vorba de un simplu text, sau de o lucrare pe o anumită temă, sau de a exprima în scris ceea ce vrem să transmitem verbal, redactarea corectă a textului a reprezentat dintotdeauna o provocare pentru fiecare dintre noi.
Pentru a răspunde acestei provocări, am abordat tema analizei de discurs, cu intenția de a oferi o posibilă soluție la una din problemele de actualitate cu care fiecare dintre noi ne confruntăm, sau ne-am confruntat la un moment.
Programele software pentru automatizarea analizei discursului sunt printre cele mai complexe deoarece presupun cunoașterea și îmbinarea mai multor științe precum: lingvistică, psihologie, istorie, sociologie, retorică, informatică, și multe altele.
În primul rând, am ales această temă, deoarece procesarea textelor în limba română, în special analiza de discurs, reprezintă o direcție relativ nouă în domeniul informatic, fiind un demers multidisciplinar, calitativ și cantitativ, proces responsabil cu studierea conținutului și contextului discursului.
În al doilea rând, am conceput lucrarea ca o aplicație web pentru a putea fi făcută publică, astfel încât să poată fi accesată de oricine.
Structura lucrării
În Capitolul 1 sunt prezentate pe scurt două dintre aplicațiile existente la momentul actual în domeniul analizei de discurs: Tropes și Balie, fiind amintite deasemenea și aplicații similare acestora( în special aplicații similare cu Balie).
Capitolul 2 face o scurtă introducere în domeniul inteligenței artificiale, prezentând, atât conceptele fundamentale din domeniul inteligenței artificiale aplicabile în contextul prezentei lucrări, precum și principalul algoritm de clasificare folosit pentru identificarea tipului de discurs, una din etapele necesare pentru atingerea obiectivelor prezentei lucrări de licență.
Capitolul 3 conține atât prezentarea arhitecturii aplicației împreună cu tehnologiile și framework-urile utilizate pentru dezvoltarea programului, cât și motivarea folosirii acestora.
Capitolul 4 descrie în detaliu funționalitățile aplicației și metodele folosite pentru dezvoltarea lor. Astfel, sunt descrise atât principalele concepte ce au fost aplicate în procesul de implementare: spellchecking, analiza gramaticală, identificarea tipului de discurs, sugestii de îmbunătățire, dar și adaptările făcute pentru a putea fi folosite în contextul prezentei lucrări.
Capitolul 5 descrie elementele de noutate introduse prin dezvoltarea prezentei aplicații și utilitatea acestora.
Capitolul 6 face un scurt rezumat a tuturor informațiilor prezentate și descrie eventualele direcții de dezvoltare ale aplicației și modalitățile de îmbunătățire.
Și nu în ultimul rând, în Capitolul 7 sunt prezentate contribuțiile personale și utilitatea practică a acestora.
Capitolul 1. Aplicații existente în domeniul analizei de discurs
Analiza discursului poate fi conceptualizată atât ca metodă generală, cât și ca metodă concretă, cât și ca un cluster de metode, sau ca domeniu de cercetare. Procesul de analiză presupune lectura atentă a unui text, respectiv, examinarea limbajului utilizat, pentru a înțelege modul în care intenția comunicativă este reflectată în limbaj. Același proces de lectură și examinare este urmat și de majoritatea aplicațiilor existente, care au abordat tratarea problemei analizei de discurs, printre care amintim: Tropes, RO-Balie, cele mai semnificative, respectiv Gate, Oak sau Minor Third etc. care oferă servicii similare cu cele oferite de RO-Balie, diferența constând în faptul că RO-Balie poate fi “antrenat”.
Tropes
Tropes V1.0, dezvoltat în 1994, este primul program de analiză a textelor bazat pe Analiza Propozițională a Discursului (APD), care rezolva, printr-un proces automatizat, ambiguitățile limbii.
Disponibil în două variante: franceză, respectiv engleză (începând din 7 noiembrie 2011), Tropes, este un software de analiză semantică a textelor și de creare a unui thesaurus specific domeniului, ce realizează: împărțirea textului în propoziții, clasificarea semantică a cuvintelor cheie, identificarea claselor pragmatice de substantive și obținerea unui model propozițional simplificat din punct de vedere formal.
Tropes poate fi folosit, atât pentru clasificarea semantică a textelor, analiza calitativă, analiza discursului, extragerea de cuvinte cheie, cât și pentru construcția de thesauri și ontologii și publicarea on-line a rezultatelor.
Înlănțuirea rezultatelor colectate formează o succesiune logică armonioasă, concepută pentru a controla toate informațiile extrase din text, indiferent de natura și dimensiunea lor vezi . Astfel, înțelegerea complexității analizei discursului realizată cu programul Tropes, presupune cunoașterea întregului său univers operațional.
Pornind de la un corpus de texte dat, programul realizează o serie de operații precum: conversia textului, analiza morfo-sintactică, analize semantice, statistici, pe baza cărora afișează mai apoi rezultatele colectate și o serie de grafice. vezi Figura 1.
Figură 1 Procesul de analiză realizat de Tropes
Analiza morfo-sintactică
După conversia textului, prin analiza morfo-sintactică, Tropes identifică categoria morfologică a tuturor cuvintelor din text, gramatica programului incluzând: substantive, verbe, adjective, conectori, pronume, determinanți. Tropes realizează clasificarea cuvintelor, indicând numărul de apariții și procentajul în raport cu categoria principală, vezi Figura. 2.
Figură 2 Analiza morfo-sintactică
Analiza lexico-semantică
Analiza lexico-semantică, este cea mai complexă etapă, programul bazându-se pe rețelele semantice cu structură ierarhizată. După împărțirea în fraze, Tropes realizează clasificarea referințelor ce dețin informații utile, în clase semantice și calculează probabilitatea de apariție a unui anumit sens într-un context particular, vezi Figura 3.
Figură 3 Software de analiză semantică a textului (Tropes)
Printre domeniile de aplicabilitate ale acestui tip de analiză se numără: analiza discursului literar, filozofic, politic și științific, analiza chestionarelor deschise, analiza mesajelor electronice, structura semantică pentru portaluri și enciclopedii, indexarea documentară pentru reviste de presă etc.
Analiza cognitivo-discursivă
Prin acest tip de analiză obținem o imagine de ansamblu asupra textului analizat, putând observa, prin împărțirea textului în episoade, tăria insistenței, apariția și dispariția referințelor, recurențele temporale etc. Acest tip de analiză se bazează pe statistici foarte complexe, programul evidențiind cele mai semnificative fraze în funcție de densitatea semantică.
Prin urmare, acest software realizează extragerea din text a unor date utile, pe care, mai apoi, le analizează și interpretează din punct de vedere statistic, pentru a oferi rezultate obiective de analiză.
RO-Balie
Balie este un sistem multilingv ce poate fi folosit pentru procesarea textelor, fiind creat pentru a suporta extracția de informații. Programul suportă în prezent cinci limbi: engleză, franceză, germană, spaniolă și română, punând la dispoziția utilizatorilor servicii pentru: identificarea limbii, împărțirea textului în propoziții, împărțirea textului în cuvinte (token-uri), respectiv împărțirea în părți de vorbire (POS tagging).
Procesarea textului realizată de Balie constă în transfomarea conținutului într-o listă structurată de cuvinte, prin aplicarea unor tehnici de învățare automată, pe toată durata procesului de training.
În ceea ce privește identificarea limbii, Balie folosește clasificatorul Naive Bayes, ghicind limba textului analizat prin alegerea rezultatului corespunzător limbii cu probabilitatea de apariție cea mai mare. Pe lângă aceasta, aplicația permite și vizualizarea probabilităților celorlalate limbi, vezi Figura 4.
Figură 4 Rezultatele identificării limbii
De altfel, fiind un sistem multilingvistic, pentru identificarea părților de vorbire, în cazul în care în text sunt paragrafe în diferite limbi, modulul de detecatare al limbii poate fi folosit pentru identificarea limbii, pentru a apela mai apoi part-of-speech-tagger-ul corespunzător.
Capitolul 2 Tehnici utilizate în analiza de discurs
Inteligența artificială și învățarea automată
Inteligența artificială
Numeroase probleme, printre care: analiza, interpretarea, respectiv clasificarea textelor, identificarea sentimentelor în texte și multe altele, au fost rezolvate cu ajutorul inteligenței artificiale.
Inteligența artificială poate fi definită ca fiind procesul prin care se urmărește automatizarea activităților asociate gândirii umane, activități precum: luarea deciziilor, rezolvarea de probleme, învățarea, percepția, raționamentul sau chiar acțiunea.
Prin urmare inteligența artificială este domeniul ce urmărește automatizarea comportamentului inteligent prin crearea unor programe computaționale inteligente, capabile să imite, sau, să reproducă, parțial sau în totalitate, comportamentul uman.
Învățarea
În domeniul inteligenței artificiale, una dintre cele mai importante activități este învățarea, deoarece, asemeni inteligenței umane, inteligența artificială se dobândește în urma unui proces continuu de învățare și antrenare. Prin învățare atât ființa umană, cât și sistemele inteligente evoluează, dobândind cunoștințele necesare procesării și înțelegerii infomațiilor.
Deși, învățarea nu se poate face pe baza unui set prea mare de informații, din cauza complexității prelucrării și memorării unor astfel de date, învățarea trebuie, totuși, să contribuie la formarea de reguli suficiente, necesare rezolvării unor probleme aparținând unui domeniu mai extins decât cel în cadrul căruia s-a făcut învățarea. Pentru aceasta, având drept suport experiența acumulată anterior, trebuie urmărită îmbunătățirea performanței, în raport cu o activitate, dar, nu numai la întâlnirea aceleiași sarcini, ci și la întâlnirea unor sarcini similare, nemaiîntâlnite până la momentul respectiv.
Pe lângă elementele de învățare și performanță, amintite mai sus, modelul general folosit pentru realizarea unor astfel de sisteme, instruite să “învețe”, trebuie să trateze alte două elemente conceptuale și anume: criticul și generatorul de probleme.
Criticul.
Criticul este elementul care, urmărind un standard fix de performanță, este responsabil cu analizarea modului în care sunt îndeplinite sarcinile.
Generatorul de probleme.
Generatorul de probleme este elementul a cărui sarcină este de a sugera acțiuni ce trebuie îndeplinite pentru a crea noi experiențe, generatoare de informații.
Acest proces, împreună cu elementele conceptuale descrise anterior, sunt parte integrantă a trei mari categorii de învățare, dintre care amintim: învățarea prin întărire, învățarea nesupervizată, respectiv, învățarea supervizată.
Învățarea prin întărire.
Acest tip de învățare este folositor atunci când, din cauza lipsei de informații sigure și a unui set de antrenament, nu putem stabili cu exactitate validitatea sau corectitudinea instanțelor . Cu toate acestea, cu ajutorul acestui tip de învățare, putem măsura corectitudinea soluției obținute de program prin raportare la celelalte soluții. Așadar, algoritmul învățării prin întărire se realizează fără a compara direct șablonul obținut cu rezultatele corecte pentru setul de exemple, ci implementează un mecanism de aprobare a aproximării rezultatului corect.
Învățarea nesupervizată.
Învățarea nesupervizată folosește reguli euristice pentru a construi conceptele folosite la clasificarea instanțelor, concepte pe care mai apoi le evaluează și le dezvoltă în funcție de importanță. Această importanță este dată de gradul de acoperire al conceptelor asupra instanțelor vizate. Astfel, plecând de la informații cunoscute și fără a defini un concept țintă, se pot identifica concepte complet noi, algoritmul fiind lăsat să identifice singur conceptele posibile.
Învățarea supervizată.
Procesul de învățare supervizată este format din două etape: antrenarea, etapa în care se creează modelul, respectiv, etapa de clasificare/testare, reprezentând aplicarea modelului obținut pe un set de date nou.
Prin urmare, învățarea supervizată, realizează, pornind de la un set de exemple, numite instanțe de antrenament, un șablon ce va fi folosit pentru clasificarea instanțelor noi. La început este dată clasificarea corectă a unui set de date, reprezentând perechi atribut-valoare, de forma: (y, f(y)), unde y este instanța, iar f(y) este clasa din care face parte instanța y. Întregul proces vizează clasificarea corectă a datelor de antrenament, pentru ca mai apoi să poată fi folosite în aproximarea cât mai corectă a valorii f(y).
În această categorie se înscriu: învățarea Bayesiană, arbori de decizie, învățarea bazată pe instanțe, rețele neuronale etc.
Preprocesarea datelor
Atât pentru învățarea nesupervizată, cât și pentru cea supervizată preprocesarea datelor are un rol deosebit în procesul de învățare, analiză și interpretare, prin acest procedeu urmărindu-se normalizarea datelor, selectarea componentelor ce au proprietatea urmărită, analiza componentelor principale, clasificarea lor, ș.a.
Normalizare.
Procesul de normalizare, presupune generarea unor proprietăți, atât pentru a clasifica corect datele unui text analizat, cât și pentru a diminua șansele de a obține date eronate. În cazul de față, normalizarea datelor, presupune ca orice text din setul de antrenament să conțină un număr total de cuvinte egal. De exemplu, stabilim ca fiecare text pentru antrenament să conțină 100.000.000 de cuvinte. Pentru aceasta, la clasificare, pentru fiecare cuvânt din setul de antrenare împărțim numărul lui de apariții la numărul total actual de cuvinte din text, dupa care înmulțim cu 100.000.000. Deci, înainte de a trece efectiv la analiza propriu-zisă a discursurilor, este necesar ca mai întâi să se realizeze preprocesarea datelor, astfel încât datele rezultate în urma proceselor de analiză și interpretare să fie cât mai precise.
În acest scop, dezvoltarea și evaluarea metodologiilor de învățare automată au făcut studiul a numeroase lucrări, articole, conferințe, devenind instrumentele principale pentru implementarea sistemelor complexe de inteligență artificială. Totuși, deși, algoritmii de clasificare folosiți de fiecare tip de învățare în parte diferă, mai mult sau mai puțin, etapele pentru construirea unui sistem de clasificare automată sunt același: procesarea datelor, training, testare și ajustare, validare și livrare.
Tehnici și algoritmi de clasificare
Algoritmi de clasificare
Algoritmii de clasificare sunt utili pentru a cuantifica cantități mari de informații, grupând datele, ce au caracteristici similare, în grupe definite algoritmic.
Analiza clasificării poate fi făcută folosind o serie de algoritmi ce exploatează mai multe euristici, bazându-se în principal pe experiența noastră în gruparea punctelor în clustere.
Clasificatorul Naive Bayes
În categoria algoritmilor de clasificare se încadrează și algoritmul folosit de clasificatorul Naive Bayes, algoritm care, folosind estimări bazate pe date de antrenare etichetate, clasifică date neetichetate.
Acest tip de algoritm poate fi folosit pentru clasificarea textului, întregul proces constând în asocierea textului cu o categorie de text predefinită. Pentru aceasta textul este împărțit într-un set/vector de atribute ce cuprinde fiecare cuvânt al documentului ce urmează a fi clasificat.
Așa cum am precizat mai devreme, pentru îmbunătățirea întregului proces de clasificare, trebuie ca mai întâi să se realizeze preprocesarea datelor. Pentru aceasta, algoritmul naive Bayes realizează eliminarea anumitor cuvinte care apar foarte des (de exemplu: și, sau, ori, un, o etc), sau gruparea cuvintelor în grupuri sau categorii.
Până în prezent există o serie de variații ale clasificatorului Naive Bayes, printre care cele mai întâlnite sunt: clasificatorul Naive Bayes Multinomial (en: Multinomial Naive Bayes), clasificatorul Naive Bayes Binar Multinomial (en: Binarized Multinomial Naive Bayes) și clasificatorul Naive Bayes Bernoulli (en: Bernoulli Naive Bayes). Rezultatele obținute în urma analizelor folosind aceste variații ale clasificatorului Naive Bayes, pot să difere pentru fiecare model în parte, deoarece ele folosesc metode complet diferite.
Calsificatorul Naive Bayes Multinomial.
Acest clasificator, de obicei, este folosit atunci când numărul de apariții ale unui cuvânt are o importanță deosebită pentru procesul de clasificare. De altfel, acesta este și cazul problemei de față, clasificarea textelor realizându-se pe baza acestui model.
Calsificatorul Naive Binar Multinomial.
Acesta este folosit în cazul în care frecvența cuvintelor nu mai este atât de importantă pentru procesul de clasificare. De exemplu, pentru analiza sentimentelor, contează faptul că un anumit cuvânt a fost menționat sau nu, și nu frecvența lui de apariție.
Calsificatorul Naive Binar Bernoulli.
Acesta din urmă, poate fi folosit în cazul în care absența unui cuvânt are o importanță deosebită pentru problema clasificării, de exemplu: identificarea e-mail-urilor de tip spam.
Pe lângă algoritmul dat de clasificatorul Naive Bayes, problema clasificării textelor poate fi rezolvată și cu ajutorul altor algoritmi dezvoltați: arbori de decizie, regresii logistice, rețele neuronale ș.a. Totuși, Naive Bayes este cel mai utilizat dintre toți, acesta fiind un algoritm probabilistic, bazat pe probabilitățile derivate din setul de antrenament.
În etapa de training a algoritmului se face analiza relațiilor dintre categoriile asociate documentelor și cuvintele conținute de acestea. Având aceste date, mai apoi, folosind teorema lui Bayes, se calculează probabilitatea ca un set de cuvinte să fie încadrate într-o anumită categorie.
Teorema lui Bayes – definiție
Probabilitatea ca un eveniment A să apară, ținând cont că un alt eveniment B a apărut este egală cu probabilitatea ca evenimentul B să apară ținând cont că evenimentul A a apărut, înmulțit cu probabilitatea ca evenimentul A să apară raportat la probabilitatea apariției evenimentului B:
Această teoremă, aplicată în contextul clasificării discursurilor, calculează probabilitatea ca, având la dispoziție vectorul de cuvinte al unui document, să îl încadreze într-o anumită categorie aplicând formula:
Deoarece formula descrisă mai sus implică o putere computațională prea mare, algoritmul Naive Bayes, consideră că atributele componente ale vectorului de cuvinte sunt independente tocmai pentru a simplifica complexitatea problemei, de unde și denumirea de “naïve bayes”:
Soluția anterioară, propusă de algoritmul Naive Bayes, este utilă atunci când resursele (memorie sau procesor) sunt limitate, sau când volumul de date, atât pentru training, cât și pentru clasificare, nu este exagerat de mare, în caz contrar, o alternativă ar fi procesarea distribuită. De altfel, și timpul consumat pentru etapa de antrenare este mult mai mic, comparativ cu alte tehnici de clasificare.
Având în vedere că, în contextul prezentei lucrări, volumul de date pe care dorim să îl clasificăm, nu este atât de mare încât să recurgem la varianta procesării distribuite, soluția oferită de algoritmul Naive Bayes poate fi aplicată cu succes în vederea rezolvării problemei care ne intersează: clasificarea textului într-o categorie de discurs. Printre avantajele soluției propuse de clasificatorul Bayes naiv se numără: ușurința realizării calculelor (este relativ rapid și usor de implementat comparativ cu alți algoritmi care au o predicție mai bună dar sunt mai lenți), robustețea la zgomot și atribute irelevante ș.a. Pe lângă rezolvarea problemei clasificării textelor, algoritmul poate fi folosit cu succes și în aplicații ce tratează: detecția spam-ului, diagnoză medicală și/sau selecția tratamentului, analiza sentimentelor, identificarea limbii, detectarea și sortarea email-urilor, categorizarea documentelor, identificarea drepturilor de autor ș.a. Prin urmare, aplicabilitatea clasificatorului este foarte vastă, fiind folosit cu succes în numeroase proiecte de cercetare.
Capitolul 3 Arhitectura aplicației și tehnologii utilizate
Pentru dezvoltarea aplicației am folosit ca și mediu de dezvoltare Spring Tool Suite (STS), versiunea 3.6.4 RELEASE, iar ca limbaj de programare, aplicația a fost scrisă în Java, din cadrul platformei Java EE (en. Enterprise Edition).
În ceea ce privește framework-urile utilizate, partea de server a fost realizată folosind Spring MVC (model-view-controller) framework și Apache Tiles 3 framework, iar pe partea de client, pentru design, am folosit Bootstrap 3 , iar pentru apeluri ajax la server, am folosit javascript (jquery 1.11.1).
În urma analizelor efectuate, aplicația îî oferă utilizatorului posibilitatea de a printa sau copia datele din tabel , sau de a salva rezultatele, în format pdf, excel, csv. Această funcționalitate a fost realizată prin utilizarea plugin-ului “TableTools” oferit de programul “DataTables”, un plug-in jQuery al librăriei Javascript. Acest plugin permite afișarea și gestionarea avansata a tabelelor dintr-o pagină web, punând la dispoziție o serie de operații printre care: paginarea și stilizarea tabelelor, salvarea datelor din tabel într-un anumit format, internaționalizare ș.a.
STS
Spring Tool Suite 3.6.4 RELEASE
STS este un mediu de dezvoltare bazat pe platforma Eclipse și creat pentru dezvoltarea de aplicații Spring, oferind suport atât pentru implementarea, debug-ul, rularea și lansarea aplicațiilor, cât și pentru refactoring, AOP (Aspect Oriented Programing), validări, Spring beans, Spring Persistence (Hibernate + JPA), Spring MVC, suport pentru Java 8, integrarea cu Maven, navigare și căutare avansată etc. Am ales acest mediu deoarece procesul de dezvoltare a fost mult mai ușor și mai rapid, atât datorită funcționalităților puse la dispoziție, cât și datorită posibilității de a combina toate acestea cu versiunea de Java dorită, (Java 7), cu partea de Web și Java EE din Eclipse, pentru a crea o aplicație dinamică și ușor de folosit.
Deoarece aplicația a fost realizată cu Spring MVC, în continuare voi face o scurtă prezentare a framework-ului Spring, urmată de descrierea framework-ului MVC utilizat pe partea de server.
Spring, Spring Security și Spring MVC
Spring
Spring este cel mai popular mediu de dezvoltare, open-source, creat pentru a aborda complexitatea dezvoltării aplicațiilor Java enterprise, framework-ul fiind alcatuit din șase module bine-definite, vezi Figura 5.
Figură 5 Modulele Framework-ului Spring
Printre beneficiile utilizării acestui framework se numără: dezvoltarea de aplicații enterprise folosind “obiecte Java simple” numite POJO-uri (Plain Old Java Objects), organizarea modulară a pachetelor, cuplarea slabă (en. loose coupling) prin injectarea dependințelor (en. dependency injection) și prin utilizarea conceptelor procesului IoC (en. Inversion of Control), programarea declarativă bazată pe aspecte și multe altele.
Injectarea dependințelor (en. dependency injection) face ca, decuplarea să fie mai efectivă, clasele, mai ușor de testat prin injectarea mock-urilor, iar codul, mai ușor de înțeles și de menținut, principiu cunoscut sub numele de Clean Code (en).
Spring Security 4.0.0 Release
Mecanismul de autentificare în cadrul aplicației a fost realizat folosind framework-ul de autentificare și de control al accesului Spring Security. Acest framework oferă o serie de servicii de securitate pentru aplicații de tip enterprise, putând fi integrat cu Spring MVC. Prin intermediul acestui mecanism autentificare și autorizare se evită folosirea neautorizată a aplicației, sporind siguranța.
Spring MVC
Spring MVC este un framework, open-source, bazat pe design-pattern-ul model-view-controller, realizat pentru a simplifica implementarea și testarea aplicațiilor Java web, fiind integrat complet cu Spring. Pattern-ul MVC asigură cuplarea slabă (en. loose coupling) prin separarea logicii aplicației în trei componente: input logic, business logic și UI logic. Astfel, modelul encapsulează datele aplicației prin utilizarea “obiectelor Java simple” (en. POJO-uri), view-ul este responsabil cu redarea datelor modelului, constând, în general, în output HTML ce poate fi interpretat de browser-ul clientului, iar controller-ul este responsabil cu procesarea cererilor utilizatorilor, construind modelul ce va fi trimis mai departe către view.
Bazat pe design pattern-ul Front Controller, Spring web MVC, la fel ca multe alte framework-uri web MVC, este construit în jurul unui servlet central, numit Dispatcher Servlet, care tratează toate cererile și răspunsurile HTTP (en. HTTP requests&responses), vezi Figura 6.
Figură 6 Arhitectura Spring MVC
După cum putem observa din figura de mai sus, după primirea cererii HTTP, servletul consultă Handler Mapping-ul pentru a decide ce Spring MVC Controller trebuie să trateze cererea. După aceasta, trimite o cerere controller-ului selectat și consultă un View Resolver pentru a mapa cererea la implementarea unui view specific, view ce poate fi sau nu o pagină JSP (en. Java Server Pages).
JSP este o tehnologie utilizată pe partea de server, comună implementării componentei view din modelul MVC. Această tehnologie oferă o modalitate simplificată și rapidă de construire a componentelor web, conținând atât componente statice cât și dinamice.
Prin urmare aplicația este alcătuită dintr-o serie de pagini JSP, populate prin intermediul modelelor și mapate cu ajutorul controllere-lor.
Totodată pentru o mai bună structurare a paginilor și pentru a evita scrierea de cod redundant, prin repetarea unor porțiuni de cod (header-ul, footer-ul, sau, meniul principal) pe diferite pagini JSP am folosit Apache Tiles 3.0.
Apache Tiles
Bazat pe design pattern-ul Composite, Apache Tiles este un framework, open-source, construit pentru a simplifica procesul de dezvoltare al interfeței utilizator. Acest framework, reprezintă, la momentul actual, cea mai simplă și elegantă soluție pentru dezvoltarea de aplicații web bazate pe orice tehnologie MVC.
În contextul programului dezvoltat, am folosit acest framework pentru a construi arhitectura generală a aplicației. Astfel, am conturat șablonul principal, prin definirea footer-ului și a header-ului, componente ce vor fi conținute de fiecare pagină JSP a aplicației, la care am adaugat partea de conținut a paginii (en. body), ce va fi înlocuită, în funcție de context, cu informații particulare, specifice fiecărei acțiuni.
Prin urmare datorită posibilității de reutilizare a componentelor deja definite, prin extinderea șablonului principal în vederea adăugării de noi funcționalități, am evitat rescrierea aceluiași cod în contextul diferitelor pagini ce aveau componente comune. Mai jos este redat șablonul-ul principal al aplicației construit folosind Tiles, template ce va fi extins mai apoi pentru a adăuga conținut nou paginii JSP definite în tempate-ul principal.
Exemplu de definire în cadrul aplicației a șablonului principal folosind Tiles
<tiles-definitions>
<definition name="defaultTemplate" template="/WEB-INF/views/template/default/template.jsp">
<put-attribute name="title" expression="No title"/>
<put-attribute name="header" value="/WEB-INF/views/template/default/header.jsp" />
<put-attribute name="footer" value="/WEB-INF/views/template/default/footer.jsp" />
</definition>
</tiles-definitions>
Exemplu de extindere a șablonului principal
<definition extends="defaultTemplate" name="upload/viewUploadedContent">
<put-attribute name="body" value="/WEB-INF/views/upload/viewUploadedContent.jsp"/>
<put-attribute name="title" expression="View uploaded content"/>
</definition>
Întregul proces descris mai sus, are loc la runtime, prin asamblarea, într-o componentă unitară, a fragmentelor definite, construind astfel o pagină completă.
Apache Commons FileUpload
Încărcarea fișierelor ce urmează a fi analizate se face folosind Apache Commons FileUpload, API ce permite procesarea unei cereri HTTP de tip POST a cărui conținut este de tip “multipart / form-data”, conform cu standardul RFC 1867. Utilizarea acestui API ușurează procesul de upload de fișiere, răspunsul returnat fiind ușor de utilizat în cadrul aplicației web.
Hibernate
În ceea ce privește salvarea datelor, precum: reținerea discursurilor pentru accesări ulterioare, sau memorarea utilizatorilor într-o bază de date am folosit PostgresSQL, versiunea 9.3, iar pentru maparea obiectelor Java cu tabelele din baza de date și maparea datelor din Java cu date de tip SQL am utilizat Hibernate.
Hibernate este un framework open-source ce oferă posibilitatea interogării datelor prin generarea de apeluri SQL pentru a prelua sau căuta informații stocate în baza de date. Astfel, prin intermediul facilităților oferite de Hibernate, maparea obiectelor se face în mod automat, fără a mai fi nevoie de conversia manuală, vezi Fig. 7.
Figură 7 Procesul de mapare Hibernate
Concluzii
Toate aceste tehnologii și framework-uri au ușurat procesul de dezvoltare, făcând ca ca structurarea și realizarea aplicației să fie mai rapidă.
Capitolul 4 Descrierea aplicației și detalii de implementare
Aplicația “Framework pentru analiza discursului și sugestii de îmbunătățire” este o aplicație web, dezvoltată integral în Java, ce oferă utilizatorilor posibilitatea de a uploada, deschide și vizualiza fișiere ce pot fi supuse analizei lingvistice în scopul determinării trăsăturilor definitorii ale categoriei de discurs pe care o reprezintă.
Aplicația a fost concepută pentru analiza textelor redactate în limba română, atenția fiind concentrată pe identificarea contextului în care se încadrează conținutul analizat, fiind vizate patru domenii: domeniul politic, economic, religios și medical.
Pentru construirea datelor ce vor alcătui setul de antrenament aferente fiecărui domeniu din cele patru arii de referință a fost necesară colectarea mai multor date din surse diferite, pentru ca informațiile extrase să fie cât mai diverse:
sursele pentru discursul medical au fost preluate de pe site-ul “http://www.stirimedicale.ro” și “http://www.viata-medicala.ro”,
cele pentru discursul economic, de pe „http://www.bnr.ro/Home.aspx”, secțiunea “Publicații”,
cele pentru discursul politic, de pe "http://cms.presidency.ro/?pag=67” și “http://www.tituscorlatean.ro/titus-corlatean-la-lansarea-candidatilor-usl-sector-1-bucuresti-pentru-alegerile-parlamentare-din-9-decembrie-2012/”,
iar cele pentru discursul religios, de pe “http://www.ortodoxism.com/” și “http://www.toaca.md/?&ziar_id=129”, secțiunea “Ștriri și publicații”.
Pentru a putea utiliza aplicația utilizatorii pot, fie să se logheze în aplicație pentru a avea acces la toate instrumentele de analiză puse la dispoziție prin intermendiul programului, fie să se înregistreze, pentru a se putea autentifica mai apoi.
După autentificare utilizatorul poate să analizeze un text, având la dipoziție trei opțiuni: el poate să introducă un text nou, sau să folosească un text deja salvat, sau să încarce un nou fișier, după cum putem observa în Figura 8.
Fișierele ce pot fi analizate sunt cele a căror extensie este de tip text (extensia .txt) și a căror conținut este în limba română. În același timp, programul permite atât introducerea de texte cu diacritice, cât și fără diacritice. În cel de-al doilea caz, lipsa diacriticelor va fi semnalată în urma procesului de spellChecking, etapă în care utilizatorul va primi și sugestii de înlocuire a cuvintelor.
Figură 8 Aplicația după autentificarea în program
Așa cum am precizat și la început, analiza discursului este un domeniu foarte vast și complex, astfel că, mi-am îndreptat atenția spre interpretarea a patru tipuri de texte și anume: discursul politic, economic, medical și religios. M-am limitat, momentan, doar la cele patru categorii de texte, deoarece acestea au stârnit o serie de controverse de-a lungul timpului, ele numărându-se printre cele mai des întâlnite tipuri de discurs.
Ulterior, programul poate fi extins cu ușurintă pentru a putea fi folosit în scopul analizării și a altor tipuri de discurs decât cele menționate. Acest lucru se poate face prin adăugarea la setul de date de antrenament și a altor categorii decât cele de mai sus, date ce vor fi utilizate mai apoi în procesul de analiză.
Aplicația este structurată în patru module principale, împărțite după cum urmează: modulul pentru identificarea greșelilor de scriere (en: spellChecking) și sugestii de corectare, modulul pentru identificarea principalelor părți de vorbire, modulul pentru identificarea tipului de discurs și modul de afișare a rezultatelor sub forma unor statistici.
Identificarea greșelilor de scriere (en: LanguageSpellChecking) și sugestii de îmbunătățire
În acest modul se urmărește identificarea greșelilor de ortografie, sau de gramatică, identificarea cuvintelor care se repetă, absența semnelor de punctuație sau utilizarea acestora în mod eronat etc., lucru realizat prin integrarea în aplicație a programului open-source LanguageTool.
La început, dupa încărcarea textului sau întroducerea acestuia, se face verificarea lui pentru găsirea eventualelor erori. Datele astfel obținute sunt afișate mai apoi într-o tabelă formată din: cuvântul la care a fost găsită o posibilă greșeală, linia, respectiv, coloana, din text la care se află respectivul cuvânt și descrierea greșelii identificate, urmate de o listă de sugestii alcătuită din cuvinte ce pot fi folosite pentru corectarea respectivului termen. Modalitatea de afișare aleasă, tabel cu erori, face ca vizualizarea datelor să se facă într-o manieră compactă și ușor de urmărit. În acest scop, programul permite navigarea și identificarea cu ușurință a datelor din tabel, prin folosirea paginării și prin posibilitatea sortării rezultatelor în ordine crescătoare sau descrescătoare după oricare dintre coloanele tabelului, vezi Fig.8 .
Totodată datele astfel obținute pot fi exportate sub forma unor documente excel, pdf sau csv pentru a putea fi folosite mai apoi ca repere pentru redactarea corectă a textelor.
Figură 9 Tabel rezultate spellChecking
Identificarea părților părților de vorbire (en: LanguageTool POSTagging)
Cea de-a doua componentă a aplicației, presupune identificarea principalelor părți de vorbire asociate cuvintelor din text. Pentru a realiza acest lucru, am folosit posTagger-ul din cadrul librăriei LanguageTool. Acesta identifică pentru cele mai uzuale cuvinte partea de vorbire corespunzătoare. Rezultatul astfel obținut este sub forma unei liste alcătuite din diferite variații ale cuvântului, fiecare fiind urmate de prescurtarea și caracteristicile corespunzătoare părții de vorbire: persoana, numărul, genul, în cazul substantivelor și adjectivelor, sau doar persoana, eventual, timpul, în cazul verbelor, după cum putem observa din exemplul următor.
Exemplu de rezultat obținut în urma aplicării posTagger-ului:
În tabelul de mai sus, se poate vedea că pentru anumite cuvinte nu se poate determina partea de vorbire, astfel că datele rezultate sunt parsate mai apoi pentru a extrage informațiile esențiale ce vor fi afișate în interfață sub forma unui tabel, vezi Figura 9
Figură 10 Tabel părți de vorbire identificate
Ca și în cazul rezultatelor etapei de spellChecking, datele obținute în urma procesului de analiză gramaticală pot fi exportate, pentru a putea fi consultate mai apoi.
Identificarea tipului de discurs
Faza de identificare a tipului de discurs, este una dintre etapele esențiale a procesului de analiză. La această etapă, textul introdus sau încărcat este mai întâi preprocesat, prin eliminarea cuvintelor foarte des întâlnite, eliminarea spațiilor și a tab-urilor care se repetă, în vederea eficientizării procesului de clasificare, după care se trece efectiv la clasificarea propriu-zisă a acestuia. În plus, pentru simplificarea interațiunii cu utilizatorul, aplicația permite acestuia, pe lângă, încărcarea textului, și introducerea discursului direct în pagină sau vizualizarea conținutului fișierelor salvate, reducând astfel timpul de procesare ce s-ar fi consumat prin încărcare.
Reprezentarea resurselor/datelor de antrenament necesare procesului de clasificare
În funcție de numărul de tipuri de discurs supuse analizei, procesarea ligvistică a textelor în vederea identificării trăsăturilor acestora necesită una sau mai multe resurse, reprezentate de datele de antrenament utilizate în procesul de clasificare. Aceste date de antrenament sunt reprezentate apoi sub forma unor obiecte Java, formate din elemente precum: numărul de cuvinte și frecvența lor de apariție, numărul de categorii observate, clasa în care se încadrează textul antrenat etc.
DocumentData
DocumentData este entitatea principală de reprezentare a datelor de antrenament, clasă ce memorează datele extrase din fișierele de intrare, necesare procesului de antrenare și clasificare. Aceste informații descriu propietățile textelor, cele mai urmărite fiind: toate cuvintele din textul discursului împreună cu numărul lor de apariții și categoria din care face parte discursul. În urma procesului de antrenare se formează o listă cu astfel de obiecte, iar în urma procesului de clasificare rezultă obiectul caracteristic ce poate fi încadrat în una din categoriile identificate în faza de antrenare.
TrainingData
Acest tip de obiect este alcătuit din numărul total a datelor de antrenament, numărul de apariții ale unui cuvânt într-o anumită categorie de discurs și numărul de apariții ale fiecărei categorii în setul de date de antrenament. Toate aceste date, mai puțin numărul total al setului de antrenament, sunt reprezentate sub forma unor proprietăți de tip cheie –valoare.
DataForNaiveBayesClassifier
Această din urmă clasă, memorează toate informațiile folosite de clasificatorul Naive Bayes, rezultate în urma procesului de antrenare. Printre datele reținute se regăsec: numărul de categorii de discurs ce pot fi identificate cu ajutorul clasificatorului, în acest caz va fi egal cu patru, numărul de cuvinte distincte din întregul set de antrenament, ce alcătuiesc vocabularul clasificatorului, respectiv, numărul total de cuvinte, (nu neapărat distincte), urmate de probabilitățile folosite pentru studierea apartenenței unui text analizat la o categorie de discurs.
Antrenarea clasificatorului Naive Bayes
Pentru a putea identifica categoria de discurs în care se încadrează un anumit text, prin aplicarea algoritmulului Naive Bayes Multinomial, mai întâi este necesară formarea datelor ce vor fi folosite de clasificator. Pentru aceasta fiecare fișier din setul de date de antrenament este prelucrat în vederea extragerii cuvintelor relevante pentru clasificare, construind astfel obiectul TrainingData, ce va conține toate datele necesare calculării probabilităților folosite de algoritm.
După obținerea informațiilor, se poate trece deci, la calcularea probabilităților ce vor fi folosite mai apoi în procesul de stabilirea a apartenenței unui text analizat la o categorie de discurs din setul de antrenament, probabiltăți calculate conform formulelor:
, unde Nc reprezintă numărul de apariții ale categoriei c în setul de antrenament astfel obținut, iar N este numărul de date de intrare.
, unde count(w,c) calculează de căte ori cuvântul w apare în clasa c, la care se adaugă 1 ( en: “smoothing”), iar count(c) reprezintă numărul total de cuvinte din clasa c, la care se adaugă numărul total de cuvinte distincte din vocabularul de antrenament.
Cum, pentru antrenarea clasificatorului este necesară procesarea unui volum mai mare de date, procesul de antrenare al clasificatorului devine mai costisitor, astfel că, pentru a reduce timpul de așteptare în cazul procesării unei cereri de clasificare și pentru a îmbunătăți performanța, colectarea datelor de antrenament, respectiv antrenarea clasificatorului, se face o singură dată, la pornirea serverului. Acest lucru a fost posibil prin adnotarea metodei de antrenare a clasificatorului cu @PostConstruct, adnotare ce permite executarea metodei imediat după finalizarea tuturor inițializărilor realizate prin injectarea dependințelor.
Așadar, datele necsare procesului de clasificare sunt calculate o singură dată, ele putând fi accesate apoi, ori de căte ori este nevoie, pentru o nouă clasificare, fără a mai fi necesară repetarea procesului de antrenare al clasificatorului.
Clasicarea textului și aplicarea algoritmului
Pentru a identifica categoria de discurs în care se încadrează un anumit text supus analizei, se formează la fel ca și în cazul antrenării un obiect de tip DocumentData, ce va conține datele necsare calculării probabilităților folosite pentru stabilirea scorului maxim al categoriei în care va fi clasificat.
În cazul în care în textul ce urmează a fi clasificat sunt cuvinte ce nu se găsesc și în setul de antrenament acestea sunt ignorate, deoarece ele nu au fost încadrate în nicio categorie ce poate fi identificată de clasificator și prin urmare nu pot influența rezultatul clasificării.
În continuare, având vectorul de cuvinte corespunzător textului introdus, stabilirea categoriei de discurs în care se încadrează textul, se face prin identificarea categoriei a cărei probabilitate potscondițională este maximă, probabilitate dată de formula: , unde c este categoria de discurs, este probabilitatea calculată pentru categoria c, este probabilitatea condițională a cuvântului , este frecvența cuvântului , iar Y este vectorul de cuvinte din textul de analiză.
În situația în care tipul de discurs nu poate fi identificat de către program, categoria de discurs obținută va fi de tip: “neidentificat”. Acest rezultat poate fi obținut în cazul în care datele din textul analizat nu se găsesc deloc în setul de antrenament: un exemplu de astfel de situație, ar fi atunci când încercăm să analizăm un text în altă limbă decât cea suportată de aplicație. Cu toate acestea, datorită faptului că identificarea tipului de discurs se face pe baza cuvintelor ce alcătuiesc textul respectiv, pentru discursurile analizate, a cărui conținut este în limba română, probabilitatea de obținere a acestui rezultat este foarte mică, chiar neglijabilă. De aceea, chiar și textele ce nu se încadrează în aria celor patru domenii de analiză, vor fi, totuși, clasificate în clasa cu probabilitatea postcondițională cea mai mare.
În figura următoare sunt redate rezultatele obținute în urma analizei realizate la încărcarea unui text de tip politic:
Figură 11 Rezultatele analizei
După cum putem observa din imagine, în urma analizei, identificarea tipului de text a fost corectă, acesta fiind încadrat ca aparținând categoriei politice. Acest lucru demonstrează faptul că algoritmul folosit oferă rezultate corecte pentru problema vizată, oferind o clasificare corectă a textelor.
Diagrame, statistici și apeluri Ajax
După identificarea tipului de discurs prin aplicarea algoritmului Naive Bayes pentru întregul fișier încărcat sau introdus, textul este împărțit apoi în paragrafe. După aceasta, asupra listei de paragrafe obținute se aplică din nou algoritmul pentru identificarea categoriei de discurs în care se încadrează fiecare paragraf în parte. Pe baza datelor astfel obținute, se formează o listă alcătuită din obiecte de tip ChartDTO ce vor fi utilizate mai apoi pentru crearea digramelor și statisticilor aplicației. Modalitatea de vizualizare a diagramelor astfel obținute poate fi sub formă de: diagrame de tip PieChart 3D, ColumnChart sau PolarAreaChart.
Primele două tipuri de diagrame au fost realizate folosind API-ul pus la dispoziție de instrumentul Google Charts, în timp ce a treia diagramă a fost concepută folosind Chart.js API, în fiecare dintre cele trei cazuri, popularea diagramelor cu datele necesare, realizându-se trimițând apeluri ajax (en: ajax call) către server.
Exemplu de ajax call către server pentru preluarea listei paragrafelor clasificate
$.ajax({
"type" : "GET",
"url" : url,
"success" : function(result) {
jsonData = JSON.stringify(result.data);
var data = new google.visualization.DataTable();
data.addColumn('string', 'Topping');
data.addColumn('number', 'Slices');
result.data.forEach(function(element) {
data.addRows([ [ element.label, element.value ] ]);
});
În urma răspunsului primit la apelul ajax de mai sus, datele obținute pot fi vizualizate sub forma unor diagrame de tip PieChart 3D, ColumnChart sau PolarAreaChart, după cum putem observa și în Figura 11, Figura 12 și Figura 13:
Figură 12 Diagrama de tip PieChart 3D a rezultatelor
Această funționalitate de afișare a diagramelor permite identificarea mai rapidă a elementelor definitorii pentru clasificarea textului, iar apelurile ajax fac ca răspunsul primit în urma cererii să fie afișat foarte rapid în pagină, fără a mai fi nevoie să reîncărcăm pagina, reducând timpul de așteptare pentru accesarea datelor și contribuind la îmbunătățirea experienței utilizator în folosirea aplicației.
Figură 13 Diagrama de tip ColumnChart a rezultatelor
Figură 14 Diagramă de tip PolarArea Chart a clasificării paragrafelor
Mai mult, având la dispoziție aceste analize utilizatorul poate să aleagă se elimine anumite cuvinte sau paragrafe cu scopul de a obține o altă clasificare a textului, în funcție de categoria de discurs vizată.
Încărcarea și salvarea fișierelor
Cu toate că aplicația permite atât introducerea textului, cât și încărcarea acestuia, posibilitatea de salvare a conținutului unui text ce a fost supus procesului de analiză se poate face doar în momentul încărcării acestuia, în celălat caz, clienții putând doar să vizualizeze rezultatele analizelor și statisticilor.
Datorită faptului că fișierele încărcate sunt salvate într-o bază de date, utilizatorul poate vizualiza oricând lista cu toate fișerele salvate, putându-le reutiliza în scopul aplicării unei noi analize.
La încărcarea unui fișier, utilizatorulului i se oferă posibilitatea de a alege, din lista de tipuri de discursuri ce pot fi analizate, categoria de discurs pe care vrea să o obțină. Astfel după afișarea rezultatelor analizei, el poate verifica dacă categoria de discurs vizată coincide cu tipul discursului identificat prin analiza conținutului. În cazul în care cele două tipuri nu coincid, utilizatorul, folosindu-se de rezultatele puse la dispoziție prin intemediul diagramelor aferente procentulului de apariție al fiecărui tip de dicurs în textul analizat, poate elimina sau adăuga text în vederea obținerii tipului de discurs dorit.
Interacțiunea între modulele aplicației
Pe tot parcursul procesului de analiză, cele patru module ale aplicației comunică constant cu serverul, ele fiind apelate de fiecare dată când este trimisă o nouă cerere de procesare a textelor.
După procesarea tuturor cererilor, serverul colectează toate datele rezultate pentru a construi mai apoi modelul ce va fi trimis mai departe la client.
În cele ce urmează este prezentată diagrama de secvență a aplicației pentru scenariul în care utilizatorul alege să facă o analiză după încărcarea unui fișier, prezentând principalele acțiuni efectuate în procesul de analiză a textului:
Figură 15 Diagrama de secvență a analizeidupă o cerere de upload
Concluzii
În acest capitol am prezentat cele mai importante module ale aplicației și modul de implementare a funcționalităților programului, împreună cu principalele rezultate obținute în urma analizelor.
Astfel a fost prezentat principalul algoritm utilizat pentru clasificarea textelor și modalitatea de implementare a acestuia, urmată de afișarea rezultatelor clasificării obținute după analiză.
Tot în acest capitol au fost prezentate și opțiunile de vizualizare a rezultatelor analizei la nivel de paragraf pentru textul analizat, precum și utilitatea acestora pentru procesul de înțelegere a caracteristicilor unui document ce se încadrează într-una din cele patru arii de interes: politic, economic, religios și medical.
În același timp, pentru o mai bună exemplificare a întregului proces prin care trece un text ce este analizat, a fost realizată și o diagramă de secvență ce descrie toți pașii realizați de program pentru primirea cererilor, formarea rezultatelor și trimiterea acestora înapoi către utilizator.
Capitolul 5 Evaluarea rezultatelor
Evaluarea la nivel de text/fișier
Pentru a stabili acuratețea rezultatelor clasificării la nivel de fișier, aplicația a fost pusă să analizeze un set de 10 texte: câte două texte pentru fiecare categorie din cele patru domenii vizate, plus alte două texte aparținând altor domenii.
În urma analizelor efectuate, din cele 10 fișiere analizate, 8 dintre ele, și anume cele corepunzătoare categoriilor suportate de aplicație au fost clasificate corect, fiind încadrate în categoria de discurs corespunzătoare, în timp ce, ultimele 2 texte, cele care aparțineau altor domenii, au fost clasificate greșit, fiind încadrate intr-una din cele patru domenii, cu toate că ele aparțineau unor domenii complet diferite.
Motivul pentru care ultimele două texte au fost clasificate într-una din cele patru categorii de discursuri, cu toate că ele nu se încadrau în aria nici unuia dintre domenii, se datorează și faptului că, după cum am precizat și mai devreme, clasificarea se face pe baza cuvintelor ce alcătuiesc textul. Prin urmare, am fi obținut ca rezultat al analizei tipul “neidentificat”, doar în cazul în care, respectivele texte ar fi fost alcătuite doar din cuvinte ce nu se găseau în setul de date de antrenament.
În același timp s-a mai putut observa că textele ce făceau parte din alte domenii decât cele patru erau clasificate de obicei, ca aparținând ori domeniului economic, ori domeniului politic. Acest lucru se datorează și faptului că în cele două domenii se folosesc multe cuvinte ce sunt întâlnite în mod frecvent și în alte tipuri de discursuri, pe când în domeniul medical sau cel religios, se folosesc mai mult cuvinte de specialitate, ce nu sunt folosite în mod uzual în alte contexte.
Prin urmare în cazul textelor ce fac parte din una dintre cele patru domenii de analiză, precizia clasificării este între 80% și 90%, însă pentru textele care nu se încadrează în nicio categorie din cele patru, clasificatorul nu poate să semnaleze acest lucru, el încercând să le încadreze într-unul din domeniile pentru care a fost antrenat. Această limitare nu are un impact major asupra perfomanței aplicației, având în vedere că, pentru a putea clasifica corect și texte aparținând altor domenii, nu trebuie decât să adugăm noi clase la antrenare.
Evaluarea la nivel de paragrafe
În cazul stabilirii preciziei clasificării obținute la nivel de paragrafe, aplicația a fost pusă să analizeze 100 de paragrafe: câte 20 pentru fiecare tip de discurs din cele patru, plus alte 20 pentru paragrafe din alte domenii.
Din totalul celor 80 de paragrafe care se încadrau în domeniul de analiză al aplicației, 73 dintre acestea au fost clasificate corect în clasa corespunzătoare, în timp ce 5 dintre paragrafele de tip economic au fost încadrate greșit ca aparținând domeniului medical, iar restul de 2 paragrafe, tot din categoria economic, au fost clasificate aproximativ, ele fiind încadrate în domeniul politic. Ultimele două paragrafe, spun că au fost clasificate “aproximativ”, deoarece, probabilitatea ca anumite cuvinte să se găsească în ambele tipuri de discursuri, politic, sau economic, este foarte mare, clasificarea fiind influențată de numărul de cuvinte conținute din fiecare domeniu.
În ceea privește restul de 20 de paragrafe din alte domenii, acestea, la fel ca și în cazul fișierelor au fost clasificate într-una din cele patru categorii, predominant, fiind clasificate in categoria politică sau economică. Prin urmare, și în cazul paragrafelor precizia clasificării este destul de bună, încadrându-se între 73% și 80%.
Se poate observa că, în cazul paragrafelor precizia clasificării este puțin mai scăzută decât în cazul textelor, lucru datorat și faptului că analiza se face pe o arie mai restrânsă de cuvinte, cu o frecvență de apariție mult mai mică, lucru ce înfluențează procesul de identificare a domeniului în care se încadrează.
Corectitudinea clasificării
Corectitudinea clasificării este dată de independența datelor din setul de antrenament, astfel că în cazul în care datele sunt mult dependente între ele precizia clasificatorului ar scădea, factor ce a influențat și alegerea celor patru tipuri de discursuri ce pot fi analizate de program.
Având în vedere că cele patru tipuri de discursuri suportate de program sunt independente unele față de altele, rezultatul obținut este aproape întotdeauna corect. Rezultatul este “aproape întotdeauna corect”, deoarece acesta mai este influențat și de dimensiunea datelor de antrenament pentru fiecare categorie de discurs în parte, dar așa cum am spus și mai devreme, impactul acestui factor asupra clasificării este redus prin eliminarea cuvintelor de legătură (pe, sau, ori, cum, etc.) și aplicarea procesului de normalizare a datelor înaintea executării oricărei acțiuni.
Concluziile evaluării
În acest capitol au putut fi observate atât limitările programului în ceea ce privește clasificarea corectă a textelor, respectiv, paragrafelor ce nu se încadrează în sfera de analiză a aplicației, cât și prezentarea soluției pentru eliminarea sau reducerea acestor limitări prin lărgirea sferei de analiză, introducând mai multe domenii ce pot fi identificate cu ajutorul programului.
Având în vedere că aplicația a fost testată pentru stabilirea corectitudinii pe un set de 10 texte, de diferite dimensiuni, respectiv, 100 de paragrafe, s-a putut observa astfel și gradul de încărcare al aplicației și timpul de aștepare pentru procesarea unei cereri și primirea răspunsului. Astfel, procesarea unei cereri de analiză a unui paragraf s-a făcut în medie în mai puțin de 2 secunde, în timp ce procesarea textelor, din cauza dimensiunii mărite, s-a realizat în medie, în 10 secunde. Acest lucru a fost asigurat și de faptul că antrenarea clasificatorului s-a făcut o singură dată, la deschiderea server-ului, ceea ce a mărit semnificativ performața programului în ceea ce privește timpul de procesare și de afișare a rezultatelor.
Toate aceste rezultate au fost obținute pentru textele ce au fost introduse direct în aplicație, și nu prin modalitatea de încărcare a fișierelor. În acest din urmă caz, timpul de așteptare pentru afișarea rezultatelor a fost puțin mai mare, în medie, de la 15 pâna la 20 de secunde, în funcție de dimensiunea fișierului încărcat. Această medie este influențată și de faptul că, la încărcarea unui fișier, acesta este salvat automat în baza de date, fiind verificate următoarele: în cazul în care mai există un fișier cu același nume conținutul fișierului din baza de date este înlocuit cu noul text încărcat, iar în cazul în care numele fișierului nu se găsește în baza de date, acesta este adăugat.
În ceea ce privește afișarea statisticilor rezultate în urma analizei la nivel de paragraf a textului, timpul de așteptare este nesemnificativ, acestea fiind afișate imediat după trimiterea unei cereri de vizualizare, lucru datorat trimiterii cererilor către server sub formă de apeluri ajax.
Prin urmare, putem concluziona că predicția dată de algortim prin aplicarea clasificatorului Naive Bayes satisface toate condițiile de apartenență la o categorie de discurs suportată de program.
Capitolul 6 Direcții de dezvoltare
Lărgirea sferei de analiză, extinderea la nivel lexical și compararea soluțiilor
După cum am precizat mai devreme aplicația rulează corect, în termeni de clasificare a textelor, doar în cazul în care, textele supuse analizei se încadrează în una din cele patru arii de interes: politic, economic, religios și medical, în celelalte cazuri, când textele aparțin altor domenii decât cele patru, rezultatul obținut fiind impredictibil. Prin urmare, o primă direcție de dezvoltare a aplicației ar fi lărgirea sferei de interes prin adăugarea mai multor domenii ce pot fi supuse analizei, lucru ușor de realizat, prin adăugarea la setul de date de antrenament a noi clase de discursuri. Această abordare ar lărgi sfera de aplicabilitate a programului, oferind alternative viabile pentru redactarea corectă a textelor din diferite domenii de specialitate.
Având în vedere că, la momentul actual, aplicația realizează analiza discursului la nivel lexical, o altă direcție de dezvoltare ar fi identificarea nivelului semantic, abordare ce ar conduce la îmbunătățirea rezultatelor obținute și sporirea gradului de interes al utilizatorilor pentru utilizarea aplicației.
Pentru a crește gradul de încredere al rezultatelor obținute de program, aplicația poate fi extinsă prin adăugarea unei componente de comparare a rezultatelor obținute de program cu cele obținute folosind alt clasificator. Un exemplu, ar fi compararea cu clasificatorul SVM oferit de software-ul Weka.
Profil utilizator pe baza analizelor realizate.
Cum, în prezent, aplicația permite doar vizualizarea rezultatelor analizelor și exportul unora dintre aceste rezultate, analizele făcute de la o autentificare la alta nefiind reținute pentru a putea fi accesate mai apoi, o nouă direcție de dezvoltare ar fi salvarea acestor rezultate astfel încât utilizatorul să aibă acces la un istoric al fișierelor analizate. Reținerea acestor date poate fi utilizată și pentru generarea unui profil utilizator ce va cuprinde gradul de utilizare al aplicației, preferințele de discurs selectate la fiecare analiză, gradul de corectitudine al fișierelor pe care le-a analizat, toate cu scopul de a-i oferi acestuia o privire de ansamblu asupra experienței acumultate prin utilizarea programului.
Identificarea sentimentelor și analiza tonalității folosite
Totodată aplicația mai poate fi extinsă prin adăugarea funcționalității de identificare a sentimentelor în texte și identificarea masei de persoane cărora le este adresat, pentru a stabili gradul de credibilitate al discursului și impactul acestuia asupra persoanelor vizate.
Capitolul 7 Elemente de noutate
Aplicația „Framework pentru analiza discursului și sugestii de îmbunătățire” propune o abordare relativ nouă pentru analiza discursurilor, atenția fiind concentrată pe identificarea în conținutul textelor a cuvintelor relevante pentru procesul de clasificare, prin aplicarea unui algoritm de clasificare: algoritmul Naive Bayes Multinomial.
Având în vedere că cea de a doua parte a aplicației presupune oferirea unor sugestii de îmbunătățire, programul pune la dispoziție în acest sens, funcționalitatea de identificare a greșelilor din text, greșeli cu privire la ortografie, repetarea cuvintelor, folosirea incorectă a semnelor de punctuație ș.a., oferind în același timp, printr-o modalitate ușor de vizualizat și de înțeles (sub forma de tabel), și detalii concrete despre motivul greșelii identificate, precum și posibilități de corectare a acestora.
Mai mult, aplicația permite utilizatorilor și identificarea principalelor părți de vorbire pentru cele mai des întâlnite cuvinte, cu scopul de a ajuta la formarea unor fundamente solide pentru redactarea corectă a textelor, rezultate fiind afișate sub forma unui tabel, ca și în cazul identificării greșelilor de scriere.
Pe lângă acestea, aplicația permite, atât în cazul informațiilor identificate în urma procesului de analiză gramaticală, cât și în urma procesului de spellChecking, salvarea rezultatelor obținute, în mai multe formate: csv, pdf sau excel, oferind utilizatorului posibilitatea de a vizualiza și reutiliza aceste rezultate și după închiderea aplicației.
Un alt element de noutate introdus de aplicație este analiza textelor la nivel de paragrafe în vederea clasificării acestora în categoria de discurs corespunzătoare. În plus, având la dispoziție rezultatele astfel obținute, programul permite vizualizarea grafică a clasificării acestora sub forma unor diagrame de mai multe tipuri: PieChart 3D, ColumnChart, respectiv PolarAreaChart, toate cu scopul de a oferi o privire de ansamblu asupra conținutului discursului analizat, printr-o modalitate vizuală ușor de interpretat și de înțeles.
De asemenea designul aplicației este unul minimalist, dar elegant, atenția fiind concentrată pe evidențierea funcționalităților programului, făcând astfel navigarea în aplicație foarte intuitivă și ușor de înțeles.
Concluzii finale
Pentru dezvoltarea acestei aplicații am studiat și implementat algoritmul de clasificare Naive Bayes Multinomial, algoritm ce a fost utilizat în procesul de identificare a tipului de discurs. Pe baza analizelor efectuate, acest algoritm s-a dovedit a fi foarte eficient pentru atingerea scopului propus, oferind o clasificare corectă pentru mai mult de 90% din cazuri. Alegerea acestui clasificator a fost determinată și de faptul că acesta nu consumă foarte mult din resursele calculatorului, complexitatea algoritmului crescând doar în cazul în care volumul de date este foarte mare, caz în care, se mărește atât timpul de procesare a datelor, cât și timpul de afișare a rezultatetelor.
Datorită faptului că se lucrează cu texte de dimensiuni mici, clasificarea textelor este una dintre sarcinile ce se execută cel mai rapid, lucru datorat și faptului că antrenarea clasificatorului se face o singură dată, la pornirea serverului.
Pe lângă acestea, aplicația pune la dispoziția utilizatorilor o serie de alte funcționalități, printre care: analiza gramaticală și identificarea greșelilor de scriere, precum și posibilitatea afișării unor statistici cu rezultatele clasificării. Totodată, în urma procesului de spellChecking, utilizatorul primește o serie de sugestii pentru corectarea eventualelor greșeli identificate de program, maniera de afișare a acestor rezultate contribuind la îmbunătățirea experienței utilizator și creșterea gradului de interes pentru folosirea aplicației.
În concluzie, aplicația dezvoltată poate fi folosită cu succes pentru analiza discursului, putându-se dovedi foarte utilă în cazul în care suntem interesați de redactarea corectă a unor texte ce se încadrează în una dintre categoriile: politic, economic, religios sau medical. Desigur, prin extinderea ariei de interes a aplicației, aceasta va putea fi folosită și pentru alte tipuri de discursuri decât cele menționate.
Bibliografie
1. Săvulescu, Lect.univ.drd. Silvia. Analiza Discursului Public. academia.edu. [Online] https://www.academia.edu/5542557/Analiza_Discursului_Public.
2. zaietzp. Scribd. http://www.scribd.com/. [Interactiv] http://www.scribd.com/doc/201733327/TIPOLOGIA-DISCURSURILOR-docx.
3. Cosmescu, Alex. academia.edu – Abordari actuale in analiza discursului. [Online] https://www.academia.edu/410499/Abordari_actuale_in_analiza_discursului.
4. CARAGEA, Prof. Dr. Dan. ecs-univ – Analiza automată a discursului științific -Teorie, programe, aplicații. [Online] din lucrarea: http://www.ecs-univ.ro/UserFiles/File/wp5/Modulul%205.pdf. http://www.ecs-univ.ro/.
5. Caragea Dan, in Dumitrache, Ioan și Iovu, Horia (coord.). Analiza automată a discursului, Manual de autorat științific. București : Editura Politehnica Press, 2011. Proiect cofinantat din Fondul Social European, invatamant-superior -.
6. Caragea, Dan. TROPES ȘI ANALIZELE SALE. [Online] din lucrarea: http://www.forhe.ro/docs/analize.pdf. http://www.forhe.ro.
7. Inkpen, Oana Frunza&Diana, David Nadeau. A Text Processing Tool for the Romanian Language. [Online] din lucrarea:https://www.site.uottawa.ca/~diana/Cross_Language_Knowledge_Induction_Workshop/P9.pdf. https://www.site.uottawa.ca/~diana.
8. Tom Mitchell, McGraw-Hill. Machine Learning. 1997. din lucrarea ÎNVĂȚAREA BAYESIANĂ, Mureșan Laura Elena; link: http://www.cs.ubbcluj.ro/~gabis/DocDiplome/Bayesian/LicentaFinal.pdf.
9. Raț, Cristian. Clasificare de Text la Scară Largă. [Online] http://www.todaysoftmag.ro/article/1252/clasificare-de-text-la-scara-larga.
10. eganea. software.ucv. [Online] din lucrarea: http://software.ucv.ro/~eganea/AIR/AIR_lab3.pdf. http://www.statsoft.com/Textbook/Naive-Bayes-Classifier.
11. Liu, Henri H. Developing Enterprise Applications with Spring: An End-to-End Approach. s.l. : PerfMath, 2013.
12. Spring. Introduction to the Spring Framework. [Online] http://docs.spring.io/spring/docs/current/spring-framework-reference/html/overview.html.
13. Schincariol, Mike Keith and Merrick. Pro JPA2: Mastering the Java Persistence API. s.l. : Apress, 2009.
14. Cambridge University Press. Naive Bayes text classification. http://nlp.stanford.edu/. [Online] http://nlp.stanford.edu/IR-book/html/htmledition/naive-bayes-text-classification-1.html.
15. Jurafsky, Dan. Text Classification. [Online] https://web.stanford.edu/class/cs124/lec/naivebayes.pdf.
16. Leon, Florin. users.cs.tuiasi – Inteligență artificială. [Online] http://users.cs.tuiasi.ro/~fleon/Curs_IA/IA10_Clasificare.pdf. http://florinleon.byethost24.com/curs_ia.htm.
17. Caragea, Dan. Resurse informatice in activitatea editoriala. [Online] din lucrarea de la adresa:http://www.ecs-univ.ro/UserFiles/File/MPS%20-%20Resurse%20informatice.pdf. http://www.ecs-univ.ro.
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Framework Pentru Analiza Discursului Si Sugestii de Imbunatatire (ID: 149815)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
