Specyfikacja języka WCCL.

Adam Radziszewski, Michał Marcińczuk, Adam Wardyński
Październik 2010 – kwiecień 2011

Na podstawie:
  • Implementacji i gramatyki JOSKIPI w ramach TaKIPI
  • Implementacji i gramatyki JOSKIPI w ramach Disastera
  • Artykułu „Hand-Written and Automatic Rules for Polish Tagger”, Piasecki Maciej (Proceedings of TSD 2006, pp. 205-212, Springer)
  • Instrukcji „Krótki opis języka JOSKIPI”, Adam Radziszewski (http://nlp.pwr.wroc.pl/trac/takipi/browser/trunk/JOSKIPI/doc/JOSKIPI.pdf)
  • Dokumentu „Propozycja rozszerzenia JOSKIPI, wersja 3.0”, Michał Marcińczuk (plik załączony na dole strony Wymagania)
  • uwag Bartosza Brody, Macieja Piaseckiego, Pawła Kędzi i Tomasza Śniatowskiego.

Dziedzina i założenia

WCCL jest językiem formalnym pozwalającym na zapis:
  • wyrażeń funkcyjnych wartościowanych na tekście oznakowanym morfo-syntaktycznie,
  • reguł ujednoznaczniania tekstu oznakowanego morfo-syntaktaktycznie,
  • reguł znakowania fraz w tekście oznakowanym morfo-syntaktycznie.
Głównymi zastosowaniami formalizmu są z założenia:
  • konstrukcja cech morfo-syntaktycznych na cele zadań przetwarzania języka polskiego w oparciu o techniki maszynowego uczenia się, w szczególności dla zadań ujednoznaczniania morfo-syntaktycznego i płytkiej analizy składniowej;
  • opis ograniczeń morfo-syntaktycznych, które stwierdzają, czy zachodzi dana relacja składniowa między tokenami (na cele wydobywania relacji semantycznych);
  • opis ograniczeń morfo-syntaktycznych, które spełniają wyrażenia wielosłowowe;
  • ręczne pisanie reguł ujednoznaczniania;
  • ręczne pisanie reguł znakowania fraz oraz jednostek identyfikujących (named entities).
WCCL operuje na tekście w języku naturalnym. Zakłada się, że:
  • tekst jest podzielony na zdania — wyrażenia WCCL widzą tylko jedno zdanie (kod kliencki odpala skompilowane operatory na kolejnych zdaniach);
  • tokeny muszą zawierać informację morfo-synt.: formę napotkaną oraz zbiór leksemów, tj. par (tag,lemat);
  • na potrzeby przetwarzania przez WCCL zdanie opakowywane jest w strukturę pomocniczą, która zawiera też bieżącą pozycję, tj. liczbę z zakresu 0–(dł.zdania-1) określającą wybrany token;
  • zdanie może zawierać płytkie anotacje składniowe zorganizowane w kanałach (odwzorowanie nazwa -> kanał anotacji zawierający chunki z wyróżnionymi nadrzędnikami).

Podjęzyki

Ze względu na funkcjonalność i specyfikę

WCCL to trzy w miarę autonomiczne podjęzyki:

  1. podstawowy język wyrażeń funkcyjnych
    • podobny do JOSKIPI z wyłączeniem reguł
    • każde wyrażenie zwraca jakąś wartość
    • każdą wartość da się zapisać w postaci tekstowej
    • wyrażenia mogą mieć skutki uboczne w postaci zmiany wartości zmiennych i żadnych innych
  2. formalizm reguł ujednoznaczniania
    • składnia i semantyka bardzo podobna do reguł ujednoznaczniania JOSKIPI używanych w TaKIPI
    • korzysta z wyrażeń funkcyjnych
  3. język reguł dopasowania
    • korzysta z wyrażeń funkcyjnych
    • wyrażenia są regułami, które zmieniają oznakowanie na różnych poziomiach

Wszystkie trzy podjęzyki łączy składnia pliku WCCL. Jest to uniwersalna składnia, jaką powinien mieć plik WCCL, niezależnie od tego, czy zamierzeniem było przechowywanie w nim wyrażeń funkcyjnych, reguł, czy też wszystkiego. Dodatkowo, wprowadzenie takiej składni pozwala na możliwość odwołania do zewnętrznych zasobów (leksykonów), które mogą być współdzielone przez wszystkie składniki pliku.

Takie pliki WCCL są polecanym sposobem uniwersalnego korzystania z formalizmu oraz, na poziomie programistycznym, polecanym sposobem korzystania z API biblioteki implementującej WCCL. W sytuacjach, gdy wyrażenia WCCL z założenia są krótkie (np. pobranie wartości prostych cech, takich jak klasa gramatyczna tokenów z okna o stałej szerokości), istnieje alternatywa — użytkownik może skorzystać ze składni pojedynczego wyrażenia funkcyjnego (np. class[0]). Implementacja WCCL udostępnia również możliwość kompilacji takich pojedynczych wyrażeń — patrz odpowiednie metody klasy Parser.

Ze względu na wspomniane podjęzyki, specyfikację formalizmu WCCL podzielono na cztery części:
  1. Wyrażenia funkcyjne: specyfikacja wyrażeń funkcyjnych WCCL.
  2. Reguły ujednoznaczniania: specyfikacja reguł ujednoznaczniania WCCL.
  3. Reguły dopasowania: specyfikacja reguł dopasowania WCCL, pozwalających na dodawanie anotacji do tekstu oznaczonego morfo-syntaktycznie.
  4. Plik WCCL: standardowa składnia całego pliku WCCL.

Podjęzyki ze względu na podział prac

By usprawnić projektowanie i implementację, wprowadzono podział wg etapów prac. Poniższe określenia są orientacyjne, szczegółowa specyfikacja podjęzyków znajduje się (znajdzie się) dokumentach w załączonych poniżej.
Uwaga: z punktu widzenia użytkownika poniższy podział nie powinien być istotny. Co więcej, poniższe specyfikacje podjęzyków mogą być nieaktualne, w szczególności nie wszędzie oddzielono rzeczy zrealizowane od niezrealizowanych planów.

  1. L0: odpowiednik JOSKIPI z C++ ale bez reguł i specjalnej składni dla tagera (wzorców, makr, klas niejednoznaczności/klas decyzyjnych chunkera)
  2. L1: L0 + zmienne po symbolach z tagsetu, zbiorach stringów i wartościach logicznych, predykaty sprawdzające anotacje i iterujące po nich, wyrażenia dla tagera i chunkera
  3. L2: L1 + reguły i dopasowania.
  4. Plik WCCL: standardowa składnia całego pliku WCCL.

Specyfikacje L1 i L2 zawierają też elementy, których objęte były wcześniejszymi planami, ale nie zostały zrealizowane. Elementy te są wyszczególnione tu, warto rozważyć dodanie ich z powrotem do języka.