moj-2024/lab/05_Statystyczny_model_językowy_część_2.ipynb
2024-05-15 10:24:23 +02:00

6.8 KiB

Ekstrakcja informacji

5. Statystyczny model językowy część 2 [ćwiczenia]

NR_INDEKSU = 375985
class Model():
    
    def __init__(self, vocab_size, UNK_token= '<UNK>'):
        pass
    
    def train(corpus:list) -> None:
        pass
    
    def predict(text: list, probs: str) -> float:
        pass
def get_ppl(text: list) -> float:
    pass
text = 'Pani Ala ma kota oraz ładnego pieska i 3 chomiki'
text_splitted = text.split(' ')
text_splitted
['Pani', 'Ala', 'ma', 'kota', 'oraz', 'ładnego', 'pieska', 'i', '3', 'chomiki']
text_masked = text_splitted[:4] + ['<MASK>'] + text_splitted[5:]
text_masked
['Pani',
 'Ala',
 'ma',
 'kota',
 '<MASK>',
 'ładnego',
 'pieska',
 'i',
 '3',
 'chomiki']

trigram_model działa na ['ma', 'kota', <'MASK>']

trigram_model.predict(['ma', 'kota']) → 'i:0.55 oraz:0.25 czarnego:0.1 :0.1'

Jak tunować parametry na zbiorze deweloperskim?

  • tworzymy model opisany jak przez "klasę abstrakcyjną" na początku notebooku. Model ma podany jako parametr konstruktora pewien parametr wygładzania np. alpha
  • tworzymy wiele modeli z różnymi parametrami, uczymy je i sprawdzamy na zbiorze deweloperskim, dostając np. taką tabelkę:
parametr alfa pplHashed na dev-0
0.0 404
0.1 370
0.2 343
0.3 339
0.4 320
0.5 337
0.6 398
0.7 404
0.8 432
0.9 426
1.0 433

Wybieramy najlepszy parametr względem metryki. Tutaj najlepszy wynik to 320 osiągany dla parametru alfa=0.4. Zatem taki model oddajemy w zadaniu na gonito.

Oczywiście robienie tabelki nie jest konieczne. Podobnie postępujemy, jeżeli parametrów będzie więcej niż 1. Ilość modeli do stworzenia będzie rosła wykładnioczo względem ilości parametrów. Np. jeżeli każdy parametr będzie miał 10 możliwości i chcemy przetestować 3 parametry, to mamy 10^3 możliwości. Dlatego warto wtedy ograniczać zakres, np. zamiast 10 możliwości wziąć 3 możliwości.

ZADANIE:

ZADANIE

Proszę za pomocą modelu statystycznego ($n$-gramowego) stworzyć rozwiązanie dla https://gonito.csi.wmi.amu.edu.pl/challenge/challenging-america-word-gap-prediction i umieścić je na platformie Gonito

Warunki zaliczenia:

  • wynik widoczny na platformie zarówno dla dev i dla test
  • wynik dla dev i test lepszy (niższy) od 1024.00
  • deadline do końca dnia 24.04.2024
  • commitując rozwiązanie proszę również umieścić rozwiązanie w pliku /run.py (czyli na szczycie katalogu). Można przekonwertować jupyter do pliku python przez File → Download as → Python. Rozwiązanie nie musi być w pythonie, może być w innym języku.
  • zadania wykonujemy samodzielnie
  • w nazwie commita podaj nr indeksu
  • w tagach podaj "n-grams" (należy zatwierdzić przecinkiem po wybraniu tagu)!

Uwagi:

  • warto skorzystać z jakiejś metody wygładazania (plusalpha, interpolacja, Good-Turing, back-off), bez tego wynik może być bardzo kiepski
  • nie trzeba korzystać z całego zbioru trenującego
  • roziwązanie zadania to 70 punktów,
  • dodatkowo: za najlepsze rozwiązanie w grupie przyznaję 40 punktów, za drugie miejsce: 20 punktów, a za trzecie miejsce: 10 punktów
  • warto monitorować RAM, próbować z różnym vocab_size, można skorzystać z pythonowego Counter
  • warto sobie zrobić dodatkowo model unigramowy w ramach ćwiczenia