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