{ "cells": [ { "cell_type": "markdown", "id": "34012aa1", "metadata": {}, "source": [ "# Topic 6: From notebook to batch job, and playing with the trained model\n", "\n", "A real training run takes hours, which doesn't fit in an interactive session, so Topic 5's notebook became a script, `train_ngram.py`, plus a batch script, `train_ngram.qsub`.\n", "The script trains on the **full** WikiText-103 (~100M words) on a GPU and saves a model file.\n", "This notebook loads that trained model in inference mode and explores it: next-word predictions, text generation, word vectors, and ways to measure how good it is." ] }, { "cell_type": "markdown", "id": "f3b37b8b", "metadata": {}, "source": [ "## 0. How the model was trained\n", "`train_ngram.py` keeps every setting in one `DEFAULTS` dict, and each setting can be overridden on the command line (e.g. `--n 5` for a 5-gram model, `--work_dir` for where files go).\n", "`train_ngram.qsub` asks the batch system for 1 GPU with compute capability ≥ 8.0, 8 CPU cores (for `DataLoader` workers) and 12 hours, then runs the script:\n", "\n", "```bash\n", "qsub train_ngram.qsub # submit\n", "qstat -u $USER # is it queued (qw) or running (r)?\n", "tail -f ngram_wt103.o # watch the log\n", "qsub train_ngram.qsub # out of walltime? submit again: it resumes from latest.pt\n", "```\n", "\n", "Compared to Topic 5 the script adds bfloat16 mixed precision (`torch.autocast`), a warmup + cosine learning-rate schedule, a time limit that saves a checkpoint before the walltime, and a final export `model.pt` (weights + config + vocabulary, without the optimizer state) that is all we need here." ] }, { "cell_type": "markdown", "id": "4483b231", "metadata": {}, "source": [ "## 1. Setup and loading the trained model\n", "We import the model class straight from the training script, so the notebook and the script can never disagree about the architecture.\n", "`RUN_DIR` points at the training run's `work_dir`; inference is cheap, so a CPU is fine." ] }, { "cell_type": "code", "execution_count": 1, "id": "1259b7a0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "device: cpu\n" ] } ], "source": [ "import json, math, os, re\n", "\n", "import numpy as np\n", "import torch\n", "import torch.nn.functional as F\n", "import matplotlib.pyplot as plt\n", "\n", "from train_ngram import build_model, iter_lines\n", "\n", "RUN_DIR = \"runs/wt103_n5\" # <-- the --work_dir of the training run\n", "DATA_DIR = \"/project/scv/examples/machine_learning/tutorials/LLM/data/datasets/WikiText103/wikitext-103\"\n", "N_EVAL = 20_000 # test positions scored below (raise it on a GPU)\n", "\n", "torch.manual_seed(1337)\n", "device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n", "print(\"device:\", device)" ] }, { "cell_type": "markdown", "id": "d9a6b110", "metadata": {}, "source": [ "The exported `model.pt` carries its own config and vocabulary, so we rebuild the model from those and load the weights.\n", "`model.eval()` switches to inference mode and `torch.no_grad()` (below) skips gradient bookkeeping." ] }, { "cell_type": "code", "execution_count": 2, "id": "de79fc00", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'n': 5, 'vocab_size': 32768, 'n_embd': 256, 'n_hidden': 2048, 'batch_size': 1024, 'max_steps': 500000}\n", "77,629,440 parameters, trained for 500,000 steps\n", "val loss 4.468 (ppl 87) | test loss 4.469 (ppl 87)\n" ] } ], "source": [ "ckpt = torch.load(os.path.join(RUN_DIR, \"model.pt\"), map_location=device, weights_only=True)\n", "cfg, itos = ckpt[\"config\"], ckpt[\"itos\"]\n", "stoi = {w: i for i, w in enumerate(itos)}\n", "UNK, EOS, context = stoi[\"\"], stoi[\"\"], cfg[\"n\"] - 1\n", "\n", "model = build_model(cfg).to(device)\n", "model.load_state_dict(ckpt[\"model\"])\n", "model.eval()\n", "\n", "print({k: cfg[k] for k in [\"n\", \"vocab_size\", \"n_embd\", \"n_hidden\", \"batch_size\", \"max_steps\"]})\n", "print(f\"{sum(p.numel() for p in model.parameters()):,} parameters, trained for {ckpt['step']:,} steps\")\n", "print(f\"val loss {ckpt['val_loss']:.3f} (ppl {math.exp(ckpt['val_loss']):.0f}) | \"\n", " f\"test loss {ckpt['test_loss']:.3f} (ppl {math.exp(ckpt['test_loss']):.0f})\")" ] }, { "cell_type": "markdown", "id": "8fa1d163", "metadata": {}, "source": [ "The script logged training and validation loss to `metrics.jsonl` (one JSON record per line), so we can plot the learning curves of the whole run.\n", "Validation loss tracking training loss closely means the model is not overfitting; a widening gap would mean it is memorizing." ] }, { "cell_type": "code", "execution_count": 3, "id": "8de93d12", "metadata": {}, "outputs": [ { "data": { "image/png": "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12jO89ofIj235ORk5s6dy4svvnhArtlaSBHXBlEVcGqmG9UQgsmdzgRgecGPlPoLURUFoTqoOud9hKISnf0jWtme1tyyRCKR/GmJiYlhxowZZGZmtui65eXlzJw5M0yMHKhrReLnn39m+fLlXHbZZfbYZ599xo033si///1vrrrqqgO+h+YQ6bkB3HLLLdx///34/f5W2lnLI+vEtUEUFDS1OhauV+JAusf3Y2vZehbu/YqL+v4NQwhKojvgSO1LVP46XHtXQo8+rbdpiUQiOQR48sknGT16NGPHjg0bf/DBBznhhBMYPnw49913H4ZhoGkaXbp04cQTT6Rdu3ZNvtaXX37JmjVr6NGjB8cdd1yt4/VdxzAMHn30UQCeffZZ0tPT6dy5M+edd17Eay1YsIAFCxbgcrk48cQT6d27t32suLiYJ598kmuvvZYlS5awfv16OnbsyJlnnonDUbcMeP755zn77LNxuVx4PB4efPBBtm7dyrx58ygtLeW4446je/fuvPjii9xxxx12L1Cfz8cDDzzAZZddRseOHZv83ADy8vL47LPPKC0tZfjw4UycODHs+Pr16/n2228BGD16NGPGjKn3uV166aVMnjwZn8/H559/zrRp05q1r7aGtMS1RRRwauZbI4RAUeCEjuYv3IK8z4lyCBKjneiGwJc+FID231xhlxtpLrJMiUQiaS1yK3JZkrOE3IoD6yZcvXo1999/f9jY4sWLueuuu0hJSQkb93q9zJ49m379+rFq1ao614zkHrz88sv5y1/+ws6dO3nnnXeYMGFCnec39jp1XevGG2/kpJNOYtu2bSxevJiBAwfy1ltv2ceLi4uZOXMmkyZN4qWXXiInJ4fbb7+dqVOn1nkdIQTffvstRx55ZL372bNnDzNnzsTj8dhjPp+vya7jUNasWUPPnj355ptv2Lt3L7NmzeLSSy+1jz/yyCNMmDCBdevWsX37dqZNm8ZNN93U4LoOh4Px48czZ86cZu2rTSIkESkpKRGAKCkpOejXLq3yifU55nWXbisQq3cVi6Xb88SYNyeIga8PFG+s+lSs2V0sduRXiJwV3wgxI8H82vBVs6+p64ZYvau4pW5BIpEc5lRVVYl169aJqqoqe8wwDFHhq2jy1zvr3xGDXx8sBr4+UAx+fbB4Z/07TV7DMIxG7XvevHnC4XCIvLw8e+y6664T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q8lRRx3FEUccwcsvv8y1114LwPXXX88RRxwRNu+ll17is88+448//mDChAmccMIJPPLII/a9NuZ5hXLNNddwyimnMHfuXEpKSvjvf//LcccdZ1tbb7nlFqZOnco333xDRUUFxxxzDJMnTw6reVfzuYHprr777rttF/DhgCJa0Yd21VVXMXfuXI4//nh7rEOHDtx99937dc6+ffs49thj8fl8DB48mO+++45zzz230X3ewAx+TExMpKSkpFWycyy25VeQXViJU1OIcznolBxDtMtg4nuTKPeXcmnPmQxOGU9Ggpv4si10eTdYEPHG1ZDUme/W5TGwQyKZiZH/L8qi0hdgfU4pI7qk1DtPIpFIwHT/bdu2jW7dutVppZEc+mzatInvvvuOq6++urW3sl8UFRXx/PPP849//MN2YbcG9f3dNEd3tLo7ddiwYU0SV40558477wRgxYoVxMTEsHz5ckaOHMmpp57KySefvF/7PdhEOVRUBbRgP9XkWLNUyPGdTuPjrW8yf+8nDEoeD4DSri9F6aNJ3rsY1n0G48z/c2pMyoK0xEkkEomkJr169aJXr16tvY39Jjk52dYGhxOtntiwd+9e3njjDT799FP27Glc/8/6zjEMg/fee49LLrmEmBizZtCIESMYN24c7777bovv/0DTPtHNmO6pxLudlHurs39O6jINBZVNpSvIrdphC7B9naYA4Fv9kZ2o0BhxJvWbRCKRSCSHFq0u4nbs2MHXX3/N448/To8ePfjPf/6zX+fs3LmTsrIy+vfvH3ZO//79a8XSheL1eiktLQ37agsoioJTU+mUEk2nlOoU+oyY9gxJMYs7/pL3CQKzWG9B58kAROUsZ+3WbKBxAk00osSIx6+zPb+iObchkUgkEomkhWkxEVdWVtbkEhWXXHIJW7Zs4e233+ann37i2Wef5aabbmL58uXNPscSX0lJSWHnJScn1yvMZs2aRWJiov3VqVOnJt3LgSbe7SQrsVrEKcDRWVMBWFowlwp/OYYQBGLSIbEzAI59pmhtzPvSmGK/ft3Apxv1T5JIJBKJRHJQaJaIW79+Pbfffrv9+oYbbiAhIYH27duH1YppiNGjR4dlk1xyySWkpaXZacLNOSc62hQ6NevDlJaW2u7VSNx5552UlJTYXzt37mz0fbQGigI94oaSGd0Vn+FhTvZ7/J6/nBJfPmQN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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "records = [json.loads(line) for line in open(os.path.join(RUN_DIR, \"metrics.jsonl\"))]\n", "train = [(r[\"step\"], r[\"train_loss\"]) for r in records if \"train_loss\" in r]\n", "val = [(r[\"step\"], r[\"val_loss\"]) for r in records if \"val_loss\" in r]\n", "\n", "steps, losses = zip(*train)\n", "w = max(1, min(20, len(losses) // 5)) # smoothing window\n", "smooth = np.convolve(losses, np.ones(w) / w, mode=\"valid\")\n", "plt.figure(figsize=(7, 3.5))\n", "plt.plot(steps, losses, alpha=0.3, lw=0.5, label=\"train (logged batches)\")\n", "plt.plot(steps[w - 1:], smooth, label=\"train (smoothed)\")\n", "plt.plot(*zip(*val), \"o-\", ms=3, label=\"validation (full set)\")\n", "plt.xlabel(\"step\"); plt.ylabel(\"cross-entropy loss\"); plt.ylim(min(losses) - 0.2, min(losses) + 2)\n", "plt.legend(); plt.show()" ] }, { "cell_type": "markdown", "id": "3f624ee3", "metadata": {}, "source": [ "## 2. Next-word prediction on real text\n", "We tokenize the **test** split (never seen in training) with the model's vocabulary; WikiText is already split into words, so this is just `split()` and a dictionary lookup." ] }, { "cell_type": "code", "execution_count": 4, "id": "176a16f2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "244,102 test tokens, 4.8% are \n", "= Robert = Robert is an English film , television and theatre actor . He had a guest @-@ starring role on the television series The Bill in 2000 . This was followed by a starring role\n" ] } ], "source": [ "test_ids = np.array([stoi.get(w, UNK) for words in iter_lines(os.path.join(DATA_DIR, \"wiki.test.tokens\")) for w in words])\n", "print(f\"{len(test_ids):,} test tokens, {(test_ids == UNK).mean():.1%} are \")\n", "\n", "def show(ids):\n", " return \" \".join(itos[i] for i in ids)\n", "\n", "print(show(test_ids[:40]))" ] }, { "cell_type": "markdown", "id": "069c6f8b", "metadata": {}, "source": [ "`predict()` returns the model's top-k next words for a context; the model only ever sees the last `n-1` words, and shorter inputs are padded with `` (as if they started a new line)." ] }, { "cell_type": "code", "execution_count": 5, "id": "c040ed08", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "'the United States' -> [('Navy', 0.047), ('Census', 0.038), ('Army', 0.037), ('Geological', 0.034), ('Congress', 0.033)]\n", "'he was born in' -> [('', 0.162), ('the', 0.107), ('a', 0.039), ('New', 0.021), ('England', 0.016)]\n", "'one of the most' -> [('important', 0.083), ('popular', 0.065), ('successful', 0.051), ('powerful', 0.046), ('', 0.035)]\n", "'the end of the' -> [('war', 0.118), ('season', 0.061), ('year', 0.05), ('month', 0.027), ('decade', 0.025)]\n", "'it was released on' -> [('the', 0.067), ('November', 0.061), ('DVD', 0.061), ('April', 0.053), ('October', 0.05)]\n" ] } ], "source": [ "@torch.no_grad()\n", "def predict(words, k=5):\n", " ids = ([EOS] * context + [stoi.get(w, UNK) for w in words.split()])[-context:] # pad short inputs\n", " probs = F.softmax(model(torch.tensor([ids], device=device)), dim=-1)[0]\n", " p, ix = probs.topk(k)\n", " return [(itos[i], round(pi, 3)) for pi, i in zip(p.tolist(), ix.tolist())]\n", "\n", "for text in [\"the United States\", \"he was born in\", \"one of the most\", \"the end of the\", \"it was released on\"]:\n", " print(f\"{text!r:22} -> {predict(text)}\")" ] }, { "cell_type": "markdown", "id": "99aee486", "metadata": {}, "source": [ "Now we score `N_EVAL` consecutive test positions in batches: for each one, the probability the model gave the word that actually came next, and that word's rank among all candidates.\n", "These numbers drive the examples below and the quantitative section at the end." ] }, { "cell_type": "code", "execution_count": 6, "id": "11c444a4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "scored 20,000 positions | loss 4.168 | top-1 correct 29.2% | top-5 51.7%\n" ] } ], "source": [ "@torch.no_grad()\n", "def score(ids, n_positions, batch_size=1024):\n", " windows = np.lib.stride_tricks.sliding_window_view(ids, context + 1)[:n_positions]\n", " p_true, rank, p_top, top = [], [], [], []\n", " for i in range(0, len(windows), batch_size):\n", " chunk = torch.from_numpy(windows[i : i + batch_size].astype(np.int64)).to(device)\n", " probs = F.softmax(model(chunk[:, :-1]), dim=-1)\n", " y = chunk[:, -1]\n", " pt = probs.gather(1, y[:, None])[:, 0]\n", " p_true.append(pt.cpu()); rank.append((probs > pt[:, None]).sum(1).cpu())\n", " pmax, amax = probs.max(1)\n", " p_top.append(pmax.cpu()); top.append(amax.cpu())\n", " return windows, torch.cat(p_true), torch.cat(rank), torch.cat(p_top), torch.cat(top)\n", "\n", "windows, p_true, rank, p_top, top = score(test_ids, N_EVAL)\n", "print(f\"scored {len(windows):,} positions | loss {-p_true.log().mean():.3f} | \"\n", " f\"top-1 correct {(rank == 0).float().mean():.1%} | top-5 {(rank < 5).float().mean():.1%}\")" ] }, { "cell_type": "markdown", "id": "9da5a5e6", "metadata": {}, "source": [ "**Successes:** positions where the model was confident and right.\n", "We print a bit more of the preceding text for readability, with the model's actual input in `[brackets]`; these are mostly fixed phrases and grammar that 4 words of context really do pin down." ] }, { "cell_type": "code", "execution_count": 7, "id": "b39fe80b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "... features scenes reminiscent of the films South Pacific [, To Catch a] -> predicted 'Thief' (0.84), actual 'Thief' (0.84)\n", "... a 4 @-@ tonne ( 3 @.@ [9 @-@ long @-@] -> predicted 'ton' (0.75), actual 'ton' (0.75)\n", "... in ) at deep load . They displaced [36 @,@ 500 long] -> predicted 'tons' (1.00), actual 'tons' (1.00)\n", "... continuity , it is estimated the storm attained [hurricane status later that] -> predicted 'day' (0.82), actual 'day' (0.82)\n", "... @,@ 140 mi ) at a speed of [14 knots ( 26] -> predicted 'km' (0.91), actual 'km' (0.91)\n", "... , the 2nd Battleship Division set sail [with the Aleutian Support] -> predicted 'Group' (0.78), actual 'Group' (0.78)\n" ] } ], "source": [ "def show_example(i, extra=8):\n", " j = i + context # position of the predicted word in test_ids\n", " before, ctx = show(test_ids[max(j - context - extra, 0) : j - context]), show(test_ids[j - context : j])\n", " print(f\"... {before} [{ctx}] -> predicted {itos[top[i]]!r} ({p_top[i]:.2f}), actual {itos[test_ids[j]]!r} ({p_true[i]:.2f})\")\n", "\n", "rng = np.random.default_rng(1337)\n", "def pick(mask, k):\n", " # k random positions where mask is True, at most one per (predicted, actual) word pair\n", " chosen, seen = [], set()\n", " for i in rng.permutation(torch.where(mask)[0].numpy()):\n", " key = (top[i].item(), windows[i, -1])\n", " if key not in seen:\n", " seen.add(key); chosen.append(i)\n", " if len(chosen) == k:\n", " break\n", " return chosen\n", "\n", "true_id = torch.from_numpy(windows[:, -1].astype(np.int64))\n", "is_word = torch.tensor([w.isalpha() for w in itos])[true_id] # skip punctuation and number pieces like @,@\n", "for i in pick((rank == 0) & (p_true > 0.5) & is_word & (true_id >= 50), 6): # and very common words\n", " show_example(i)" ] }, { "cell_type": "markdown", "id": "3184abfc", "metadata": {}, "source": [ "**Failures:** positions where the model was confident but wrong, and positions where the true word got almost no probability.\n", "Typical causes: the answer needs more than `n-1` words of context (which person, which year, which topic), the true word is rare or ``, or several continuations are equally valid and the model simply picked another one." ] }, { "cell_type": "code", "execution_count": 8, "id": "601336ed", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "confident but wrong:\n", "... of the greatest Wolverine 's of the 1940s [. In four seasons] -> predicted ',' (0.66), actual 'with' (0.06)\n", "... attained hurricane status . After passing north of [the Turks and ] -> predicted 'Islands' (0.62), actual 'islands' (0.00)\n", "... and Li ? \" to [reply , \" Yes] -> predicted ',' (0.62), actual 'if' (0.00)\n", "... = = = Early years = = [= Most of] -> predicted 'the' (0.78), actual 'what' (0.00)\n", "... the production for The Daily Telegraph , theatre [critic Charles Spencer noted] -> predicted 'that' (0.69), actual ',' (0.06)\n", "\n", "true word got (almost) no probability:\n", "... Island , near Singapore , on 20 November [. They transferred to] -> predicted 'the' (0.44), actual 'Cam' (0.00)\n", "... several reasons . Ted preceded as [an All @-@ American] -> predicted 'and' (0.08), actual 'end' (0.00)\n", "... as \" Darren \" , in the 2005 [theatre productions of the] -> predicted 'opera' (0.07), actual 'Philip' (0.00)\n", "... of all time , and it states \" [his dense , compressed] -> predicted 'air' (0.17), actual 'language' (0.00)\n", "... tactics or the successes and failures of the [government , or the] -> predicted '' (0.09), actual 'poems' (0.00)\n" ] } ], "source": [ "print(\"confident but wrong:\")\n", "for i in pick((rank > 0) & (p_top > 0.6), 5):\n", " show_example(i)\n", "\n", "print(\"\\ntrue word got (almost) no probability:\")\n", "for i in pick((p_true < 1e-4) & torch.from_numpy(windows[:, -1] != UNK), 5):\n", " show_example(i)" ] }, { "cell_type": "markdown", "id": "71077bf3", "metadata": {}, "source": [ "## 3. Generating a paragraph from a sentence stub\n", "Generation repeats \"predict, sample one word, slide the window\" from a stub; `temperature` < 1 sharpens the distribution (safer, more repetitive) and > 1 flattens it (more varied, more errors).\n", "Stubs must be written in WikiText's tokenization (spaces around punctuation), and `detok()` undoes it for display." ] }, { "cell_type": "code", "execution_count": 9, "id": "3200be2e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The history of the city's population was in decline because of the lack of a real estate \"), which received five Grammy nominations at the 2006 MTV Video Music Awards in 2001 and 2011 respectively, including the film's opening weekend, the film grossed $ 2,200 with 1,460 km) long, and a second that is one.\n", "The third was originally designated as the \" national flag \". The song peaked at \n", "\n", "In 1944, the German army commander, he and his wife moved into the United States. When the US release was delayed by the fact that, according to his biographer, described him as \" an outstanding example of the season, starting a team in the history of the first time, in which they are on both of the series.\n", "The album's release, the album was certified triple platinum by the ARIA Music Awards.\n", "= \n", "\n", "The song was released as a single disc. The band released a live album titled Live on the Virgin Tour with the album, the song was met with at a local dinner party, they were eventually forced to accept the sale of a new type of structure, the \" most successful \", \" That's why he was so much to be done at the time the \" Light Blues \" became a major centre of the castle, while the castle \n", "\n" ] } ], "source": [ "def detok(text):\n", " text = text.replace(\" @-@ \", \"-\").replace(\" @,@ \", \",\").replace(\" @.@ \", \".\").replace(\" \", \"\\n\")\n", " return re.sub(r\" ([.,;:)!?'])|(\\() \", r\"\\1\\2\", text)\n", "\n", "gen = torch.Generator(device=device).manual_seed(1337) # one generator, so every call gets fresh random numbers\n", "\n", "@torch.no_grad()\n", "def generate(stub, n_words=80, temperature=0.8, top_k=50):\n", " ids = [EOS] * context + [stoi.get(w, UNK) for w in stub.split()]\n", " for _ in range(n_words):\n", " logits = model(torch.tensor([ids[-context:]], device=device))[0] / temperature\n", " logits[UNK] = -float(\"inf\") # never generate \n", " kth = logits.topk(top_k).values[-1]\n", " logits[logits < kth] = -float(\"inf\") # sample only among the top_k words\n", " ids.append(torch.multinomial(F.softmax(logits, dim=-1), 1, generator=gen).item())\n", " return detok(show(ids[context:]))\n", "\n", "for stub in [\"The history of the city\", \"In 1944 , the German army\", \"The song was released as a single\"]:\n", " print(generate(stub), \"\\n\")" ] }, { "cell_type": "markdown", "id": "1e189c98", "metadata": {}, "source": [ "Same stub, different temperatures: compare how cautious and repetitive the low-temperature text is with the more adventurous high-temperature one.\n", "Note how the text stays locally fluent but drifts off-topic: with only `n-1` words of memory, the model forgets what the paragraph was about." ] }, { "cell_type": "code", "execution_count": 10, "id": "b04a0a0b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "temperature 0.5: Albert Einstein was a \" genius \", and \" The \" was written by the author of the film.\n", "= = = =\n", "The first two episodes were shot in the game. In the 2012 – 13 season. He was also a member of the Order of the \n", "\n", "temperature 1.0: Albert Einstein was a critical mass on the back of three \". From one of the first person, but the player can change in size. The only surviving example of the French colonial establishment. However, after the failed attack of the Spanish fleet of the French squadron, and \n", "\n", "temperature 1.3: Albert Einstein was a member of Destiny's Child has a \" fine gravel bed was opened as a temporary home ground for the second month of the release date from the album are more powerful and highly praised, and for its second week. During the early 17th century, was the \n", "\n" ] } ], "source": [ "stub = \"Albert Einstein was a\"\n", "for t in [0.5, 1.0, 1.3]:\n", " print(f\"temperature {t}:\", generate(stub, n_words=50, temperature=t), \"\\n\")" ] }, { "cell_type": "markdown", "id": "632c1e9b", "metadata": {}, "source": [ "## 4. Word vectors\n", "As in Topic 5, the model contains **two** vectors per word: the input embedding (`emb.weight`, used when the word is in the context) and the output vector (`out.weight`, used to score the word as the next word).\n", "We normalize them to unit length so that a dot product is the **cosine similarity**." ] }, { "cell_type": "code", "execution_count": 11, "id": "bc1f7c42", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "emb (32768, 256)\n", "out (32768, 2048)\n", "king emb: emperor, ruler, kings, pope, King, kingdom out: emperor, ruler, King, bishop, queen, Emperor\n", "France emb: Spain, Italy, Germany, Sweden, Britain, Ireland out: Germany, Spain, Italy, England, Europe, Britain\n", "river emb: creek, River, canal, lake, stream, Creek out: River, road, lake, rivers, creek, canal\n", "music emb: songs, Music, musical, poetry, soundtrack, melody out: songs, musical, video, film, television, art\n", "January emb: February, March, December, April, November, May out: December, July, February, March, October, November\n", "seven emb: nine, eight, six, five, four, eleven out: six, five, three, four, nine, eight\n", "red emb: yellow, blue, white, green, orange, pink out: white, black, yellow, blue, green, brown\n", "scientist emb: journalist, philosopher, scholar, physicist, historian, researcher out: poet, director, officer, engineer, musician, writer\n", "went emb: goes, gone, go, going, traveled, travelled out: became, took, had, did, came, began\n", "quickly emb: rapidly, soon, gradually, slowly, eventually, immediately out: soon, rapidly, eventually, slowly, immediately, gradually\n" ] } ], "source": [ "vecs = {\n", " \"emb\": F.normalize(model.emb.weight.detach().float().cpu(), dim=1), # (vocab, n_embd)\n", " \"out\": F.normalize(model.out.weight.detach().float().cpu(), dim=1), # (vocab, n_hidden)\n", "}\n", "for name, v in vecs.items():\n", " print(name, tuple(v.shape))\n", "\n", "def nearest(word, table=\"emb\", k=6):\n", " sims = vecs[table] @ vecs[table][stoi[word]]\n", " sims[[stoi[word], UNK, EOS]] = -1 # exclude the word itself and the special tokens\n", " return [itos[i] for i in sims.topk(k).indices.tolist()]\n", "\n", "for w in [w for w in [\"king\", \"France\", \"river\", \"music\", \"January\", \"seven\", \"red\", \"scientist\", \"went\", \"quickly\"] if w in stoi]:\n", " print(f\"{w:10} emb: {', '.join(nearest(w, 'emb')):58} out: {', '.join(nearest(w, 'out'))}\")" ] }, { "cell_type": "markdown", "id": "8bf15400", "metadata": {}, "source": [ "**Clustering.** We take words from a few known categories and let k-means group them using only their vectors; if the vectors encode meaning, the clusters should recover the categories." ] }, { "cell_type": "code", "execution_count": 12, "id": "38c90554", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--- emb ---\n", " cluster 0: January, March, April, May, June, July, September, October\n", " cluster 1: dog, cat, horse, bird, fish, snake, wolf, bear\n", " cluster 2: two, three, four, five, six, seven, eight, nine\n", " cluster 3: France, Germany, Italy, Spain, Japan, China, Canada, Brazil\n", " cluster 4: red, blue, green, yellow, black, white, purple, orange\n", " cluster 5: teacher, doctor, lawyer, engineer, farmer, priest, soldier, writer\n", "--- out ---\n", " cluster 0: January, March, April, May, June, July, September, October\n", " cluster 1: dog, cat, horse, bird, fish, snake, wolf, bear, soldier\n", " cluster 2: two, three, four, five, six, seven, eight, nine\n", " cluster 3: France, Germany, Italy, Spain, Japan, China, Canada, Brazil\n", " cluster 4: red, blue, green, yellow, black, white, purple, orange\n", " cluster 5: teacher, doctor, lawyer, engineer, farmer, priest, writer\n" ] } ], "source": [ "from sklearn.cluster import KMeans\n", "\n", "categories = {\n", " \"countries\": [\"France\", \"Germany\", \"Italy\", \"Spain\", \"Japan\", \"China\", \"Canada\", \"Brazil\"],\n", " \"numbers\": [\"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\"],\n", " \"months\": [\"January\", \"March\", \"April\", \"May\", \"June\", \"July\", \"September\", \"October\"],\n", " \"colors\": [\"red\", \"blue\", \"green\", \"yellow\", \"black\", \"white\", \"purple\", \"orange\"],\n", " \"animals\": [\"dog\", \"cat\", \"horse\", \"bird\", \"fish\", \"snake\", \"wolf\", \"bear\"],\n", " \"jobs\": [\"teacher\", \"doctor\", \"lawyer\", \"engineer\", \"farmer\", \"priest\", \"soldier\", \"writer\"],\n", "}\n", "words = [w for ws in categories.values() for w in ws if w in stoi]\n", "labels = [c for c, ws in categories.items() for w in ws if w in stoi]\n", "\n", "for table in [\"emb\", \"out\"]:\n", " X = vecs[table][[stoi[w] for w in words]].numpy()\n", " clusters = KMeans(n_clusters=len(categories), n_init=10, random_state=1337).fit_predict(X)\n", " print(f\"--- {table} ---\")\n", " for c in range(len(categories)):\n", " print(f\" cluster {c}: {', '.join(w for w, k in zip(words, clusters) if k == c)}\")" ] }, { "cell_type": "markdown", "id": "90ee1c5e", "metadata": {}, "source": [ "A 2D picture of the same words: PCA projects the vectors onto the two directions of largest variance, coloured by the true category." ] }, { "cell_type": "code", "execution_count": 13, "id": "1dd15673", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "X = vecs[\"out\"][[stoi[w] for w in words]]\n", "X = X - X.mean(0)\n", "xy = X @ torch.pca_lowrank(X, q=2, center=False)[2]\n", "\n", "plt.figure(figsize=(7, 6))\n", "for c in categories:\n", " idx = [i for i, l in enumerate(labels) if l == c]\n", " plt.scatter(xy[idx, 0], xy[idx, 1], label=c)\n", " for i in idx:\n", " plt.annotate(words[i], xy[i].tolist(), fontsize=7)\n", "plt.legend(); plt.title(\"Output word vectors, 2D PCA\"); plt.show()" ] }, { "cell_type": "markdown", "id": "fd26e524", "metadata": {}, "source": [ "**Analogies.** The classic word2vec demo: if \"king is to man as queen is to woman\", then `king − man + woman` should land near `queen`.\n", "We search for the nearest word to `b − a + c` (excluding the three input words), using both tables.\n", "Expect the right answer to be among the top few rather than always first: these vectors were trained to predict words, not to solve analogies." ] }, { "cell_type": "code", "execution_count": 14, "id": "dc988df1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "man : king :: woman : ? emb: emperor, kings, queen, ruler, princess out: emperor, ruler, queen, governor, bishop\n", "France : Paris :: Italy : ? emb: Vienna, Berlin, Greece, Venice, Brussels out: San, Chicago, London, New, St.\n", "Germany : Berlin :: Japan : ? emb: Tokyo, Borneo, Bangkok, Hollywood, Moscow out: San, London, North, Paris, New\n", "walk : walked :: go : ? emb: went, gone, goes, going, willingness out: went, returned, took, had, worked\n", "big : bigger :: small : ? emb: smaller, larger, large, tiny, fewer out: larger, smaller, more, large, greater\n", "he : his :: she : ? emb: her, Her, His, their, 's out: her, their, its, the, an\n", "good : best :: bad : ? emb: worst, finest, strongest, better, funniest out: greatest, most, worst, biggest, highest\n", "car : cars :: child : ? emb: children, students, apartments, girls, parents out: children, students, son, people, boys\n" ] } ], "source": [ "def analogy(a, b, c, table=\"emb\", k=5):\n", " \"\"\"a is to b as c is to ?\"\"\"\n", " v = vecs[table]\n", " target = F.normalize(v[stoi[b]] - v[stoi[a]] + v[stoi[c]], dim=0)\n", " sims = v @ target\n", " sims[[stoi[a], stoi[b], stoi[c], UNK, EOS]] = -1\n", " return [itos[i] for i in sims.topk(k).indices.tolist()]\n", "\n", "questions = [(\"man\", \"king\", \"woman\"), (\"France\", \"Paris\", \"Italy\"), (\"Germany\", \"Berlin\", \"Japan\"),\n", " (\"walk\", \"walked\", \"go\"), (\"big\", \"bigger\", \"small\"), (\"he\", \"his\", \"she\"),\n", " (\"good\", \"best\", \"bad\"), (\"car\", \"cars\", \"child\")]\n", "for a, b, c in [q for q in questions if all(w in stoi for w in q)]:\n", " print(f\"{a} : {b} :: {c} : ? emb: {', '.join(analogy(a, b, c, 'emb')):45} out: {', '.join(analogy(a, b, c, 'out'))}\")" ] }, { "cell_type": "markdown", "id": "d3a4e7ef", "metadata": {}, "source": [ "## 5. Measuring quality quantitatively\n", "Example outputs are fun but anecdotal; here are a few numbers that summarize how good the model is.\n", "\n", "**Perplexity against baselines.** Test perplexity (exp of the average loss) is the standard language-model metric, but it only means something relative to baselines on the *same* vocabulary.\n", "We build two count-based baselines from 20 MB of training text: a **unigram** model (word frequencies, no context) and a **bigram** model (previous word only, interpolated with the unigram), and score all three on the same test positions." ] }, { "cell_type": "code", "execution_count": 15, "id": "03d3d055", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "uniform guess loss 10.397 perplexity 32768.0\n", "unigram (counts) loss 7.015 perplexity 1113.2\n", "bigram (counts) loss 5.597 perplexity 269.7\n", "5-gram MLP loss 4.168 perplexity 64.6\n", "(the MLP on the whole test set, computed at the end of training: perplexity 87.3; the first 20,000 positions happen to be easier than average)\n" ] } ], "source": [ "train_ids = np.array([stoi.get(w, UNK) for words in iter_lines(os.path.join(DATA_DIR, \"wiki.train.tokens\"), 20_000_000)\n", " for w in words])\n", "V = len(itos)\n", "unigram = (np.bincount(train_ids, minlength=V) + 1) / (len(train_ids) + V) # add-one smoothing\n", "pairs, pair_counts = np.unique(train_ids[:-1].astype(np.int64) * V + train_ids[1:], return_counts=True)\n", "\n", "prev, nxt = windows[:, -2].astype(np.int64), windows[:, -1].astype(np.int64)\n", "idx = np.clip(np.searchsorted(pairs, prev * V + nxt), 0, len(pairs) - 1)\n", "c_pair = np.where(pairs[idx] == prev * V + nxt, pair_counts[idx], 0)\n", "c_prev = np.bincount(train_ids[:-1], minlength=V)[prev]\n", "lam = 0.7\n", "p_bigram = lam * c_pair / np.maximum(c_prev, 1) + (1 - lam) * unigram[nxt]\n", "\n", "results = {\n", " \"uniform guess\": math.log(V),\n", " \"unigram (counts)\": -np.log(unigram[nxt]).mean(),\n", " \"bigram (counts)\": -np.log(p_bigram).mean(),\n", " f\"{cfg['n']}-gram MLP\": -p_true.log().mean().item(),\n", "}\n", "for name, loss in results.items():\n", " print(f\"{name:18} loss {loss:6.3f} perplexity {math.exp(loss):8.1f}\")\n", "print(f\"(the MLP on the whole test set, computed at the end of training: perplexity {math.exp(ckpt['test_loss']):.1f};\"\n", " f\" the first {N_EVAL:,} positions happen to be easier than average)\")" ] }, { "cell_type": "markdown", "id": "3fe4f33c", "metadata": {}, "source": [ "For context, published WikiText-103 results (e.g. LSTMs ≈ 48, Transformer-XL ≈ 18 perplexity) use the full 267k-word vocabulary, while we fold everything outside the top ~32k into ``, which makes prediction easier.\n", "So perplexities are only comparable between models that share a vocabulary and test set, which is exactly why we computed our own baselines.\n", "\n", "**Accuracy by word frequency.** Top-1 / top-5 accuracy are easier to explain than perplexity; splitting them by how common the true word is (vocabulary ids are sorted by frequency) shows where the model succeeds." ] }, { "cell_type": "code", "execution_count": 16, "id": "2ab1e76f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "true word share top-1 top-5 loss\n", " 3.7% 40.2% 86.6% 2.59\n", "rank 1-100 46.8% 43.4% 75.3% 2.40\n", "rank 100-1k 21.1% 16.6% 31.8% 4.83\n", "rank 1k-10k 21.1% 12.8% 22.0% 6.36\n", "rank 10k+ 6.4% 6.6% 14.8% 9.00\n" ] } ], "source": [ "buckets = [(\"\", true_id == UNK), (\"rank 1-100\", (true_id > EOS) & (true_id < 100)),\n", " (\"rank 100-1k\", (true_id >= 100) & (true_id < 1000)), (\"rank 1k-10k\", (true_id >= 1000) & (true_id < 10000)),\n", " (\"rank 10k+\", true_id >= 10000)]\n", "print(f\"{'true word':12} {'share':>7} {'top-1':>7} {'top-5':>7} {'loss':>7}\")\n", "for name, mask in buckets:\n", " print(f\"{name:12} {mask.float().mean():7.1%} {(rank[mask] == 0).float().mean():7.1%} \"\n", " f\"{(rank[mask] < 5).float().mean():7.1%} {-p_true[mask].log().mean():7.2f}\")" ] }, { "cell_type": "markdown", "id": "d92d69ae", "metadata": {}, "source": [ "**Calibration.** A useful model's confidence should mean something: of all the times it gives its top guess 70% probability, about 70% should be right.\n", "The reliability plot compares the predicted probability (binned) with the observed accuracy; points on the diagonal mean well-calibrated." ] }, { "cell_type": "code", "execution_count": 17, "id": "9f3a3792", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "bins = torch.linspace(0, 1, 11)\n", "which = torch.bucketize(p_top, bins[1:-1])\n", "conf = [p_top[which == b].mean().item() for b in range(10) if (which == b).any()]\n", "acc = [(rank[which == b] == 0).float().mean().item() for b in range(10) if (which == b).any()]\n", "\n", "plt.figure(figsize=(4, 4))\n", "plt.plot([0, 1], [0, 1], \"--\", color=\"gray\")\n", "plt.plot(conf, acc, \"o-\")\n", "plt.xlabel(\"model confidence in top guess\"); plt.ylabel(\"fraction correct\"); plt.title(\"Reliability\")\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "3e9be530", "metadata": {}, "source": [ "**Word-vector quality.** Word vectors are usually judged by *intrinsic* tests, such as analogy accuracy (the Google analogy set has ~19.5k questions like the ones above) and correlation with human similarity ratings (WordSim-353, SimLex-999), and by *extrinsic* tests: do they help a downstream task such as classification?\n", "Here is the analogy accuracy (top-1) on a small hand-made set, for both tables." ] }, { "cell_type": "code", "execution_count": 18, "id": "fa910229", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "emb: 16/24 analogies correct (top-1)\n", "out: 11/24 analogies correct (top-1)\n" ] } ], "source": [ "analogy_set = [\n", " (\"man\", \"king\", \"woman\", \"queen\"), (\"man\", \"father\", \"woman\", \"mother\"), (\"boy\", \"son\", \"girl\", \"daughter\"),\n", " (\"he\", \"his\", \"she\", \"her\"), (\"brother\", \"sister\", \"husband\", \"wife\"),\n", " (\"France\", \"Paris\", \"Italy\", \"Rome\"), (\"France\", \"Paris\", \"Germany\", \"Berlin\"), (\"France\", \"Paris\", \"Japan\", \"Tokyo\"),\n", " (\"France\", \"Paris\", \"Russia\", \"Moscow\"), (\"France\", \"Paris\", \"Spain\", \"Madrid\"), (\"Germany\", \"German\", \"France\", \"French\"),\n", " (\"Italy\", \"Italian\", \"Japan\", \"Japanese\"), (\"China\", \"Chinese\", \"Russia\", \"Russian\"),\n", " (\"walk\", \"walked\", \"go\", \"went\"), (\"play\", \"played\", \"write\", \"wrote\"), (\"see\", \"saw\", \"take\", \"took\"),\n", " (\"big\", \"bigger\", \"small\", \"smaller\"), (\"good\", \"better\", \"bad\", \"worse\"), (\"high\", \"higher\", \"long\", \"longer\"),\n", " (\"car\", \"cars\", \"house\", \"houses\"), (\"city\", \"cities\", \"country\", \"countries\"), (\"child\", \"children\", \"man\", \"men\"),\n", " (\"one\", \"two\", \"three\", \"four\"), (\"January\", \"February\", \"March\", \"April\"),\n", "]\n", "for table in [\"emb\", \"out\"]:\n", " hits = [analogy(a, b, c, table, k=1)[0] == d for a, b, c, d in analogy_set if all(w in stoi for w in (a, b, c, d))]\n", " print(f\"{table}: {sum(hits)}/{len(hits)} analogies correct (top-1)\")" ] }, { "cell_type": "markdown", "id": "eb0ce757", "metadata": {}, "source": [ "## Takeaways\n", "- Long training runs belong in **batch jobs**: a script with command-line settings, a `qsub` file requesting the right GPU/cores/time, and checkpoints so a job that runs out of walltime just resumes.\n", "- A trained model is a small, self-describing file (weights + config + vocabulary) that can be loaded anywhere for **inference**, on a CPU if need be.\n", "- An n-gram MLP learns real structure: grammar and fixed phrases for prediction, and word vectors where similar words cluster and some analogies work.\n", "- Its main limit is the fixed window of `n-1` words, which is why the generated text drifts; models with longer memory (RNNs, and today Transformers) remove that limit using the same PyTorch building blocks.\n", "- Measure quality with numbers (perplexity against baselines on the same vocabulary, accuracy, calibration, word-vector benchmarks), not just with cherry-picked examples." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.13.5" } }, "nbformat": 4, "nbformat_minor": 5 }