diff --git a/04_tokenizacja.ipynb b/04_tokenizacja.ipynb new file mode 100644 index 0000000..96ced02 --- /dev/null +++ b/04_tokenizacja.ipynb @@ -0,0 +1,117 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Zajęcia 4: Tokenizacja (text segmentation)\n", + "\n", + "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`).\n", + "\n", + "Nie należy usuwać komórek z treścią zadań.\n", + "\n", + "Należy wyświetlać outputy przy pomocy `print`\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Dla chętnych - super materiał!\n", + "\n", + "tutorial utworzenia tokenizatora wykorzystanego w modelu GPT-2 przez byłego pracownika OpenAI: https://www.youtube.com/watch?v=zduSFxRajkE\n", + "\n", + "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." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Zadanie 1\n", + "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." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution 1 - write the answer as a comment" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Zadanie 2\n", + "Zaimplementuj algorytm MaxMatch na podstawie listy słów z https://www.kaggle.com/datasets/rtatman/english-word-frequency .\n", + "Funkcja musi przyjmować słownik oraz tekst z usuniętymi spacjami i zwracać listę słów. Przetestuj program na wybranych 2 tekstach w języku angielskim, które zawierają minimum 100 znaków (spacje z tego tekstu można usunąć automatycznie).\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution 2\n", + "\n", + "def maxmatch_text_split(text, vocabulary):\n", + " pass" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Zadanie 3\n", + "\n", + "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.\n", + "\n", + "Po utworzeniu tokenizera należy dokonać tokenizacji innego tekstu o długości minimum 100 znaków.\n", + "\n", + "UWAGA: tokenizator musi najpierw dokonywać tokenizacji we właściwej kolejności (zaczynając od zmergowanych elementów)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution 3\n", + "\n", + "def create_bpe_tokenizer(text, max_vocab_length):\n", + " pass\n", + "\n", + "\n", + "def tokenize_text(text, tokenizer):\n", + " pass" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}