magisterka/rozdzial_2.tex

244 lines
12 KiB
TeX
Raw Normal View History

\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
w końcowym systemie ekstrakcji informacji o godzinach rozpoczęcia mszy świętych.
2018-02-11 22:34:54 +01:00
\section {Algorytmy \textit{bootstraping}}
Niech $J$ to będzie dowolna reprezentacja języka (wyraz, fraza, wyrażenie
regularne itp.)
W dziedzinie przetwarzania języka naturalnego \textit{bootstraping} to technika
wyszukiwania niezanotowanych $J$ przy użyciu małego zbioru specjalnie
wyselekcjonowanych $J$.
Implementacji algorytmu \textit{bootstraping} jest wiele; wszystkie jednak
oparte są na następującym schemacie \cite{Bootstrap}:
\begin{enumerate}
\item Stwórz pustą listę $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 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}
Jedną z pierwszych implementacji algorytmu \textit{bootstraping} w dziedzinie
ekstrakcji informacji
są wzorce Hearst \textit{(ang. Hearst patterns)} \cite{Hearst}.
\smallskip
2018-02-11 22:34:54 +01:00
\noindent Znajdowanie nowych wzorców za pomocą wzorców Hearst można przedstawić
następująco:
\begin{enumerate}
2018-02-11 22:34:54 +01:00
\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 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 nowych par słów lub fraz będących w relacji $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.
\end{enumerate}
2018-02-11 22:34:54 +01:00
\enlargethispage{6\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:
\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.”}
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$.}
Wykorzystujemy powyższe wzorce do znalezienia nowych par będących w relacji $R$
i otrzymujemy:
\centerline{\texttt{('Władysław Araszkiewicz', 'Warszawa')}}
\centerline{\texttt{('Władysław Kuczewski', 'Częstochowa')}}
Następnie nowe pary używamy do znalezienia nowych wzorców, a potem nowe
wzorce do wyszukania kolejnych par i powtarzamy powyższy
algorytm aż do osiągnięcia określonej liczby iteracji.
\subsection{Miejsce na opis bardziej skomplikowanej metoda implementującej
algorytm \textit{bootstraping}}
\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}