Tagset pośredni

Opis częściowo na podstawie sprawozdania TR-NEKST-Z1-1/10.

Geneza problemu

W tagsecie KIPI i NKJP występują przypadki niejednoznaczności segmentacji. Problem ten pojawia się, kiedy, w zależności od klasy słowa (analizy morfologicznej), wytyczne nakazują różnie podzielić słowo. Przykładowo, słowo piekłem jako czasownik należałoby rozbić na dwa tokeny (piekłem), natomiast jako rzeczownik należałoby pozostawić nierozbite. Problem w tym, że stwierdzenie, czy dane wystąpienie słowa powinno być interpretowane jako czasownik, wymaga przeprowadzenia analizy kontekstu. Typowo analizy takiej dokonuje się przeprowadziwszy już analizę morfologiczną, a tym bardziej podział na tokeny.

Dlaczego nie pozostawić wariantów segmentacji?

Innym rozwiązaniem byłoby oznaczenie takiej niejednoznaczności wprost poprzez podanie wariantów segmentacji. Spowodowałoby to jednak znaczna komplikacja struktury danych już na początku potoku przetwarzania. Co gorsza, praktycznie wszystkie znane algorytmy ujednoznaczniania zakładają, że tekst wejściowy da się przedstawić w postaci ciągu tokenów, a nie bardziej skomplikowanej struktury grafowej.

Przyjęte rozwiązanie

Znaczną część takich niejednoznaczności segmentacji da się rozwiązać poprzez scalenie rozbitych czasowników.

Przykład z tagsetu KIPI (struktura grafowa zwracana przez Morfeusza):

  piekł/praet:sg:m1.m2.m3:imperf 2 em/aglt:sg:pri:imperf:wok
1                                                            3
                    piekłem/subst:sg:inst:m3

Struktura zawiera niejednoznaczność między dwutokenową ścieżką reprezentującą czasownik (piekł i em) a ścieżką jednotokenową (piekłem jako rzeczownik). Gdyby scalić ścieżkę czasownikową w jeden token, uzyskalibyśmy prostą alternatywę jednoelementowych ścieżek, którą da się zapisać w postaci kilku alternatywnych par lemat-tag przypisanych do jednego tokenu. Takim złączonym czasownikom należy przypisać sensowne tagi. W tym celu opracowaliśmy tagset pośredni.

Przykład z tagsetu pośredniego:

piekłem
        piec    fin:sg:m1:pri:imperf:prt
        piec    fin:sg:m2:pri:imperf:prt
        piec    fin:sg:m3:pri:imperf:prt
        piekło  subst:sg:inst:n

Przyjęte rozwiązanie polegało więc na opracowaniu tagsetu pośredniego oraz reguł konwersji z tagsetu KIPI na tagset pośredni (IKIPI) oraz z powrotem.

Rozwiązanie to nie eliminuje wszystkich niejednoznaczności. Jeśli po konwersji niejednoznaczność pozostaje, stosowana jest heurystyka wyboru najkrótszej ścieżki. Przykładowo:

  kiedy/qub 2 ś/aglt:sg:sec:imperf:nwok
1                                       3
         kiedyś/qub

W tym wypadku analizator wybierze formę kiedyś/qub i wyświetli ostrzeżenie.

Testy konwersji

Konwersji można poddać dwa typu wejścia:
  1. strukturę grafową z Morfeusza: tutaj w przypadku niejednoznaczności segmentacji zachodzi próba scalenia ścieżek, a gdy się to nie uda zgłaszane jest ostrzeżenie,
  2. plik typu morph.xml zawierający teskt poddany analizie morfologicznej, gdzie z założenia nie ma wariantów segmentacji (został wybrany jeden z nich).

Konwersja powinna być odwracalna. Testy polegają na konwersji plików morph.xml wte i wewte. Jak dotąd nie trafiliśmy na żaden błąd (po dwukrotnej konwersji wszystkie pliki były identyczne).

Drugim rodzajem testów jest przepuszczanie czystego tekstu przez Morfeusza opakowanego w konwerter i szukanie ostrzeżeń oraz błędów w wyjściowych danych.

Tagset IKIPI

Zmiany:
  1. fin to zarówno dotychczasowe formy nieprzeszłe, jak i formy przeszłe sklejone z praet+aglt.
  2. fin i bedzie mają teraz przypisany atrybut tns (czas) o wartościach prs (teraźniejszy), prt (przeszły), fut (przyszły).
  3. fin powstały ze złączenia form przeszłych ma przypisaną wartość rodzaju; pozostałe przypadki mają wartość tę nieokreśloną.
  4. Usunięto atrybut aglutynacji (skoro praet+aglt tworzy jeden token), przywrócić go można wyrażeniem regularnym na formie napotkanej.
  5. Klasy praet i aglt zostają; mają ją formy, które nie nastąpiły wg wzorca praet+aglt.
  6. Nowa klasa conjt (czasownik w trybie przypuszczającym) o atrybutach nmb, gnd, per, asp powstaje ze złączenia praet+by lub praet + by + aglt. Jeśli nie ma aglutynantu, forma jest trzecioosobowa (ter); jeśli jest, osoba brana jest z aglutynantu.
  7. Klasa winien wzbogacona o opcjonalny atrybut osoba. Zmiana związana jest z łączeniem form winien wraz z aglutynantami. Jeśli aglutynantu nie ma, wartość osoby pozostaje nieokreślona.

UWAGA: poniższa tabela nie określa opcjonalności atrybutów. Pełna definicja znajduje się w pliku ikipi.tagset.

Tag KIPI origin nmb cas gnd per deg asp ngt acn ppr acm (agg) vcl tns tnt
interp
subst nmb cas gnd
depr nmb cas gnd
adj nmb cas gnd deg
adja
adjp
adv deg
num nmb cas gnd acm
ppron12 nmb cas gnd per acn
ppron3 nmb cas gnd per acn ppr
siebie cas
fin fin OR praet+aglt fin.nmb OR praet.nmb None OR praet.gnd fin.per OR aglt.per fin.asp OR praet.asp None None praet→prt, fin:perf→fut, fin:imperf→prs
bedzie nmb per asp fut
aglt nmb per asp vcl
praet nmb gnd asp None
impt nmb per asp
conjt praet+by OR praet+by+aglt praet.nmb praet.gnd ter, aglt.per praet.asp None
imps asp
inf asp
pcon asp
pant asp
ger nmb cas gnd asp ngt
pact nmb cas gnd asp ngt
ppas nmb cas gnd asp ngt
winien nmb gnd None or aglt.per asp
pred
prep cas
conj
qub
xxs nmb cas gnd
xxx
ign
numcol nmb cas gnd acm
twf
tnum tnt
tsym
tdate
ttime
turi
tmail

ikipi.tagset - Plik pochodzi z libcorpus2 (853 B) Adam Radziszewski, 04 lut 2011 13:06