% Poliqarp statistical extension - documentation
% Copyright © 2006-2009 Aleksander Buczyński
%
% This program is free software; you can redistribute it and/or
% modify it under the terms of the GNU General Public License
% as published by the Free Software Foundation; either version 2
% of the License, or (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this program; if not, write to the Free Software
% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
% MA 02110-1301, USA.

\author{Aleksander Buczyński}

\section{Zapytania statystyczne}

\emph{Rozszerzenia statystyczne obsługuje jedynie graficzna wersja Poliqarpa.
Nie są one dostępne przez interfejs WWW.}

Poliqarp został zaprojektowany jako konkordancer, zwracający dla każdego
zapytania listę dopasowań wraz z kontekstem określonej szerokości.  Zapewnia to
użytkownikowi przykłady użycia konkretnych konstrukcji, ale można sobie
wyobrazić wiele problemów korpusowych, dla których przeglądanie setek dopasowań
byłoby co najmniej niewygodne. Rozszerzenie statystyczne (dostępne obecnie
jedynie w stacjonarnej wersji Poliqarpa) wprowadza możliwość łatwego
znalezienia odpowiedzi na pytania typu:

\begin{itemize}
\item jaki jest rozkład częstości form danego leksemu?
\item jakie części mowy mogą wystąpić po danym wyrazie?
\item jakie czasowniki są wykorzystywane najczęściej w danym stylu?
\end{itemize}
Rozszerzenie zapewnia także zestaw testów statystycznych służących wykrywaniu kolokacji i badaniu korelacji pomiędzy atrybutami segmentów.

\subsection{Składnia zapytania}

Zapytanie statyczne ma następującą składnię [nawiasy kwadratowe oznaczają elementy opcjonalne]:

\texttt{<pattern> group by <attr list> \emph{[; <attr list>]} [interp <method>] [sort <order>] [min <cmin>] [count <nmax>]}

\noindent gdzie:

\texttt{<pattern>} -- zapytanie Poliqarpa opisane w poprzednim rozdziale;
tylko sekwencje segmentów dopasowane do \texttt{<pattern>} będą brane po uwagę w statystyce.

\texttt{<attr list>} -- lista specyfikacji atrybutów (np.
 \texttt{base} lub \texttt{2.case}), oddzielanych przecinkami; każda specyfikacja atrybutu składa się z opcjonalnej specyfikacji segmentu
(np. \texttt{2.} lub \texttt{-1.}) i obowiązkowej nazwy atrybutu (np. \texttt{base} lub \texttt{case}); patrz \ref{multiword};

% i opcjonalnej

\texttt{<method>} -- metoda wyboru interpretacji
(\texttt{random} lub \texttt{combine}), zgodnie z \ref{ambiguities};

\texttt{<order>} -- porządek sortowania wyników, tak jak opisano w \ref{sort}
(zapytania proste) i \ref{colfun} (zapytania z grupowaniem częściowym);

\texttt{<cmin>} -- minimalna liczba wystąpień; wyświetlanie tylko wyników, które
wystąpiły co najmniej \texttt{<cmin>} razy wśród dopasowań;

\texttt{<nmax>} -- maksymalna liczba (lub \texttt{all} -- wszystkie) próbek dopasowań wybranych do stworzenia statystyki; patrz \ref{count}.

\subsection{Proste zapytania statystyczne}
\label{basic}

Rozszerzenie wprowadza możliwość grupowania dopasowań według zbioru atrybutów, wyspecyfikowanego w zasadach grupowania.  Najprostsza zasada składa się z jednej nazwy atrybutu.  Żeby np. znaleźć częstości różnych form słowa \emph{woda}, można napisać:

\texttt{[base=woda] group by orth}

Rezultatem tego zapytania jest tabela.  Każda z różnych wartości wyspecyfikowanego atrybutu (\texttt{orth}) napotkana w wynikach pierwszej części zapytania (\texttt{[base=woda]}) odpowiada jednemu wierszowi tej tabeli.  Każdy wiersz zawiera wartość wyspecyfikowanego atrybutu oraz liczbę dopasowań, które zawierają tę wartość.

W zasadach grupowania można wymienić więcej atrybutów, oddzielając je przecinkami, np.:

\texttt{[base=woda] group by orth, number, case}

W rezultatach tego zapytania każdy wiersz odpowiada unikalnej kombinacji wartości wyspecyfikowanych atrybutów (\emph{woda sg nom}, \emph{wody pl nom}, \emph{wody sg gen}, etc.) Bierzemy zatem w tym wypadku pod uwagę także rozróżnienie pomiędzy formami homonimicznymi (np. forma \emph{wody} może być emph{sg gen}, \emph{pl nom}, etc.)

\subsection{Wzorce wielowyrazowe}
\label{multiword}

Wzorce mogą zwracać dopasowania dłuższe niż pojedynczy segment.  Aby wskazać atrybut którego z segmentów powinien zostać wykorzystany do grupowania, należy dodać numer segmentu (z kropką) przed nazwą atrybutu. Np., żeby znaleźć czasowniki występujące bezpośrednio po słowie \emph{woda}, można zapytać:

\texttt{[base=woda][pos=verb] group by 2.base}

Specyfikacja \texttt{2.base} odnosi się do formy podstawowej drugiego segmentu dopasowania (czasownika -- \emph{verb} -- po segmencie, którego formą podstawową jest \emph{woda}).

Kolejne numery odnoszą się do kolejnych segmentów dopasowania, nie kolejnych specyfikacji segmentów w zapytaniu.  Np. żeby znaleźć rozkład częstości dla ciągów trzech kolejnych przysłówków, należy zapytać (można pominąć \texttt{1.}):

\texttt{[pos=adv]\lbr{}3\rbr{} group by 1.base, 2.base, 3.base}

Aby wskazać segmenty w dopasowaniach o nieznanej długości, można w specyfikacjach segmentów używać liczb ujemnych.  Liczba ujemna oznacza liczenie od końca dopasowania. Np. żeby dopuścić opcjonalny przysłówek pomiędzy \emph{wodą} i czasownikiem, ww. zapytanie powinno zostać następująco zmodyfikowane:

\texttt{[base=woda][pos=adv]?[pos=verb] group by -1.base}

Specyfikacja \texttt{-1.base} odnosi się do formy podstawowej ostatniego segmentu dopasowania. Analogicznie \texttt{-2.} odnosiłoby się do drugiego segmentu od końca, \texttt{-3.} --- trzeciego od końca etc.

\subsection{Niejednoznaczności}
\label{ambiguities}

Domyślnie dla każdego niejednoznacznego segmentu wybierana jest losowo jedna interpretacja.  Ale jeśli dodamy \texttt{interp combine} po specyfikacji atrybutu, wartość tego atrybutu zostanie obliczona jako konkatenacja unikalnych wartości atrybutów we wszystkich interpretacjach, oddzielonych pionową kreską.  Np. żeby znaleźć wszystkie możliwe kombinacje interpretacji dla segmentów, które mogą być formami czasownika \emph{mieć}, można napisać:

\texttt{[base\textasciitilde mieć] group by base interp combine}

Wynik zapytania będzie zawierał pary słów takich jak \emph{mama/mieć}, \emph{mieć/mienie}, \emph{maić/mieć}, \emph{mielić/mieć} etc.  Rezultat będzie się różnił znacząco w zależności od tego, czy w konfiguracji Poliqarpa wybrano opcję ,,Pokazuj tylko ujednoznacznione interpretacje''; jeśli jest zaznaczona, interpretacje odrzucone przez tager nie pojawią się w wynikach.

\subsection{Rozmiar próbki}
\label{count}

Domyślnie statystyka liczona jest na próbce 1000 losowo wybranych dopasowań, aby szybko pokazać wyniki.  Jeśli potrzebne jest dokładniejsze obliczenie, rozmiar próbki może zostać zmodyfikowany za pomocą słowa kluczowego \texttt{count}, np.:

\texttt{[base=woda] group by orth count 5000}

Aby policzyć wszystkie dopasowania, należy użyć \texttt{count all}, np.:

\texttt{[base=woda] group by orth count all}

Uwaga: w obecnej wersji (1.2) występuje twardy limit 500\,000 dopasowań.  Jeśli naprawdę potrzebna jest większa próbka, trzeba podzielić zapytanie na kilka nieco bardziej szczegółowych (np. według \texttt{meta style}).

\subsection{Sortowanie i selekcja wyników}
\label{sort}

Wyniki mogą być posortowane w porządku alfabetycznym (\texttt{sort a fronte}) lub według częstości (\texttt{sort by freq}).  Jeśli wykorzystywane jest grupowanie częściowe, wyniki można także posortować według wybranej funkcji kolokacji --- patrz \ref{colfun}.

Selekcja wyników jest obecnie ograniczona od odcięcia według częstości (\texttt{min n}).

\subsection{Grupowanie częściowe}
\label{partial_grouping}

Najczęstsze bigramy można łatwo znaleźć korzystając z składni zapytań prostych:

\texttt{[][] group by 1.base, 2.base sort by freq}

Jednak takie wyniki są często niewystarczające.  Np. w wykrywaniu kolokacji istotna jest nie tylko częstość bigramu, ale także częstość jego składowych. W związku z tym wprowadzony został specjalny separator -- średnik ,,;'' -- który umożliwia podzielenie zasad grupowania na dwie części. Przykładowo:

\texttt{[][] group by 1.base; 2.base sort by freq}

spowoduje, że wyniki zostaną pogrupowane według:
\texttt{1.base} (część przed średnikiem);
\texttt{2.base} (część za średnikiem);
\texttt{1.base, 2.base} (obie części).  Dla każdego wiersza wyników ostatniego grupowania, zostaną wyświetlone także wyniki grupowań częściowych.  Modyfikatory \texttt{sort} i \texttt{min} stosuje się zawsze do ostatniego grupowania.

Każda z części grupowania może zawierać więcej niż jedną specyfikację atrybutu, ale zasady grupowania nie mogą zawierać więcej niż dwie części. Inaczej rzecz ujmując: zasady grupowania mogą zawierać dowolną liczbę przecinków, ale nie więcej niż jeden średnik.

Składnia grupowania częściowego ma zastosowanie nie tylko dla bigramów.  Różne części grupowania mogą nawet zawierać odwołania do tego samego segmentu, np.

\texttt{[base=woda] group by number; case}

\subsection{Funkcje kolokacji}
\label{colfun}

W celu wykrywania kolokacji, w zapytaniach z grupowaniem częściowym (patrz \ref{partial_grouping}) można zastosować jako parametr sortowania jedną ze statystycznych miar zależności (np. \texttt{sort by cp} lub \texttt{sort by dice}).  Wszystkie obecnie zaimplementowane miary są funkcjami następujących parametrów:

$c(w_1)$ --- liczba wystąpień $w_1$, gdzie $w_1$ jest kombinacją wartości atrybutów wyspecyfikowanych przez pierwszą część zasad grupowania;

$c(w_2)$ --- liczba wystąpień $w_2$, gdzie $w_2$ jest kombinacją wartości atrybutów wyspecyfikowanych przez drugą część zasad grupowania;

$c(w_1w_2)$ --- liczba wystąpień kombinacji $w_1$ i $w_2$.

Funkcje te to:
\begin{itemize}
\item \texttt{cp} --- prawdopodobieństwo warunkowe
\[\mathrm{cp}(w_1,w_2) = \frac{c(w_1w_2)}{c(w_1)}\]
\item \texttt{scp} --- symetryczne prawdopodobieństwo warunkowe
\[\mathrm{scp}(w_1,w_2) = \frac{c(w_1w_2)^2}{c(w_1)c(w_2)}\]
\item \texttt{maxcp} --- maksymalne prawdopodobieństwo warunkowe
\[\mathrm{maxcp}(w_1,w_2) = \max\left(\frac{c(w_1w_2)}{c(w_1)}, \frac{c(w_1w_2)}{c(w_2)}\right)\]
\item \texttt{dice} --- wzór Dice'a
\[\mathrm{dice}(w_1,w_2) = \frac{2 c(w_1w_2)}{c(w_1)+c(w_2)}\]
\end{itemize}

Ponieważ miary zależności de facto preferują rzadkie bigramy, zalecane jest ich stosowanie w połączeniu z odcięciem wyników o niskiej częstości, np.:

\texttt{[pos!=interp]\lbr{}2\rbr{} group by base; 2.base sort by scp min 2}

Alternatywą jest zmodyfikowanie miary, tak by w pewnym stopniu preferowała częste wyniki, np.:

\texttt{[pos!=interp]\lbr{}2\rbr{} group by base; 2.base sort by scp bias 0.5}

\texttt{bias $b$} oznacza ,,przed posortowaniem, pomnóż wynik funkcji przez częstość do potęgi $b$'':

\[x \: \mathrm{bias} \: b = x \: c\left(w_1w_2\right)^b\]

np.:

\[\mathrm{scp} \: \mathrm{bias} \: 0.5 = \frac{c(w_1w_2)^{2.5}}{c(w_1)c(w_2)}\]

Oczywiście, można łączyć słowa kluczowe \texttt{bias} i \texttt{min}, np.:

\texttt{[]\lbr{}2\rbr{} group by base; 2.base sort by scp bias 0.5 min 2}

Podobnie jak w innych przypadkach, odcięcie stosuje się tu do czystej liczby wystąpień, nie wartości miary zależności.

\end{document}
