From 7371aa39d08c24c924f41562f44125aaeda9b574 Mon Sep 17 00:00:00 2001 From: siulkilulki Date: Thu, 8 Feb 2018 01:47:46 +0100 Subject: [PATCH] =?UTF-8?q?Pierwszy=20fragment=20pracy.=20Wci=C4=85=C5=BC?= =?UTF-8?q?=20do=20poprawki.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pakiety.tex | 13 ++-- praca_dyplomowa.tex | 66 ---------------- rozdzial_1.tex | 29 +------ rozdzial_2.tex | 186 ++++++++++++++++++++++++++++++++++++++++++++ rozdzial_3.tex | 24 ++++++ wstep.tex | 42 ---------- 6 files changed, 217 insertions(+), 143 deletions(-) delete mode 100644 praca_dyplomowa.tex diff --git a/pakiety.tex b/pakiety.tex index c48e681..1614425 100644 --- a/pakiety.tex +++ b/pakiety.tex @@ -1,5 +1,5 @@ \usepackage[OT4]{polski} % tryb pelnej polonizacji -\usepackage[utf8]{inputenc} % kodowanie +\usepackage[utf8]{inputenc} % kodowanie \usepackage{makeidx} % indeks \usepackage[pdftex]{graphicx} % zalaczanie grafiki \usepackage{tikz} % grafika wektorowa @@ -14,24 +14,23 @@ \usepackage{tocloft} % format spisu tresci %\usepackage{array} % ladniejsze tabelki \usepackage{multirow} % laczenie wierszy w tabelach -\usepackage[tableposition=top,format=hang,labelsep=period,labelfont={bf,small},textfont=small]{caption} +\usepackage[tableposition=top,format=hang,labelsep=period,labelfont={bf,small},textfont=small]{caption} % formatuje podpisy pod rysunkami i tabelami, format=hang powoduje, % ze kolejne linie podpisu beda wciete az do odleglosci nazwy podpisu np. "Rysunek 1." \usepackage{floatflt} % ladne oplywanie obrazkow tekstem \usepackage{url} % url w bibliografii -\usepackage{amsmath} +\usepackage{amsmath} \usepackage{tabularx} %lepsze tabele nie uzywane \usepackage{makecell} % do formatowania cell w tabelach \usepackage{geometry} -\usepackage{minted} %kolorowanie kodu -\usepackage{subfig} +% \usepackage{minted} %kolorowanie kodu +\usepackage{subfig} \usepackage{float} % to use H option in figures -\usepackage{enumitem} % bold numbers in enumerate +\usepackage[shortlabels]{enumitem} % bold numbers in enumerate \usepackage{titling} \usepackage{afterpage} - diff --git a/praca_dyplomowa.tex b/praca_dyplomowa.tex deleted file mode 100644 index 9ee8706..0000000 --- a/praca_dyplomowa.tex +++ /dev/null @@ -1,66 +0,0 @@ -\documentclass[a4paper, 12pt, twoside]{report} -\input{pakiety.tex} -\input{ustawienia.tex} - -\newcommand\blankpage{% - \null - \thispagestyle{empty}% - %\addtocounter{page}{-1}% - \newpage} - -\begin{document} - -\pagenumbering{roman} - -% strona tytulowa -\input{strona_tytulowa.tex} -% oswiadczenie -\blankpage -\input{oswiadczenie.tex} -\blankpage -\input{empty.tex} -% wstawienie spisu tresci: -\newpage -\tableofcontents - -% tresc pracy - numeracja stron liczbami arabskimi -\newcounter{licznikStron} -\setcounter{licznikStron}{\value{page}} -\pagenumbering{arabic} -\setcounter{page}{\value{licznikStron}} - -\newpage\null\thispagestyle{empty}\newpage -\input{streszczenie.tex} -\newpage\null\thispagestyle{empty}\newpage -\input{empty.tex} -\input{abstract.tex} -\newpage\null\thispagestyle{empty}\newpage -\input{wstep.tex} -\newpage\null\thispagestyle{empty}\newpage -\input{rozdzial_1.tex} -\input{rozdzial_2.tex} -\newpage\null\thispagestyle{empty}\newpage -\input{rozdzial_3.tex} -\input{rozdzial_4.tex} -\input{rozdzial_5.tex} -\newpage\null\thispagestyle{empty}\newpage - -% spis ilustracji: -%\newpage -%\listoffigures -%\addcontentsline{toc}{chapter}{Spis ilustracji} - -% spis tabel: -%\newpage -%\listoftables -%\addcontentsline{toc}{chapter}{Spis tabel} - - -%bibliografia -%\nocite{*} -\bibliographystyle{acm} -\bibliography{bibliografia} -\addcontentsline{toc}{chapter}{Bibliografia} -%\newpage\null\thispagestyle{empty}\newpage -%\input{zakres_projektu.tex} -\end{document} \ No newline at end of file diff --git a/rozdzial_1.tex b/rozdzial_1.tex index 4816e1e..f6dab96 100644 --- a/rozdzial_1.tex +++ b/rozdzial_1.tex @@ -1,30 +1,3 @@ \chapter{Podstawowe pojęcia} -\chapter{Podejścia do ekstrakcji wydarzeń} -% w kontekście mojego projektu -\section{Regułowe} -\subsection{Wyrażenia regularne} -\section{Bootstraping} -\subsection{Algorytm Snowball} -\chapter{Metodologia} -\section{Ogólny zarys} -\section{Zbieranie informacji o parafiach} -\section{Wyszukiwanie stron internetowych parafii} -\section{Wydobywanie tekstu ze stron parafialnych} -\section{Organizacja danych} % może zbyt inżynierskieby -\section{Ekstrakcja godzin rozpoczęcia mszy świętych} -\subsection{Ogólny zarys} -\subsection{Named entity recognition} -\subsection{Słowa kluczowe} -\subsection{Reguły} -\subsection{Bootstraping} -\subsection{Otoczenia słów (ang. word embeddings)} -\chapter{Rezultaty} -\section{Wyrażenia regularne} -\section{Bootstraping} -\section{Autorska metoda} - -\subsection{Ewaluacja wewnętrzna} %F1 score -\subsection{Ewaluacja zewnętrzna} % w systemie webowym, użytkownicy -\chapter{Wnioski} -\chapter{Perspektywy na przyszłość} +\chapter{stub} \ No newline at end of file diff --git a/rozdzial_2.tex b/rozdzial_2.tex index e69de29..a77bb4e 100644 --- a/rozdzial_2.tex +++ b/rozdzial_2.tex @@ -0,0 +1,186 @@ +\chapter{Metody ekstrakcji informacji} +% w kontekście mojego projektu +W tym rozdziale zaprezentowane będę wybrane metody, których idee lub +ich bezpośrednie użycie znalazło się +w końcowym systemie ekstrakcji informacji o godzinach rozpoczęcia mszy świętych. +\section {Wzorce Hearst - metoda samowsporna \textit{(ang. bootstraping)}} +Pierwszy raz w dziedzinie ekstrakcji informacji metody samowsporne zostały +zastosowane przy ekstrakcji relacji. Były to wzorce Hearst \textit{(ang. + Hearst patterns)}. + +\smallskip +\noindent Znajdowanie nowych wzorców za pomocą wzorców Hearst: +\begin{enumerate} +\item Wybierz relację leksykalną R. +\item Zbierz zbiór par, które są w relacji R. +\item Znajdź zdania, które zawierają te pary. +\item Przyjrzyj się kontekstowi w jakim występują te pary. Załóż, że często + powtarzające się wzorce reprezentują relację R. +\item Weź nowo odkryte wzorce i przejdź do 2. +\end{enumerate} + +\section{Dziel i zwyciężaj algorytmami genetycznymi} +W 2015 Bartoli i in. zaprezentowali efektywny algorytm genetyczny do generowania wzorców w +postaci wyrażeń regularnych przy użyciu niewielkiego zbioru zanotowanych przykładów. +Problem generowania automatycznych wyrażeń regularnych jest ciężki. Warto zauważyć, że +bardzo łatwo wytrenować na zbiorze treningowym system, który znajdzie wzorzec o bardzo wysokiej precyzji i niskiej +czułości (np. wystarczy alternatywa po wszystkich zanotowanych przykładach), ale szczególnie trudno wytrenować system tak, aby generalizował się na przypadki poza +zbiorem treningowym (innymi słowy taki system łatwo przetrenować). + +%Bartoli i in. na następujących przykładach + +%tabela tekstu do wyekstrachowania + +%(otrzymali wyniki bardzo zadowalające wyniki ) tabela wyników +\subsection{Opis problemu} +Niech $x_s$ będzie spójnym podciągiem ciągu znaków $s$ reprezentowanym przez +indeks początkowy i końcowy w $s$. +$x_s$ nazywa się nadłańcuchem $x'_s$ (a $x'_s$ jest podłańcuchem $x_s$) +jeśli (i) $x'_s$ jest krótszy niż $x_s$, (ii) indeks początkowy $x'_s$ jest +większy lub równy niż indeks początkowy $x_s$ oraz (iii) indeks końcowy $x'_s$ +jest mniejszy lub równy niż indeks końcowy $x_s$. + +Niech $(s,X)$ to przykład uczący, w którym $X$ to zbiór + nienachodzących na siebie $x_s$. + +Niech $e(s,P)$ to zbiór wszystkich ciągów $x_s$ +wyekstrahowanych poprzez zbiór wyrażeń regularnych $P$, taki że (i) +$x_s$ +pasuje do jakiegokolwiek wyrażenia regularnego $p\in P$, (ii) każdy nadłańcuch +$x'_s$ ciągu $x_s$ nie pasuje do żadnego wyrażenia regularnego $p\in P$ +oraz (iii) dla każdego innego ciągu $x''_s$, który nachodzi na +$x_s$, indeks początkowy $x''_s$ albo jest większy od indeksu początkowego $x_s$ +albo $x''_s$ nie pasuje do żadnego $p\in P$. + +Mając dwa zbiory zanotowanych przykładów $(E, E')$ zbiór wyrażeń +regularnych $P$ generowany jest używając +tylko i wyłącznie $E$ w taki sposób, że (i) maksymalizowana jest średnia harmoniczna z precyzji i +czułości na $E'$ oraz (ii) minimalizowana jest $\sum_{p\in + P}{l(p)}$, gdzie $l(p)$ to długość wyrażenie regularnego $p$. +Wtedy precyzja i czułość definiowane są w następujący sposób: + +$$Prec(P, E'):=\frac{\sum_{(s,X)\in E'}{|e(s,P) \cup X|}}{\sum_{(s,X)\in E'}{|e(s,P)|}}$$ +$$Rec(P, E'):=\frac{\sum_{(s,X)\in E'}{|e(s,P) \cup X|}}{\sum_{(s,X)\in E'}{|X|}}$$ + +\subsection{Algorytm} + +\subsubsection{Algorytm genetyczny} +Na wejściu podawany jest zbiór treningowy $T$, a na wyjściu pojedyńcze wyrażenie regularne $p$. +Zbiór treningowy $E$ składa się z trójki uporządkowanej $(s,X)=(s,X_d,X_u)$, +gdzie $X_d$ to zbiór ciągów $x_s$ ekstrahowanych przez $p$, a +$X_u$ to zbiór niepożądanych ciągów $x_s$ ekstrahowanych przez $p$. Dodatkowo +żaden podłańcuch $x'_s$ ciągu $x_s\in X_d$ nie nachodzi na żaden podłańcuch $x'_s$ ciągu $x_s\in X_u$. + +Wyrażenie regularne reprezentowane jest za pomocą drzewa. Liście składają +się z: +\begin{enumerate} +\item zakresów znaków np. \texttt{a-ż}, \texttt{A-Ż} i \texttt{0-9}, +\item klas znaków \texttt{\textbackslash w} i \texttt{\textbackslash d}, +\item cyfr od 0 do 9, +\item częściowych zakresów, czyli największego zakresu znaków występującego + w $\bigcup_{(s,X_d,X_u)\in T}X_d$, np. dla \texttt{\{pokój, ubierać\}} + otrzymuje się + zakresy \texttt{a-b}, \texttt{j-k} i \texttt{o-r} (przy założeniu, że + korzysta się z polskiego alfabetu), +\item znaków specjalnych takich jak np. \texttt{\textbackslash ., :, @}. +\end{enumerate} +Wierzchołki nie będące liściami składają się z: +\begin{enumerate} +\item konkatenacji $\bullet \bullet$, +\item klasy znaków $[\bullet]$ i jej negacji $[ \hat{\ } \bullet ]$, +\item kwantyfikatorów bez nawrotów (ang. possessive quantifiers) $\bullet + \ast$\texttt{+}, $\bullet$\texttt{++}, $\bullet$\texttt{?+ } oraz $ \bullet + \{ \bullet, \bullet \}$\texttt{+}, +\item nie łapiących grup \texttt{(?:$\bullet$)}. +\end{enumerate} +Wyrażenie regularne $p$ otrzymuje się przechodząc drzewo sposobem post-order,\newline w którym pod $\bullet$ w wierzchołkach +niebędących +liściami podstawia się łańcuchy znaków zawarte w dzieciach tego wierzchołka. + +\subsubsection{Inicjalizacja populacji} +Dla każdego $x_s\in \bigcup_{(s,X_d,X_u)\in T}X_d$ budowane są dwa osobniki +(osobnik to wyrażenie regularne). Pierwszy osobnik tworzony jest z $x_s$, w którym każda cyfra zamieniana +jest na \texttt{\textbackslash d} oraz każda litera zamienia jest na +\texttt{\textbackslash w}. Drugi osobnik tworzony jest identycznie jak pierwszy +z tą różnicą, że wielkrotne wystąpienia \texttt{\textbackslash d} (lub +\texttt{\textbackslash w}) zastępuje się \texttt{\textbackslash d++} (lub +\texttt{\textbackslash w++}). %\marginpar{przykład} + +\subsubsection{Funkcja przystosowania} +Dla każdego osobnika funkcję przystosowania zdefiniowano jako +$$f(p):=(Prec(p,T), Acc(p,T), l(p))$$ +Wprowadzono również dwie nowe operacje $\sqcap$ i $\ominus$, na których oparte są +funkcje $Prec$ i $Acc$. +Załóżono, że $X_1$ i $X_2$ to zbiory spójnych podciągów tego samego łańcucha znaków $s$. +Wtedy: +\begin{itemize} +\item $X_1 \ominus X_2$ jest zbiorem takich $x_s$, że +(i) są one spójnym podciągiem jakiegoś elementu $X_1$, (ii) nie +nachodzą na żaden z elementów $X_2$ oraz (iii) nie mają nadłańcucha, który spełnia +(i), (ii); +\item $X_1 \sqcap X_2$ jest zbiorem takich $x_s$, że (i) są one + spójnym podciągiem jakiekolwiek elementu $X_1$ i + jakiekolwiek elementu $X_2$ oraz (ii) nie mają nadłańcucha, który spełnia (i). +\end{itemize} + +W końcu $$Prec(p,T):=\frac{\sum_{(s,X_d,X_u)\in T}|e(s,\{p\})\cap + X_d|}{\sum_{(s,X_d,X_u)\in T}|e(s,\{p\})\sqcap (X_d \cup X_u)|}$$ + +Drugi element trójki uporządkowanej, czyli $Acc(p,T)$ jest średnią arytmetyczną +czułości na znakach (ang. True Positive Character Rate skr. TPCR) i +specyficzności na znakach (ang. True Negative Character Rate skr. TNCR): +$$TPCR(p,T):=\frac{\sum_{(s,X_d,X_u)\in T}||e(s,\{p\})\sqcap X_d||}{\sum_{(s,X_d,X_u)\in T}||X_d||}$$ +$$TNCR(p,T):=\frac{\sum_{(s,X_d,X_u)\in T}||s \ominus e(s,\{p\}) \sqcap X_u||}{\sum_{(s,X_d,X_u)\in T}||X_u||}$$ + +$$Acc(p,T)=\frac{TPCR(p,T) + TNCR(p,T)}{2},$$ +gdzie $||X|| = \sum_{x_s\in X}l(x_s)$, a $l(x_s)$ oznacza długość ciągu $x_s$. + +Osobniki porównywane są w pierwszej kolejności na podstawie $Prec$, potem +\newline w +przypadku remisu za pomocą $Acc$, a w przypadku identycznych +$Prec$ i $Acc$ brane jest pod uwagę $l(p)$. + +Populacja $P$ o liczności $n$ ewoluuje następująco. W każdej iteracji $0.1n$ osobników +generowanych jest losowo za pomocą metody +Ramped half-and-half, kolejne $0.1n$ osobników powstaje za pomocą mutacji, a +pozostałe $0.8n$ otrzymano z +populacji i zbioru nowo +wygenerowanych osobników wybierane jest $n$ najlepiej przystosowanych osobników, +które tworzą nową populację. Osobniki wybierane \newline są do mutacji i krzyżowania za +pomocą turnieju (losowanie z $P$ siedmiu osobników i zostawienie najlepszego). +Wymuszono również różnorodność między fenotypami osobników tzn. jeśli oba +osobniki mają identyczny łańcuch znaków to w populacji zostawiono tylko jednego +z nich. Koniec iteracji następuje, gdy zostanie osiągnięty \newline z góry ustalony limit generacji lub +najlepiej przystosowany osobnik nie zmieni się od określonej liczby iteracji. +Finalne wyrażenie regularne $p$ to najlepiej przystosowany osobnik po +zakończeniu wszystkich iteracji. +\subsubsection{Dziel i zwyciężaj} +Zbiór wyrażeń regularnych $P$ generowany jest za pomocą strategii dziel i +zwyciężaj. W każdej iteracji spójne podciągi ciągu znaków $s$, które zostały poprawnie +wykryte przez $P$ są usuwane ze zbioru treningowego. + +Oby uniknąć przetrenowania, czyli bardzo wysokiego F-measure na $E$, a niskiego na $E'$ +zbiór treningowy $E$ dzielony jest losowo na dwa zbiory $E_{train}$ i $E_{validation}$ +takie, że $E=E_{train} \cup E_{validation}$, $E_{train} \cap E_{validation} = +\emptyset$ \newline i +$\sum_{(s,X)\in E_{train}}|X|\approx \sum_{(s,X)\in E_{validation}}|X|$. + +\enlargethispage{7\baselineskip} + +\newpage +Zacznij z $P=\emptyset$ i z $T$ utworzonym w taki sposób, że dla +każdego $(s,X)\in E_t$, trójka uporządkowana $(s, X, \{s\} \ominus X)$ jest +dodawana do $T$, \newline gdzie $X_d:=X$ i $X_u:=\{s\} \ominus X$. + +\noindent Następnie dopóki $\bigcup_{(x,X_d,X_u)\in T}X_d\ne \emptyset$ powtarzaj: +\begin{enumerate} +\item Wykonaj algorytm genetyczny na $T$ i otrzymaj finalne $p$. +\item Jeśli $Prec(p,T)=1$, to $P:=P\cup\{p\}$, w przeciwnym wypadku przerwij pętlę. +\item Dla każdego $(s, X_d, X_u)\in T$, ustaw $X_d:=X_d\setminus e(s, \{p\})$. +\end{enumerate} + +Powyższa procedura powtarzana jest wiele razy z różnym zarodkiem generatora +liczb losowych (startowy zbiór trenujący $T$ pozostaje bez zmian), by otrzymać +wiele różnych zbiorów $P$, z których na końcu wybierany jest ten o najwyższej + średniej harmonicznej z precyzji i czułości na $E=E_{train} \cup E_{validation}$. +%\section{Sieci neuronowe} \ No newline at end of file diff --git a/rozdzial_3.tex b/rozdzial_3.tex index e69de29..a9bf209 100644 --- a/rozdzial_3.tex +++ b/rozdzial_3.tex @@ -0,0 +1,24 @@ + +\chapter{Metodologia} +\section{Ogólny zarys} +\section{Zbieranie informacji o parafiach} +\section{Wyszukiwanie stron internetowych parafii} +\section{Wydobywanie tekstu ze stron parafialnych} +\section{Organizacja danych} % może zbyt inżynierskieby +\section{Ekstrakcja godzin rozpoczęcia mszy świętych} +\subsection{Ogólny zarys} +\subsection{Named entity recognition} +\subsection{Słowa kluczowe} +\subsection{Reguły} +\subsection{Bootstraping} +\subsection{Otoczenia słów (ang. word embeddings)} + +\chapter{Rezultaty} +\section{Wyrażenia regularne} +\section{Bootstraping} +\section{Autorska metoda} + +\subsection{Ewaluacja wewnętrzna} %F1 score +\subsection{Ewaluacja zewnętrzna} % w systemie webowym, użytkownicy +\chapter{Wnioski} +\chapter{Perspektywy na przyszłość} \ No newline at end of file diff --git a/wstep.tex b/wstep.tex index cf5a596..698dda2 100644 --- a/wstep.tex +++ b/wstep.tex @@ -1,44 +1,2 @@ -\chapter*{Wstęp} \markboth{Wstęp}{Wstęp} \addcontentsline{toc}{chapter}{Wstęp} - -Każdy rodzic i nauczyciel wie, jak trudno jest zmotywować dziecko do pracy. W dzisiejszych czasach dzieci zapatrzone są w ekrany telefonów komórkowych i komputerów. Doskonale wiemy jak bardzo lubią one na nich grać. - -Powyższe przemyślenia stały się inspiracją do stworzenia aplikacji Little Hero, która wykorzysta słabość dzieci do gier na telefonach, a jednocześnie umożliwi motywowanie ich do wykonywania zadań zleconych przez opiekuna. - -\bigskip -\noindent W aplikacji mamy dwóch głównych aktorów: -\begin{itemize} - \item \textbf{opiekuna}, który daje dziecku zadania do zrobienia i nagradza ze jego wykonanie - \item \textbf{dziecko}, które poprzez wykonywanie zadań może rozwijać swoją wirtualną postać w grze -\end{itemize} - -Aplikacja umożliwia dziecku zabawę, polegającą na rozwijaniu swoich wirtualnych postaci, ale tylko pod warunkiem, gdy dziecko będzie słuchało opiekuna, wykonując powierzone mu zadania. - -Docelowym odbiorcą aplikacji są rodzice wraz z ich dziećmi oraz nauczyciele szkół podstawowych z ich uczniami. - -\newpage -\noindent Projekt Little Hero składa się z: -\begin{itemize} - \item aplikacji mobilnej na telefony z Androidem, - \item serwera, - \item bazy danych -\end{itemize} - - -\bigskip -W dzisiejszych czasach niemal każda nowa aplikacja, która jest zorientowana na usługi (ang. SOA) lub ogólniej rzecz biorąc oparta na komunikacji żądanie-odpowiedź korzysta z REST API. Ogromna liczba tychże aplikacji powoduje, że REST jest ostatnio bardzo popularny. - -Podążając za trendami technologicznymi zdecydowaliśmy się, żeby klient komunikował się z serwerm poprzez REST API. - -Niniejsza praca poświęcona jest REST API. Szczególna uwaga została poświęcona dokładnemu omówieniu czym jest REST, dobrym praktykom w tworzeniu restowych API oraz implementacji REST API w języku Python z wykorzystaniem frameworka Flask. - -Pierwszy rozdział krótko opisuje historię restowych API, począwszy od zdefiniowania terminu REST przez Roya Fieldinga, aż do osiągnięcia dużej popularności REST API. - -Drugi rozdział dokładnie omawia styl architektoniczny REST. Jest on oparty na rozprawie doktoranckiej Roya Thomasa Fieldinga i opisuje wszystkie sześć ograniczeń definujących REST. - -Trzeci rozdział skupia się na aktualnie obowiązujących dobrych praktykach w tworzeniu REST API. - -Czwarty rozdział krótko omawia framework Flask i rozszerzenie Flask-RESTPlus oraz prezentuje łatwość z jaką można zaimplementować proste API za pomocą Flask-RESTPlus. - -Piąty rozdział przedstawia szczegółowe tworzenie REST API we Flasku. Krok po kroku począwszy od implementacji bazy danych, aż po eksponowanie endpointów zaprezentowane jest jak stworzyć restowe API. Rozdział piąty opiera się na przykładach z aplikacji Little Hero. \ No newline at end of file