Przejdź do głównej zawartości

Testy segmentacji

Do niedawna nie było dla polszczyzny korpusu, w którym ręcznie zweryfikowano by podział na zdania (a przynajmniej ja nic o dostępności takiego zasobu nie wiedziałem). Całe szczęście, trwają prace nad Narodowym Korpusem Języka Polskiego – i obejmują one także ręczne oznaczenie tekstu, w tym podział go na zdania. Uzyskałem do testów próbkę obecnie opracowywanego tekstu, aby móc przetestować swoje reguły.
Okazało się, że stosujemy nieco inne konwencje – np. ja uznawałem, że liczby porządkowe na początku zdań są osobnym elementem, a nie fragmentem zdania (w OpenOffice.org takie liczby generowane automatycznie nie są w ogóle widoczne dla LanguageTool). Ale po ujednoliceniu takich konwencji przystąpiłem do testów. Wykryłem trochę usterek w regułach SRX, usunąłem je i wyniki są obecnie następujące.
W próbce było 42426 znaczników podziału (dalej oznaczone jako Z). Dokładność (precision) podziału wyniosła 0,993234. Kompletność (recall) 0,998353. Poprawność (accuracy) 0,991609. (Wszystkie te parametry liczyłem jako ilorazy, odpowiednio Z oraz sumy Z i podziałów dodanych przez SRX; Z oraz sumy Z i podziałów brakujących w pliku posegmentowanym przez SRX; wreszcie Z oraz sumy Z i podziałów dodanych przez SRX i brakujących w SRX).
Nie da się dojść, rzecz jasna, mechanicznymi środkami typu reguły SRX, do poziomu 1, bo niektóre podziały zależą od analizy znaczeniowo-logicznej zdania. Ale jest całkiem już nieźle! :)

AKTUALIZACJA: przy właściwym ustawieniu segmentacji na końcach wierszy udało się uzyskać kompletność równą 1 (to trochę artefakt wynikający z przetwarzania danych wejściowych) i dokładność 0,996933.

AKTUALIZACJA 2: po zamianie końców wierszy na spacje, udało się uzyskać bardziej wiarygodny wynik, mianowicie kompletność wynosi 0,994935, a dokładność – 0,997027. Przy zamianie 50% końców wierszy na spacje i usunięciu 50% wierszy kompletność spadła do
0,949978, a dokładność do 0,997426. Przy usunięciu wszystkich spacji wyniki były odpowiednio 0,909843 (kompletność) i 0,997695 (dokładność). Ponieważ w tekstach brak spacji lub końca wiersza po kropce przed kolejnym zdaniem jest zjawiskiem sporadycznym (lecz jego częstość w języku jest trudna do oszacowania ze względu na to, że w przetworzonych korpusach występują już całe zdania), w wypadku innych tekstów kompletność powinna być bliższa wartości z przedziału od 0,994935 a 0,949978, co jest całkiem niezłym wynikiem.

Komentarze

Adam Radziszewski pisze…
Wyniki są bardzo obiecujące!

W związku z tym jestem ciekaw jednej kwesti implementacyjnej. O ile dobrze zrozumiałem z artykułu, to używana implementacja SRX-a jest bardzo naiwna: dla każdego znaku odpalamy sekwencyjnie wszystkie "pozytywne" wyrażenia regularne z pliku, a wspomniana optymalizacja polega na tym, że nie odpalamy "negatywnych", o ile żadne "pozytywne" wyrażenie nie zostanie spełnione ("pozytywne" to te z break="yes"). Czy tak faktycznie to działa?
W artykule Jarek opisał algorytm ze specyfikacji i określił jedną dodatkową optymalizację, ale jest kilka dodatkowych. Np. żeby przyspieszyć przetwarzanie, konkatenujemy wyrażenia regularne, łącząc je nawiasami, ale nawiasami niegrupującymi (:? ). Ale najlepiej pytać Jarka, bo on odpowiada za bibliotekę segment, ja robiłem same reguły.
Adam Radziszewski pisze…
Dziękuję za odpowiedź! Faktycznie takimi nawiasami można wymusić utworzenie jednego transduktora z wielu wyrażeń regularnych.

To mam jeszcze jedno pytanie co do samych reguł :) W pliku SRX niektóre kropki nie są poprzedzone znakiem "\". Czy to pomyłka? Np.: \bk.k\.\s, \bm.in\.\s., \bk.p.a\.\s
Tak, pomyłka. W tych wypadkach chyba dosyć niewinna, ale i tak poprawię.
Poprawione w CVS.

Popularne posty z tego bloga

Imiesłów przysłówkowy bez orzeczenia

W zdaniach z imiesłowami przysłówkowymi (-ąc i -wszy), zakończonych znakiem interpunkcyjnym, powinno występować orzeczenie. Dopuszczalne jest opuszczenie orzeczenia w tytule. W tytule nie stosuje się jednak kropek na końcu. Na przykład: Czekając na Godota Czekając na Godota, zabawiali się rozmową. Błąd ten jest tym bardziej rażący w zdaniach, w których występuje zdanie podrzędne: !Czekając na Godota, który nie przychodził. Usterka zostanie wykryta także w błędnie formułowanych pytaniach: !Rozmawiając o sporcie, który sport uprawiasz? W powyższym przykładzie podmiot imiesłowu jest inny od podmiotu pytania (my rozmawiamy, a sport uprawiasz tylko ty). Powinno być: Skoro już mowa o sporcie, którą dyscyplinę uprawiasz?

Gromadzimy błędy językowe

Tu zbieram błędy, które mają być wykrywane regułami. Część z tych błędów można dodać także do list autokorekty w Ooo (a nawet w programie MS Word). Warto pamiętać, że na liście muszą być tylko te błędy, których nie wykryje już korektor pisowni (a zatem błędne formy fleksyjne i proste błędy ortograficzne nie muszą być tutaj umieszczane). Zapraszam do komentowania i uzupełniania tej listy, na pewno nie jest wyczerpująca. Mówiąc krótko, to taki negatywny słownik języka polskiego ;) Nowomowa, ale nie błąd: wychodzić|wyjść * naprzeciw -> popierać *, iść na rękę * wprowadzić kogo w co -> zapoznać kogo z czym [fałszywe alarmy] w przypomnieniu -> przypominając [za dużo fałszywych alarmów] do wojny -> przed wojną [fałszywe alarmy, wiele poprawnych zwrotów] więcej chory -> coraz bardziej chory [rzadkie] widzieć się zmuszonym -> być zmuszonym w uzupełnieniu -> uzupełniając do roku -> przed upływem roku [za dużo fałszywych alarmów] trzymać wagę, firmę, mowę ś

Aktualizacja słownika ortograficznego w programie LanguageTool 5.8

Przygotowałem aktualizację słownika ortograficznego stosowanego w programie LanguageTool (będzie dostępna publicznie w nowym wydaniu, 5.8, planowanym na koniec czerwca). Słownik oparty jest przede wszystkim na słownikach dostępnych na sjp.pl , lecz usunąłem trochę mylących wpisów (np. niezalecaną formę „ grejfrut ”) i dodałem trochę funkcji (typu wyrazy pisane z łącznikiem), które są potrzebne. Zdumiało mnie, że poprzednia wersja słownika pochodziła z roku 2008. No cóż, ta zmiana się po prostu należała. W kolejce jest aktualizacja paczki słowników do LibreOffice/OpenOffice.