{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "723b5d4d", "metadata": {}, "outputs": [], "source": [ "import jax\n", "import optax\n", "import flax\n", "import jax.numpy as jnp\n", "import datasets\n", "from flax.training import train_state\n", "from flax.training.common_utils import get_metrics, onehot, shard\n", "from datasets import load_dataset\n", "from tokenizers import trainers, Tokenizer, normalizers, ByteLevelBPETokenizer\n", "from pathlib import Path\n", "import numpy as np\n", "import transformers\n", "from tqdm.notebook import tqdm\n", "from pathlib import Path\n", "from transformers import AutoConfig\n", "from typing import Dict, List, Optional, Tuple\n", "from transformers import AutoTokenizer\n", "from transformers import PreTrainedTokenizerBase\n", "from transformers import FlaxAutoModelForMaskedLM\n", "from dataclasses import dataclass, field\n", "import time\n", "import glob\n", "import random" ] }, { "cell_type": "code", "execution_count": 2, "id": "f4a5edee", "metadata": {}, "outputs": [], "source": [ "from transformers import AutoConfig\n" ] }, { "cell_type": "code", "execution_count": 3, "id": "48daf2ec", "metadata": {}, "outputs": [], "source": [ "\n", "\n", "config = AutoConfig.from_pretrained(\"google/bigbird-roberta-base\")" ] }, { "cell_type": "code", "execution_count": 4, "id": "fc816572", "metadata": {}, "outputs": [], "source": [ "config.save_pretrained(\"./\")" ] }, { "cell_type": "code", "execution_count": null, "id": "39b9fc3d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "ba855add", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 11, "id": "59076aa7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of files 20 after adding /data/c4_cleaned\n" ] } ], "source": [ "#59G c4_cleaned compressed\n", "#937M nrc_uniq_cleaned_20210223 compressed\n", "#410M nu_uniq_cleaned_20210225 compressed\n", "#9.9G oscar_nl_cleaned compressed\n", "\n", "\n", "\n", "data_files = []\n", "SEED=42\n", "def add_jsonlines_dir(path):\n", " global data_files\n", " #data_files += glob.glob(f\"{path}/*47*.gz\")\n", " #data_files += glob.glob(f\"{path}/*32*.gz\")\n", " #data_files += glob.glob(f\"{path}/*59*.gz\")\n", " data_files += glob.glob(f\"{path}/*11*.gz\")\n", " print(f\"Number of files {len(data_files)} after adding {path}\")\n", " \n", "add_jsonlines_dir(\"/data/c4_cleaned\")\n", "#add_jsonlines_dir(\"/data/nrc_uniq_cleaned_20210223\")\n", "#add_jsonlines_dir(\"/data/nu_uniq_cleaned_20210225\")\n", "#add_jsonlines_dir(\"/data/oscar_nl_cleaned\") This one gives an error like field url not in \n", "\n" ] }, { "cell_type": "code", "execution_count": 40, "id": "fc9519d2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of files 209 after adding /data/oscar_nl_cleaned\n", "95%: 199\n", "Got 199 training files and 10 validation files\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Using custom data configuration default-00e4c1e272015fdb\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Downloading and preparing dataset json/default (download: Unknown size, generated: Unknown size, post-processed: Unknown size, total: Unknown size) to /home/dat/.cache/huggingface/datasets/json/default-00e4c1e272015fdb/0.0.0/f92a4de297ac644ad9781979b79064b0e222b3af766f8ea3bee32390dca23723...\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "7fc9159a741a4853abb8fa1abcb8bd4c", "version_major": 2, "version_minor": 0 }, "text/plain": [ "0 tables [00:00, ? tables/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "db9fc4eb87094fa9aef909f8e8d41124", "version_major": 2, "version_minor": 0 }, "text/plain": [ "0 tables [00:00, ? tables/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Dataset json downloaded and prepared to /home/dat/.cache/huggingface/datasets/json/default-00e4c1e272015fdb/0.0.0/f92a4de297ac644ad9781979b79064b0e222b3af766f8ea3bee32390dca23723. Subsequent calls will reuse this data.\n" ] } ], "source": [ "#59G c4_cleaned compressed\n", "#937M nrc_uniq_cleaned_20210223 compressed\n", "#410M nu_uniq_cleaned_20210225 compressed\n", "#9.9G oscar_nl_cleaned compressed\n", "\n", "\n", "\n", "data_files = []\n", "SEED=42\n", "def add_jsonlines_dir(path,filespec):\n", " global data_files\n", " data_files += glob.glob(f\"{path}/{filespec}\")\n", " print(f\"Number of files {len(data_files)} after adding {path}\")\n", " \n", "#add_jsonlines_dir(\"/home/dat/subset_c4_cleannl\",\"*.gz\") \n", "add_jsonlines_dir(\"/data/oscar_nl_cleaned\",\"*.gz\")\n", "#add_jsonlines_dir(\"/data/nrc_cleaned_idtextfmt\",\"*.gz\")\n", "#add_jsonlines_dir(\"/data/nu_cleaned_idtextfmt\",\"*.gz\")\n", "random.Random(SEED).shuffle(data_files)\n", "total = len(data_files)\n", "val_size = int(0.05 * total)\n", "train_size = total - val_size\n", "print(f\"95%: {train_size}\")\n", "train = data_files[:train_size]\n", "val = data_files[train_size:]\n", "print(f\"Got {len(train)} training files and {len(val)} validation files\")\n", "assert list(set(train) & set(val)) == [], \"Train overlaps with test\"\n", "datasets = load_dataset('json', data_files={'train': train, 'validation': val})\n", "\n", "\n", "assert list(set(train) & set(val)) == [], 'train overlaps with test'\n" ] }, { "cell_type": "code", "execution_count": 41, "id": "865a9642", "metadata": {}, "outputs": [], "source": [ "dataset_iterator = iter(datasets['train'])" ] }, { "cell_type": "code", "execution_count": 78, "id": "523b0fc2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Zo stel ik het me voor. Tegen iedere conventie in. Och wat heeft de burgerij gemopperd en schande gesproken. Dat was in die dagen. Nu nog steeds, maar anders. Daarover later meer. En wat zullen ze van u gehouden hebben in de kleine kring van liefhebbers.\n", "Jaren geleden, toen ik nog op de academie zat bestudeerde ik uw werk. Vooral de paar overgebleven foto’s van uw Merzbau in Hannover troffen mij. Zo vrij en swingend en onconventioneel.\n", "Ze werden opgeslagen in een afgelegen kamer in mijn geheugen, want eigentijdse choreografen en filmmakers en schilders uit de vroege renaissance vroegen om voorrang.\n", "Toen u het huis van uw ouders in Hannover betrok transformeerde u acht kamers tot een betoverende sculptuur. Merzbau! Kathedrale des erotischen Elend.\n", "In abstracte vlakken en vormen kruipen de volumes chaotisch omhoog langs de muren. Meestal wit. Er vormen zich ruimtes en grotachtige structuren. Hier en daar een typografisch detail of een herkenbaar object, dat uit zijn context geslingerd, vooral vragen oproept. Met hier en daar een antwoord of een vermoeden daarvan.\n", "Soms verborg u zich in het kleine orgelkamertje bovenin als er gasten kwamen, om de reactie op hun gezichten te lezen als ze uw gedichten of het karnavals-achtige nummer Du lieber Augustin door de fantastische ruimte hoorden schallen, een lied vol humor en boerse middeleeuwse wreedheid, maar ook melancholie.\n", "Banale liedjes laten horen in een ruimte die verschillende betekenissen kan hebben. Ik herken dat zo. Wij deden dat ook in het theater.\n", "Ik vraag nu toch uw hand, zo’n beetje dwars door de tijd, om een paar pirouettes te draaien of misschien beter een twist.\n", "Het gewicht van de tapijten of het zeil waaronder ik zowat bezwijk, de inspanning om hoog in de opstelling een klosje op te hangen… Op een gegeven moment raak ik in een staat waarin ik niet meer nadenk. Dan doe ik de ingreep die een beeld uiteindelijk af maakt. Grappig niet?\n", "Ik vermoed dat u dat ook heeft, dat zware fysieke werken aan Merzbau; dat dat fijn is, dat het zo echt is daardoor en dat je uiteindelijk in trance raakt.\n", "Daar leefde u van werken in opdracht; portretten en landschappen. Beeldschoon werk, maar u deed niet anders dan erop mopperen.\n", "Ondertussen begon u een nieuwe Merzbau in een schuur op het platteland. U groef er een verdieping onder en begon daar te merzen. Weer die zware fysieke arbeid. Dat beschouwde u als uw echte werk. Daar legde u ‘connecties tussen alles in uw wereld’, al uw werk ‘een levenslange ervaring’.\n", "Maar uw landschappen hoorden daar niet bij. Dat is nu vreemd, jammer zelfs. Tenminste, gezien vanuit mijn perspectief, vanuit het heden. Ze komen immers uit dezelfde bron. Is het omdat ze niet abstract zijn?\n", "Per Kirkeby is een beroemd Deens schilder en beeldhouwer, graficus en dichter. Nu tachtig jaar oud. U zou hem weten te waarderen. Ook niet binnen een -isme te vangen. Hij heeft heel mooi over zuivere en onzuivere kunst gesproken. Dit klinkt een beetje eng maar ging over zuiver in de zin van kaal en zonder betekenis en in het onzuivere zaten alle associaties en verwijzingen.\n", "In míjn werk houd ik van de associaties en verwijzingen. Maar we leven nu in een andere tijd. Pure abstractie wordt zeker nog gevierd door sommige kunstenaars, en zeker niet de minsten, maar de revolutie die het in uw tijd ontketende is uitgewoed.\n", "Ik houd ervan dat in mijn werk niks helemaal lijkt te kloppen, maar er is wel samenhang. De objecten zijn volgens een innerlijke logica gekozen. Maar het mag geen surealisme worden. Daar houd ik niet van. Het is een smalle marge waarin ze mogen bestaan.\n", "Het gaat vreemd genoeg volgens schilderkunstige principes, al komt er geen verf aan te pas. Ik bouw mijn opstellingen laag voor laag op. Vanuit de achtergrond. Ik doe weg, of bedek wat te makkelijk te duiden is en daarmee het beeld plat slaat, of wat ik te mooi of esthetisch vind. Soms draait het zich om, behoud ik juist wat mooi of betekenisvol is. Ik zet voortdurend voetangels en klemmen voor mijzelf. En ik geloof dat dat de kwaliteit van het werk uitmaakt.\n", "Ik vraag me af in hoeverre dit een wet is die voor alle kunst opgaat. Ik geloof het wel. Al gebeurt het soms alleen in het denkproces dat vooraf gaat aan de uitvoering van het werk.\n", "Ik ken het in ieder geval heel goed uit mijn theaterwerk. Dat schaven aan een productie tot alle puzzelstukken op hun plaats vallen.\n", "Ik kan mij voorstellen dat dat zelfs bij Mondriaan gebeurde. Zijn Victory Boogy Woogy heeft zo iets magisch ongrijpbaars. En toch staan alle vlakken gewoon op hun plek. Daar is zoveel jaar werk voor nodig geweest!\n", "In zijn vroege werken, ook landschappen en bomen, proef je wat er allemaal in zit. In die man bedoel ik en in die doeken.\n", "Ik wil maar zeggen, die landschappen van u zijn denk ik toch met dezelfde mentaliteit gemaakt als uw dichtwerk of Merzbau. Ze zijn in ieder geval door u gemaakt. Met uw hand, uw geest, uw afwegingen tijdens het schilderen. Dit wel, dit niet.\n", "Maar niet mystiek of transcendent? Ik lees in andere bronnen over Dada’s grondslag; Boeddhisme, Taoisme, vroegchristelijke mystici, en over filosofen als Bergson, Nietzsche en Descartes. Nogal tegenstrijdig allemaal.\n", "En dat DaDa niets is, dat wil zeggen alles, of het niet-iets, of een vogel op vier poten, of een levensverzekering of een ladder zonder sporten….\n", "Ik heb een leven lang studie en kijken en nog eens kijken voor me, om dit alles te doorvorsen. Maar begrijpen doe ik het al. Op m’n intuïtie.\n" ] } ], "source": [ "print(next(dataset_iterator)['text'])" ] }, { "cell_type": "code", "execution_count": 31, "id": "b5839c79", "metadata": {}, "outputs": [ { "ename": "IndentationError", "evalue": "unexpected indent (1021262509.py, line 15)", "output_type": "error", "traceback": [ "\u001b[0;36m File \u001b[0;32m\"/tmp/ipykernel_309684/1021262509.py\"\u001b[0;36m, line \u001b[0;32m15\u001b[0m\n\u001b[0;31m train, val = train_val_files()\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mIndentationError\u001b[0m\u001b[0;31m:\u001b[0m unexpected indent\n" ] } ], "source": [ "\n", " add_jsonlines_dir(\"/home/dat/subset_c4_cleannl\") \n", " add_jsonlines_dir(\"/data/oscar_nl_cleaned\")\n", " add_jsonlines_dir(\"/data/nrc_cleaned_idtextfmt\")\n", " add_jsonlines_dir(\"/data/nu_cleaned_idtextfmt\")\n", " random.Random(SEED).shuffle(data_files)\n", " total = len(data_files)\n", " val_size = int(0.05 * total)\n", " train_size = total - val_size\n", " print(f\"95%: {train_size}\")\n", " train = data_files\n", " val = data_files\n", " print(f\"Got {len(train)} training files and {len(val)} validation files\")\n", " assert list(set(train) & set(val)) == [], \"Train overlaps with test\"\n", " return train, val\n", " train, val = train_val_files()\n", " datasets = load_dataset('json', data_files={'train': train, 'validation': val})" ] }, { "cell_type": "code", "execution_count": 4, "id": "6685589f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "\n" ] } ], "source": [ "from tokenizers import ByteLevelBPETokenizer\n", "tokenizer = ByteLevelBPETokenizer()\n", "\n", "def batch_iterator(batch_size=1000):\n", " for i in range(0, len(datasets), batch_size):\n", " yield datasets[\"train\"][i: i + batch_size][\"text\"]\n", "\n", "tokenizer.train_from_iterator(batch_iterator(), vocab_size=50358, min_frequency=2, special_tokens=[\n", " \"\",\n", " \"\",\n", " \"\",\n", " \"\",\n", " \"\",\n", "])" ] }, { "cell_type": "code", "execution_count": 5, "id": "5fed49b4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "39503" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tokenizer.get_vocab_size()" ] }, { "cell_type": "code", "execution_count": 6, "id": "69401680", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/home/dat/pino-roberta-base\n" ] } ], "source": [ "cd ~/pino-roberta-base" ] }, { "cell_type": "code", "execution_count": 7, "id": "7a98d754", "metadata": {}, "outputs": [], "source": [ "tokenizer.save(\"tokenizer.json\")" ] }, { "cell_type": "code", "execution_count": null, "id": "e686b9c8", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Using custom data configuration nl-lang=nl\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Downloading and preparing dataset cc100/nl (download: Unknown size, generated: Unknown size, post-processed: Unknown size, total: Unknown size) to /home/dat/.cache/huggingface/datasets/cc100/nl-lang=nl/0.0.0/b583dd47b0dd43a3c3773075abd993be12d0eee93dbd2cfe15a0e4e94d481e80...\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "8bb6155775084c42841d5a786a3f014c", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Downloading: 0%| | 0.00/8.42G [00:00