Pierwszy fragment pracy. Wciąż do poprawki.

This commit is contained in:
siulkilulki 2018-02-08 01:47:46 +01:00
parent 92e359e762
commit 7371aa39d0
6 changed files with 217 additions and 143 deletions

View File

@ -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}

View File

@ -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}

View File

@ -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}

View File

@ -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}

View File

@ -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ść}

View File

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