STM. Tworzenie korpusu równoległego.

22:19:00

Maturzyści niedługo będą wybierać swoje wymarzone kierunki studiów, a wyniki matur kolejny raz zadecydują, czy trafią tam, gdzie rzeczywiście trafić chcieli. :) Oczywiście jest to całkiem dobry moment na to, by zachęcić wszystkich do studiowania informatyki - myślę, że czeka Was całkiem dużo roboty. Niemożliwym jest, byśmy w najbliższych latach mieli do czynienia z nadmiarem informatyków na rynku. Wbrew pozorom, chociaż sporo osób dostaje się na studia związane z nowymi technologiami, to bardzo mało studentów je kończy. Informatyka to nie biegłość w obsłudze Facebook'a. Nie jest to też udoskonalanie umiejętności, związanych z tworzeniem prezentacji w PowerPoint. Należy mieć świadomość, że informatyka ma bardzo dużo wspólnego z matematyką. Nie brakuje wkuwania twierdzeń i skomplikowanych wzorów, które należy wykorzystywać w praktyce. 

Studia informatyczne to tak naprawdę ciągłe poznawanie tego, co nieodkryte. Pisanie programów wymaga przede wszystkim kreatywności oraz umiejętności logicznego myślenia. Satysfakcja wynikająca z tworzenia własnych aplikacji jest nie do opisania. 

Napiszę dzisiaj o Statystycznym Tłumaczeniu Maszynowym, ponieważ zbyt wielu z nas nie zdaje sobie sprawy z tego, co jest niepozornym kreatorem sukcesu narzędzi takich jak Google Translate. Kiedy potrzebujemy szybkiego tłumaczenia, nie sięgamy już po zakurzony słownik, który od lat stoi na regale. Google Translate daje nam wiele możliwości - tekst możemy podyktować, zapisać za pomocą klawiatury lub rysika. Oczekując jednak wysokiej jakości, lepiej skorzystać z usług profesjonalnego tłumacza.
Nie ograniczajmy się wyłącznie do translatora zaproponowanego przez giganta z Mountain View. Warto wypróbować Babylon, czy Translatica. Szczególnie polecam Translaticę, która znacznie lepiej radzi sobie z idiomami i bardziej skomplikowanymi wyrażeniami, ponieważ korzysta z dodatkowych słowników.

STM. Co to takiego?
1) Statystyczne - wyliczane są prawdopodobieństwa przetłumaczenia słowa pierwszego języka na słowa drugiego języka i wybierane jest najbardziej prawdopodobne tłumaczenie.
2) Tłumaczenie - szukanie odpowiednika słowa pierwszego języka w drugim języku.
3) Maszynowe - wykorzystujące maszynę, czyli komputer do przeprowadzenia procesu tłumaczenia.

Podstawowe równanie STM, wygląda następująco:


Wyróżniamy tutaj model tłumaczenia oraz model języka. E i F to zmienne losowe, które przebiegają (przykładowo) po wszystkich zdaniach angielskich i francuskich f . Zdanie oznaczone jako e z daszkiem, maksymalizuje funkcję prawdopodobieństwa i staje się najbardziej prawdopodobnym tłumaczeniem f.

Na tym etapie, możemy przejść do interpretacji, która do Was dotrze - bez nieładnie wyglądających równań.

Najprostszym sposobem znalezienia prawdopodobieństwa przetłumaczenia danego słowa na słowo w języku docelowym, jest policzenie następującego ilorazu:



Przykładowo, jeśli niemieckie słowo "Haus" przetłumaczono 8000 razy na angielskie słowo "house", a "Haus" występuje w tekście 10000 razy, to wówczas wynikiem dzielenia będzie prawdopodobieństwo równe 0,8. Konkretniej - oznacza to, że prawdopodobieństwo przetłumaczenia słowa "Haus" na "house" w tym korpusie wynosi 0,8. Wspomnianym tekstem, który analizujemy, jest korpus równoległy.

Przejdziemy teraz do właściwego tematu naszych rozważań, czyli do tworzenia korpusu równoległego. Korpus równoległy pary języków, to nic innego jak zbiór tekstów z odpowiednikami w co najmniej jednym języku. Teksty w korpusie mogą być ze sobą zestawione na poziomie zdania lub akapitu. 

Na zajęciach z Tłumaczenia Automatycznego, tworząc korpusy równoległe ograniczałam się do zapisu w najprostszym formacie tekstowym *.tet. Jedno z zadań polegało na stworzeniu słownika gruzińsko-polskiego. Plik miał wyglądać następująco:

słowo_gruzińskie_1=słowo_polskie_1
słowo_gruzińskie_2=słowo_polskie_2
słowo_gruzińskie_3=słowo_polskie_3
...
Materiałem, na którym bazowałam był dump Wiktionary - dobrze znanego słownika Wikipedii, zawierającego odmiany i znaczenia poszczególnych wyrazów. 

JAK STWORZYĆ KORPUS RÓWNOLEGŁY?

Dump Wiktionary nie jest małym plikiem, więc warto przygotować sobie trochę przestrzeni na dysku. Po ściągnięciu na maszynę, należy zapoznać się z materiałem, na którym będziemy pracować. Oczywiście nie ma mowy o ręcznym i powolnym wyodrębnianiu słów, których jest kilka tysięcy. Potrzebujemy automatycznego narzędzia, które znacznie ułatwi nam pracę. Najłatwiej napisać skrypt - w mniej zaawansowanym bashu lub popularniejszym Python'ie. 
Pracę nad plikiem, podzielmy na następujące etapy:
1) Wyodrębnianie interesującego nas tekstu.
2) Oczyszczenie ze zbędnych znaków i problematycznych linii.
3) Dodanie informacji dla użytkownika.

ETAP 1 - Wyodrębnienie tekstu.
Polecenie: sed
Pełny przykładsed -e '/poczatek/,/koniec/!d' plikbazowy > plikwynikowy
Dodatkowo: 
a) wyodrębnianie tekstu występującego za konkretnym znakiem i usunięcie zbędnych odstępów: sed -e 's/.* naszznak//' -e 's/^ *//;s/ *$//' plikbazowy > plikwynikowy
b) wyodrębnienie tekstu występującego do znaku i usunięcie zbędnych odstępów: 
sed -e 's/naszznak.*//' -e 's/^ *//;s/ *$//' plikbazowy > plikwynikowy

ETAP 2 - Oczyszczanie tekstu.
Polecenie: tr, sed
Pełny przykład: cat plikbazowy| tr -d "[0-9]'[]():." > plikwynikowy
Dodatkowo:
Jeśli chcemy użyć polecenia sed -e odpowiedniewyrazenie plikbazowy > plikwynikowy , to za odpowiedniewyrazenie możemy podstawić na przykład:
a) '2877d' - usunięcie linii o odpowiednim numerze

Aby scalić dwie kolumny (zapisane w dwóch różnych plikach), w jeden plik, stosujemy polecenie: 
pr -m -J -s= -t -T czescpierwsza czescdruga > plikwynikowy , gdzie -s oznacza odpowiedni separator.

ETAP 3 - Dodanie informacji dla użytkownika. Polecenie: echo 
Pełny przykład:
Zliczamy linie w pliku i podajemy informację użytkownikowi.
slowa=`wc -l plik`
echo "Ilość haseł: " $slowa

.madebytechnology