Poprawiony drugi rozdział. Dodany skrypt dla beeminder'a.

This commit is contained in:
siulkilulki 2018-03-04 18:37:44 +01:00
parent 3339af9f87
commit f1eaaaa2c3
7 changed files with 846 additions and 116 deletions

11
beeminder.sh Executable file
View File

@ -0,0 +1,11 @@
#!/usr/bin/env bash
(cat master.tex
cat strona_tytulowa.tex
cat oswiadczenie.tex
cat pakiety.tex
cat ustawienia.tex
cat rozdzial_*.tex
cat streszczenie.tex
cat abstract.tex
cat wstep.tex
cat bibliografia.bib) > beeminder.txt

557
beeminder.txt Normal file
View File

@ -0,0 +1,557 @@
\thispagestyle{empty}
\begin{figure}[h!]
\centering
\includegraphics[width=0.25\hsize]{uam_logo.jpg}
\end{figure}
\begin{center}
\Large{Uniwersytet im. A. Mickiewicza w Poznaniu} \\
\large{Wydział Matematyki i Informatyki}\\
%\vskip0.2in
\large{Praca magisterska}\\
\large{\textbf{Ekstrakcja informacji o godzinach rozpoczęcia mszy świętych}}\\
\normalsize{\textbf{Extracting information about church services start times}}\\
%\normalsize{\textbf{}}
\end{center}
%\vskip0.1in
\begin{center}
\Large{Dawid Jurkiewicz}\\
\normalsize{Numer albumu: 396341 }\\
\normalsize{Kierunek: Informatyka}\\
\normalsize{Specjalność: Przetwarzanie języka naturalnego}
%\Large{Imię Nazwisko}\\
%\normalsize{Numer albumu: xxxxxx}\\
%\normalsize{Kierunek: Informatyka, Specjalność: xxxxxxxxxxxxxxxxxx}
\end{center}
%\vskip1.5in
\begin{flushright}
Promotor: \\
prof. UAM, dr hab. Krzysztof Jassem \\
\end{flushright}
\vfill
\begin{center}
\rm Poznań, 2018
\end{center}
\newpage
\thispagestyle{empty}
\newgeometry{bottom=0pt}
\begin{flushright}
Poznań, dnia \today
\end{flushright}
\vskip0.7in
\begin{center}
\large \textbf{Oświadczenie}
\end{center}
\begin{small}
Ja, niżej podpisany Dawid Jurkiewicz, student Wydziału Matematyki i Informatyki Uniwersytetu im. Adama Mickiewicza w Poznaniu oświadczam, że przedkładaną pracę dyplomową pt.
\begin{center}
\textit{„Ekstrakcja informacji o godzinach rozpoczęcia mszyświętych”,}
\end{center}
%rozdziały:
%\begin{center}
%\textit{od 1 do 5}
%\end{center}
napisałem samodzielnie. Oznacza to, że przy pisaniu pracy, poza niezbędnymi konsultacjami, nie korzystałem z pomocy innych osób, a w szczególności nie zlecałem opracowania rozprawy lub jej części innym osobom, ani nie odpisywałem tej rozprawy lub jej części od innych osób.
Oświadczam również, że egzemplarz pracy dyplomowej w wersji drukowanej jest całkowicie zgodny z egzemplarzem pracy dyplomowej w wersji elektronicznej.
Jednocześnie przyjmuję do wiadomości, że przypisanie sobie, w pracy dyplomowej, autorstwa istotnego fragmentu lub innych elementów cudzego utworu lub ustalenia naukowego stanowi podstawę stwierdzenia nieważności postępowania w sprawie nadania tytułu zawodowego.
[\qquad]* - wyrażam zgodę na udostępnianie mojej pracy w czytelni Archiwum UAM
[\qquad]* - wyrażam zgodę na udostępnianie mojej pracy w zakresie koniecznym do ochrony mojego prawa do autorstwa lub praw osób trzecich
\end{small}
\begin{scriptsize}
*Należy wpisać TAK w przypadku wyrażenia zgody na udostępnianie pracy w czytelni Archiwum UAM, NIE w przypadku braku zgody. Niewypełnienie pola oznacza brak zgody na udostępnianie pracy.
\end{scriptsize}
\begin{flushright}
......................................................
\end{flushright}
\restoregeometry\usepackage[OT4]{polski} % tryb pelnej polonizacji
\usepackage[utf8]{inputenc} % kodowanie
\usepackage{makeidx} % indeks
\usepackage[pdftex]{graphicx} % zalaczanie grafiki
\usepackage{tikz} % grafika wektorowa
\usepackage{setspace} % interlinia
\usepackage{hyperref} % wewnetrzne odnosniki w dokumencie
\usepackage{listings} % kody zrodlowe
\usepackage{fancyhdr} % zywe paginy smierci
\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}
% 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{tabularx} %lepsze tabele nie uzywane
\usepackage{makecell} % do formatowania cell w tabelach
\usepackage{geometry}
% \usepackage{minted} %kolorowanie kodu
\usepackage{subfig}
\usepackage{float} % to use H option in figures
\usepackage[shortlabels]{enumitem} % bold numbers in enumerate
\usepackage{titling}
\usepackage{afterpage}% ------------------------------------------------------------------------
% Kropki po numerach sekcji, podsekcji, itd.
% Np. 1.2. Tytul podrozdzialu
% ------------------------------------------------------------------------
\makeatletter
\def\numberline#1{\hb@xt@\@tempdima{#1.\hfil}} %kropki w spisie tresci
\renewcommand*\@seccntformat[1]{\csname the#1\endcsname.\enspace} %kropki w tresci dokumentu
\makeatother
%numerowanie tabel:
%\renewcommand{\thetable}{\thechapter.\arabic{figure}}
%
%twierdzenia, definicje i lematy
%
\newtheorem{defin}{Definicja}
\newtheorem{twr}{Twierdzenie}
\newtheorem{lem}[twr]{Lemat}
% ------------------------------------------------------------------------
% Inne
% ------------------------------------------------------------------------
\frenchspacing
\setlength{\parskip}{3pt} % odstep pom. akapitamia
\linespread{1.49} % odstep pomiedzy liniami (interlinia)
%\onehalfspacing
\setcounter{tocdepth}{2} % stopien zaglebienia w spisie tresci
\setcounter{secnumdepth}{2} % do jakiego stopnia zaglebienia numeracja
% polskie podpisy
\renewcommand{\figurename}{Rys.}
\renewcommand{\tablename}{Tab.}
%paginy zywe smierci
\pagestyle{fancy}
% zmiana liter w~zywej paginie na ma<6D>e
\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
\renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}}
\fancyhf{} % usun biezace ustawienia pagin
\fancyhead[LE,RO]{\small\bfseries\thepage}
\fancyhead[LO]{\small\bfseries\rightmark}
\fancyhead[RE]{\small\bfseries\leftmark}
\renewcommand{\headrulewidth}{0.5pt}
\renewcommand{\footrulewidth}{0pt}
\addtolength{\headheight}{0.5pt} % pionowy odstep na kreske
\fancypagestyle{plain}{%
\fancyhead{} % usun p. g<>rne na stronach pozbawionych
% numeracji (plain)
\renewcommand{\headrulewidth}{0pt} % pozioma kreska
} \chapter{Podstawowe pojęcia}
\chapter{Metody ekstrakcji informacji}
% w kontekście mojego projektu
W tym rozdziale zaprezentowane są wybrane metody,
które brane były pod uwagę lub zostały zastosowane
w opisywanym tutaj systemie ekstrakcji informacji o godzinach rozpoczęcia mszy świętych.
\section {Algorytmy \textit{bootstraping}}
Niech $J$ będzie dowolną reprezentacją języka (wyraz, fraza, wyrażenie
regularne itp.).
W dziedzinie przetwarzania języka naturalnego \textit{bootstraping} to technika
wyszukiwania niezanotowanych (nieprzypisanych do badanej klasy) $J$ przy użyciu małego zbioru specjalnie
wyselekcjonowanych zanotowanych $J$.
Implementacji algorytmu \textit{bootstraping} jest wiele, wszystkie jednak
oparte są na następującym schemacie \cite{Bootstrap}:
\enlargethispage{4\baselineskip}
\begin{enumerate}
\item Stwórz pustą listę reprezentacji języka $J$. % pusta lista $J$, pusta lista wyrazów, pusta
% lista fraz
\item Zainicjalizuj listę starannie dobranymi $J$.
\item Wykorzystaj elementy listy do znalezienia nowych $J$ z korpusu treningowego.
\item Oceń nowe $J$; najlepsze $J$ dodaj do listy.
\item Wróć do 3. i powtarzaj aż do osiągnięcia z góry określonej liczby iteracji
\newline lub
spełnienia innego warunku stopu.
\end{enumerate}
% \textit{Bootstraping} jest szczególnie przydatny w przypadku, gdy mamy mały
% zbiór treningowy, ponieważ z jego pomocą jesteśmy w stanie powiększyć zbiór
% treningowy. %todo poprawić
\subsection{Wzorce Hearst}
Jednymi z pierwszych implementacji algorytmu \textit{bootstraping} w dziedzinie
ekstrakcji informacji
są wzorce Hearst \textit{(ang. Hearst patterns)} \cite{Hearst}.
\smallskip
\noindent Znajdowanie nowych przykładów uczących za pomocą wzorców Hearst przedstawia się
następująco:
\begin{enumerate}
\item Wybierz relację leksykalną $R$.
\item Utwórz początkowy zbiór $S$ par $(x, y)\in R$, gdzie $x$ i $y$ to słowa lub frazy.
\item Znajdź zdania, które zawierają pary ze zbioru $S$.
\item Przyjrzyj się kontekstowi, w jakim występują te pary. Załóż, że często powtarzające się wzorce reprezentują relację R.
\item Wykorzystaj nowo odkryte wzorce do znalezienia kolejnych par $(x, y)\in R$.
\item Dodaj nowo znalezione pary do zbioru $S$, wróć do 3. i powtarzaj aż do osiągnięcia z góry określonej liczby iteracji.
\end{enumerate}
\enlargethispage{4\baselineskip}
\subsubsection{Przykład}
Rozważmy relację R taką, że $(x, y) \in R$ wtedy, gdy $x$ został pochowany w
$y$.
Załóżmy, że zaczynamy z parą \texttt{('Józef Piłsudski', 'Kraków')}$\in R$.
W korpusie treningowym szukamy zdań zawierających w sobie parę \texttt{('Józef
Piłsudski', 'Kraków')} i otrzymujemy zdania takie jak:
\centerline{„Józef Piłsudski został pochowany w Krakowie.”}
\centerline{„Miejsce pochówku Józefa Piłsudskiego to Kraków.”}
\centerline{„Grób Józefa Piłsudskiego znajduje się w Krakowie.”}
\noindent Ze znalezionych zdań tworzymy następujące wzorce:
\centerline{$x$ został pochowany w $y$.}
\centerline{Miejsce pochówku $x$ to $y$.}
\centerline{Grób $x$ znajduje się w $y$.}
\noindent Wykorzystujemy powyższe wzorce do znalezienia nowych par będących w relacji $R$, przykładowo:
% i otrzymujemy:
\centerline{\texttt{('Witold Doroszweski, 'Warszawa')}}
\centerline{\texttt{('Jana Długosz', 'Zakopane')}}
\noindent Następnie szukamy zdań w których występują powyższe pary, na przykład:
\centerline{„Witold Doroszewski spoczywa w Warszawie.”}
\centerline{„Na cmentarzu w Zakopanem mieści
się grób Jana Długosza.”}
\noindent Z nowo otrzymanych zdań tworzymy poniższe wzorce:
\centerline{$x$ spoczywa w $y$.}
\centerline{Na cmentarzu w $y$ mieści się grób $x$.}
\noindent Powtarzamy powyższy algorytm aż do osiągnięcia określonej liczby iteracji.
% \subsection{Miejsce na opis bardziej skomplikowanej metody implementującej
% algorytm \textit{bootstraping}}
\section{Automatyczne generowanie wyrażeń regularnych za pomocą algorytmów genetycznych}
W 2015 roku Bartoli i in. zaprezentowali efektywny algorytm genetyczny do generowania
wzorców zapisanch w
postaci wyrażeń regularnych przy użyciu niewielkiego zbioru zanotowanych
przykładów (fraz oznaczonych jako pasujące do wyrażeń regularnych) \cite{genetic}. Nowością było zastosowanie metody „dziel i zwyciężaj”.
Zamiast uczyć się jednego wyrażenia regularnego, które znajdowałoby wszystkie
przykłady, system uczy się wielu różnych wzorców, które dopiero po połączeniu
alternatywą tworzą
ostateczne wyrażenie regularne.
% Problem automatycznego generowania wyrażeń regularnych jest złożony. 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, której składnikami są wszystkie zanotowane przykłady), ale szczególnie trudno wytrenować system tak, aby generalizował się na przypadki poza % zbiorem treningowym (innymi słowy taki system łatwo przetrenować). %(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$. Dla ułatwienia, w przykładach $x_s$ będziemy
reprezentować przez zawartość i indeks początkowy.
\enlargethispage{1\baselineskip}
Na przykład $x_s=\texttt{ku}_0$, $x'_s=\texttt{ku}_2$, $x''_s=\texttt{kuku}_0$, $x'''_s=\texttt{łka}_4$ to spójne podciągi ciągu znaków $s=\texttt{kukułka}$.
$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
nie mniejszy niż indeks początkowy $x_s$ oraz (iii) indeks końcowy $x'_s$
jest nie większy niż indeks końcowy $x_s$. Na przykład $\texttt{ku}_0$
jest podłańcuchem $\texttt{kuku}_0$.
Mówi się, że $x_s$ nachodzi na $x'_s$ (lub $x'_s$ nachodzi na $x_s$), jeśli (i) indeks początkowy $x_s$ jest
nie większy niż indeks końcowy $x'_s$ oraz (ii) indeks końcowy $x_s$ jest nie
mniejszy niż indeks początkowy $x'_s$.
Niech $(s,X)$ będzie przykładem uczącym, w którym $X$ to zbiór
nienachodzących na siebie $x_s$.
Jako $e(s,P)$ oznacza się 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 ciągu $x''_s\neq x_s$, który nachodzi na
$x_s$, indeks początkowy $x''_s$ jest większy od indeksu początkowego $x_s$
albo $x''_s$ nie pasuje do żadnego $p\in P$.
Między innymi dla $s=\texttt{abcde}\textvisiblespace \texttt{a}$ i
$P=\{\texttt{a}, \texttt{bc}, \texttt{cde}, \texttt{de}\}$
$e(s,P)=\{a_0, a_6, bc_1\}$. Należy zwrócić uwagę, że $de_3 \notin e(s,P)$ i $cde_2 \notin e(s,P)$, ponieważ nie spełniają one kolejno warunków (ii) oraz (iii).
Mając dwa zbiory anotowanych 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
pokrycia (ang. \textit{recall}) na $E'$ oraz (ii) minimalizowana jest $\sum_{p\in
P}{l(p)}$, gdzie $l(p)$ to długość wyrażenia regularnego $p$.
Wtedy precyzja i pokrycie 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{Szczegóły algorytmu genetycznego}
Na wejściu do algorytmu genetycznego podawany jest zbiór treningowy $T$, a na
wyjściu otrzymuje się pojedyncze wyrażenie regularne $p$.
Zbiór treningowy $E$ składa się z trójki uporządkowanej $(s,X_d,X_u)=(s,X)$,
gdzie $X_d$ to zbiór pożądanych ciągów $x_s$ ekstrahowanych przez $p$, a
$X_u$ to zbiór niepożądanych ciągów $x_s$ ekstrahowanych przez $p$.
Nie istnieje żaden podłańcuch $x'_s$ ciągu $x_s \in
X_d$, który nachodzi na jakikolwiek 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 \newline
w $\bigcup_{(s,X_d,X_u)\in T}X_d$, np. dla $\texttt{\{pokój}_3, \texttt{ubierać}_{13}\}$
otrzymuje się
zakresy \newline \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 oznaczeń grup nieprzechwytujących \texttt{(?:$\bullet$)}.
\end{enumerate}
Wyrażenie regularne $p$ otrzymuje się przechodząc drzewo sposobem
\textit{post-order},\newline w którym pod znak $\bullet$ w wierzchołkach
niebędących
liściami podstawia się łańcuchy znaków zawarte w dzieciach tego wierzchołka.
\begin{figure}[tbh]
\centering
\includegraphics[width=0.7\hsize]{drzewo.png}
\caption{Reprezentacja wyrażenia regularnego \texttt{abc\{1,2\}+} za pomocą drzewa.}
\label{drzewo_pic}
\end{figure}
\subsubsection{Inicjalizacja populacji}
Jako $n_{pop}$ oznacza się rozmiar populacji wyrażeń regularnych $P$. Dla każdego $x_s\in \bigcup_{(s,X_d,X_u)\in T}X_d$ budowane są dwa osobniki
(osobnikiem jest 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ę oznaczeniami \texttt{\textbackslash d++} (lub
\texttt{\textbackslash w++}). W szczególności dla $x_s=\texttt{14\textvisiblespace lutego}$
otrzymujemy osobniki \texttt{\textbackslash d\textbackslash d\textvisiblespace
\textbackslash w\textbackslash w\textbackslash w\textbackslash w\textbackslash
w\textbackslash w} oraz
\texttt{\textbackslash d++\textvisiblespace \textbackslash w++}.
Jeśli liczba wygenerowanych osobników jest większa niż $n_{pop}$, to są one
losowo usuwane, natomiast jeśli liczba osobników jest mniejsza niż $n_{pop}$, to
brakujące osobniki są generowane metodą \textit{Ramped half-and-half} \cite{ramped}. Osobniki
niereprezentujące poprawnego wyrażenia regularnego są odrzucane, a w ich miejsce
generowane \newline są nowe.
\subsubsection{Funkcja przystosowania}
Dla każdego osobnika funkcję przystosowania defniuje się jako:
$$f(p):=(Prec(p,T), Acc(p,T), l(p))$$
Wprowadza się również dwie nowe operacje $\sqcap$ i $\ominus$, na których oparte są
funkcje $Prec$ i $Acc$.
Zakłada się, ż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 warunki
(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}
Między innymi dla $X_1=\{\texttt{Ja}_0, \texttt{ty}_4,
\texttt{Adam\textvisiblespace Małysz}_9\}$, $X_2=\{\texttt{Ja}_0,
\texttt{Małysz}_{14}\}$: \newline $X_1 \ominus X_2 = \{\texttt{ty}_4, \texttt{Adam\textvisiblespace}_{9}\}$,
$X_1 \sqcap X_2 = \{\texttt{Ja}_0,\texttt{Małysz}_{14}\}$.
\enlargethispage{4\baselineskip}
\bigskip
\noindent 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ą
pokrycia na znakach (ang. True Positive Character Rate skr. TPCR) i
specyficzności na znakach (ang. True Negative Character Rate skr. TNCR):
\begin{equation*}
\begin{split}
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||} \\[3pt]
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||} \\[3pt]
Acc(p,T) & :=\frac{TPCR(p,T) + TNCR(p,T)}{2}
\end{split}
\end{equation*}
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$, \newline potem
za pomocą $Acc$, a na końcu w przypadku identycznych
$Prec$ i $Acc$ brane jest pod uwagę $l(p)$.
\enlargethispage{4\baselineskip}
% \end{split}
% \end{equation*}
% \begin{equation*}
% \begin{split}
\textbf{Przykład}
\begin{equation*}
\begin{split}
s & = \texttt{70.\textvisiblespace Poprawny\textvisiblespace zapis\textvisiblespace dat\textvisiblespace to\textvisiblespace np.\textvisiblespace } \\
& \quad \; \texttt{10.04.2019,\textvisiblespace 1.03.2018\textvisiblespace (nie\textvisiblespace 01.03.2018).} \\
X_d & =\{\texttt{10.04.2019}_{30}, \texttt{1.03.2018}_{42}\} \\
X_u & = \{\texttt{70.\textvisiblespace Poprawny\textvisiblespace zapis\textvisiblespace dat\textvisiblespace to\textvisiblespace np.\textvisiblespace }_0, \texttt{\textvisiblespace (nie\textvisiblespace}_{52}, \;\texttt{).}_{67}\} \\
T & = \{(s, X_d, X_u)\} \\
p_1 & = \texttt{\textbackslash d\{2,2\}+.\textbackslash d\{2,2\}+.\textbackslash d\{4,4\}+.} \\
p_2 & = \texttt{\textbackslash d\{2,4\}+} \\
e(s, {p_1}) & = \{\texttt{10.04.2019}_{30}, \texttt{01.03.2018}_{57}\} \\
e(s, {p_2}) & = \{\texttt{70}_{0}, \texttt{10}_{30}, \texttt{04}_{33}, \texttt{2019}_{36}, \texttt{03}_{44}, \texttt{2018}_{47}, \texttt{01}_{57}, \texttt{03}_{60}, \texttt{2018}_{63}\} \\[3pt]
Prec(p_1, T) & = \frac{|\{\texttt{10.04.2019}_{30}\}|}{|\{\texttt{10.04.2019}_{30}\}|} =\frac{1}{1} = 1 \\[3pt]
Prec(p_2, T) & = \frac{|\emptyset|}{|\{\texttt{70}_{0}, \texttt{10}_{30}, \texttt{04}_{33}, \texttt{2019}_{36}, \texttt{03}_{44}, \texttt{2018}_{47}\}|} = \frac{0}{6} = 0 \\[4pt]
TPCR(p_1, T) & = \frac{||\{\texttt{10.04.2019}_{30}\}||}{||\{\texttt{10.04.2019}_{30}, \texttt{1.03.2018}_{42}\}||} = \frac{10}{19} \\[4pt]
TPCR(p_2, T) & = \frac{||\{\texttt{10}_{26}, \texttt{04}_{29}, \texttt{2019}_{32}, \texttt{03}_{40}, \texttt{2018}_{43}\}||}{||\{\texttt{10.04.2019}_{30}, \texttt{1.03.2018}_{42}\}||} = \frac{14}{19} \\[4pt]
TNCR(p_1, T) & = \frac{||\{\texttt{70.\textvisiblespace Poprawny\textvisiblespace zapis\textvisiblespace dat\textvisiblespace to\textvisiblespace np.\textvisiblespace }_0, \texttt{\textvisiblespace (nie\textvisiblespace}_{51}, \;\texttt{).}_{67}\}||}{||\{\texttt{70.\textvisiblespace Poprawny\textvisiblespace zapis\textvisiblespace dat\textvisiblespace to\textvisiblespace np.\textvisiblespace }_0, \texttt{\textvisiblespace (nie\textvisiblespace}_{51}, \;\texttt{).}_{67}\}||} = \frac{38}{38} = 1\\[4pt]
TNCR(p_2, T) & = \frac{||\{\texttt{.\textvisiblespace Poprawny\textvisiblespace zapis\textvisiblespace dat\textvisiblespace to\textvisiblespace np.\textvisiblespace }_2, \texttt{\textvisiblespace (nie\textvisiblespace}_{51}, \;\texttt{).}_{67}\}||}{||\{\texttt{70.\textvisiblespace Poprawny\textvisiblespace zapis\textvisiblespace dat\textvisiblespace to\textvisiblespace np.\textvisiblespace }_0, \texttt{\textvisiblespace (nie\textvisiblespace}_{51}, \;\texttt{).}_{67}\}||} = \frac{36}{38}\\[4pt]
f(p_1) & = \bigg(1, 0.76=\frac{1}{2}\Big(\frac{10}{19} + 1\Big), 20 \bigg)\\
f(p_2) & = \bigg(0, 0.84=\frac{1}{2}\Big(\frac{14}{19} + \frac{36}{38}, \Big), 24\bigg)
\end{split}
\end{equation*}
Zgodnie z wprowadzoną funkcją oceny osobnik $p_1$ jest lepiej
przystosowany niż osobnik $p_2$.
\subsubsection{Ewolucja populacji}
Populacja $P$ o liczności $n_{pop}$ ewoluuje następująco. W każdej epoce $0.1n$ osobników
generowanych jest losowo za pomocą metody
\textit{Ramped half-and-half} \cite{ramped}, kolejne $0.1n$ osobników powstaje za pomocą mutacji, a
pozostałe $0.8n$ otrzymuje \newline się metodą krzyżowania.
Z populacji P i zbioru nowo
wygenerowanych osobników wybierane jest $n$ najlepiej przystosowanych osobników,
które tworzą nową populację. Osobniki wybierane są do mutacji i krzyżowania
metodą turnieju (losowanie z $P$ siedmiu osobników i wyłonienie najlepszego).
Pondato wymusza się także różnorodność między fenotypami osobników, tzn. jeśli oba
osobniki mają identyczny łańcuch znaków to w populacji zostawia się tylko jednego
z nich. Koniec iteracji następuje, gdy zostanie osiągnięty z góry ustalony limit
iteracji lub
najlepiej przystosowany osobnik nie zmieni się od określonej liczby epok.
Finalne wyrażenie regularne $p$ to najlepiej przystosowany osobnik po
zakończeniu wszystkich iteracji.
\subsubsection{Zastosowanie metody „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.
\enlargethispage{2\baselineskip}
Oby uniknąć przetrenowania, czyli bardzo wysokiego \textit{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|$.
\noindent Procedura generowania zbioru wyrażeń regularnych $P$ prezentuje się następująco.
Zacznij z $P=\emptyset$ i z $T$ utworzonym w taki sposób, że dla
każdego $(s,X)\in E_{train}$, 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 wyrażenie regularne $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ć
dużo różnych zbiorów $P$, z których na końcu wybierany jest ten o najwyższej
 średniej harmonicznej z precyzji i pokrycia na $E=E_{train} \cup E_{validation}$.
%\section{Sieci neuronowe}
\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*{Streszczenie}
TODO
\textbf{Słowa kluczowe:} ekstrakcja informacji\chapter*{Abstract}
todo
\textbf{Key words:} information extraction\markboth{Wstęp}{Wstęp}
\addcontentsline{toc}{chapter}{Wstęp}
@ARTICLE{Bootstrap,
author = {Daniel Waegel},
title = {A Survey of Bootstrapping Techniques in Natural Language Processing},
journal = {Department of Computer Science,
University of Delaware, Literature Survey Reports},
year = {2013}
}
@ARTICLE{Hearst,
author = {Marti Hearst },
title = {Automatic Acquisition of Hyponyms from Large Text Corpora.},
journal = {Proc. of the
Fourteenth International Conference on Computational Linguistics, Nantes, France.},
year = {1992}
}
@inproceedings{genetic,
title={Learning text patterns using separate-and-conquer genetic programming},
author={Bartoli, Alberto and De Lorenzo, Andrea and Medvet, Eric and Tarlao, Fabiano},
booktitle={European Conference on Genetic Programming},
pages={16--27},
year={2015},
organization={Springer}
}
@article{ramped,
title={Genetic programming as a means for programming computers by natural selection},
author={Koza, John R},
journal={Statistics and computing},
volume={4},
number={2},
pages={87--112},
year={1994},
publisher={Springer}
}

View File

@ -1,3 +1,11 @@
@ARTICLE{Bootstrap,
author = {Daniel Waegel},
title = {A Survey of Bootstrapping Techniques in Natural Language Processing},
journal = {Department of Computer Science,
University of Delaware, Literature Survey Reports},
year = {2013}
}
@ARTICLE{Hearst, @ARTICLE{Hearst,
author = {Marti Hearst }, author = {Marti Hearst },
title = {Automatic Acquisition of Hyponyms from Large Text Corpora.}, title = {Automatic Acquisition of Hyponyms from Large Text Corpora.},
@ -7,10 +15,22 @@ Fourteenth International Conference on Computational Linguistics, Nantes, France
} }
@ARTICLE{Bootstrap, @inproceedings{genetic,
author = {Daniel Waegel}, title={Learning text patterns using separate-and-conquer genetic programming},
title = {A Survey of Bootstrapping Techniques in Natural Language Processing}, author={Bartoli, Alberto and De Lorenzo, Andrea and Medvet, Eric and Tarlao, Fabiano},
journal = {Department of Computer Science, booktitle={European Conference on Genetic Programming},
University of Delaware, Literature Survey Reports}, pages={16--27},
year = {2013} year={2015},
organization={Springer}
} }
@article{ramped,
title={Genetic programming as a means for programming computers by natural selection},
author={Koza, John R},
journal={Statistics and computing},
volume={4},
number={2},
pages={87--112},
year={1994},
publisher={Springer}
}

66
master.tex Normal file
View File

@ -0,0 +1,66 @@
\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,3 +1 @@
\chapter{Podstawowe pojęcia} \chapter{Podstawowe pojęcia}
\chapter{stub}

View File

@ -2,132 +2,150 @@
% w kontekście mojego projektu % w kontekście mojego projektu
W tym rozdziale zaprezentowane są wybrane metody, W tym rozdziale zaprezentowane są wybrane metody,
które brane były pod uwagę lub zostały zastosowane które brane były pod uwagę lub zostały zastosowane
w końcowym systemie ekstrakcji informacji o godzinach rozpoczęcia mszy świętych. w opisywanym tutaj systemie ekstrakcji informacji o godzinach rozpoczęcia mszy świętych.
\section {Algorytmy \textit{bootstraping}} \section {Algorytmy \textit{bootstraping}}
Niech $J$ to będzie dowolna reprezentacja języka (wyraz, fraza, wyrażenie Niech $J$ będzie dowolną reprezentacją języka (wyraz, fraza, wyrażenie
regularne itp.) regularne itp.).
W dziedzinie przetwarzania języka naturalnego \textit{bootstraping} to technika W dziedzinie przetwarzania języka naturalnego \textit{bootstraping} to technika
wyszukiwania niezanotowanych $J$ przy użyciu małego zbioru specjalnie wyszukiwania niezanotowanych (nieprzypisanych do badanej klasy) $J$ przy użyciu małego zbioru specjalnie
wyselekcjonowanych $J$. wyselekcjonowanych zanotowanych $J$.
Implementacji algorytmu \textit{bootstraping} jest wiele; wszystkie jednak Implementacji algorytmu \textit{bootstraping} jest wiele, wszystkie jednak
oparte są na następującym schemacie \cite{Bootstrap}: oparte są na następującym schemacie \cite{Bootstrap}:
\enlargethispage{4\baselineskip}
\begin{enumerate} \begin{enumerate}
\item Stwórz pustą listę $J$. % pusta lista $J$, pusta lista wyrazów, pusta \item Stwórz pustą listę reprezentacji języka $J$. % pusta lista $J$, pusta lista wyrazów, pusta
% lista fraz % lista fraz
\item Zainicjalizuj listę starannie dobranymi $J$. \item Zainicjalizuj listę starannie dobranymi $J$.
\item Wykorzystaj elementy listy do znalezienia nowych $J$ z korpusu treningowego. \item Wykorzystaj elementy listy do znalezienia nowych $J$ z korpusu treningowego.
\item Oceń nowe $J$; najlepsze $J$ dodaj do listy. \item Oceń nowe $J$; najlepsze $J$ dodaj do listy.
\item Wróć do 3. i powtarzaj aż do osiągnięcia z góry określonej liczby iteracji lub \item Wróć do 3. i powtarzaj aż do osiągnięcia z góry określonej liczby iteracji
\newline lub
spełnienia innego warunku stopu. spełnienia innego warunku stopu.
\end{enumerate} \end{enumerate}
\textit{Bootstraping} jest szczególnie przydatny w przypadku, gdy mamy mały % \textit{Bootstraping} jest szczególnie przydatny w przypadku, gdy mamy mały
zbiór treningowy, ponieważ z jego pomocą jesteśmy w stanie powiększyć zbiór % zbiór treningowy, ponieważ z jego pomocą jesteśmy w stanie powiększyć zbiór
treningowy. %todo poprawić % treningowy. %todo poprawić
\subsection{Wzorce Hearst} \subsection{Wzorce Hearst}
Jedną z pierwszych implementacji algorytmu \textit{bootstraping} w dziedzinie Jednymi z pierwszych implementacji algorytmu \textit{bootstraping} w dziedzinie
ekstrakcji informacji ekstrakcji informacji
są wzorce Hearst \textit{(ang. Hearst patterns)} \cite{Hearst}. są wzorce Hearst \textit{(ang. Hearst patterns)} \cite{Hearst}.
\smallskip \smallskip
\noindent Znajdowanie nowych wzorców za pomocą wzorców Hearst można przedstawić \noindent Znajdowanie nowych przykładów uczących za pomocą wzorców Hearst przedstawia się
następująco: następująco:
\begin{enumerate} \begin{enumerate}
\item Wybierz relację leksykalną $R$. \item Wybierz relację leksykalną $R$.
\item Zbierz zbiór $S$ par $(x, y)\in R$, gdzie $x$ i $y$ to słowa lub frazy. \item Utwórz początkowy zbiór $S$ par $(x, y)\in R$, gdzie $x$ i $y$ to słowa lub frazy.
\item Znajdź zdania, które zawierają pary ze zbioru $S$. \item Znajdź zdania, które zawierają pary ze zbioru $S$.
\item Przyjrzyj się kontekstowi w jakim występują te pary. Załóż, że często powtarzające się wzorce reprezentują relację R. \item Przyjrzyj się kontekstowi, w jakim występują te pary. Załóż, że często powtarzające się wzorce reprezentują relację R.
\item Wykorzystaj nowo odkryte wzorce do znalezienia nowych par słów lub fraz będących w relacji $R$. \item Wykorzystaj nowo odkryte wzorce do znalezienia kolejnych par $(x, y)\in R$.
\item Dodaj nowo znalezione pary słów lub fraz do zbioru $S$, wróć do 3. i powtarzaj aż do osiągnięcia z góry określonej liczby iteracji. \item Dodaj nowo znalezione pary do zbioru $S$, wróć do 3. i powtarzaj aż do osiągnięcia z góry określonej liczby iteracji.
\end{enumerate} \end{enumerate}
\enlargethispage{6\baselineskip} \enlargethispage{4\baselineskip}
\subsubsection{Przykład} \subsubsection{Przykład}
Rozważmy relację R taką, że $(x, y) \in R$ wtedy, gdy $x$ został pochowany w Rozważmy relację R taką, że $(x, y) \in R$ wtedy, gdy $x$ został pochowany w
$y$. $y$.
Załóżmy, że zaczynamy z parą \texttt{('Józef Piłsudski', 'Kraków')}$\in R$. Załóżmy, że zaczynamy z parą \texttt{('Józef Piłsudski', 'Kraków')}$\in R$.
W korpusie treningowym szukamy zdań zawierających w sobie parę \texttt{('Józef Piłsudski', 'Kraków')} i otrzymujemy: W korpusie treningowym szukamy zdań zawierających w sobie parę \texttt{('Józef
Piłsudski', 'Kraków')} i otrzymujemy zdania takie jak:
\centerline{„Józef Piłsudski został pochowany w Krakowie.”} \centerline{„Józef Piłsudski został pochowany w Krakowie.”}
\centerline{„Miejsce pochówku Józefa Piłsudskiego to Kraków.”} \centerline{„Miejsce pochówku Józefa Piłsudskiego to Kraków.”}
\centerline{„Grób Józefa Piłsudskiego znajduje się w Krakowie.”} \centerline{„Grób Józefa Piłsudskiego znajduje się w Krakowie.”}
Ze znalezionych zdań tworzymy następujące wzorce: \noindent Ze znalezionych zdań tworzymy następujące wzorce:
\centerline{$x$ został pochowany w $y$.} \centerline{$x$ został pochowany w $y$.}
\centerline{Miejsce pochówku $x$ to $y$.} \centerline{Miejsce pochówku $x$ to $y$.}
\centerline{Grób $x$ znajduje się w $y$.} \centerline{Grób $x$ znajduje się w $y$.}
Wykorzystujemy powyższe wzorce do znalezienia nowych par będących w relacji $R$ \noindent Wykorzystujemy powyższe wzorce do znalezienia nowych par będących w relacji $R$, przykładowo:
i otrzymujemy: % i otrzymujemy:
\centerline{\texttt{('Władysław Araszkiewicz', 'Warszawa')}} \centerline{\texttt{('Witold Doroszweski, 'Warszawa')}}
\centerline{\texttt{('Władysław Kuczewski', 'Częstochowa')}} \centerline{\texttt{('Jana Długosz', 'Zakopane')}}
Następnie nowe pary używamy do znalezienia nowych wzorców, a potem nowe \noindent Następnie szukamy zdań w których występują powyższe pary, na przykład:
wzorce do wyszukania kolejnych par i powtarzamy powyższy
algorytm aż do osiągnięcia określonej liczby iteracji. \centerline{„Witold Doroszewski spoczywa w Warszawie.”}
\centerline{„Na cmentarzu w Zakopanem mieści
się grób Jana Długosza.”}
\noindent Z nowo otrzymanych zdań tworzymy poniższe wzorce:
\centerline{$x$ spoczywa w $y$.}
\centerline{Na cmentarzu w $y$ mieści się grób $x$.}
\noindent Powtarzamy powyższy algorytm aż do osiągnięcia określonej liczby iteracji.
% \subsection{Miejsce na opis bardziej skomplikowanej metody implementującej
% algorytm \textit{bootstraping}}
\section{Automatyczne generowanie wyrażeń regularnych za pomocą algorytmów genetycznych}
\subsection{Miejsce na opis bardziej skomplikowanej metoda implementującej W 2015 roku Bartoli i in. zaprezentowali efektywny algorytm genetyczny do generowania
algorytm \textit{bootstraping}} wzorców zapisanch w
postaci wyrażeń regularnych przy użyciu niewielkiego zbioru zanotowanych
\section{Dziel i zwyciężaj algorytmami genetycznymi} przykładów (fraz oznaczonych jako pasujące do wyrażeń regularnych) \cite{genetic}. Nowością było zastosowanie metody „dziel i zwyciężaj”.
W 2015 Bartoli i in. zaprezentowali efektywny algorytm genetyczny do generowania wzorców w Zamiast uczyć się jednego wyrażenia regularnego, które znajdowałoby wszystkie
postaci wyrażeń regularnych przy użyciu niewielkiego zbioru zanotowanych przykładów. przykłady, system uczy się wielu różnych wzorców, które dopiero po połączeniu
Problem generowania automatycznych wyrażeń regularnych jest ciężki. Warto zauważyć, że alternatywą tworzą
bardzo łatwo wytrenować na zbiorze treningowym system, który znajdzie wzorzec o bardzo wysokiej precyzji i niskiej ostateczne wyrażenie regularne.
czułości (np. wystarczy alternatywa po wszystkich zanotowanych przykładach), ale szczególnie trudno wytrenować system tak, aby generalizował się na przypadki poza % Problem automatycznego generowania wyrażeń regularnych jest złożony. 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, której składnikami są wszystkie zanotowane przykłady), ale szczególnie trudno wytrenować system tak, aby generalizował się na przypadki poza % zbiorem treningowym (innymi słowy taki system łatwo przetrenować). %(otrzymali wyniki bardzo zadowalające wyniki ) tabela wyników
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} \subsection{Opis problemu}
Niech $x_s$ będzie spójnym podciągiem ciągu znaków $s$ reprezentowanym przez Niech $x_s$ będzie spójnym podciągiem ciągu znaków $s$ reprezentowanym przez
indeks początkowy i końcowy w $s$. indeks początkowy i końcowy w $s$. Dla ułatwienia, w przykładach $x_s$ będziemy
$x_s$ nazywa się nadłańcuchem $x'_s$ (a $x'_s$ jest podłańcuchem $x_s$) reprezentować przez zawartość i indeks początkowy.
\enlargethispage{1\baselineskip}
Na przykład $x_s=\texttt{ku}_0$, $x'_s=\texttt{ku}_2$, $x''_s=\texttt{kuku}_0$, $x'''_s=\texttt{łka}_4$ to spójne podciągi ciągu znaków $s=\texttt{kukułka}$.
$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 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$ nie mniejszy niż indeks początkowy $x_s$ oraz (iii) indeks końcowy $x'_s$
jest mniejszy lub równy niż indeks końcowy $x_s$. jest nie większy niż indeks końcowy $x_s$. Na przykład $\texttt{ku}_0$
jest podłańcuchem $\texttt{kuku}_0$.
Mówi się, że $x_s$ nachodzi na $x'_s$ (lub $x'_s$ nachodzi na $x_s$), jeśli (i) indeks początkowy $x_s$ jest
nie większy niż indeks końcowy $x'_s$ oraz (ii) indeks końcowy $x_s$ jest nie
mniejszy niż indeks początkowy $x'_s$.
Niech $(s,X)$ to przykład uczący, w którym $X$ to zbiór Niech $(s,X)$ będzie przykładem uczącym, w którym $X$ to zbiór
nienachodzących na siebie $x_s$. nienachodzących na siebie $x_s$.
Niech $e(s,P)$ to zbiór wszystkich ciągów $x_s$ Jako $e(s,P)$ oznacza się zbiór wszystkich ciągów $x_s$
wyekstrahowanych poprzez zbiór wyrażeń regularnych $P$, taki że (i) wyekstrahowanych poprzez zbiór wyrażeń regularnych $P$, taki że (i)
$x_s$ $x_s$
pasuje do jakiegokolwiek wyrażenia regularnego $p\in P$, (ii) każdy nadłańcuch 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$ $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 oraz (iii) dla każdego ciągu $x''_s\neq x_s$, który nachodzi na
$x_s$, indeks początkowy $x''_s$ albo jest większy od indeksu początkowego $x_s$ $x_s$, indeks początkowy $x''_s$ jest większy od indeksu początkowego $x_s$
albo $x''_s$ nie pasuje do żadnego $p\in P$. albo $x''_s$ nie pasuje do żadnego $p\in P$.
Między innymi dla $s=\texttt{abcde}\textvisiblespace \texttt{a}$ i
$P=\{\texttt{a}, \texttt{bc}, \texttt{cde}, \texttt{de}\}$
$e(s,P)=\{a_0, a_6, bc_1\}$. Należy zwrócić uwagę, że $de_3 \notin e(s,P)$ i $cde_2 \notin e(s,P)$, ponieważ nie spełniają one kolejno warunków (ii) oraz (iii).
Mając dwa zbiory zanotowanych przykładów $(E, E')$ zbiór wyrażeń Mając dwa zbiory anotowanych przykładów $(E, E')$, zbiór wyrażeń
regularnych $P$ generowany jest używając 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 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 pokrycia (ang. \textit{recall}) na $E'$ oraz (ii) minimalizowana jest $\sum_{p\in
P}{l(p)}$, gdzie $l(p)$ to długość wyrażenie regularnego $p$. P}{l(p)}$, gdzie $l(p)$ to długość wyrażenia regularnego $p$.
Wtedy precyzja i czułość definiowane są w następujący sposób: Wtedy precyzja i pokrycie 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)|}}$$ $$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|}}$$ $$Rec(P, E'):=\frac{\sum_{(s,X)\in E'}{|e(s,P) \cup X|}}{\sum_{(s,X)\in E'}{|X|}}$$
\subsection{Algorytm} \subsection{Szczegóły algorytmu genetycznego}
\subsubsection{Algorytm genetyczny} Na wejściu do algorytmu genetycznego podawany jest zbiór treningowy $T$, a na
Na wejściu podawany jest zbiór treningowy $T$, a na wyjściu pojedyńcze wyrażenie regularne $p$. wyjściu otrzymuje się pojedyncze wyrażenie regularne $p$.
Zbiór treningowy $E$ składa się z trójki uporządkowanej $(s,X)=(s,X_d,X_u)$, Zbiór treningowy $E$ składa się z trójki uporządkowanej $(s,X_d,X_u)=(s,X)$,
gdzie $X_d$ to zbiór ciągów $x_s$ ekstrahowanych przez $p$, a gdzie $X_d$ to zbiór pożądanych 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 $X_u$ to zbiór niepożądanych ciągów $x_s$ ekstrahowanych przez $p$.
ż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$. Nie istnieje żaden podłańcuch $x'_s$ ciągu $x_s \in
X_d$, który nachodzi na jakikolwiek podłańcuch $x'''_s$ ciągu $x''_s \in X_u$.
Wyrażenie regularne reprezentowane jest za pomocą drzewa. Liście składają Wyrażenie regularne reprezentowane jest za pomocą drzewa. Liście składają
się z: się z:
@ -135,10 +153,10 @@ się z:
\item zakresów znaków np. \texttt{a-ż}, \texttt{A-Ż} i \texttt{0-9}, \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 klas znaków \texttt{\textbackslash w} i \texttt{\textbackslash d},
\item cyfr od 0 do 9, \item cyfr od 0 do 9,
\item częściowych zakresów, czyli największego zakresu znaków występującego \item częściowych zakresów, czyli największego zakresu znaków występującego \newline
w $\bigcup_{(s,X_d,X_u)\in T}X_d$, np. dla \texttt{\{pokój, ubierać\}} w $\bigcup_{(s,X_d,X_u)\in T}X_d$, np. dla $\texttt{\{pokój}_3, \texttt{ubierać}_{13}\}$
otrzymuje się otrzymuje się
zakresy \texttt{a-b}, \texttt{j-k} i \texttt{o-r} (przy założeniu, że zakresy \newline \texttt{j-k} i \texttt{o-r} (przy założeniu, że
korzysta się z polskiego alfabetu), korzysta się z polskiego alfabetu),
\item znaków specjalnych takich jak np. \texttt{\textbackslash ., :, @}. \item znaków specjalnych takich jak np. \texttt{\textbackslash ., :, @}.
\end{enumerate} \end{enumerate}
@ -149,96 +167,156 @@ Wierzchołki nie będące liściami składają się z:
\item kwantyfikatorów bez nawrotów (ang. possessive quantifiers) $\bullet \item kwantyfikatorów bez nawrotów (ang. possessive quantifiers) $\bullet
\ast$\texttt{+}, $\bullet$\texttt{++}, $\bullet$\texttt{?+ } oraz $ \bullet \ast$\texttt{+}, $\bullet$\texttt{++}, $\bullet$\texttt{?+ } oraz $ \bullet
\{ \bullet, \bullet \}$\texttt{+}, \{ \bullet, \bullet \}$\texttt{+},
\item nie łapiących grup \texttt{(?:$\bullet$)}. \item oznaczeń grup nieprzechwytujących \texttt{(?:$\bullet$)}.
\end{enumerate} \end{enumerate}
Wyrażenie regularne $p$ otrzymuje się przechodząc drzewo sposobem post-order,\newline w którym pod $\bullet$ w wierzchołkach Wyrażenie regularne $p$ otrzymuje się przechodząc drzewo sposobem
\textit{post-order},\newline w którym pod znak $\bullet$ w wierzchołkach
niebędących niebędących
liściami podstawia się łańcuchy znaków zawarte w dzieciach tego wierzchołka. liściami podstawia się łańcuchy znaków zawarte w dzieciach tego wierzchołka.
\begin{figure}[tbh]
\centering
\includegraphics[width=0.7\hsize]{drzewo.png}
\caption{Reprezentacja wyrażenia regularnego \texttt{abc\{1,2\}+} za pomocą drzewa.}
\label{drzewo_pic}
\end{figure}
\subsubsection{Inicjalizacja populacji} \subsubsection{Inicjalizacja populacji}
Dla każdego $x_s\in \bigcup_{(s,X_d,X_u)\in T}X_d$ budowane są dwa osobniki Jako $n_{pop}$ oznacza się rozmiar populacji wyrażeń regularnych $P$. 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 (osobnikiem jest 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 jest na \texttt{\textbackslash d} oraz każda litera zamienia jest na
\texttt{\textbackslash w}. Drugi osobnik tworzony jest identycznie jak pierwszy \texttt{\textbackslash w}. Drugi osobnik tworzony jest identycznie jak pierwszy
z tą różnicą, że wielkrotne wystąpienia \texttt{\textbackslash d} (lub 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}) zastępuje się oznaczeniami \texttt{\textbackslash d++} (lub
\texttt{\textbackslash w++}). %\marginpar{przykład} \texttt{\textbackslash w++}). W szczególności dla $x_s=\texttt{14\textvisiblespace lutego}$
otrzymujemy osobniki \texttt{\textbackslash d\textbackslash d\textvisiblespace
\textbackslash w\textbackslash w\textbackslash w\textbackslash w\textbackslash
w\textbackslash w} oraz
\texttt{\textbackslash d++\textvisiblespace \textbackslash w++}.
Jeśli liczba wygenerowanych osobników jest większa niż $n_{pop}$, to są one
losowo usuwane, natomiast jeśli liczba osobników jest mniejsza niż $n_{pop}$, to
brakujące osobniki są generowane metodą \textit{Ramped half-and-half} \cite{ramped}. Osobniki
niereprezentujące poprawnego wyrażenia regularnego są odrzucane, a w ich miejsce
generowane \newline są nowe.
\subsubsection{Funkcja przystosowania} \subsubsection{Funkcja przystosowania}
Dla każdego osobnika funkcję przystosowania zdefiniowano jako Dla każdego osobnika funkcję przystosowania defniuje się jako:
$$f(p):=(Prec(p,T), Acc(p,T), l(p))$$ $$f(p):=(Prec(p,T), Acc(p,T), l(p))$$
Wprowadzono również dwie nowe operacje $\sqcap$ i $\ominus$, na których oparte są Wprowadza się również dwie nowe operacje $\sqcap$ i $\ominus$, na których oparte są
funkcje $Prec$ i $Acc$. 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$. Zakłada się, że $X_1$ i $X_2$ to zbiory spójnych podciągów tego samego łańcucha znaków $s$.
Wtedy: Wtedy:
\begin{itemize} \begin{itemize}
\item $X_1 \ominus X_2$ jest zbiorem takich $x_s$, że \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 (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 nachodzą na żaden z elementów $X_2$ oraz (iii) nie mają nadłańcucha, który
spełnia warunki
(i), (ii); (i), (ii);
\item $X_1 \sqcap X_2$ jest zbiorem takich $x_s$, że (i) są one \item $X_1 \sqcap X_2$ jest zbiorem takich $x_s$, że (i) są one
spójnym podciągiem jakiekolwiek elementu $X_1$ i 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). jakiekolwiek elementu $X_2$ oraz (ii) nie mają nadłańcucha, który spełnia (i).
\end{itemize} \end{itemize}
W końcu $$Prec(p,T):=\frac{\sum_{(s,X_d,X_u)\in T}|e(s,\{p\})\cap Między innymi dla $X_1=\{\texttt{Ja}_0, \texttt{ty}_4,
\texttt{Adam\textvisiblespace Małysz}_9\}$, $X_2=\{\texttt{Ja}_0,
\texttt{Małysz}_{14}\}$: \newline $X_1 \ominus X_2 = \{\texttt{ty}_4, \texttt{Adam\textvisiblespace}_{9}\}$,
$X_1 \sqcap X_2 = \{\texttt{Ja}_0,\texttt{Małysz}_{14}\}$.
\enlargethispage{4\baselineskip}
\bigskip
\noindent 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)|}$$ 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ą 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 pokrycia na znakach (ang. True Positive Character Rate skr. TPCR) i
specyficzności na znakach (ang. True Negative Character Rate skr. TNCR): 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||}$$ \begin{equation*}
$$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||}$$ \begin{split}
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||} \\[3pt]
$$Acc(p,T)=\frac{TPCR(p,T) + TNCR(p,T)}{2},$$ 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||} \\[3pt]
Acc(p,T) & :=\frac{TPCR(p,T) + TNCR(p,T)}{2}
\end{split}
\end{equation*}
gdzie $||X|| = \sum_{x_s\in X}l(x_s)$, a $l(x_s)$ oznacza długość ciągu $x_s$. 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 Osobniki porównywane są w pierwszej kolejności na podstawie $Prec$, \newline potem
\newline w za pomocą $Acc$, a na końcu w przypadku identycznych
przypadku remisu za pomocą $Acc$, a w przypadku identycznych
$Prec$ i $Acc$ brane jest pod uwagę $l(p)$. $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 \enlargethispage{4\baselineskip}
% \end{split}
% \end{equation*}
% \begin{equation*}
% \begin{split}
\textbf{Przykład}
\begin{equation*}
\begin{split}
s & = \texttt{70.\textvisiblespace Poprawny\textvisiblespace zapis\textvisiblespace dat\textvisiblespace to\textvisiblespace np.\textvisiblespace } \\
& \quad \; \texttt{10.04.2019,\textvisiblespace 1.03.2018\textvisiblespace (nie\textvisiblespace 01.03.2018).} \\
X_d & =\{\texttt{10.04.2019}_{30}, \texttt{1.03.2018}_{42}\} \\
X_u & = \{\texttt{70.\textvisiblespace Poprawny\textvisiblespace zapis\textvisiblespace dat\textvisiblespace to\textvisiblespace np.\textvisiblespace }_0, \texttt{\textvisiblespace (nie\textvisiblespace}_{52}, \;\texttt{).}_{67}\} \\
T & = \{(s, X_d, X_u)\} \\
p_1 & = \texttt{\textbackslash d\{2,2\}+.\textbackslash d\{2,2\}+.\textbackslash d\{4,4\}+.} \\
p_2 & = \texttt{\textbackslash d\{2,4\}+} \\
e(s, {p_1}) & = \{\texttt{10.04.2019}_{30}, \texttt{01.03.2018}_{57}\} \\
e(s, {p_2}) & = \{\texttt{70}_{0}, \texttt{10}_{30}, \texttt{04}_{33}, \texttt{2019}_{36}, \texttt{03}_{44}, \texttt{2018}_{47}, \texttt{01}_{57}, \texttt{03}_{60}, \texttt{2018}_{63}\} \\[3pt]
Prec(p_1, T) & = \frac{|\{\texttt{10.04.2019}_{30}\}|}{|\{\texttt{10.04.2019}_{30}\}|} =\frac{1}{1} = 1 \\[3pt]
Prec(p_2, T) & = \frac{|\emptyset|}{|\{\texttt{70}_{0}, \texttt{10}_{30}, \texttt{04}_{33}, \texttt{2019}_{36}, \texttt{03}_{44}, \texttt{2018}_{47}\}|} = \frac{0}{6} = 0 \\[4pt]
TPCR(p_1, T) & = \frac{||\{\texttt{10.04.2019}_{30}\}||}{||\{\texttt{10.04.2019}_{30}, \texttt{1.03.2018}_{42}\}||} = \frac{10}{19} \\[4pt]
TPCR(p_2, T) & = \frac{||\{\texttt{10}_{26}, \texttt{04}_{29}, \texttt{2019}_{32}, \texttt{03}_{40}, \texttt{2018}_{43}\}||}{||\{\texttt{10.04.2019}_{30}, \texttt{1.03.2018}_{42}\}||} = \frac{14}{19} \\[4pt]
TNCR(p_1, T) & = \frac{||\{\texttt{70.\textvisiblespace Poprawny\textvisiblespace zapis\textvisiblespace dat\textvisiblespace to\textvisiblespace np.\textvisiblespace }_0, \texttt{\textvisiblespace (nie\textvisiblespace}_{51}, \;\texttt{).}_{67}\}||}{||\{\texttt{70.\textvisiblespace Poprawny\textvisiblespace zapis\textvisiblespace dat\textvisiblespace to\textvisiblespace np.\textvisiblespace }_0, \texttt{\textvisiblespace (nie\textvisiblespace}_{51}, \;\texttt{).}_{67}\}||} = \frac{38}{38} = 1\\[4pt]
TNCR(p_2, T) & = \frac{||\{\texttt{.\textvisiblespace Poprawny\textvisiblespace zapis\textvisiblespace dat\textvisiblespace to\textvisiblespace np.\textvisiblespace }_2, \texttt{\textvisiblespace (nie\textvisiblespace}_{51}, \;\texttt{).}_{67}\}||}{||\{\texttt{70.\textvisiblespace Poprawny\textvisiblespace zapis\textvisiblespace dat\textvisiblespace to\textvisiblespace np.\textvisiblespace }_0, \texttt{\textvisiblespace (nie\textvisiblespace}_{51}, \;\texttt{).}_{67}\}||} = \frac{36}{38}\\[4pt]
f(p_1) & = \bigg(1, 0.76=\frac{1}{2}\Big(\frac{10}{19} + 1\Big), 20 \bigg)\\
f(p_2) & = \bigg(0, 0.84=\frac{1}{2}\Big(\frac{14}{19} + \frac{36}{38}, \Big), 24\bigg)
\end{split}
\end{equation*}
Zgodnie z wprowadzoną funkcją oceny osobnik $p_1$ jest lepiej
przystosowany niż osobnik $p_2$.
\subsubsection{Ewolucja populacji}
Populacja $P$ o liczności $n_{pop}$ ewoluuje następująco. W każdej epoce $0.1n$ osobników
generowanych jest losowo za pomocą metody generowanych jest losowo za pomocą metody
Ramped half-and-half, kolejne $0.1n$ osobników powstaje za pomocą mutacji, a \textit{Ramped half-and-half} \cite{ramped}, kolejne $0.1n$ osobników powstaje za pomocą mutacji, a
pozostałe $0.8n$ otrzymano z pozostałe $0.8n$ otrzymuje \newline się metodą krzyżowania.
populacji i zbioru nowo Z populacji P i zbioru nowo
wygenerowanych osobników wybierane jest $n$ najlepiej przystosowanych osobników, 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 które tworzą nową populację. Osobniki wybierane są do mutacji i krzyżowania
pomocą turnieju (losowanie z $P$ siedmiu osobników i zostawienie najlepszego). metodą turnieju (losowanie z $P$ siedmiu osobników i wyłonienie najlepszego).
Wymuszono również różnorodność między fenotypami osobników tzn. jeśli oba Pondato wymusza się także różnorodność między fenotypami osobników, tzn. jeśli oba
osobniki mają identyczny łańcuch znaków to w populacji zostawiono tylko jednego osobniki mają identyczny łańcuch znaków to w populacji zostawia się tylko jednego
z nich. Koniec iteracji następuje, gdy zostanie osiągnięty \newline z góry ustalony limit generacji lub z nich. Koniec iteracji następuje, gdy zostanie osiągnięty z góry ustalony limit
najlepiej przystosowany osobnik nie zmieni się od określonej liczby iteracji. iteracji lub
najlepiej przystosowany osobnik nie zmieni się od określonej liczby epok.
Finalne wyrażenie regularne $p$ to najlepiej przystosowany osobnik po Finalne wyrażenie regularne $p$ to najlepiej przystosowany osobnik po
zakończeniu wszystkich iteracji. zakończeniu wszystkich iteracji.
\subsubsection{Dziel i zwyciężaj} \subsubsection{Zastosowanie metody „dziel i zwyciężaj”}
Zbiór wyrażeń regularnych $P$ generowany jest za pomocą strategii dziel i Zbiór wyrażeń regularnych $P$ generowany jest za pomocą strategii dziel i zwyciężaj”.
zwyciężaj. W każdej iteracji spójne podciągi ciągu znaków $s$, które zostały poprawnie 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. wykryte przez $P$ są usuwane ze zbioru treningowego.
Oby uniknąć przetrenowania, czyli bardzo wysokiego F-measure na $E$, a niskiego na $E'$ \enlargethispage{2\baselineskip}
Oby uniknąć przetrenowania, czyli bardzo wysokiego \textit{F-measure} na $E$, a niskiego na $E'$,
zbiór treningowy $E$ dzielony jest losowo na dwa zbiory $E_{train}$ i $E_{validation}$ 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} = takie, że $E=E_{train} \cup E_{validation}$, $E_{train} \cap E_{validation} =
\emptyset$ \newline i \emptyset$ \newline i
$\sum_{(s,X)\in E_{train}}|X|\approx \sum_{(s,X)\in E_{validation}}|X|$. $\sum_{(s,X)\in E_{train}}|X|\approx \sum_{(s,X)\in E_{validation}}|X|$.
\enlargethispage{7\baselineskip}
\newpage \noindent Procedura generowania zbioru wyrażeń regularnych $P$ prezentuje się następująco.
Zacznij z $P=\emptyset$ i z $T$ utworzonym w taki sposób, że dla 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 każdego $(s,X)\in E_{train}$, trójka uporządkowana $(s, X, \{s\} \ominus X)$ jest
dodawana do $T$, \newline gdzie $X_d:=X$ i $X_u:=\{s\} \ominus X$. 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: \noindent Następnie dopóki $\bigcup_{(x,X_d,X_u)\in T}X_d\ne \emptyset$ powtarzaj:
\begin{enumerate} \begin{enumerate}
\item Wykonaj algorytm genetyczny na $T$ i otrzymaj finalne $p$. \item Wykonaj algorytm genetyczny na $T$ i otrzymaj wyrażenie regularne $p$.
\item Jeśli $Prec(p,T)=1$, to $P:=P\cup\{p\}$, w przeciwnym wypadku przerwij pętlę. \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\})$. \item Dla każdego $(s, X_d, X_u)\in T$ ustaw $X_d:=X_d\setminus e(s, \{p\})$.
\end{enumerate} \end{enumerate}
Powyższa procedura powtarzana jest wiele razy z różnym zarodkiem generatora 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ć 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 dużo 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}$.  średniej harmonicznej z precyzji i pokrycia na $E=E_{train} \cup E_{validation}$.
%\section{Sieci neuronowe} %\section{Sieci neuronowe}

View File

@ -21,4 +21,4 @@
\subsection{Ewaluacja wewnętrzna} %F1 score \subsection{Ewaluacja wewnętrzna} %F1 score
\subsection{Ewaluacja zewnętrzna} % w systemie webowym, użytkownicy \subsection{Ewaluacja zewnętrzna} % w systemie webowym, użytkownicy
\chapter{Wnioski} \chapter{Wnioski}
\chapter{Perspektywy na przyszłość} \chapter{Perspektywy na przyszłość}