2018-02-08 01:47:46 +01:00
\chapter { Metody ekstrakcji informacji}
% w kontekście mojego projektu
2018-02-11 22:34:54 +01:00
W tym rozdziale zaprezentowane są wybrane metody,
które brane były pod uwagę lub zostały zastosowane
2018-03-04 18:37:44 +01:00
w opisywanym tutaj systemie ekstrakcji informacji o godzinach rozpoczęcia mszy świętych.
2018-02-11 22:34:54 +01:00
\section { Algorytmy \textit { bootstraping} }
2018-03-04 18:37:44 +01:00
Niech $ J $ będzie dowolną reprezentacją języka (wyraz, fraza, wyrażenie
regularne itp.).
2018-02-11 22:34:54 +01:00
W dziedzinie przetwarzania języka naturalnego \textit { bootstraping} to technika
2018-03-04 18:37:44 +01:00
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
2018-02-11 22:34:54 +01:00
oparte są na następującym schemacie \cite { Bootstrap} :
2018-03-04 18:37:44 +01:00
\enlargethispage { 4\baselineskip }
2018-02-11 22:34:54 +01:00
\begin { enumerate}
2018-03-04 18:37:44 +01:00
\item Stwórz pustą listę reprezentacji języka $ J $ . % pusta lista $J$, pusta lista wyrazów, pusta
2018-02-11 22:34:54 +01:00
% 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.
2018-03-04 18:37:44 +01:00
\item Wróć do 3. i powtarzaj aż do osiągnięcia z góry określonej liczby iteracji
\newline lub
2018-02-11 22:34:54 +01:00
spełnienia innego warunku stopu.
\end { enumerate}
2018-03-04 18:37:44 +01:00
% \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ć
2018-02-11 22:34:54 +01:00
\subsection { Wzorce Hearst}
2018-03-04 18:37:44 +01:00
Jednymi z pierwszych implementacji algorytmu \textit { bootstraping} w dziedzinie
2018-02-11 22:34:54 +01:00
ekstrakcji informacji
są wzorce Hearst \textit { (ang. Hearst patterns)} \cite { Hearst} .
2018-02-08 01:47:46 +01:00
\smallskip
2018-03-04 18:37:44 +01:00
\noindent Znajdowanie nowych przykładów uczących za pomocą wzorców Hearst przedstawia się
2018-02-11 22:34:54 +01:00
następująco:
2018-02-08 01:47:46 +01:00
\begin { enumerate}
2018-02-11 22:34:54 +01:00
\item Wybierz relację leksykalną $ R $ .
2018-03-04 18:37:44 +01:00
\item Utwórz początkowy zbiór $ S $ par $ ( x, y ) \in R $ , gdzie $ x $ i $ y $ to słowa lub frazy.
2018-02-11 22:34:54 +01:00
\item Znajdź zdania, które zawierają pary ze zbioru $ S $ .
2018-03-04 18:37:44 +01:00
\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.
2018-02-08 01:47:46 +01:00
\end { enumerate}
2018-03-04 18:37:44 +01:00
\enlargethispage { 4\baselineskip }
2018-02-11 22:34:54 +01:00
\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 $ .
2018-03-04 18:37:44 +01:00
W korpusie treningowym szukamy zdań zawierających w sobie parę \texttt { ('Józef
Piłsudski', 'Kraków')} i otrzymujemy zdania takie jak:
2018-02-11 22:34:54 +01:00
\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.”}
2018-03-04 18:37:44 +01:00
\noindent Ze znalezionych zdań tworzymy następujące wzorce:
2018-02-11 22:34:54 +01:00
\centerline { $ x $ został pochowany w $ y $ .}
\centerline { Miejsce pochówku $ x $ to $ y $ .}
\centerline { Grób $ x $ znajduje się w $ y $ .}
2018-03-04 18:37:44 +01:00
\noindent Wykorzystujemy powyższe wzorce do znalezienia nowych par będących w relacji $ R $ , przykładowo:
% i otrzymujemy:
2018-02-11 22:34:54 +01:00
2018-03-04 18:37:44 +01:00
\centerline { \texttt { ('Witold Doroszweski, 'Warszawa')} }
\centerline { \texttt { ('Jana Długosz', 'Zakopane')} }
2018-02-11 22:34:54 +01:00
2018-03-04 18:37:44 +01:00
\noindent Następnie szukamy zdań w których występują powyższe pary, na przykład:
2018-02-11 22:34:54 +01:00
2018-03-04 18:37:44 +01:00
\centerline { „Witold Doroszewski spoczywa w Warszawie.”}
\centerline { „Na cmentarzu w Zakopanem mieści
się grób Jana Długosza.”}
2018-02-11 22:34:54 +01:00
2018-03-04 18:37:44 +01:00
\noindent Z nowo otrzymanych zdań tworzymy poniższe wzorce:
2018-02-11 22:34:54 +01:00
2018-03-04 18:37:44 +01:00
\centerline { $ x $ spoczywa w $ y $ .}
\centerline { Na cmentarzu w $ y $ mieści się grób $ x $ .}
2018-02-11 22:34:54 +01:00
2018-03-04 18:37:44 +01:00
\noindent Powtarzamy powyższy algorytm aż do osiągnięcia określonej liczby iteracji.
2018-02-11 22:34:54 +01:00
2018-02-08 01:47:46 +01:00
2018-03-04 18:37:44 +01:00
% \subsection{Miejsce na opis bardziej skomplikowanej metody implementującej
% algorytm \textit{bootstraping}}
2018-02-08 01:47:46 +01:00
2018-03-04 18:37:44 +01:00
\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
2018-02-08 01:47:46 +01:00
\subsection { Opis problemu}
Niech $ x _ s $ będzie spójnym podciągiem ciągu znaków $ s $ reprezentowanym przez
2018-03-04 18:37:44 +01:00
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 $ ),
2018-02-08 01:47:46 +01:00
jeśli (i) $ x' _ s $ jest krótszy niż $ x _ s $ , (ii) indeks początkowy $ x' _ s $ jest
2018-03-04 18:37:44 +01:00
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
2018-02-08 01:47:46 +01:00
nienachodzących na siebie $ x _ s $ .
2018-03-04 18:37:44 +01:00
Jako $ e ( s,P ) $ oznacza się zbiór wszystkich ciągów $ x _ s $
2018-02-08 01:47:46 +01:00
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 $
2018-03-04 18:37:44 +01:00
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 $
2018-02-08 01:47:46 +01:00
albo $ x'' _ s $ nie pasuje do żadnego $ p \in P $ .
2018-03-04 18:37:44 +01:00
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).
2018-02-08 01:47:46 +01:00
2018-03-04 18:37:44 +01:00
Mając dwa zbiory anotowanych przykładów $ ( E, E' ) $ , zbiór wyrażeń
2018-02-08 01:47:46 +01:00
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
2018-03-04 18:37:44 +01:00
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:
2018-02-08 01:47:46 +01:00
$$ 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| } } $$
2018-03-04 18:37:44 +01:00
\subsection { Szczegóły algorytmu genetycznego}
2018-02-08 01:47:46 +01:00
2018-03-04 18:37:44 +01:00
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$ .
2018-02-08 01:47:46 +01:00
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,
2018-03-04 18:37:44 +01:00
\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 } \} $
2018-02-08 01:47:46 +01:00
otrzymuje się
2018-03-04 18:37:44 +01:00
zakresy \newline \texttt { j-k} i \texttt { o-r} (przy założeniu, że
2018-02-08 01:47:46 +01:00
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 { + } ,
2018-03-04 18:37:44 +01:00
\item oznaczeń grup nieprzechwytujących \texttt { (?:$ \bullet $ )} .
2018-02-08 01:47:46 +01:00
\end { enumerate}
2018-03-04 18:37:44 +01:00
Wyrażenie regularne $ p $ otrzymuje się przechodząc drzewo sposobem
\textit { post-order} ,\newline w którym pod znak $ \bullet $ w wierzchołkach
2018-02-08 01:47:46 +01:00
niebędących
liściami podstawia się łańcuchy znaków zawarte w dzieciach tego wierzchołka.
2018-03-04 18:37:44 +01:00
\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}
2018-02-08 01:47:46 +01:00
\subsubsection { Inicjalizacja populacji}
2018-03-04 18:37:44 +01:00
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
2018-02-08 01:47:46 +01:00
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
2018-03-04 18:37:44 +01:00
\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.
2018-02-08 01:47:46 +01:00
\subsubsection { Funkcja przystosowania}
2018-03-04 18:37:44 +01:00
Dla każdego osobnika funkcję przystosowania defniuje się jako:
2018-02-08 01:47:46 +01:00
$$ f ( p ) : = ( Prec ( p,T ) , Acc ( p,T ) , l ( p ) ) $$
2018-03-04 18:37:44 +01:00
Wprowadza się również dwie nowe operacje $ \sqcap $ i $ \ominus $ , na których oparte są
2018-02-08 01:47:46 +01:00
funkcje $ Prec $ i $ Acc $ .
2018-03-04 18:37:44 +01:00
Zakłada się, że $ X _ 1 $ i $ X _ 2 $ to zbiory spójnych podciągów tego samego łańcucha znaków $ s $ .
2018-02-08 01:47:46 +01:00
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
2018-03-04 18:37:44 +01:00
nachodzą na żaden z elementów $ X _ 2 $ oraz (iii) nie mają nadłańcucha, który
spełnia warunki
2018-02-08 01:47:46 +01:00
(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}
2018-03-04 18:37:44 +01:00
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 } \} $ .
2018-02-08 01:47:46 +01:00
2018-03-04 18:37:44 +01:00
\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)|} $$
2018-02-08 01:47:46 +01:00
Drugi element trójki uporządkowanej, czyli $ Acc ( p,T ) $ jest średnią arytmetyczną
2018-03-04 18:37:44 +01:00
pokrycia na znakach (ang. True Positive Character Rate skr. TPCR) i
2018-02-08 01:47:46 +01:00
specyficzności na znakach (ang. True Negative Character Rate skr. TNCR):
2018-03-04 18:37:44 +01:00
\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*}
2018-02-08 01:47:46 +01:00
gdzie $ ||X|| = \sum _ { x _ s \in X } l ( x _ s ) $ , a $ l ( x _ s ) $ oznacza długość ciągu $ x _ s $ .
2018-03-04 18:37:44 +01:00
Osobniki porównywane są w pierwszej kolejności na podstawie $ Prec $ , \newline potem
za pomocą $ Acc $ , a na końcu w przypadku identycznych
2018-02-08 01:47:46 +01:00
$ Prec $ i $ Acc $ brane jest pod uwagę $ l ( p ) $ .
2018-03-04 18:37:44 +01:00
\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 . 1 n $ osobników
2018-02-08 01:47:46 +01:00
generowanych jest losowo za pomocą metody
2018-03-04 18:37:44 +01:00
\textit { Ramped half-and-half} \cite { ramped} , kolejne $ 0 . 1 n $ osobników powstaje za pomocą mutacji, a
pozostałe $ 0 . 8 n $ otrzymuje \newline się metodą krzyżowania.
Z populacji P i zbioru nowo
2018-02-08 01:47:46 +01:00
wygenerowanych osobników wybierane jest $ n $ najlepiej przystosowanych osobników,
2018-03-04 18:37:44 +01:00
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.
2018-02-08 01:47:46 +01:00
Finalne wyrażenie regularne $ p $ to najlepiej przystosowany osobnik po
zakończeniu wszystkich iteracji.
2018-03-04 18:37:44 +01:00
\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
2018-02-08 01:47:46 +01:00
wykryte przez $ P $ są usuwane ze zbioru treningowego.
2018-03-04 18:37:44 +01:00
\enlargethispage { 2\baselineskip }
Oby uniknąć przetrenowania, czyli bardzo wysokiego \textit { F-measure} na $ E $ , a niskiego na $ E' $ ,
2018-02-08 01:47:46 +01:00
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| $ .
2018-03-04 18:37:44 +01:00
\noindent Procedura generowania zbioru wyrażeń regularnych $ P $ prezentuje się następująco.
2018-02-08 01:47:46 +01:00
Zacznij z $ P = \emptyset $ i z $ T $ utworzonym w taki sposób, że dla
2018-03-04 18:37:44 +01:00
każdego $ ( s,X ) \in E _ { train } $ , trójka uporządkowana $ ( s, X, \{ s \} \ominus X ) $ jest
2018-02-08 01:47:46 +01:00
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}
2018-03-04 18:37:44 +01:00
\item Wykonaj algorytm genetyczny na $ T $ i otrzymaj wyrażenie regularne $ p $ .
2018-02-08 01:47:46 +01:00
\item Jeśli $ Prec ( p,T ) = 1 $ , to $ P: = P \cup \{ p \} $ , w przeciwnym wypadku przerwij pętlę.
2018-03-04 18:37:44 +01:00
\item Dla każdego $ ( s, X _ d, X _ u ) \in T $ ustaw $ X _ d: = X _ d \setminus e ( s, \{ p \} ) $ .
2018-02-08 01:47:46 +01:00
\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ć
2018-03-04 18:37:44 +01:00
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 } $ .
2018-03-12 23:12:25 +01:00
\section { Sieci neuronowe}