pjn-2024-cw/04_tokenizacja.ipynb
Ryszard Staruch d0c8533ad4 Update zad 2
2024-10-30 16:50:02 +01:00

3.7 KiB

Zajęcia 4: Tokenizacja (text segmentation)

Wszystkie zadania ćwiczeniowe należy rozwiązywać w języku Python w kopii Jupyter Notebook'a dla danych zajęć w wyznaczonych miejscach (komórki z komentarzem # Solution).

Nie należy usuwać komórek z treścią zadań.

Należy wyświetlać outputy przy pomocy print

Dla chętnych - superaśny materiał!

tutorial utworzenia tokenizatora wykorzystanego w modelu GPT-2 przez byłego pracownika OpenAI: https://www.youtube.com/watch?v=zduSFxRajkE

Powyższy materiał wyczerpująco opisuje różne zagadnienia tokenizacji - jeżeli ktoś jest bardziej zainteresowany NLP to powinien zapoznać się z tym materiałem.

Zadanie 1

Wejdź na stronę https://tiktokenizer.vercel.app/ i sprawdź jak wielkie modele języka dzielą tekst na tokeny. Przetestuj teksty z języku polskim oraz angielskim. Napisz różnice między tokenizacją tekstu w języku polskim, a tokenizacją tekstu w języku angielskim.

# Solution 1 - write the answer as a comment

Zadanie 2

Zaimplementuj algorytm MaxMatch na podstawie listy słów z https://www.kaggle.com/datasets/rtatman/english-word-frequency . Funkcja musi przyjmować słownik oraz tekst z usuniętymi spacjami i znakami interpunkcyjnymi (jedynie litery) i zwracać listę słów. Przetestuj program na wybranych 2 tekstach w języku angielskim, które zawierają minimum 100 znaków (znaki inne niż litery z tego tekstu można usunąć automatycznie). Proszę uwzględnić, czy w liście słów znajdują się wielkie litery.

# Solution 2

def maxmatch_text_split(text, vocabulary):
    pass

Zadanie 3

Zaimplementuj algorytm BPE na podanym tekście (jako najmniejszą jednostkę należy traktować pojedynczy znak - również spację). Funkcja musi przyjmować tekst oraz maksymalną liczbę elementów w słowniku, a na koniec zwracać tokenizer. Przetestuj program na tekście zawierającym minimum 10000 znaków dla max_vocab_length=500.

Po utworzeniu tokenizera należy dokonać tokenizacji innego tekstu o długości minimum 100 znaków.

UWAGA: tokenizator musi najpierw dokonywać tokenizacji we właściwej kolejności (zaczynając od zmergowanych elementów).

# Solution 3

def create_bpe_tokenizer(text, max_vocab_length):
    pass


def tokenize_text(text, tokenizer):
    pass