aitech-moj-2023/cw/05_statystyczny_model_język...

6.6 KiB

Logo 1

Ekstrakcja informacji

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

Jakub Pokrywka (2022)

Logo 2

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'

ZADANIE:

g1 = [470618, 415366, 434695, 470611, 470607]
g2 = [440054, 434742, 434760, 434784, 434788]
g3 = [434804, 430705, 470609, 470619, 434704]
g4 = [434708, 470629, 434732, 434749, 426206]
g5 = [434766, 470628, 437622, 434780, 470627, 440058]
if NR_INDEKSU in g1:
    print('model bigramowy standardowy')
elif NR_INDEKSU  in g2:
    print('model bigramowy odwrotny')
elif NR_INDEKSU  in g3:
    print('model trigramowy')
elif NR_INDEKSU  in g4:
    print('model trigramowy odwrotny')
elif NR_INDEKSU  in g5:
    print('model trigramowy ze zgadywaniem środka')
else:
    print('proszę zgłosić się do prowadzącego')
model trigramowy odwrotny

gonito:

  • zapisanie do achievmentu przez start working
  • send to review

ZADANIE

Proszę stworzyć rozwiązanie modelu (komórka wyżej) dla https://gonito.net/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 27.04
  • 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 wymyślić jakąś metodę wygładazania, bez tego może być bardzo kiepski wynik
  • nie trzeba korzystać z całego zbioru trenującego
  • zadanie to 70 punktów, za najlepsze rozwiązanie w swojej grupie przyznaję dodatkowo 40 punktów
  • punkty będą przyznane na gonito
  • 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