praca inzynierska.PDF

43
Imię i nazwisko studenta: Marcin Goławski Nr albumu: 143224 Studia pierwszego stopnia Forma studiów: stacjonarne Kierunek studiów: Informatyka Specjalność/profil: - Imię i nazwisko studenta: WOJCIECH STANISŁAWSKI Nr albumu: 143351 Studia pierwszego stopnia Forma studiów: stacjonarne Kierunek studiów: Informatyka Specjalność/profil: - Imię i nazwisko studenta: KRZYSZTOF ŚWIECZKOWSKI Nr albumu: 143365 Studia pierwszego stopnia Forma studiów: stacjonarne Kierunek studiów: Informatyka Specjalność/profil: - Imię i nazwisko studenta: Artur Peplinski Nr albumu: 137368 Studia pierwszego stopnia Forma studiów: stacjonarne Kierunek studiów: Informatyka Specjalność/profil: - PROJEKT DYPLOMOWY INŻYNIERSKI Tytuł projektu w języku polskim: Równoległa kategoryzacja artykułów Wikipedii z użyciem metod uczenia maszynowego Tytuł projektu w języku angielskim: Parallel categorization of Wikipedia using machine learning methods Potwierdzenie przyjęcia projektu Opiekun projektu podpis Kierownik Katedry/Zakładu podpis dr inż. Julian Szymański Data oddania projektu do dziekanatu:

Transcript of praca inzynierska.PDF

Page 1: praca inzynierska.PDF

Imię i nazwisko studenta: Marcin Goławski

Nr albumu: 143224

Studia pierwszego stopnia

Forma studiów: stacjonarne

Kierunek studiów: Informatyka

Specjalność/profil: -

Imię i nazwisko studenta: WOJCIECH STANISŁAWSKI

Nr albumu: 143351

Studia pierwszego stopnia

Forma studiów: stacjonarne

Kierunek studiów: Informatyka

Specjalność/profil: -

Imię i nazwisko studenta: KRZYSZTOF ŚWIECZKOWSKI

Nr albumu: 143365

Studia pierwszego stopnia

Forma studiów: stacjonarne

Kierunek studiów: Informatyka

Specjalność/profil: -

Imię i nazwisko studenta: Artur Peplinski

Nr albumu: 137368

Studia pierwszego stopnia

Forma studiów: stacjonarne

Kierunek studiów: Informatyka

Specjalność/profil: -

PROJEKT DYPLOMOWY INŻYNIERSKI

Tytuł projektu w języku polskim: Równoległa kategoryzacja artykułów Wikipedii z użyciem metod uczenia maszynowego

Tytuł projektu w języku angielskim: Parallel categorization of Wikipedia using machine learning methods

Potwierdzenie przyjęcia projektu

Opiekun projektu

podpis

Kierownik Katedry/Zakładu

podpis

dr inż. Julian Szymański

Data oddania projektu do dziekanatu:

Page 2: praca inzynierska.PDF

OŚWIADCZENIE

Imię i nazwisko: Marcin Goławski Data i miejsce urodzenia: 22.12.1992, Gdańsk

Nr albumu: 143224

Wydział: Wydział Elektroniki, Telekomunikacji i Informatyki Kierunek: informatyka

Poziom studiów: I stopnia - inżynierskie

Forma studiów: stacjonarne

Ja, niżej podpisany(a), wyrażam zgodę/nie wyrażam zgody* na korzystanie z mojego projektu dyplomowego zatytułowanego: Równoległa kategoryzacja artykułów Wikipedii z użyciem metod uczenia maszynowego do celów naukowych lub dydaktycznych.1

Gdańsk, dnia .................................. ..................................................... podpis studenta

Świadomy(a) odpowiedzialności karnej z tytułu naruszenia przepisów ustawy z dnia 4 lutego 1994 r. o prawie autorskim i prawach pokrewnych (Dz. U. z 2006 r., nr 90, poz. 631) i konsekwencji dyscyplinarnych określonych w ustawie Prawo o szkolnictwie wyższym (Dz. U. z

2012 r., poz. 572 z późn. zm.),2 a także odpowiedzialności cywilno-prawnej oświadczam, że przedkładany projekt dyplomowy został opracowany przeze mnie samodzielnie.

Niniejszy projekt dyplomowy nie był wcześniej podstawą żadnej innej urzędowej procedury związanej z nadaniem tytułu zawodowego.

Wszystkie informacje umieszczone w ww. projekcie dyplomowym, uzyskane ze źródeł pisanych i elektronicznych, zostały udokumentowane w wykazie literatury odpowiednimi odnośnikami zgodnie z art. 34 ustawy o prawie autorskim i prawach pokrewnych.

Potwierdzam zgodność niniejszej wersji projektu dyplomowego z załączoną wersją elektroniczną.

Gdańsk, dnia .................................. ..................................................... podpis studenta

Upoważniam Politechnikę Gdańską do umieszczenia ww. projektu dyplomowego w wersji elektronicznej w otwartym, cyfrowym repozytorium instytucjonalnym Politechniki Gdańskiej oraz poddawania jego procesom weryfikacji i ochrony przed przywłaszczaniem jego autorstwa.

Gdańsk, dnia ................................. ..................................................... podpis studenta

*) niepotrzebne skreślić

1 Zarządzenie Rektora Politechniki Gdańskiej nr 34/2009 z 9 listopada 2009 r., załącznik nr 8 do instrukcji archiwalnej PG.

2 Ustawa z dnia 27 lipca 2005 r. Prawo o szkolnictwie wyższym:

Art. 214 ustęp 4. W razie podejrzenia popełnienia przez studenta czynu podlegającego na przypisaniu sobie autorstwa istotnego fragmentu lub innych elementów cudzego utworu rektor niezwłocznie poleca przeprowadzenie postępowania wyjaśniającego.

Art. 214 ustęp 6. Jeżeli w wyniku postępowania wyjaśniającego zebrany materiał potwierdza popełnienie czynu, o którym mowa w ust. 4, rektor wstrzymuje postępowanie o nadanie tytułu zawodowego do czasu wydania orzeczenia przez komisję dyscyplinarną oraz składa zawiadomienie o popełnieniu przestępstwa.

Page 3: praca inzynierska.PDF

3

STRESZCZENIE

Tematem pracy inżynierskiej jest implementacja aplikacji odpowiedzialnej za

klasyfikację danych tekstowych oraz analizę jej wydajności podczas zrównoleglania

poszczególnych operacji. Praca przedstawia wybrane zagadnienia teoretyczne i

implementacyjne z zakresu technik klasyfikacji danych, rozpraszania operacji a także walidacji

uzyskanych wyników. Obecnie istnieje wiele implementacji podobnych zagadnień, natomiast

poniższa praca przedstawia jedną z możliwości uzyskania korzystnej wydajności wraz z

zadowalającymi wynikami klasyfikacji.

W celu uzyskania zadowalających wyników nie tracąc jednocześnie na wydajności,

do klasyfikacji wektorów tekstów, został wykorzystany algorytm k najbliższych sąsiadów.

Natomiast odległość między obiektami jest definiowana poprzez podobieństwo cosinusowe. Do

procesu klasyfikacji zostały wprowadzone autorskie modyfikacje. Zostały one przedstawione

dokładnie w podrozdziale 2.1.3 natomiast analiza ich wyników znajduje się w rozdziale Ocena.

Głównym założeniem projektu jest zbadanie wpływu rozproszenia poszczególnych

procesów na wydajność klasyfikacji. Do implementacji podziału zadań oraz danych między

węzłami klastra zastosowaliśmy bibliotekę o nazwie Apache Hadoop. Procesy które

zdecydowaliśmy się rozproszyć pomiędzy węzły klastra to m.in. normalizacja tekstów do

wektorów danych, obliczenia podobieństw cosinusowych, folding a także kroswalidacja.

W ramach opracowania zagadnienia został przeprowadzony szereg testów

pokrywających tematy jakości i wydajności klasyfikacji. W trakcie testowania zauważono że

optymalną ilością najbliższych sąsiadów jest wartość oscylująca w granicach 1-5% ilości

wszystkich artykułów biorących udział w klasyfikacji. Dodatkowo zaobserwowano wąskie gardło

działania aplikacji znajdujące się na etapie walidacji skrośnej, i to tam należy szukać

usprawnień wydajności działania.

Implementacja aplikacji jest stabilna i w pełni skalowalna. Klasyfikacje można

przeprowadzić na dowolnym klastrze, o dowolnej liczbie węzłów oraz dowolnej wielkości zbioru

trenującego. Jedynym ograniczeniem użytkowym aplikacji jest czas wykonania niektórych

etapów klasyfikacji dla dużych zbiorów danych(>10000 artykułów). Stan aplikacji jest solidną

podstawą do dalszych prac badawczych w kierunku klasyfikacji danych tekstowych, a sama

implementacja jest przystosowana do ewentualnych ulepszeń w kierunku jakości i wydajności.

Praca dyplomowa została zrealizowania przez czterech współautorów. Udział w

tworzeniu poszczególnych rozdziałów wygląda następująco:

● Wojciech Stanisławski - Udział w rozdziałach 2.2.1, 3.1, 3.2.1, 4 oraz indywidualnie

rozdziały 3.3.2, 3.4.2, 3.5

● Marcin Goławski - Udział w rozdziale 4 oraz Indywidualnie rozdział 2.1

● Krzysztof Świeczkowski - Udział w rozdziałach 2.2.1, 3.1, 3.2.1, 4 oraz indywidualnie

rozdziały 2.2.2, 3.2.2, 3.4.1

● Artur Peplinski - Udział w rozdziałach 2.1.4 , 3.1.1 i 4 oraz 2.2.3, 2.2.4, 3.3.1

Słowa kluczowe: Big data, Apache Hadoop, klasyfikacja KNN, Wikipedia

Page 4: praca inzynierska.PDF

4

ABSTRACT

The topic of this engineering diploma project is the implementation of the application

classifying text data and analysis of its performance during parallelization. This diploma

presents chosen theoretical and implementational issues concerning techniques of data

classification, operation dispersion and validation of gathered results. To this day, many

implementations of similar problems were presented, however this project focuses on one

chosen method, which promises to reach high performance and satisfactory classification

results.

In order to achieve satisfactory results without a big decrease in performance, a k-

nearest neighbors algorithm was used for classification of vectors describing articles. Distance

between objects is defined by cosine similarity. Custom modifications have been introduced to

the classification process. They are described in detail in subsection 2.1.3 and the results are

analyzed in chapter Evaluation.

The main purpose of this thesis is the analysis of influence of distributed computing

on classification performance. Software library called Apache Hadoop was used for task and

data distribution between cluster nodes. Processes that we have decided to distribute are

normalization of texts into data vectors, calculating cosine similarity, folding and cross

validation.

As part of the elaboration on the topic, a series of thorough tests of quality and

efficiency of classification were conducted, during which it was concluded that the optimal

quantity of nearest neighbors is about 1-5% of all the articles taking part in classification. What

is more, a bottleneck was found. Increase in efficiency can probably be achieved by

improvement of the process of folding and cross validation.

Application is stable and fully scalable. Classification can be done on any cluster, with

any number of nodes and any size of the training dataset. The only usage restraint of the

application is execution time of some stages of classification for large data sets (>10000

articles). Current state of the application is a solid base for future research work towards text

data classification, and the implementation is prepared in such a way, that any future quality or

efficiency enhancements will be easy.

Engineering diploma project has been carried out by four co-authors. Contribution in

thesis is as following:

● Wojciech Stanisławski - Contribution in chapters 2.2.1, 3.1, 3.2.1, 4 and individually in

chapters 3.3.2, 3.4.2, 3.5

● Marcin Goławski - Contribution in chapter 4 and individually in chapter 2.1

● Krzysztof Świeczkowski - Contribution in chapters 2.2.1, 3.1, 3.2.1, 4 and individually in

chapters 2.2.2, 3.2.2, 3.4.1

● Artur Peplinski - Contribution in chapters 2.1.4, 4 and individually in chapters 2.2.3,

2.2.4, 3.3.1

Keywords: Big data, Apache Hadoop, KNN classification, Wikipedia

Page 5: praca inzynierska.PDF

5

SPIS TREŚCI

STRESZCZENIE ........................................................................................................................... 3

ABSTRACT ................................................................................................................................... 4

SPIS TREŚCI ................................................................................................................................ 5

WYKAZ WAŻNIEJSZYCH OZNACZEŃ I SKRÓTÓW .................................................................. 7

1. WSTĘP I CEL PRACY (Marcin Goławski, Artur Peplinski, Wojciech Stanisławski,

Krzysztof Świeczkowski) ............................................................................................................... 9

1.1 Nakreślenie problematyki .................................................................................................... 9

1.2 Cel pracy .............................................................................................................................. 9

1.3 Stan wiedzy obecnej ............................................................................................................ 9

1.4 Przedstawienie zawartości poszczególnych rozdziałów pracy ......................................... 10

2. TEORIA ................................................................................................................................... 11

2.1 Klasyfikator k-Najbliższych Sąsiadów (Marcin Goławski) ................................................ 11

2.1.1 Działanie klasyfikatora ................................................................................................ 11

2.1.2 Podobieństwo cosinusowe ......................................................................................... 12

2.1.3 Ulepszenia i optymalizacje ......................................................................................... 14

2.1.4 Kroswalidacja .............................................................................................................. 15

2.2 Rozproszenie obliczeń przy pomocy MapReduce ............................................................ 15

2.2.1 Struktura klastra (Wojciech Stanisławski, Krzysztof Świeczkowski) ......................... 15

2.2.2 Podział i przechowywanie plików (Krzysztof Świeczkowski) ..................................... 16

2.2.3 Faza mapowania (Artur Peplinski) ............................................................................. 16

2.2.4 Faza redukcji (Artur Peplinski) ................................................................................... 18

3. IMPLEMENTACJA .................................................................................................................. 19

3.1 Wykorzystane technologie (Wojciech Stanisławski, Krzysztof Świeczkowski) ................. 19

3.1.1 Hadoop........................................................................................................................ 19

3.1.2 Scala ........................................................................................................................... 19

3.2 Opis działania projektu ...................................................................................................... 20

3.2.1 Wstęp (Wojciech Stanisławski, Krzysztof Świeczkowski) .......................................... 20

3.2.2 Schemat działania projektu (Krzysztof Świeczkowski) .............................................. 21

3.3 Klasyfikacja artykułów do kategorii .................................................................................... 22

3.3.1 Wstęp (Artur Peplinski) .............................................................................................. 22

3.3.2 Zbiór danych (Wojciech Stanisławski) ....................................................................... 22

3.4 Rozproszenie na klastrze .................................................................................................. 22

3.4.1 Podział zbioru na węzły (Krzysztof Świeczkowski) .................................................... 23

3.4.2 Operacje, które zostały rozproszone (Wojciech Stanisławski) .................................. 23

3.4.2.1 Rozproszenie zliczania słów ................................................................................ 23

3.4.2.2 Rozproszenie kNN ............................................................................................... 24

3.4.2.3 Rozproszenie foldingu .......................................................................................... 25

Page 6: praca inzynierska.PDF

6

3.4.2.4 Rozproszenie kroswalidacji .................................................................................. 26

3.5 Instrukcja instalacji (Wojciech Stanisławski) .................................................................... 26

3.5.1. Przygotowanie klastra Apache Hadoop ..................................................................... 27

3.5.2. Konfiguracja parametrów programu .......................................................................... 27

3.5.3 Analiza pliku Wikidumps ............................................................................................. 29

3.5.4 Tryby działania klasyfikatora ....................................................................................... 30

4. OCENA (Marcin Goławski, Artur Peplinski, Wojciech Stanisławski, Krzysztof Świeczkowski)

.................................................................................................................................................... 33

4.1 Wydajność ......................................................................................................................... 33

4.1.2 Ocena wydajności algorytmów ................................................................................... 33

4.1.3 Zysk wydajności poprzez rozproszenie ...................................................................... 34

4.2 Poprawność przypisania do kategorii ................................................................................ 35

4.2.1 Porównanie jakości wybranych strategii progowania ................................................. 35

4.2.2 Jakość klasyfikacji przy rosnącej liczbie artykułów ..................................................... 37

5. PODSUMOWANIE (Marcin Goławski, Artur Peplinski, Wojciech Stanisławski,

Krzysztof Świeczkowski) ............................................................................................................ 38

5.1 Uzyskane efekty i osiągnięcia pracy .............................................................................. 38

5.2 Wnioski z przeprowadzonych badań ............................................................................. 39

5.3 Kontynuacja pracy ......................................................................................................... 40

WYKAZ LITERATURY ................................................................................................................ 41

WYKAZ RYSUNKÓW ................................................................................................................. 42

WYKAZ TABEL ........................................................................................................................... 43

Page 7: praca inzynierska.PDF

7

WYKAZ WAŻNIEJSZYCH OZNACZEŃ I SKRÓTÓW

big data

Określenie stosowane dla dużych zbiorów uporządkowanych, częściowo-

uporządkowanych lub nieuporządkowanych danych, z których można wyciągnąć

pewne zależności. Ich analiza, ze względu na rozmiar, wymaga dużej mocy

obliczeniowej.

lemma Forma podstawowa wyrazu, używana do jego reprezentacji np. w słowniku.

Wyraz, który posiada wiele odmian, ma tylko jedną lemmę. [1]

węzeł klastra

Jednostka obliczeniowa wchodząca w skład klastra, udostępniająca swoją moc

obliczeniową na jego rzecz. Operacje dla poszczególnych węzłów przydziela

oprogramowanie sterujące klastrem.

repozytorium Zbiór zasobów cyfrowych dostępny w Internecie.

odległość,

metryka, miara

niepodobieństwa

obiektów

Funkcja określająca odległości pomiędzy poszczególnymi punktami

na przestrzeni euklidesowej.

faza uczenia Moment działania programu, w którym baza danych przypadków trenujących jest

powiększana.

faza testowania Moment działania programu, w którym przeprowadzana jest klasyfikacja,

wykorzystując do tego bazę danych przypadków trenujących.

klasa, kategoria Reprezentacja artykułu jako przynależność do grupy przypadków reprezentującej

artykuły poświęcone podobnej tematyce.

wikikod

Zestaw znaczników, używanych do formatowania tekstu, przetwarzanych przez

oprogramowanie MediaWiki. MediaWiki jest wykorzystywane między innymi

w serwisie Wikipedia.

euclidean

distance

Metryka definiującą bezpośrednią odległość pomiędzy dwoma punktami

na płaszczyźnie euklidesowej, za pomocą zwykłej prostej geometrycznej.

Page 8: praca inzynierska.PDF

8

cosine similarity

Najpopularniejsza miara odległości dla reprezentacji wektorowej dokumentów. Jej

wartość wynosi kosinus kąta pomiędzy dwoma wektorami, które reprezentują

porównywane dokumenty.

majority voting

Technika wyboru najbardziej prawdopodobnego wyniku ze zbioru wszystkich

możliwych wyników. Miano najbardziej prawdopodobnego uzyskuje wynik

z największą liczbą wystąpień w zbiorze.

Page 9: praca inzynierska.PDF

9

1. WSTĘP I CEL PRACY

1.1 Nakreślenie problematyki

Ilość danych produkowanych przez ludzkość stale wzrasta. W 2014 roku globalny ruch

sieciowy wynosił 16TB na sekundę [2]. Coraz większy nacisk kładzie się na technologie

pozwalające wyciągać pewne zależności między danymi w sposób automatyczny. Jest to

możliwe dzięki zastosowaniu technologii rozproszonych oraz łączeniu komputerów w klastry,

aby uzyskać w ten sposób moc obliczeniową niezbędną do przetworzenia dużej ilości danych.

Aby programy uruchamiane na klastrach były w stanie wykorzystać całkowicie ich potencjał,

istotne jest jak najlepsze zrównoleglenie operacji wykonywanych przez program oraz danych, z

których program korzysta.

Uporanie się z problematyką przetwarzania wielkich zbiorów danych jest w tym

momencie jednym z głównych wyzwań dla branż technologicznych. Prowadzenie badań i

poszerzanie wiedzy w zakresie dziedziny Big Data prowadzi do bezpośrednich zmian i

ulepszeń w większości dziedzin życia, a w aspekcie naukowym prowadzić może do zdobycia

nowej wiedzy.

1.2 Cel pracy

W niniejszej pracy przedstawiono podejście do analizy big data na przykładzie

repozytorium Wikipedii. Repozytorium to, jest dynamicznie rozwijającym się zbiorem danych.

Sam Polski odłam w roku 2014 powiększył swoje zbiory o ponad 64 tysiące artykułów, czyli o

6,34% całości [3].

Zaimplementowano klasyfikator, który przy pomocy uczenia maszynowego, oraz

przetwarzania równoległego, jest w stanie zanalizować nowe artykuły i przypisać je do

istniejących kategorii artykułów Wikipedii. Istotny dla nas jest aspekt wydajnościowy oraz ocena

zysków czasowych podczas przetwarzania danych za pomocą klastra obliczeniowego

utworzonego z domowych komputerów.

W niniejszym projekcie jakość klasyfikacji schodzi na drugi plan, podczas gdy główne

starania skupione są na polepszaniu wydajności i efektywnym wykorzystaniu klastrów w

skomplikowanych działaniach. Mimo tego aspekt jakości klasyfikacji nie został całkowicie

pominięty. W tym kierunku zostały wykonane konieczne czynności doboru odpowiedniej miary

niepodobieństwa obiektów oraz doboru algorytmu klasyfikacji. Dodatkowo zostały

wprowadzone niestandardowe techniki ulepszenia procesu Majority Voting naszego autorstwa.

Wszystkie aspekty jakości zostały podsumowane odpowiednimi testami weryfikującymi

poprawność zastosowanych technik.

1.3 Stan wiedzy obecnej

[4] Istnieje wiele zastosowań automatycznej klasyfikacji danych, dobrym przykładem

mogą być rozwiązania stosowane w klientach poczty e-mail przydzielające wiadomości do

konkretnych kategorii na podstawie jej treści. Najlepszym rozwiązaniem problemu kategoryzacji

Page 10: praca inzynierska.PDF

10

dokumentów tekstowych jest zastosowanie uczenia maszynowego. Wybranie odpowiedniej

metody uczenia maszynowego zależy m.in. od wielkości zbioru trenującego oraz od tępa jej

przyrostu. [2] Jednym z najczęściej wykorzystywanych przy kategoryzacji algorytmów jest

klasyfikator k-Najbliższych Sąsiadów.

[6] Na początku lat 2000’ zaczęło pojawiać się coraz większe zapotrzebowanie

na rozproszenie zasobów komputerowych między wiele węzłów. Rozpraszanie zasobów jest

technologią niezbędną do szybkiego zarządzania danymi w dużych i szybko rozwijających się

serwisach jak np. Google czy Facebook, gdzie użytkownicy każdego dnia generują setki

gigabajtów danych. Jednym z najlepszych wymyślonych rozwiązań, jest model o nazwie

MapReduce wykorzystywany w firmie Google i opisany przez dwóch pracowników tej firmy,

Jeffrey’a Dean’a i Sanjay’a Ghemawat’a. Model ten wykorzystywany jest do dziś przez

korporacje na całym świecie do rozpraszania operacji między komputerami. Powstały również

inne modele jak na przykład Bulk Synchronous Parallel, jednak nie są one tak popularne jak

MapReduce.

1.4 Przedstawienie zawartości poszczególnych rozdziałów pracy

W pierwszej kolejności w rozdziale Teoria zostały wyjaśnione podstawy teoretyczne

mechanizmów wykorzystanych w implementacji. Zostały zgłębione szczegóły działania

klasyfikatora, a w szczególności sposoby wyszukiwania podobieństw tekstu, ewentualne

ulepszenia i modyfikacje oraz kroswalidacja. Dodatkowo wyjaśnione zostały podstawy

rozpraszania aplikacji poruszając tematy struktury klastra, przechowywania danych oraz fazy

redukcji i mapowania.

W następnym rozdziale Implementacja zgłębione zostały szczegóły implementacji

wcześniej wymienionych zagadnień teoretycznych i bezpośrednie dostosowanie ich do

rozwiązania poruszonego problemu. Głównym tematem implementacji są sposoby

zrównoleglania technik przygotowania danych, klasyfikacji i kroswalidacji. Duża część rozdziału

została także poświęcona opisowi działania projektu, w którym wyjaśniony jest proces

przygotowania danych oraz przedstawiony został schemat współpracy poszczególnych sekcji

klasyfikatora.

W rozdziale Ocena zostały przedstawione uzyskane wyniki klasyfikacji. W pierwszej

kolejności zostały ukazane korzyści i starty jakościowe w zależności od przyjętych parametrów

wejściowych dotyczących k najbliższych sąsiadów i/lub zastosowanych ulepszeń klasyfikacji. W

głównej części rozdziału zostały zawarte wyniki testów sprawdzających wydajność działania

algorytmu. Szczególny nacisk położony został na aspekt korzyści wynikających ze

zrównoleglania poszczególnych zadań w czasie klasyfikacji. Wszystkie wyniki testów zostały

przedstawione w tabelach, oraz podsumowanie krótkim komentarzem.

W Podsumowaniu zawarto informacje odnośnie uzyskanych efektów i osiągnięć a

także przedstawiono wnioski z wykonanych pomiarów. Na zakończenie zostały poruszone

kwestie ewentualnych ścieżek rozwoju klasyfikatora i zastosowania otrzymanych wyników w

przyszłych projektach.

Page 11: praca inzynierska.PDF

11

2. TEORIA

2.1 Klasyfikator k-Najbliższych Sąsiadów

Jedną z najprostszych i najistotniejszych metod klasyfikacji jest zastosowanie

algorytmu K-najbliższych sąsiadów (k Nearest Neighbours, kNN). Algorytm ten zdobył swoją

popularność dzięki wysokiej interpretowalności, prostocie implementacji oraz szerokim

zastosowaniu w dziedzinach eksploracji danych i klasyfikacji[10].

2.1.1 Działanie klasyfikatora

Podstawowym założeniem klasyfikatora jest twierdzenie, że podobne problemy można

rozwiązać w podobny sposób. Posiadając wiedzę na temat rozwiązania najbardziej podobnego

problemu, stosujemy ją w celu rozwiązania nowego problemu. W ten sposób uzyskać można

działanie algorytmu 1NN.

W przypadku zastosowania k-NN, algorytm opiera się na podobieństwie problemu do

jego k najbliższych przypadków w zbiorze trenującym oraz wyprowadzeniu rozwiązania z

technik rachunku prawdopodobieństwa.

Klasyfikacja konkretnego problemu (danej będącej wektorem znajdującym się

w wielowymiarowej przestrzeni) polega na wyznaczeniu k przypadków będących najbardziej

podobnych do danych klasyfikowanych pod względem określonej miary podobieństwa.

Przykładowymi miarami(odległościami) stosowanymi w algorytmie k Nearest Neighbours mogą

być[8]:

● Metryka euklidesowa

(2.1) ● Metryka Manhattan

∑ | | (2.2)

● Metryka Czebyszewa

∑ | |

(2.3) ● Podobieństwo cosinusowe

√∑

√∑

(2.4)

Ostatnim etapem klasyfikacji jest zdefiniowanie do jakiej klasy przynależy problem

wejściowy. W tym celu stosuje się między innymi metody[9]:

● Inverse Distance Voting (Metoda Sheparda) - Obliczana jest suma odwróconych

odległości pomiędzy wybranych k sąsiadów a analizowanym problemem,

● Majority Voting - Klasa problemu jest określana na podstawie największej

przynależności k znalezionych sąsiadów

Page 12: praca inzynierska.PDF

12

Opis przykładowego algorytmu k Nearest Neighbours[11]:

1. Faza uczenia:

● wykonaj standaryzację/normalizację danych lub pozostaw je nienaruszone,

● zapamiętaj zbiór trenujący w pamięci.

2. Faza testowania:

● wykonaj standaryzację/normalizację danych lub pozostaw je nienaruszone,

● znajdź odległości pomiędzy wektorem testowanym, a wszystkimi elementami

zbioru trenującego,

● sortuj rosnąco odległości między wektorem testowanym, a elementami zbioru

trenującego,

● wybierz k najbliższych wektorów ze zbioru trenującego,

● policz ilość wszystkich występujących klas k najlepszych wektorów ze zbioru

trenującego,

● wybierz najczęściej występującą klasę jako wynik klasyfikacji,

● w przypadku wystąpienia impasu (np. równa ilość głosów na daną klasę)

wybierz klasę losowo.

2.1.2 Podobieństwo cosinusowe

Jedną z najważniejszych decyzji jaką trzeba podjąć podczas projektowania algorytmu

k Nearest Neighbours jest wybór stosowanej miary do sprawdzania odległości pomiędzy

poszczególnymi przypadkami testowymi. W sytuacji, w której tekst reprezentowany jest przez

wektor zawierający informacje o słowach i częstotliwości ich występowania, naturalnym wydaje

się zastosowanie miary cosinusowej. W celu zrozumienia działania procesu szukania odległości

za pomocą cosine similarity należy przedstawić zasadę działania euclidean distance i

zrozumienia jej ograniczeń.

W przypadku liczenia odległości euklidesowej każda miara jest traktowana

równoważnie, co doskonale sprawdza się w przypadku porównywania obiektów opisanych

liczbowo (rozmiary, statystyka). Dla przykładu klasyfikator przyjmujący wymiary pomieszczeń

traktuje równomiernie jego trójwymiarową specyfikę. W tym przypadku pokój długi i wąski nie

jest w niczym podobny do pokoju o równych długościach ścian.

Rozważmy teraz przypadek zastosowania odległości euklidesowej dla tekstu o

tematyce “Uczenie maszynowe”. Pierwszym zestawem trenującym będą artykuły naukowe

traktujące o tematyce “Uczenia maszynowego” bogate w informacje odnośnie szukanej frazy.

Drugim zestawem trenującym będą artykuły o tematyce “Wpływ edukacji na branżę

maszynową”.

Page 13: praca inzynierska.PDF

13

2.1 Rozmieszczenie dwóch grup artykułów i artykułu klasyfikowanego na płaszczyźnie euklidesowej

Załóżmy że oś X oznacza częstotliwość występowania słowa “uczenie”, natomiast oś Y

oznacza częstotliwość występowania słowa “maszynowe” wraz z ich wszystkimi odmianami

językowymi. Punkty oznaczone kolorem czerwonym to artykuły pierwszego zestawu

trenującego, natomiast punkty koloru zielonego to artykuły drugiego zestawu trenującego. W

takim przypadku Fraza “uczenie maszynowe” (oznaczona kolorem niebieskim na wykresie

poglądowym) przy pomocy odległości euklidesowej zostanie błędnie sklasyfikowana jako

artykuł o tematyce “Wpływ edukacji na branżę maszynową”. Aby rozwiązać ten problem

znacznie efektywniejsze okazuje się zastosowanie cosine similarity[7].

2.2 Przykład zastosowania cosine similarity

Funkcje odległości cosinusowej określa się następującym wzorem:

|| || || ||

√∑ √∑

(2.5)

Page 14: praca inzynierska.PDF

14

Gdzie:

A, B - wektory wszystkich słów z artykułu, wraz z ich częstotliwością występowania w danym

artykule,

n - ilość elementów w wektorach.

2.1.3 Ulepszenia i optymalizacje

Powyższa implementacja klasyfikatora kNN, jest podstawową wersją, której jakość

klasyfikacji w wielu przypadkach może odstawać od oczekiwanych wyników. W celu poprawy

jakości klasyfikacji stosuje się różne optymalizacje, lub ulepszenia algorytmu na etapie doboru

najlepszej kategorii z grupy najbliższych sąsiadów.

W niniejszej implementacji klasyfikatora rezygnujemy z implementacji progowania oraz

ulepszeń na etapie liczenia odległości i doboru wielkości k zbioru najbliższych sąsiadów. W

celu polepszenia jakości działania klasyfikatora zostały wprowadzone zmiany na etapie doboru

finalnej kategorii tekstu, który jest implementacją techniki zwanej Majority Voting. Proces został

usprawniony na dwóch płaszczyznach:

● Wprowadzenie progu akceptacji wartościowej kategorii:

Znaczna większość artykułów jest reprezentowana przez grupę kategorii liczącą n

wartości. Rezultatem tego jest twierdzenie, że wynik klasyfikacji może być poprawny tylko

wtedy gdy na wyjściu zostanie podana kolekcja zawierająca kategorie. W tym celu został

wprowadzony próg akceptacji kategorii, określony wartością procentową punktów uzyskanych

przez najwyżej punktowaną kategorię. Wszystkie kategorie wyjściowe mieszczące się w

zakresie progu akceptacji traktowane są jako wartościowe i podawane na wyjściu klasyfikatora

jako element wyniku klasyfikacji.

Proces ten może zostać przedstawiony poniższym algorytmem:

● wyszukaj najwyżej punktowaną kategorię z grupy kategorii wynikowych,

● przyjmij próg akceptacji równy 70% wartości najwyżej punktowanej kategorii,

● znajdź wszystkie kategorie z grupy kategorii wynikowych, których wartości są

wyższe lub równe wartości progu akceptacji kategorii,

● zwróć zbiór kategorii sklasyfikowanych jako wartościowe.

● Ustalenie wartości wag głosowania dla poszczególnych artykułów:

Podczas Majority Voting, głos każdej kategorii jest traktowany z taką samą wagą.

Oznacza to, że w przypadku dużego rozproszenia artykułów ze zbioru trenującego możemy

uzyskać sytuacje, w której dwa artykuły z grupy k najbliższych sąsiadów mogą być w

rzeczywistości odległymi od siebie elementami z diametralnie różną zawartością. Traktowanie

głosów artykułów na równi w takiej sytuacji wprowadza do klasyfikacji przekłamanie, co

bezpośrednio odbija się na jej jakości.

W celu wyeliminowania tego zjawiska wprowadziliśmy wagi dla poszczególnych głosów

kategorii. Wagą danego artykułu jest jego odległość od artykułu klasyfikowanego. Wprowadza

to sytuację, w której najbliższe z k najbliższych artykułów mają największy wpływ na wynik

klasyfikacji.

Page 15: praca inzynierska.PDF

15

2.1.4 Kroswalidacja

W celu oszacowania jakości działania algorytmu klasyfikacji, w projekcie została

zaimplementowana walidacja krzyżowa. Jest ona zaprojektowana zgodnie z ogólnie przyjętym

modelem k-krotnej walidacji, w której na głównej próbie dokonywany jest folding, czyli podział

na k podzbiorów. Każdy kolejny podzbiór jest definiowany jako zbiór testowy, natomiast

pozostałe jako zbiór uczący. Z tak przygotowanymi danymi przeprowadzamy analizę, która

polega na porównaniu kolejno wszystkich artykułów ze zbioru testowego z artykułami w zbiorze

uczący. Przykładowo (zakładając 10 foldów, liczących po 10 artykułów) artykuły od 1 do 10 ze

zbioru testowego porównywane są z artykułami od 1 do 90 ze zbioru uczącego.

Podstawowym dylematem pojawiającym się przy walidacji działania naszego algorytmu

było określenie kiedy przypadek testowy okazuje się poprawnie sklasyfikowany. W tym celu

skorzystaliśmy ze znanego w statystyce sposobu określania poprawności klasyfikacji na

podstawie precyzji (precision) i czułości (sensitivity). Zaadoptowaliśmy takie pojęcia jak:

● true positive (TP) - liczba artykułów, które zostały wybrane przez algorytm i które były

oczekiwane,

● false positive (FP) - liczba artykułów, które zostały wybrane przez algorytm, ale nie były

oczekiwane,

● false negative (FN) - liczba artykułów, które nie zostały wybrane przez algorytm, ale

były oczekiwane.

● precision - ilość wybranych elementów, które są znaczące

● sensitivity - ilość znaczących elementów, które zostały wybrane

Aby obliczyć precyzję skorzystaliśmy ze wzoru:

(2.6)

Natomiast wzór definiujący czułości to:

(2.7)

Końcowym wynikiem jest średnia harmoniczna wyciągana na podstawie wcześniejszych

wyników nazywana F-measure.

(2.8)

Dopiero wartość f jest podstawą do określenia jakości, dokonanej przez nas, klasyfikacji.

2.2 Rozproszenie obliczeń przy pomocy MapReduce

2.2.1 Struktura klastra

Klaster obliczeniowy składa się z wielu komputerów, zwanych węzłami, tworzących

jedno zintegrowane środowisko. Utworzenie takiego środowiska od podstaw jest trudnym i

czasochłonnym zadaniem, w związku z czym, zdecydowaliśmy się wykorzystać zestaw

bibliotek i aplikacji o nazwie Apache Hadoop. Struktura klastra w Apache Hadoop jest

określona przez twórców biblioteki, dzięki czemu stworzenie i konfiguracja jest dużo prostsza.

Page 16: praca inzynierska.PDF

16

Programista nie musi przejmować się równomiernym rozdzielaniem pracy pomiędzy węzły oraz

implementacją mechanizmów zabezpieczających na wypadek awarii węzła.

Komputery w klastrze opartym na Apache Hadoop mają dwie funkcje:

● przechowywanie danych na węzłach klastra. Duże pliki z danymi dzielone są na części

i rozprzestrzeniane między węzłami klastra. Dodatkowo Apache Hadoop oferuje

replikację danych, w przypadku gdyby wystąpiła awaria któregoś z węzłów. Pliki

danych dzielone są na części o określonej w konfiguracji ilości bajtów. W przypadku,

gdy podział pliku nie następuje na końcu linii, następuje automatyczne dopełnienie do

pełnej linii. Jest to bardzo przydatna funkcjonalność, ze względu na to, że w

programach analizujących dane, wczytywane są one zazwyczaj linia po linii,

● wspólne wykonywanie obliczeń. W przypadku awarii węzła klastra, przydzielone mu

dane do obliczenia są rozdysponowywane wśród reszty węzłów.

2.2.2 Podział i przechowywanie plików

[12][13] W Apache Hadoop pliki są przechowywane w rozproszonym systemie plików

HDFS (Hadoop Distributed File System), którego węzły mogą pełnić jedną z dwóch ról:

● NameNode - węzeł zarządzający systemem plików i węzłami podrzędnymi,

● DataNode - węzeł podrzędny, pełniący rolę kontenera danych.

Węzeł, który pełni rolę NameNode do poprawnej pracy musi znać całe drzewo plików

oraz wszystkie węzły podrzędne. Użytkownik manipulujący danymi z HDFS musi komunikować

się z węzłem NameNode, ponieważ to on zarządza plikami, dzieli je między węzłami i łączy.

Dzięki temu, że użytkownik komunikuje się tylko z jednym węzłem, cały rozproszony system

jest dla użytkownika przeźroczysty. W celu eliminacji wąskich gardeł, czyli elementów, które w

przypadku awarii paraliżują cały system, możliwe jest skonfigurowanie tzw. secondary

NameNode, który w wypadku awarii węzła zarządzającego systemem plików przejmuje jego

rolę.

Węzeł, który pełni rolę DataNode jest odpowiedzialny za przechowywanie danych na

swoim dysku oraz za replikację danych znajdujących się na pozostałych węzłach. W domyślnej

konfiguracji dane trzymane są na trzech różnych węzłach w celu zapewnienia stałej

dostępności plików oraz nie dopuszczenia do przerwania pracy w przypadku awarii części

komputerów.

2.2.3 Faza mapowania

[14][15] Sam proces rozproszenia ma swój początek w fazie mapowania, która

odpowiada za równomierne rozdzielenie pracy pomiędzy węzłami. Mając do dyspozycji

rozproszony system plików HDFS, wczytywany jest, znajdujący się na nim plik z danymi

wejściowymi, które dzielone są na mniejsze części. Wygenerowane rekordy nazywane są

splitami, które następnie przetwarzane są do postaci par klucz-wartość (powszechnym

przykładem jest tekst sczytywany linia po linii). Powstałe w ten sposób grupy par klucz-wartość

rozproszone zostają pomiędzy węzły klastra, gdzie poddawane są funkcji mapowania. Efektem

Page 17: praca inzynierska.PDF

17

tych operacji jest znaczne zmniejszenie czasu wykonywania tej samej pracy przez jeden węzeł.

Algorytm MapReduce najczęściej używany jest przy czasochłonnych operacjach na dużych

zbiorach danych. Mniejsze znaczeniem ma poziom skomplikowania zadania, w praktyce są to

zazwyczaj łatwe problemy.

2.3 Diagram przedstawiający pierwszy etap fazy mapowania

dane wejściowe - dowolne dane ładowane z pliku

split - pofragmentowane dane wejściowe

KV - zbiory par klucz-wartość dla danego splitu, ulegających mapowaniu w dalszym etapie

Szczegółowy opis kroków przedstawia się następująco:

● InputFormat dzieli dane wejściowe z pliku wejściowego, wynikiem tego działania są

InputSplits, które reprezentują dane do późniejszej analizy,

● RecordReader przygotowuje dane dla następnego kroku w formie grupy par klucz-

wartość,

● Hadoop MapReduce framework dla każdego InputSplit tworzy map task, który

następnie przydzielany jest do węzła,

● każdy map task wykonuje zaimplementowaną i dostarczaną przez aplikację funkcję

map ,

● każdy węzeł może mieć przydzielone więcej niż jeden task, wykonywane one są

równolegle na wszystkich węzłach klastra.

InputSplits - rekordy danych powstałe na etapie dzielenia zbioru danych wejściowych na

mniejsze części,

InputFormat - klasa odpowiedzialna za generowanie InputSplits, dostarcza także

RecordReader oraz opisuje specyfikację wejścia (typy danych dla par klucz-wartość),

RecordReader - generuje zbiór par klucz-wartość z każdego InputSplit, które następnie są

wejściem dla map task,

map task - określenie na zadanie przydzielane węzłom klastra, którego celem jest wykonanie

funkcji mapującej na danych wejściowych.

(2.9)

Powyższy wzór ukazuje bardzo uproszczony schemat tej fazy. Wyjściem jest plik

wynikowy, którego format reprezentowany jest również przez parę klucz-wartość, jednakże typy

danych niekoniecznie muszą pokrywać się z tymi na wejściu.

Page 18: praca inzynierska.PDF

18

2.2.4 Faza redukcji

[14][15] Faza redukcji rozpoczyna się niezależnie od skończenia fazy mapowania,

oznacza to, że węzłom klastra dla każdego skończonego map task, może zostać przydzielony

reduce task (podobnie jak map task z tą różnicą, że wykonuje funkcję redukującą), nie czekając

aż pozostałe zostaną ukończone. Oczywistą korzyścią z takiego rozwiązania jest wzrost

wydajności. Wejściem dla tego etapu są dane wynikowe fazy mapowania. Wartym

wspomnienia jest również to, że ta faza jest opcjonalna i może zostać pominięta w zależności

od potrzeb aplikacji.

Na proces redukcji składa się::

● wejście, którym jest wynik poprzedniej fazy,

● dla każdego wejścia tworzony jest reduce task i wykonywana jest funkcja redukująca

na dostarczonych danych,

● opcjonalnie, gdy pliki są zbyt rozprzestrzenione w skład procesu może wchodzić proces

kopiowania plików, aby dostępne były lokalnie i późniejsze sortowanie danych,

● interfejs OutputFormat, który (podobnie jak jego odpowiednik w fazie mapowania,

InputFormat) opisuje specyfikację wyjścia - typy danych dla pary klucza-wartość,

● wynikiem każdego reduce task jest plik wynikowy zapisywany w systemie plików HDFS,

pliki te zostają następnie scalone ze sobą, a dane redukowane po raz ostatni.

Uproszczony schemat fazy redukcji można przedstawić w następujący sposób:

(2.10)

Fazę redukcji można dodatkowo przyspieszyć oraz zminimalizować obciążenie sieci,

poprzez zmniejszenie ilości danych przesyłanych między węzłami dzięki zastosowaniu funkcji

łączącej zwanej Combiner function. Funkcja łącząca działa w ten sam sposób co funkcja

redukująca, jednak działa ona tuż po wykonaniu fazy mapowania, przed wysłaniem utworzonej

struktury do węzłów wykonujących fazę redukcji.

Podsumowując, algorytm MapReduce jest powszechnie stosowany na dużych zbiorach

danych, które w tradycyjny oraz sekwencjonalny sposób przetwarzane byłyby zdecydowanie

dłużej. Rozbicie danych na mniejsze fragmenty i dystrybucja na węzły klastra pozwala na

równoległe ich przetwarzanie co wiąże się ze znacznym wzrostem wydajności aplikacji

opierającej się na tym algorytmie. Przykładem wykorzystania może być analiza dużych ilości

tekstu pod kątem zliczania występujących w nim słów. To rozwiązanie najlepiej się sprawdza w

takich przypadkach.

Page 19: praca inzynierska.PDF

19

3. IMPLEMENTACJA

3.1 Wykorzystane technologie

3.1.1 Hadoop

Przy założeniu, że sieć jest poprawnie skonfigurowana, konfiguracja Apache Hadoop

jest niezwykle prosta. Sprowadza się ona do uzupełnienia kilku plików xml, oraz podania roli

poszczególnych węzłów. Problemami takimi jak zabezpieczenie klastra przed awarią

pojedynczego węzła, czy poprawnym podziałem plików między węzły zajmuje się sam Hadoop.

Apache Hadoop nie jest jedynym w swoim rodzaju rozwiązaniem dostępnym na rynku.

Istnieje kilka alternatyw dla jego zastosowania. Z poważniejszych konkurentów możemy

wymienić Apache Spark, który niejako wywodzi się z Hadoopa i często używany jest w

połączeniu z nim, jednak może również działać samodzielnie. Zaletami Apache Spark, które

odróżniają go od Hadoopa są niezależność od sposobu magazynowania danych (Hadoop -

HDFS) oraz przystosowanie do przetwarzania i analizy danych w czasie rzeczywistym.

Kolejną alternatywą jest Cluster Map Reduce, stworzony przez firmę Chitika na

wewnętrzne potrzeby. Framework ten bazuje na systemie plików Gluster, a kod źródłowy został

udostępniony publicznie na platformie Github wraz z krótkim opisem konfiguracji. Na ten

moment w Internecie dostępnych jest względnie mało informacji na temat tego frameworku, a

szczególnie doskwiera brak szczegółowej dokumentacji. Twórcy reklamują swój produkt jako

szybszy i efektywniejszy w aspekcie manipulacji i przetwarzania plików wewnątrz frameworku

niż rozwiązania proponowane przez Apache.

Do postawienia na Apache Hadoop przekonała nas ogromna popularność i stabilność

tego rozwiązania, prostota w konfiguracji, porządne zabezpieczenia i spory zasób informacji

dostępny w Internecie. Każde z rozwiązań ma swoje wady i zalety, chociaż Hadoop na dzień

dzisiejszy jest rozwiązaniem, po które sięga się statystycznie najczęściej. Nie jest natomiast

pewne, że implementacja algorytmu przy użyciu tego frameworku będzie najbardziej

optymalnym rozwiązaniem z grupy dostępnych opcji.

3.1.2 Scala

Przy rozwoju projektu wykorzystany został język programowania Scala. [16] Jest to

relatywnie młody język, jego pierwsza wersja miała premierę w 2004 roku. Jego składnia jest

zbliżona do składni Javy, jednak pozwala ona na rozszerzanie bibliotek Javy oraz oferuje

dodatkowe mechanizmy składniowe, takie jak na przykład funkcje anonimowe w postaci

wyrażeń lambda. Oferuje on płynną integrację z językami programowania Java i C# poprzez

kompilację na środowiska uruchomieniowe tych dwóch języków. Scalę cechuje połączenie

właściwości języka obiektowego z cechami języka funkcyjnego. Dzięki właściwościom języka

funkcyjnego Scala pozwala na wygodną implementację algorytmów matematycznych oraz na

używanie funkcji anonimowych w postaci wyrażeń lambda przy np. iterowaniu przez kolekcje.

Page 20: praca inzynierska.PDF

20

3.2 Opis działania projektu

3.2.1 Wstęp

Wczytanie artykułu:

Artykuł do którego przypasowane mają być kategorie zostaje wczytany do pamięci, po

czym za pomocą wyrażeń regularnych wyodrębnione zostają poszczególne słowa, których

wszystkie wielkie litery zostają zamienione na małe.

Zliczenie i sprowadzenie słów do lemm:

Na bazie pliku tekstowego zawierającego w kolejnych liniach słowa występujące w

języku Polskim i ich bazowe formy, utworzona została struktura, będąca wariantem Drzewa

Trie. Jest to drzewo, które jako klucze przechowuje kolejne litery umieszczonego słowa. A jako

wartości formy bazowe, szukanego słowa. Struktura ta po otrzymaniu słowa zwraca jego formę

podstawową.

3.1 Diagram przedstawiający strukturę Trie dla słów wraz z ich formami bazowymi: dwa → dwa, dwu → dwa, to → to, oczy → oko, oka → oko, oko → oko

Klasyfikacja słów artykułu:

Wyliczenie podobieństwa pomiędzy artykułami, klasyfikowanym i ze zbioru uczącego,

na podstawie zawierania tych samych słów w obu artykułach. Jako zbiór uczący dla programu

użyte zostało repozytorium artykułów polskiej gałęzi Wikipedii z 2015 roku.

Wybranie kategorii:

Page 21: praca inzynierska.PDF

21

Wybranie n najlepiej pasujących kategorii dla danego artykułu pośród kategorii najlepiej

dopasowanych artykułów ze zbioru uczącego.

3.2.2 Schemat działania projektu

3.2 Schemat działania projektu

Legenda:

- Czynność wykonywana przez program.

- Dane którymi operuje program.

Page 22: praca inzynierska.PDF

22

Klasyfikowany artykuł - artykuł który wymaga przyporządkowania kategorii, składa się z nazwy

i tekstu.

Słownik słów i odmian - struktura stworzona na bazie pliku tekstowego zawierającego słowa

występujące w języku polskim i ich lemmy.

Zbiór uczący - repozytorium artykułów polskiej gałęzi Wikipedii z 2015 roku

KNN - Algorytm k-Najbliższych Sąsiadów

3.3 Klasyfikacja artykułów do kategorii

3.3.1 Wstęp

Na podstawie wyliczonego podobieństwa cosinusowego, klasyfikator dobiera

najbardziej podobne do siebie artykuły względem analizowanego. Dobór kategorii odbywa się w

końcowym etapie pracy programu, po zebraniu wyników klasyfikacji do jednego pliku.

W celu przypasowania kategorii do artykułu, w pierwszej kolejności tworzony jest

słownik wszystkich kategorii z dopasowanych artykułów. Każda kategoria oznaczona jest

wartością liczbową, która jest sumą wcześniej wyliczonych wartości podobieństwa

cosinusowego (jeśli kategoria X znajduje się w spisie kategorii artykułu A i artykułu B, to jej

wartością jest suma podobieństwa artykułu A i artykułu B do analizowanego). Z powstałego w

ten sposób słownika, wybierana jest najwyższa wartość, której 90% stanowi próg doboru

najlepszych kategorii. Jeśli zależność (2.1) jest spełniona to kategoria zostaje dopisana na listę

najlepiej dopasowanych.

(3.1)

3.3.2 Zbiór danych

Zbiór trenujący to zbiór artykułów w notacji Wikikodu pobranych z Wikipedii, przy

pomocy Wikidumps. Pobrane dane są aktualne, pobrane na dzień 02.10.2015r. Aplikacja

przetwarza dane zebrane w plikach *pages-articles*.xml i na ich podstawie zapisuje do pliku

nazwę artykułu i jego treść w Wikikodzie.

W celu poprawnego wykonania kroswalidacji, zbiór trenujący należy podzielić na n

części. Jedną z tych części algorytm przyjmuje jako zbiór testujący, pozostałe części są

traktowane jako zbiór trenujący. Najlepiej jest zastosować podział niezależny od treści artykułu

czy kategorii, ponieważ zbiory te powinny zawierać artykuły z różnych klas.

Ilość zbiorów oraz parametr częstotliwości przyporządkowania artykułów do danego foldu, są

ustawialne w parametrach programu. Zmiana tych parametrów może znacząco zmienić dane

wyjściowe algorytmu.

3.4 Rozproszenie na klastrze

W celu uzyskania zysku czasowego w wykonaniu programu poprzez wykorzystanie

klastra, istotne jest rozłożenie jak największej ilości operacji na wiele węzłów. Dla dużych

zbiorów danych, wielokrotnie powtarzane operacje okazują się najbardziej kosztowne czasowo,

z tego powodu to właśnie one zostały rozproszone.

Page 23: praca inzynierska.PDF

23

3.4.1 Podział zbioru na węzły

Dostęp do danych potrzebnych przez każdy z węzłów realizowany jest za pomocą

HDFS, każdy węzeł pobiera dane, które znajdują się na jego dysku. Ponieważ pliki wczytywane

są linia po linii, a między węzłami pliki są rozdystrybuowane w częściach po 128 MB, może

wystąpić konieczność przesyłu końca linijki między węzłami.

3.4.2 Operacje, które zostały rozproszone

Rozkład operacji na węzłach klastra dla klasyfikacji kształtuje się następująco:

Operacje wykonane przed uruchomieniem programu:

● utworzenie struktury danych słownika form podstawowych oraz zserializowanie jej do

pliku.

Operacje przygotowujące, wykonywane na jednym węźle:

● wczytanie zserializowanego słownika bazowych wersji słów,

● wczytanie artykułów z wikidumps i zapisanie ich do pojedynczych plików.

Operacje rozproszone:

● sprowadzenie wszystkich rozpoznanych słów do lemm i ich zliczenie dla artykułów ze

zbioru danych,

● sprowadzenie wszystkich rozpoznanych słów do lemm i ich zliczenie dla artykułu

klasyfikowanego,

● obliczenie podobieństwa artykułu ze zbioru danych do artykułu klasyfikowanego.

Operacje końcowe wykonywane na jednym węźle:

● wybór najbardziej podobnych artykułów pośród danych zwróconych przez klasyfikator,

a następnie na podstawie kategorii tych artykułów przypasowanie kategorii artykułowi

klasyfikowanemu.

Rozkład operacji na węzłach klastra dla kroswalidacji kształtuje się następująco:

Operacje rozproszone:

● sprowadzenie wszystkich rozpoznanych słów do lemm i ich zliczenie dla artykułów ze

zbioru danych,

● folding, czyli podział zbioru danych na n grup,

● wyliczanie odległości cosinusowej między artykułem z danego foldu, a artykułem spoza

tego foldu.

Operacje końcowe wykonywane na jednym węźle:

● zebranie i podsumowanie wyniku, porównanie z oczekiwanymi wynikami.

3.4.2.1 Rozproszenie zliczania słów

Przed przystąpieniem do zliczania słów, należało odpowiednio przygotować klaster do

pracy. Każdy węzeł klastra został skonfigurowany w taki sposób, że posiada lokalną kopię

struktury słownika, który przyjmując na wejście słowo zwraca jego formę bazową. Na początku

Page 24: praca inzynierska.PDF

24

kroku mapowania wczytanie artykułu, które odbywa się linia po linii. W ten sposób system

buduje w pamięci strukturę potrzebną do sprowadzenia słów do ich podstawowej formy.

Przy pomocy wyrażeń regularnych, z artykułu zostaje usunięty Wikikod, a następnie

wydobywane są wszystkie słowa, które przy pomocy słownika zostają sprowadzone do

podstawowej formy. Dodatkowo, ponieważ każdy artykuł zawiera informację o

przyporządkowanych kategoriach, kategorie te są wydobywane z pliku przy pomocy wyrażeń

regularnych i są dodawane do pliku wyjściowego. Kluczem w kroku mapowania jest słowo, a

przy każdym jego wystąpieniu do zbioru wartości dodajemy liczbę 1. Dla zbioru kategorii

tworzymy osobny klucz, a do jego zbioru wartości dodajemy każdą wyznaczoną kategorię.

Podczas kroku redukcji słowa są zliczane na podstawie otrzymanych rekordów. Jeżeli

klucz zawiera nazwę słowa, jego wartości są sumowane, w ten sposób otrzymujemy liczebność

danego słowa w artykule. Jeżeli klucz rekordu jest specjalnie stworzonym dla kategorii kluczem,

kategorie są wyznaczane ze zbioru wartości. W ten sposób przeanalizowane dane są zapisane

do plików wyjściowych.

Operacja ta jest wykonywana przy klasyfikacji oraz przy kroswalidacji. Operacja ta

może być wykonana tylko raz, natomiast powinna być wykonana ponownie przy każdej zmianie

zbioru wejściowego. Operacja jest złożona czasowo, ze względu na tworzenie struktury i

wybieranie słów przy pomocy wyrażeń regularnych z dużych artykułów, jednak potrzeba jej

wykonania jest jednorazowa, nie powinno to mocno obciążyć klastra użytkownika.

Przebieg podsumowujący rozproszenie algorytmu zliczania słów:

1. dane wejściowe - danymi wejściowymi algorytmu są artykuły w formie tekstu z

Wikikodem,

2. krok mapowania - dane wejściowe są wczytywane linia po linii. Do mapy zapisywane

są wszystkie znalezione słowa, sprowadzone do podstawowej formy dla danego

artykułu jako klucz i liczba jeden przy każdym wystąpieniu słowa. Dodatkowo do mapy

wpisywane są kategorie, jeśli wystąpią,

3. krok redukcji - mapa uzyskana w poprzednim kroku zostaje wczytana i wszystkie

wystąpienia liczby jeden dla danego słowa zostają sumowane. Sumy wraz z

kategoriami uzyskanymi w poprzednim punkcie są zapisywane na wyjście.

3.4.2.2 Rozproszenie kNN

Operacje tworzenia wektorów słów oraz obliczania odległości cosinusowej dla dwóch

wektorów są operacjami bardzo czasochłonnymi, dlatego aby zwiększyć wydajność niezbędne

jest ich rozproszenie.

Rozproszenie tego kroku polega na wczytaniu z wejścia jednego artykułu z policzonymi

słowami i wydzielonymi kategoriami, wyznaczeniu dla niego wektora słów i porównaniu go

z wektorem innego artykułu. Podczas kroku mapowania, wczytywane są wyniki uzyskane przy

zliczaniu słów. Liczebności każdego słowa oraz wszystkie kategorie są zbierane do jednego

Page 25: praca inzynierska.PDF

25

rekordu, którego kluczem jest nazwa artykułu. Zbiór lub w przypadku kroswalidacji podzbiór

tych rekordów to zbiór trenujący.

W przypadku klasyfikacji, algorytm porównuje klasyfikowany artykuł ze zbiorem

uczącym, natomiast w przypadku kroswalidacji porównywane są artykuły z danego foldu z

artykułami z pozostałych foldów.

Podczas wykonywania kroku redukcji, do pamięci wczytywany jest zbiór testujący,

którym może być klasyfikowany artykuł lub zbiór artykułów po zliczeniu słów. Wczytany artykuł

lub zbiór artykułów, zostaje następnie porównany z rekordem otrzymanym z kroku mapowania.

Do porównania potrzebne jest uprzednie utworzenie dwóch wektorów słów, zawierających

liczebność danego słowa w dwóch wybranych artykułach. Po utworzeniu wektorów zliczane jest

podobieństwo cosinusowe między dwoma wybranymi artykułami a następnie wyniki

zapisywane są do pliku. Jeżeli na początku kroku redukcji zostaje wybranych więcej niż jeden

artykuł, tworzenie wektorów i zliczanie podobieństwa są wykonywane wielokrotnie.

Przebieg podsumowujący rozproszenie algorytmu kNN:

1. dane wejściowe - zbiór artykułów z policzonymi słowami oraz wydzielonymi

kategoriami,

2. krok mapowania - krok mapowania polega na wczytaniu wyjścia z kroku zliczania słów

do mapy,

3. krok redukcji - z wczytanych danych oraz danych znanych z klasyfikowanego artykułu

utworzone zostają dwa wektory reprezentujące liczebność danych słów w obu

artykułach. Po utworzeniu wektorów liczona jest odległość cosinusowa miedzy nimi i

wypisywana jest na wyjscie razem z kategoriami danego artykułu.

3.4.2.3 Rozproszenie foldingu

Operacja foldingu, ze względu na dużą ilość danych do przetworzenia przy tworzeniu

podzbiorów, została rozproszona i będzie wykonywana przed wykonaniem walidacji skrośnej.

Podział zbiorów jest dokonywany na podstawie nazwy artykułu. Ilość zbiorów można ustawić w

parametrach programu. Krok mapowania jest zaimplementowany w podobny sposób jak przy

algorytmie kNN, natomiast podczas kroku redukcji artykuły są dzielone na n zbiorów na

podstawie nazwy artykułu i zapisywane do n plików. Wszelkie informacje uzyskane przy

zliczaniu słów są przepisywane do odrębnych plików.

Przebieg foldingu:

1. dane wejściowe - artykuł z policzonymi słowami oraz wydzielonymi kategoriami,

2. krok mapowania - krok mapowania polega na wczytaniu wyjścia z kroku zliczania słów

do mapy,

3. krok redukcji - krok redukcji polega na wybraniu odpowiedniego foldu dla artykułu

w zależności od nazwy artykułu. Wszystkie informacje uzyskane w przy zliczaniu słów

są przepisywane do pliku o odpowiedniej nazwie, będącego zbiorem artykułów dla

danego foldu.

Page 26: praca inzynierska.PDF

26

3.4.2.4 Rozproszenie kroswalidacji

Kroswalidacja składa się z trzech operacji, gdzie każda jest rozpraszana między

węzłami klastra, w celu zwiększenia wydajności. Operacje składające się na kroswalidację to:

● liczenie odległości cosinusowej między artykułami z danego foldu, a artykułami z

pozostałych foldów,

● na podstawie odległości wyznaczanie k-Najbliższych Sąsiadów danego artykułu,

wyszukiwanie najlepszych kategorii przy użyciu kryterium progowania SS-cut oraz

wyznaczenie metryki trafności predykcji F-Measure na podstawie otrzymanych

i oczekiwanych kategorii,

● sumowanie i uśrednianie wyników i obliczanie średniej w celu oceny klasyfikatora.

Liczenie odległości cosinusowej jest realizowane tak jak opisano to w rozdziale 3.4.2.2,

z tą różnicą, że zamiast wczytywania jednego artykułu na początku kroku redukcji, wczytywane

są wszystkie artykuły z danego foldu. W procesie analizy danych zapamiętujemy także

kategorie dla artykułów z badanego foldu, w celu ich późniejszego porównania z kategoriami

uzyskanymi przez proces klasyfikacji.

Na podstawie danych uzyskanych w poprzednim kroku, system wyznacza k

najbliższych sąsiadów oraz najlepsze kategorie dla danego artykułu. Na podstawie uzyskanych

kategorii jesteśmy w stanie wyznaczyć proporcje między dobrze, a źle wybranymi kategoriami

przy pomocy true positive, false positive i false negative dla wybranych kategorii, a na ich

podstawie jesteśmy w stanie wyznaczyć miary Precision i Recall potrzebne do wyznaczenia F-

Measure, a także samo F-Measure.

Krok mapowania polega na wczytaniu wyników uzyskanych w poprzednim kroku i

utworzeniu mapy, której klucze są nazwą artykułu, a wartości to wszystkie kategorie dla obu

artykułów oraz podobieństwo cosinusowe.

Krok redukcji polega na wyznaczeniu k najbliższych sąsiadów oraz najlepszych

kategorii dla danego artykułu i porównaniu ich z kategoriami oczekiwanymi, czyli tymi, które

zawierały na wejściu artykuły ze zbioru testującego. Na podstawie tego porównania możemy

wyznaczyć szukane proporcje i miary.

Ostatnią rozproszoną operacją podczas wykonywania kroswalidacji jest operacja

zliczania wyników zbiorczych dla wszystkich foldów. Wskaźniki true postive, false positive oraz

false negative są sumowane, natomiast szukane miary są w tym kroku uśredniane.

Krok mapowania polega na wczytaniu wszystkich wyników uzyskanych w poprzednim

kroku i zapisaniu ich do jednego wspólnego klucza, natomiast krok redukcji polega na

zsumowaniu i uśrednieniu wszystkich wartości.

3.5 Instrukcja instalacji

W tym rozdziale znajdują się informacje odnośnie instalacji i uruchomienia projektu.

Kod źródłowy można skompilować przy pomocy narzędzia o nazwie Apache Maven. Maven

automatycznie pobierze wszystkie wymagane do działania projektu biblioteki oraz skompiluje

Page 27: praca inzynierska.PDF

27

kod źródłowy to formatu Java Archive (jar). Aby skompilować kod źródłowy należy pobrać

Apache Maven ze strony programu, a następnie będąc w folderze src/ wywołać polecenia

mvn clean install

mvn package

W folderze src/target powinien pojawić się skompilowany program o nazwie kaw-

0.0.1-SNAPSHOT-jar-with-dependencies.jar. Program ten należy skopiować do katalogu

bin/. Program powinniśmy uruchamiać bezpośrednio z katalogu bin/.

3.5.1. Przygotowanie klastra Apache Hadoop

Program podczas działania wykorzystuje pliki, które muszą być umieszczone w

systemie plików klastra Apache Hadoop lub jeżeli klaster jest uruchomiony lokalnie w trybie

symulacji na dysku komputera. Pliki wymagane przez klasyfikator to:

● artykuł klasyfikowany w notacji Wikikod lub jako zwykły tekst,

● zbiór trenujący artykułów w notacji Wikikod, zawierających informacje o kategoriach,

artykuły te można przy pomocy aplikacji wydobyć z pliku pages-articles z Wikidumps,

● słownik w postaci pliku zawierającego słowa oraz ich formy podstawowe. Plik powinien

przyjmować następującą formę:

○ n w każdej linii pliku powinno znajdować się słowo z odmianą oraz jego wersja

bazowa,

○ n słowo oraz jego wersja bazowa powinny być rozdzielone tabulatorem.

3.5.2. Konfiguracja parametrów programu

Przed uruchomieniem programu należy skonfigurować plik znajdujący się w folderze

conf/ o nazwie kaw.properties. Wartości parametrów powinny być ustawione zgodnie z

tabelą 3.1. Parametry biblioteki Apache Hadoop, w których skład wchodzą m.in. ustawienia

dostępu do klastra, należy ustawiać poprzez rozpoczęcie nazwy parametru od przedrostka

hadoop. a następnie dopisaniu nazwy danego parametru zgodnie z dokumentacją Apache

Hadoop.

Tabela 3.1 Wykaz parametrów uruchomienia aplikacji

Nazwa parametru Typ wartosci Opis

pl.gda.pg.eti.kask.kaw.

userName

String Nazwa użytkownika UNIX na serwerze zdalnym. Tej

nazwy będzie używał Apache Hadoop podczas

łączenia się do zdalnego klastra.

pl.gda.pg.eti.kask.kaw.j

arLocation

String Położenie skompilowanej aplikacji w formacie .jar.

pl.gda.pg.eti.kask.kaw.c

lassifyRepetitions

Integer,

Liczba dodatnia

Ilość powtórzeń klasyfikacji, może być używana do

mierzenia wydajności klasyfikatora.

pl.gda.pg.eti.kask.kaw.k Integer Wartość parametru k dla klasyfikatora k-

Najbliższych Sąsiadów.

Page 28: praca inzynierska.PDF

28

Tabela 3.1 Wykaz parametrów uruchomienia aplikacji

pl.gda.pg.eti.kask.kaw.c

lassifierPrecision

Double,

0 ≤ x ≤ 1

Procentowa wartość progowania SS-cut klasyfikatora

k-Najbliższych Sąsiadów.

pl.gda.pg.eti.kask.kaw.

dictionaryLocation

String Położenie w systemie plików klastra pliku

zawierającego odmiany słów.

pl.gda.pg.eti.kask.kaw.f

olds

Integer Liczba foldów walidacji skrośnej.

pl.gda.pg.eti.kask.kaw.r

andomPerFold

Integer Rozrzut artykułów między foldy.

pl.gda.pg.eti.kask.kaw.l

ocalDumpsInput

String Położenie pliku pages-articles z Wikidumps na dysku

klastra.

pl.gda.pg.eti.kask.kaw.l

ocalDumpsOutput

String Folder wyjściowy, do którego program ma wypisać

zbiór artykułów przy lokalnym trybie symulacji.

pl.gda.pg.eti.kask.kaw.

dumpsOutput

String Folder wyjściowy, do którego program ma wypisać

zbiór artykułów na klastrze.

pl.gda.pg.eti.kask.kaw.

newArticleInput

String Folder wejściowy do algorytmu klasyfikatora,

powinien zawierać artykuł, który chcemy

sklasyfikować.

pl.gda.pg.eti.kask.kaw.

newArticleOutput

String Folder wyjściowy na klastrze, do którego zapisane

zostaną wyniki zliczania słów klasyfikowanego

artykułu.

pl.gda.pg.eti.kask.kaw.

wordCountInput

String Folder wejściowy do algorytmu zliczania słów,

powinien zawierać zbiór trenujący artykułów.

pl.gda.pg.eti.kask.kaw.

wordCountOutput

String Folder wyjściowy algorytmu zliczania słów na

klastrze.

pl.gda.pg.eti.kask.kaw.c

lassifierInput

String Folder wejściowy do klasyfikatora, parametr powinien

wskazywać na folder wyjściowy algorytmu zliczania

słów.

pl.gda.pg.eti.kask.kaw.c

lassifierOutput

String Folder wyjściowy klasyfikatora.

pl.gda.pg.eti.kask.kaw.f

oldingInput

String Folder wejściowy do algorytmu foldingu, parametr

powinien wskazywać na folder wyjściowy algorytmu

zliczania słów.

pl.gda.pg.eti.kask.kaw.f

oldingOutput

String Folder wyjściowy algorytmu foldingu.

pl.gda.pg.eti.kask.kaw.c

rossvalidationInput

String Folder wejściowy algorytmu kroswalidacji, parametr

powinien wskazywać na folder wyjściowy algorytmu

foldingu.

Page 29: praca inzynierska.PDF

29

Tabela 3.1 Wykaz parametrów uruchomienia aplikacji

3.5.3 Analiza pliku Wikidumps

Program umożliwia przeanalizowanie pliku pages-articles i skopiowaniu do podanego

folderu artykułów w notacji Wikikodu wraz z kategoriami. Artykuły można przeczytać na lokalny

dysk, co może być przydatne w przypadku symulacji klastra, umożliwia to też ręczne wgranie

plików na klaster. Program umożliwia też wczytywanie artykułów bezpośrednio na rozproszony

dysk Apache Hadoop.

Aby wczytać plik Wikidumps w trybie lokalnym należy uruchomić program wraz z parametrami

java -jar kaw.jar dump --local

natomiast, wczytywanie na klaster odbywa się przy wywyłaniu programu z następującym

parametrem:

java -jar kaw.jar dump

Można uruchomić także wczytywanie pliku razem z dodatkowymi parametrami:

DUMP_IN OUT_DIR [--start N [--skip X]] [--max M]

DUMP_IN, OUT_DIR - odpowiedniki parametrów pl.gda.pg.eti.kask.kaw.localDumpsInput,

pl.gda.pg.eti.kask.kaw.localDumpsOutput, jeżeli nie podane to następuje ich wczytanie z

folderu conf/kaw.properties.

Poniższe nieobowiązkowe parametry umożliwiają wczytywanie pliku wikidumps przez

wiele węzłów klastra jednocześnie:

● --start N - dzięki temu parametrowi można kazać programowi pominąć pierwsze

START artykułów,

● --skip X - dzięki temu parametrowi można kazać programowi kopiować co X artykuł,

● --max M - dzięki temu parametrowi można kazać programowi wczytywać artykuły do

M-tego artykułu.

Przykład wczytywania artykułu na trzech węzłach jednocześnie znajduje się w plikach

bin/read_dump.sh oraz bin/read_dump_to_local_folder.sh.

pl.gda.pg.eti.kask.kaw.crossvalidationOutput

String Folder wyjściowy algorytmu kroswalidacji.

pl.gda.pg.eti.kask.kaw.crossvalidationScoresInput

String Folder wejściowy algorytmu zliczania punktów kroswalidacji, powinien wskazywać na folder wyjściowy algorytmu kroswalidacji.

pl.gda.pg.eti.kask.kaw.crossvalidationScoresOutput

String Folder wyjściowy algorytmu zliczania punktów kroswalidacji.

pl.gda.pg.eti.kask.kaw.crossvalidationAverageScoreInput

String Folder wejściowy algorytmu zliczania średniej punktów kroswalidacji, powinien wskazywać na folder wyjściowy algorytmu zliczania punktów kroswalidacji.

pl.gda.pg.eti.kask.kaw.crossvalidationAverageScoreOutput

String Folder wyjściowy algorytmu zliczania średniej punktów kroswalidacji.

Page 30: praca inzynierska.PDF

30

3.5.4 Tryby działania klasyfikatora

Aplikacja jest uruchamiana z wiersza poleceń, może zostać uruchomiona w wielu

trybach. Korzystając z aplikacji można dokonać klasyfikacji automatycznej lub uruchomić każdą

z operacji ręcznie. Tryb automatyczny jest najłatwiejszy w obsłudze, nie wymaga ręcznego

zarządzania katalogami.

Tryb ręczny umożliwia wykonywanie każdej operacji na klastrze osobno, jednak wymaga

usuwania katalogów wyjściowych algorytmu przed wykonaniem danej operacji. Uruchamiając

poniżej wylistowane polecenia należy pamiętać, że zamiast kaw.jar, należy podać nazwę

archiwum skompilowanego przez Apache Maven, skopiowanego do katalogu bin/.

W trybie automatycznym można wykonać trzy główne operacje:

1. automatycznej klasyfikacji, operacja automatycznie zlicza słowa klasyfikowanego

artykułu oraz artykułów zbioru trenującego, jeśli nie zostały wcześniej zliczone oraz

wykonuje klasyfikację i wypisuje wyniki na ekran. Operacja ta wymaga uzupełnienia

parametrów w pliku parametrów. Tę operacje można wywołać uruchamiając polecenie

java -jar kaw.jar classify --auto

2. automatycznej kroswalidacji. Program automatycznie zlicza słowa, jeśli to konieczne.

Dzieli zbiór na podzbiory i wykonuje klasyfikację dla wszystkich artykułów. Następnie

program zlicza wyniki i je sumuje i uśrednia, a wynik wypisuje na ekran. Operacja ta

wymaga uzupełnienia parametrów w pliku parametrów. Tę operację można wywołać

uruchamiając polecenie

java -jar kaw.jar crossvalidate --auto

3. automatycznego sumowania wyników. Program ponownie wylicza wyniki, sumuje oraz

uśrednia je i wypisuje na ekran. Operacja jest ta przydatna w przypadku badań jakości

klasyfikacji po modyfikacji parametrów k i progowania. Operacja ta wymaga

uzupełnienia parametrów w pliku parametrów. Operację tę można wywołać

uruchamiając polecenie

java -jar kaw.jar cvscores --auto

W trybie ręcznym można wykonać siedem operacji. Operacje nie wymagają podawania

parametrów w pliku parametrów, ale wtedy należy je podać w wierszu poleceń jako kolejne

parametry programu.

Do operacji wykonywanych ręcznie należą:

1. operacja zliczania słów. Operacja może przyjąć parametry:

● IN_DIR - określa katalog wejściowy dla operacji, analogicznie jak w

pl.gda.pg.eti.kask.kaw.wordCountInput

● OUT_DIR - określa katalog wyjściowy operacji, analogicznie jak w

pl.gda.pg.eti.kask.kaw.wordCountOutput

Parametry te są nieobowiązkowe. Operację można wywołać uruchamiając polecenie:

java -jar kaw.jar wordcount [IN_DIR OUT_DIR]

2. operacja klasyfikacji pojedynczego artykułu. Operacja może przyjąć parametry:

Page 31: praca inzynierska.PDF

31

● IN_DIR - określa katalog wejściowy dla operacji, analogicznie jak w

pl.gda.pg.eti.kask.kaw.classifierInput

● OUT_DIR - określa katalog wyjściowy dla operacji, analogicznie jak w

pl.gda.pg.eti.kask.kaw.classifierOutput

Parametry te są nieobowiązkowe. Operację można wywołać uruchamiając polecenie:

java -jar kaw.jar classify [IN_DIR OUT_DIR]

3. operacja znalezienia najlepszych kategorii. Operacja może przyjąć parametry:

● IN_DIR - określa katalog wejściowy dla operacji, który jest katalogiem wyjściowym

klasyfikacji, analogicznie jak w pl.gda.pg.eti.kask.kaw.classifierOutput

● K - określa parametr k dla algorytmu kNN, analogicznie jak w pl.gda.pg.eti.kask.kaw.k

Parametry te są nieobowiązkowe. Operację można wywołać uruchamiając polecenie:

java -jar kaw.jar bestCategories [IN_DIR K]

4. operacja foldingu. Operacja może przyjąć parametry:

● IN_DIR - określa katalog wejściowy dla operacji, analogicznie jak w

pl.gda.pg.eti.kask.kaw.foldingInput

● OUT_DIR - określa katalog wyjściowy dla operacji, analogicznie jak w

pl.gda.pg.eti.kask.kaw.foldingOutput

Parametry te są nieobowiązkowe. Operację można wywołać uruchamiając polecenie:

java -jar kaw.jar fold [IN_DIR OUT_DIR]

5. operacja kroswalidacji. Operacja może przyjąć parametry:

● IN_DIR - określa katalog wejściowy dla operacji, analogicznie jak w

pl.gda.pg.eti.kask.kaw.crossvalidationInput

● OUT_DIR - określa katalog wyjściowy dla operacji, analogicznie jak w

pl.gda.pg.eti.kask.kaw.crossvalidationOutput

Parametry te są nieobowiązkowe. Operację można wywołać uruchamiając polecenie:

java -jar kaw.jar crossvalidate [IN_DIR OUT_DIR]

6. operacja zliczania wyników kroswalidacji. Operacja może przyjąć parametry:

● IN_DIR - określa katalog wejściowy dla operacji, analogicznie jak w

pl.gda.pg.eti.kask.kaw.crossvalidationScoresInput

● OUT_DIR - określa katalog wyjściowy dla operacji, analogicznie jak w

pl.gda.pg.eti.kask.kaw.crossvalidationScoresOutput

Parametry te są nieobowiązkowe. Operację można wywołać uruchamiając polecenie:

java -jar kaw.jar cvscores [IN_DIR OUT_DIR]

7. operacja uśredniania wyników kroswalidacji. Operacja może przyjąć parametry:

● IN_DIR - określa katalog wejściowy dla operacji, analogicznie jak w

pl.gda.pg.eti.kask.kaw.crossvalidationAverageScoreInput

● OUT_DIR - określa katalog wyjściowy dla operacji, analogicznie jak w

pl.gda.pg.eti.kask.kaw.crossvalidationAverageScoreOutput

Parametry te są nieobowiązkowe. Operację można wywołać uruchamiając polecenie:

java -jar kaw.jar cvaverage [IN_DIR OUT_DIR]

Page 32: praca inzynierska.PDF

32

Program zawiera wbudowany manual, który można wyświetlić uruchamiając aplikację bez

żadnych parametrów. W celu wyświetlenia manuala należy uruchomić polecenie:

java -jar kaw.jar

Page 33: praca inzynierska.PDF

33

4. OCENA

4.1 Wydajność

W rozdziale tym, opiszemy przeprowadzone przez nas testy oraz skomentujemy ich

wyniki. Projekt naszego autorstwa pozwolił nam na zgromadzenie statystyk wydajnościowych

oraz przeanalizowanie poprawności przypisania do kategorii przez klasyfikator kNN oparty na

podobieństwie cosinusowym.

4.1.2 Ocena wydajności algorytmów

Tabela 4.1 Zależność czasu wykonania poszczególnych operacji od ilości artykułów

100 artykułów 250 artykułów 500 artykułów 750 artykułów

Liczenie słów 00:02:44 00:05:21 00:09:35 00:15:22

Kategoryzacja 1 artykułu

00:00:42 00:00:43 00:00:42 00:00:41

Folding, kroswalidacja

00:08:03 00:17:59 00:57:03 02:50:13

Zbieranie wyników kroswalidacji

00:00:37 00:00:38 00:00:41 00:00:42

Uśrednianie wyników kroswalidacji

00:00:37 00:00:38 00:00:38 00:00:37

Analiza złożoności czasowej algorytmów projektu, pozwala na wyznaczenie operacji,

które są najbardziej czasochłonne. Tabela 4.1 zawiera zgromadzone statystyki wydajnościowe

dla wszystkich przeprowadzanych przez aplikację operacji dla różnej liczby artykułów. Operacje

te zostały uruchomione na środowisku składającym się z klastra o 12 komputerach, gdzie 10 z

nich to były węzły wykonujące pracę obliczeniową, natomiast 2 z nich zostały skonfigurowane

jako węzły zarządzające. Parametr k dla algorytmu kNN ustawiliśmy na wartość równą 50,

natomiast walidacja skrośna została wykonana po podziale na 10 podzbiorów.

Analizując tabelę 4.1. można zauważyć, że najbardziej czasochłonną operacją są

operacje foldingu i walidacji skrośnej. Dzieje się tak, ponieważ walidacja skrośna wykonuje

bardzo dużo porównań między artykułami. Przykładowo przy analizowanym zbiorze,

zawierającym dokładnie 100 artykułów zostanie wykonanych porównań.

Liczba ta wynika z liczebności zbiorów po podziale, jeżeli zbiór 100 artykułów podzielimy na 10

równych zbiorów, to każdy z nich będzie zawierał po 10 artykułów. Każdy artykuł ze zbioru

testującego, czyli zbioru zawierającego 10 artykułów, porównujemy z każdym artykułem zbioru

trenującego, który zawiera 90 artykułów. Taka analiza jest wykonywana 10 razy, przyjmując

kolejno każdy z podzbiorów jako zbiór testujący. Z tego wynika, iż złożoność czasowa tej

procedury będzie rosła w tempie wyznaczonym przez wzór:

(

(

))

(4.1)

Page 34: praca inzynierska.PDF

34

k - liczba artykułów,

n - liczba podziałów zbioru.

Przykładowo dla 750 artykułów zostanie wykonanych

porównań. Widać więc, że złożoność czasowa po dodaniu 650 artykułów znacząco

wzrosła, stąd też wysokie różnice czasowe dla obu przypadków.

Drugą bardzo złożoną obliczeniowo operacją jest zliczanie słów. Tutaj złożoność

czasowa wynika w głównej mierze z analizy tekstu pod kątem występowania słów oraz

zmienianiem tych słów do ich formy podstawowej. Po uprzednim usunięciu z tekstu Wikikodu,

słowa są wyszukiwane za pomocą wyrażeń regularnych. Średni artykuł z badanego zbioru

zawiera około 13kB. Dodatkowym kosztem jest wczytanie do pamięci pliku zawierającego

odmiany słów, co zajmuje około pół minuty.

Pozostałe operacje są szybkie, nie wymagają zwiększenia wydajności, ich głównym

obciążeniem czasowym było łączenie się z klastrem Apache Hadoop i przygotowywanie

środowiska.

4.1.3 Zysk wydajności poprzez rozproszenie

Tabela 4.2 Zależność czasu wykonania od ilości węzłów klastra, dla 1500 artykułów

Liczenie słów Klasyfikacja 1 artykułu Klasyfikacja 1000

artykułów

4 węzły Slaves 01:14:21 00:00:40 00:07:18

7 węzłów Slaves 00:44:12 00:00:42 00:07:02

10 węzłów Slaves 00:32:46 00:00:40 00:07:06

Tabela 4.3 Zależność czasu wykonania od ilości węzłów klastra, dla 3000 artykułów

Liczenie słów Klasyfikacja 1 artykułu Klasyfikacja 1000

artykułów

4 węzły Slaves 02:28:41 00:00:43 00:08:26

7 węzłów Slaves 01:38:55 00:00:40 00:09:54

10 węzłów Slaves 01:24:19 00:00:52 00:09:01

Wynik wykonanych pomiarów zależności czasu wykonania poszczególnych elementów

programu od ilości węzłów klastra zostały przedstawione w tabelach 4.2 i 4.3. Pomiary

wykonano dla 2 węzłów zarządzających oraz kolejno 4, 7 i 10 węzłów wykonujących pracę

obliczeniową.

Dla operacji liczenia słów można zaobserwować widoczną poprawę czasu wykonania,

natomiast dla klasyfikacji wraz z wzrostem ilości węzłów nie zaobserwowano oczekiwanej

poprawy czasu klasyfikacji artykułów. Dopiero podczas analizy wyników można było

zidentyfikować problem. Prawdopodobnie jest to spowodowane faktem, iż część operacji

Page 35: praca inzynierska.PDF

35

klasyfikacji wykonywana jest na jednym węźle. Obliczanie odległości cosinusowej zostało

rozproszone, natomiast wybieranie k najlepszych sąsiadów i kategorii wykonywane jest tylko na

jednym węźle.

4.2 Poprawność przypisania do kategorii

Rozdział ten poświęcony jest analizie wykonanych testów pod kątem jakościowym.

Porównane zostaną wyniki klasyfikacji przy różnych wartościach parametrów algorytmu na

zbiorach danych o różnej wielkości.

4.2.1 Porównanie jakości wybranych strategii progowania

4.1 Wykres zależności poprawności klasyfikacji od parametru k, dla 750 artykułów

Tabela 4.4 Zależność poprawności klasyfikacji od wartości parametru k, dla 750 artykułów

Wartość k Suma true positive

Suma false positive

Suma false negative

Miara Sensitivity/ Recall

Miara Precision

F-measure

k = 2 227 1281 1303 0.1792 0.2327 0.1921

k = 3 206 1142 1324 0.1661 0.2462 0.1880

k = 5 195 914 1335 0.1601 0.2461 0.1833

k = 10 175 714 1355 0.1487 0.2361 0.1725

k = 20 148 563 1382 0.1366 0.2197 0.1591

k = 50 126 519 1404 0.1209 0.1965 0.1419

Tabela 4.4 przedstawia wyniki pomiarów poprawności klasyfikacji w zależności od

przyjętego parametru k. Dla ujednolicenia wykonanych testów liczba artykułów jest stała i

równa 750. Artykuły zostały wybrane w sposób losowy. W celu wizualizacji wyników, do tabeli

dołączono graficzną reprezentację wyników w postaci wykresu zależności precyzji, czułości

oraz f-measure od parametru k.

Page 36: praca inzynierska.PDF

36

Najlepszą jakość otrzymano dla parametru k równego 2. Wraz ze wzrostem parametru

k możemy zaobserwować spadek miary Recall, co oznacza, że zmniejsza się stosunek miedzy

dobrze wybranymi kategoriami, a kategoriami oczekiwanymi.

Spadek jakości spowodowany jest znaczącym wzrostem liczby kategorii wybieranych

przez algorytm. Dla rosnącej liczby sprawdzanych sąsiadów, pula dostępnych kategorii bardzo

szybko wzrasta. Przyjęta strategia progowania wyników dla wyboru najbardziej trafnych (patrz

wzór 3.1) sprawia, że liczba zaklasyfikowanych kategorii jako poprawne wzrasta gdy

zwiększony zostaje parametr k.

Przy zwiększającej się liczbie kategorii, wynik staje się bardziej zaburzony i mniej

precyzyjny. Po analizie tabeli 4.4 można dojść do wniosku, że najlepsze wyniki klasyfikacji

osiągane są dla parametru k mieszczącego się granicach od 2 do 5 najbliższych sąsiadów.

4.2 Wykres zależności poprawności klasyfikacji od wartości progowania parametru t

Tabela 4.5 Zależność poprawności klasyfikacji od wartości progowania parametru t

Progowanie parametru t

Suma true positive

Suma false positive

Suma false negative

Miara Sensitivity/ Recall

Miara Precision

F-measure

90% 133 1537 1397 0.1241 0.1963 0.1432

80% 149 1756 1381 0.1290 0.1942 0.1462

50% 248 4770 1282 0.1739 0.1633 0.1519

30% 323 18840 1207 0.2046 0.1249 0.1347

10% 403 60111 1127 0.2452 0.0420 0.0567

Na powyższym wykresie można zaobserwować, że wraz ze zmniejszeniem wymagań

przypasowania artykułu do najlepszego sklasyfikowanego artykułu wartość czułości rośnie, a

precyzji maleje. Dzieje się tak ponieważ, otrzymujemy więcej kategorii, których oczekiwaliśmy,

Page 37: praca inzynierska.PDF

37

ale ponieważ ogółem zwiększyła się liczba zwracanych kategorii, to stosunek kategorii

poprawnych do niepoprawnych maleje. Zauważyć należy, że wartość f-measure osiąga wartość

maksymalną przy wartości 50%, a powyżej tej wartości minimalnie maleje.

4.2.2 Jakość klasyfikacji przy rosnącej liczbie artykułów

4.3 Wykres zależności poprawności klasyfikacji od ilości artykułów, dla k = 2

Tabela 4.6 Zależność poprawności klasyfikacji od ilości artykułów, dla k = 2

Liczba artykułów

Suma true positive

Suma false positive

Suma false negative

Miara Sensitivity/ Recall

Miara Precision

Miara f-Measure

100 38 175 178 0.2619 0.3416 0.2840

250 134 557 551 0.2833 0.3559 0.3030

500 170 831 849 0.1773 0.2341 0.1937

750 227 1281 1303 0.1792 0.2327 0.1922

Tabela 4.6 przedstawia wyniki pomiarów dokonanych dla stałej wartości parametru k

równej 2 i zmiennej liczbie artykułów w puli testowej. Tabela zawiera podsumowanie wyników

walidacji skrośnej dla całego badanego zbioru i zawiera sumy true positive, false positive, false

negative oraz uśrednione wartości miar sensitivity, precision, f-Measure.

Na wykresie można zaobserwować spadek jakości klasyfikacji przy wzroście liczby

artykułów. Należy zwrócić uwagę, iż jakość klasyfikacji dla tego typu klasyfikatora jest niska.

Wynik został również zaniżony faktem, że podczas weryfikacji poprawności kategorii, program

nie uwzględniał hierarchii kategorii występującej w Wikipedii, więc jeżeli klasyfikator zwrócił

kategorię bardzo podobną do szukanej lub podkategorię szukanej kategorii, to taka kategoria

zostaje uznana za błędną. W celu poprawy jakości należałoby wprowadzić ulepszenia do

klasyfikatora opisane szerzej w rozdziale 5.3.

Page 38: praca inzynierska.PDF

38

5. PODSUMOWANIE

W rozdziale tym znajdują się informacje dotyczące otrzymanych wyników. Obejmuje on

wnioski dotyczące wykonanej pracy oraz analizę najważniejszych osiągnięć. Dodatkowo

poruszona została kwestia ewentualnej kontynuacji pracy pod kątem udoskonaleniem jakości i

wydajności stworzonego algorytmu.

5.1 Uzyskane efekty i osiągnięcia pracy

W ramach pracy został stworzony system odpowiedzialny za klasyfikację danych

tekstowych. W trakcie projektowania zdecydowano się na wykorzystanie technologii opartych o

klastry komputerowe współpracujących bezpośrednio z maszyną wirtualną Javy. Językiem, o

który oparta jest implementacja rozwiązania, jest Scala, natomiast do obsługi logiki

rozproszenia działań zastosowano framework Apache-Hadoop. Zaprojektowany system jest w

pełni samodzielnym narzędziem, odpowiedzialnym za normalizacje danych, liczenie

podobieństw wektorów danych, dobór wyników oraz szacowanie jakości i wydajności działania

aplikacji.

Algorytmem klasyfikacji zastosowanym w projekcie jest algorytm k Najbliższych

Sąsiadów. Dane tekstowe, porównywane w algorytmie, są prezentowane jako wektory

zawierające informacje o występowaniu słów oraz ich liczności w danym tekście. Po wstępnych

testach, zdecydowano się że miarą niepodobieństwa zastosowaną w algorytmie będzie Cosine

Similarity. Z racji swojej złożoności operacje tworzenia wektorów słów oraz obliczania

odległości cosinusowej dla dwóch wektorów

zostały operacjami, na których zastosowano rozproszenie.

Do przetestowania poprawności otrzymanych wyników oraz wydajności działania

algorytmu zaimplementowano proces kroswalidacji. Tutaj także z racji dużej złożoności operacji

zostało zastosowane rozproszenie. Wszystkie operacje składające się na proces kroswalidacji

tj. liczenie podobieństwa cosinusowego, wyszukiwanie k najbliższych sąsiadów oraz

sumowanie wyników i obliczanie średniej zostały zrównoleglone.

Głównym celem pracy jest poruszenie problemu wydajności klasyfikacji, natomiast

jakość wyników została zniesiona na drugi plan. W celu ulepszenia wydajności oraz

umożliwieniu łatwego skalowania całego systemu, postanowiliśmy wykorzystać technologię

MapReduce, która została zaprojektowana z myślą o analizie dużej ilości danych. Zwiększanie

ilości węzłów rozproszonego klastra obliczeniowego przyspieszyło wydajność klasyfikacji, jest

ona zadowalająca na większości etapach działania algorytmu. Największa strata obliczeniowa

generowana jest w trakcie działania kroswalidacji. Powodem straty jest bardzo duża ilość

porównań między artykułami, natomiast problem ten tylko w małym stopniu udało sie zwalczyć

rozproszeniem. W przypadku pozostałych etapów tj. normalizacji danych, działania algorytmu

klasyfikacji czy foldingu zauważalna jest znaczna poprawa wydajności działania procesów

w zależności od ilości wykorzystanych węzłów klastra.

Wyniki jakościowe klasyfikacji nie przekraczają 20% dla poszczególnych zestawów

danych wejściowych, co jasno pokazuje że skala problemu jest znacznie bardziej

Page 39: praca inzynierska.PDF

39

skomplikowana. Mimo to otrzymane narzędzie stanowi solidną podstawę do dalszego rozwoju

w dziedzinie klasyfikacji danych tekstowych.

Zaprezentowane w powyższej pracy rozwiązanie problemu, testy oraz analiza

otrzymanych wyników ukazują, że zagadnienia związane z pracą zostały sumiennie

opracowane, stawiane wymagania zrealizowane oraz cel pracy osiągnięty.

5.2 Wnioski z przeprowadzonych badań

Podczas prowadzenia badań nad powyższym zagadnieniem natrafiono na wiele

aspektów związanych z rozpraszaniem aplikacji czy klasyfikacją danych. Poniższe wnioski

przedstawiają nabytą wiedzę podczas wykonywania projektu:

● wszelkie technologie oparte o MapReduce dobrze nadają się do implementacji

klasyfikacji opartej o algorytm kNN, ze względu na skuteczne rozdzielanie zadań

w oparciu o zadany klucz. W przypadku klasyfikacji artykułów, kluczem tym może być

nazwa danego artykułu,

● klasyfikacja danych jest procesem bardzo złożonym, wymagającym zastosowania wielu

technik w celu zwiększenia jej efektywności i zmniejszenia złożoności czasowej,

● kluczem do efektywnej klasyfikacji jest dobór odpowiednich charakterystyk danych

wejściowych,

● zastosowanie technologii Apache Hadoop znacznie usprawnia realizację podobnych

projektów, ponieważ pomaga programiście uzyskać pełne rozproszenie danych oraz

przy pomocy MapReduce pomaga rozproszyć obliczenia pomiędzy węzły klastra,

● technologia Apache Hadoop nadaje się również do realizacji wielu innych projektów,

na przykład do realizacji rozproszonej bazy danych.

Przeprowadzane testy wydajnościowe i jakościowe działania algorytmu prowadzą do

następujących konkluzji:

● zastosowana strategia progowania wyników na poziomie 90% nie zawsze korzystnie

wpływa na jakość wyników,

● zastosowany sposób oceny jakości (f-measure) okazał się być dobrym wyznacznikiem

jakości wyników,

● w walidacji skrośnej nie uwzględniono stratyfikacji (podziału na zbioru artykułów na

foldy tak, aby każdy z podzbiorów zawierał podobnej klasy artykuły) co może wpływać

negatywnie na uzyskane wyniki,

● zauważono znaczną poprawę w aspekcie złożoności czasowej dla operacji zliczania

słów wraz ze wzrostem używanych węzłów klastra, natomiast proces klasyfikacji

uzyskał wzrost wydajności znacznie niższy od oczekiwanego,

● optymalną ilością parametru k jest wartość zawierająca się między 2, a 5 najbliższych

sąsiadów,

● najbardziej czasochłonnymi operacjami są folding i walidacja skrośna i to w nich należy

doszukiwać się wąskiego gardła rozproszenia,

Page 40: praca inzynierska.PDF

40

● mimo zastosowania optymalnej miary niepodobieństwa dla algorytmu kNN (odległość

cosinusowa), jakość otrzymanych wyników jest niższa od oczekiwanej,

5.3 Kontynuacja pracy

Tematyka klasyfikacji jest bardzo rozległym zagadnieniem algorytmiki, a możliwości

rozwoju implementacji jest bardzo dużo. Do istniejącego projektu można dodać np. działanie

uczenia maszynowego lub sieci neuronowych w celu podniesienia jakości otrzymanych

wyników, lub usprawnić implementacje zrównoleglenia w celu polepszenia wydajności działania

programu.

Interesujące wnioski może dać zbadanie wyników klasyfikacji z uwzględnieniem

hierarchii kategorii Wikipedii. Pomiar ilości zwróconych kategorii, które znajdują się niżej

w hierarchii (są podkategoriami) oczekiwanej kategorii, może wskazywać ile zwróconych

kategorii uznanych jako błędne było tak naprawdę bliskie poprawnej odpowiedzi.

W kwestii jakości oprócz dodania nowych technik aproksymacyjnych, warto zastanowić

się nad ulepszeniem działania algorytmu kNN. Istnieje szereg implementacji zmodyfikowanego

algorytmu kNN. Najpopularniejszym ulepszeniem, które niewątpliwie miało by korzystny wpływ

na działanie naszego algorytmu, jest wprowadzenie ważonego k, gdzie waga jest zależna od

“gęstości” danych trenujących w przestrzeni euklidesowej.

W przypadku ulepszeń wydajności działania algorytmu w pierwszej kolejności należy

przeprowadzić dokładną analizę działania algorytmu w celu odnalezienia “wąskiego gardła”.

Przede wszystkim kroswalidacja jest procesem w którym efektywne zmniejszenie ilości

porównań przyspieszyłoby znacznie działanie aplikacji. Interpretowanie przez program wyników

walidacji skrośnej, też należy poprawić, uwzględniając pełną hierarchię kategorii, nie

odrzucając tym samym kategorii bardzo podobnych do siebie. Dodatkowo należy sprawdzić,

które etapy mają najmniejszy stosunek wpływu na jakość wyników do złożoności czasowej.

W przypadku zdecydowania się na kompromis wyeliminowania najmniej efektywnych

elementów, możemy uzyskać znaczne przyspieszenie działania wraz z niewielkim wpływem na

ostateczne wyniki.

Page 41: praca inzynierska.PDF

41

WYKAZ LITERATURY

1. Lemma (morphology), https://en.wikipedia.org/wiki/Lemma_%28morphology%29 (data dostępu: 2015-11-20).

2. The Zettabyte Era—Trends and Analysis, http://www.cisco.com/c/en/us/solutions/collateral/service-provider/visual-networking-index-vni/VNI_Hyperconnectivity_WP.html (data dostępu: 2015-11-20).

3. Liczba artykułów w polskojęzycznej Wikipedii, https://pl.wikipedia.org/wiki/Wikipedia:Liczba_artyku%C5%82%C3%B3w_w_polskoj%C4%99zycznej_Wikipedii (data dostępu: 2015-11-20).

4. Karol Draszawka, Julian Szymański: Thresholding Strategies for Large Scale Multi-Label Text Classifier, Gdańsk University of Technology, Sopot 2013.

5. Jeffrey Dean, Sanjay Ghemawat: MapReduce: Simplified Data Processing on Large Clusters, Google Incorporated 2004.

6. Issues in the classification of text documents, http://nlp.stanford.edu/IR-book/html/htmledition/issues-in-the-classification-of-text-documents-1.html (data dostępu: 2015-11-20).

7. Cosine similarity, https://en.wikipedia.org/wiki/Cosine_similarity (data dostępu: 2015-11-20).

8. Przestrzeń metryczna, https://pl.wikipedia.org/wiki/Przestrze%C5%84_metryczna (data dostępu: 2015-11-20).

9. Metoda Sheparda, https://pl.wikipedia.org/wiki/Metoda_Sheparda (data dostępu: 2015-11-20).

10. Dawid Strzempa: System internetowy przeznaczony do klasyfikacji danych, Praca dyplomowa Magisterska, Politechnika Śląska, Katowice 2008, http://www.ath.bielsko.pl/~mkordos/mgr/ds2008.pdf.

11. Łukasz Dziedzia: Porównanie jakości uogólnienia efektywności działania różnych metod klasyfikacji z sieciami neuronowymi SONN, Praca dyplomowa magisterska, AGH Kraków 2009, http://home.agh.edu.pl/~horzyk/pracedyplom/2009lukaszdziedzia-pracdypl.pdf.

12. Hadoop Wiki - Name Node, https://wiki.apache.org/hadoop/NameNode (data dostępu: 2015-11-20).

13. Hadoop Wiki - Data Node, https://wiki.apache.org/hadoop/DataNode (data dostępu: 2015-11-20).

14. Apache Hadoop MapReduce Concepts, https://docs.marklogic.com/guide/mapreduce/hadoop (data dostępu: 2015-11-20).

15. MapReduce Tutorial, https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html (data dostępu: 2015-11-20).

16. Multiple Authors: An Overview of the Scala Programming Language (Second Edition), 2006, http://www.scala-lang.org/docu/files/ScalaOverview.pdf.

Page 42: praca inzynierska.PDF

42

WYKAZ RYSUNKÓW

2.1 Rozmieszczenie dwóch grup artykułów i artykułu klasyfikowanego na płaszczyźnie

euklidesowej .......................................................................................................................................... 13

2.2 Przykład zastosowania cosine similarity ......................................................................................... 13

2.3 Diagram przedstawiający pierwszy etap fazy mapowania .............................................................. 17

3.1 Diagram przedstawiający strukturę Trie dla słów wraz z ich formami bazowymi: dwa → dwa,

dwu → dwa, to → to, oczy → oko, oka → oko, oko → oko .................................................................. 20

3.2 Schemat działania projektu ............................................................................................................. 21

4.1 Wykres zależności poprawności klasyfikacji od parametru k, dla 750 artykułów ........................... 35

4.2 Wykres zależności poprawności klasyfikacji od wartości progowania parametru t ........................ 36

4.3 Wykres zależności poprawności klasyfikacji od ilości artykułów, dla k = 2 .................................... 37

Page 43: praca inzynierska.PDF

43

WYKAZ TABEL

Tabela 3.1 Wykaz parametrów uruchomienia aplikacji ............................................................... 27

Tabela 4.1 Zależność czasu wykonania poszczególnych operacji od ilości artykułów .............. 33

Tabela 4.2 Zależność czasu wykonania od ilości węzłów klastra, dla 1500 artykułów .............. 34

Tabela 4.3 Zależność czasu wykonania od ilości węzłów klastra, dla 3000 artykułów .............. 34

Tabela 4.4 Zależność poprawności klasyfikacji od wartości parametru k, dla 750 artykułów .... 35

Tabela 4.5 Zależność poprawności klasyfikacji od wartości progowania parametru t ................ 36

Tabela 4.6 Zależność poprawności klasyfikacji od ilości artykułów, dla k = 2 ............................ 37