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ę ś

Wikipedia history diff as a revision corpus

(As this is of interest not only to the Polish-speaking community, this post is in English.) Recently, after some discussions on the lingucomponent list at OpenOffice.org on the method of finding frequent typos, I did some experiments on the revision history logs. Background. The developers of grammar checkers, and autocorrect lists, have hard times with finding relevant corpora. Revision history is an excellent source about native speakers perception of linguistic norms. Frequently revised typos are perceived as errors that need to be corrected, so using these typos on autocorrect lists is justified. The same goes for style, grammar and usage errors. Method . Experiments involved three steps: Clean the history dump (??wiki-latest-pages-meta-history.xml), to get only relevant parts of the dump. Using XML tools isn't recommended (I tried XSLT, forget it). Using a simple awk script, I was able to clean the > 30GB dump in an hour or so, and got a >17 GB file. The script is simp