Hoppa till innehållet
AI-grafen
E· Universitetsprakmodeller· ca 60 min· utvecklande· verifierad 2026-09-20

Språkmodeller — träning och generering

Kunna förklara nästa-token-träning, perplexitet, sampling (temperatur, top-p) och skillnaden mellan bas- och instruktionsmodell.

Förkunskaper

Intuition

En språkmodell är en funktion från en token-sekvens till en sannolikhetsfördelning över nästa token. Träning: visa den enorma mängder text, straffa den (cross-entropy) varje gång rätt nästa token fick låg sannolikhet. Inget facit skrivs av människor — texten är facit. Det kallas självövervakad träning.

Perplexitet = exp(medel-cross-entropy): «hur många lika troliga alternativ modellen i snitt tvekar mellan». 20 är bra på engelska, 2 är misstänkt (memorering eller läckt testdata).

Generering: dra en token ur fördelningen, lägg till, upprepa. Temperatur skalar logits före softmax: T→0 blir girig (alltid troligaste), T = 1 modellens egen fördelning, T > 1 plattare/kreativare. Top-p: dra bara ur den minsta mängd tokens vars sannolikhet summerar till p — klipper bort svansen av dumheter.

Basmodell fortsätter text. Instruktionsmodell är därefter tränad på (fråga, bra svar)-par och ofta preferensdata (RLHF/DPO) — den svarar i stället för att fortsätta.

Kod

import numpy as np

def softmax(z):
    z = z - z.max(); e = np.exp(z); return e / e.sum()

logits = np.array([3.0, 2.0, 0.5, -1.0])          # nästa-token-logits för 4 tokens
for T in (0.2, 1.0, 2.0):
    print(T, np.round(softmax(logits / T), 3))
# 0.2 [0.993 0.007 0.    0.   ]  ← nästan girig
# 1.0 [0.68  0.25  0.056 0.013]
# 2.0 [0.48  0.29  0.14  0.065] ← plattare

def top_p(p, thr=0.9):
    idx = np.argsort(p)[::-1]; cum = np.cumsum(p[idx])
    keep = idx[: int(np.searchsorted(cum, thr)) + 1]
    q = np.zeros_like(p); q[keep] = p[keep]; return q / q.sum()

print(np.round(top_p(softmax(logits)), 3))       # [0.731 0.269 0. 0.] — svansen bort

# perplexitet ur token-sannolikheter för rätt token:
p_ratt = np.array([0.4, 0.1, 0.6, 0.05])
print(np.exp(-np.mean(np.log(p_ratt))))          # ≈ 5.3

Formellt

Modellen parametriserar pθ(xt∣x<t)p_\theta(x_t \mid x_{<t}). Träningsmålet är L(θ)=−∑tlog⁡pθ(xt∣x<t)\mathcal L(\theta) = -\sum_t \log p_\theta(x_t\mid x_{<t}) över korpusen; hela sekvensens sannolikhet är kedjeregeln ∏tpθ(xt∣x<t)\prod_t p_\theta(x_t\mid x_{<t}). Perplexitet på en testtext med NN tokens: PPL=exp⁡ ⁣(1N∑t−log⁡pθ(xt∣x<t))\text{PPL} = \exp\!\big(\tfrac{1}{N}\sum_t -\log p_\theta(x_t\mid x_{<t})\big) — den är tokenizer-beroende, så jämför bara modeller med samma tokenizer. Temperatur: pi∝exp⁡(zi/T)p_i \propto \exp(z_i/T). Skalningslagar (Kaplan 2020, Hoffmann 2022) visar att testloss faller som en potensfunktion av parametrar, data och beräkning, med ett optimalt data/parameter-förhållande (~20 tokens per parameter i Chinchilla).

Behärskning innebär

  • Förklarar nästa-token-träning och perplexitet
  • Beskriver temperatur och top-p och deras effekt
  • Skiljer bas- och instruktionsmodell

Logga in för att göra övningarna och bygga upp din behärskning.

Källor

Alla källor och licenser