Jevlike

Een Jev-achtig model neemt een stuk tekst en een lijst van $N$ tekstopties en retourneert voor elke optie één waarschijnlijkheid. Dit gebeurt in één pass, in plaats van het antwoord woord voor woord te schrijven. Jev is het commerciële model van TypeSafe voor dit soort taken. TypeSafe heeft het ontwerp niet gepubliceerd. Deze repository is een onafhankelijk startmodel met dezelfde input- en outputvorm.

Demo

Dezelfde option-attention head kan controller-knoppen scoren op basis van image patches. Een film van tien seconden combineert twee geselecteerde vensters van vijf seconden: een live gevecht in deadly_corridor op de zeven Doom-knoppen, en een schaakcontroller die beweegt en zetten speelt met vijf toetsen. Het diagram toont de tensors die voor elke beslissing worden gebruikt.

Het Doom-venster is afkomstig uit het meegeleverde joint checkpoint, dat gemiddeld 0,60 kills en -97,50 reward behaalde over tien geregistreerde episodes. Het schaakvenster is afkomstig uit het sterkere, uitsluitend op schaken gerichte checkpoint, dat 4 overwinningen, 46 remises en 0 nederlagen behaalde in 50 gesamplede spellen tegen een willekeurige speler, maar 0 overwinningen, 2 remises en 48 nederlagen tegen Stockfish level 0. De vensters zijn geselecteerd op basis van activiteit en zijn geen claims over typisch spel of competentie.

Installeer de game-extra's en neem een nieuwe Doom-trace van 640 bij 480 op vanuit het uitgebrachte joint checkpoint:

uv pip install -e '.[games]'
python examples/doom/play.py examples/checkpoints/joint-imitation.pt --episodes 10 --game-seconds 35.3 --device cpu --capture-resolution 640x480 --output runs/doom.mp4 --trace runs/doom-trace.json

Render de trace in dezelfde visuele lay-out. Dit resulteert in een stomme film, aangezien de soundtrack-bron van de auteur geen deel uitmaakt van de repository.

(cd examples/film && npm install && npx playwright install chromium)
examples/film/make-film.sh runs/doom-trace.json runs/doom-film.mp4 10

De release bevat het Doom-voorbeeld, het schaakvoorbeeld, de single-game checkpoints en het gedeelde 12-optie checkpoint. Beide games importeren de visuele scorer uit jevlike.vision; er is in geen van beide voorbeelden een tweede kopie van het model.

Architectuur

Elke optie wordt een query vector, een korte lijst met getallen die de tekst ervan representeert. De query wijst attention weights toe aan de context-tokens. Deze gewichten vormen één contextvector voor die optie. Een gedeeld dot-product zet elk paar van optie en context om in één score. Een softmax-functie, die scores omzet in waarschijnlijkheden die samen één vormen, wordt over de opties uitgevoerd.

De standaard encoder leert byte-embeddings vanaf nul. Een encoder is het onderdeel dat tekst omzet in vectoren. Het optionele Hugging Face-pad maakt gebruik van een bevroren, vooraf getrainde encoder, waarvan de bestaande gewichten vast blijven terwijl de kleine scorer leert.

Datiformaat

Gebruik één JSON-object per regel:

{"context":"The customer needs a refund.","options":["refund","sales","technical support"],"label":0}

De label is de nul-gebaseerde index van de correcte optie. Elke regel kan een verschillend aantal opties hebben, met een minimum van twee.

Snelstart

Voer deze commando's uit vanuit de root van de repository. Ze maken lokale synthetische data aan, trainen daarop, evalueren het opgeslagen model en scoren één nieuw menu.

uv venv
source .venv/bin/activate
uv pip install -e '.[dev]'
jevlike-data synthetic --output data/synthetic
jevlike-train data/synthetic/train.jsonl \
--validation data/synthetic/validation.jsonl \
--output runs/synthetic.pt
jevlike-eval runs/synthetic.pt data/synthetic/test.jsonl
jevlike-predict runs/synthetic.pt \
--context "Choose the exact badge amber badger. Badge: amber badger." \
--option "azure crane" \
--option "amber badger" \
--option "gold heron"

De evaluatie print de top-1 nauwkeurigheid (top-1 accuracy), wat het fractiedeel van de correcte eerste keuzes is. Top-3 nauwkeurigheid is het fractiedeel waarbij het juiste antwoord tussen de drie hoogste scores staat. De expected calibration error vergelijkt het vertrouwen met de waargenomen nauwkeurigheid. Het commando print ook een shuffled-context control, die elk menu koppelt aan de verkeerde context. Een nuttig model zou deze controle moeten verslaan.

Eigen data gebruiken

  1. Exporteer train, validation en test JSONL-bestanden in het bovengenoemde formaat.
  2. Behoud in elke regel alle opties die het model tijdens de voorspelling zal zien.
  3. Splits gerelateerde records samen. Houd bijvoorbeeld alle records voor één klant of één doelpagina in één split. Dit voorkomt dat bijna-duplicaten in de testset lekken.
  4. Voer jevlike-train uit met je train- en validatiebestanden.
  5. Voer jevlike-eval één keer uit op het apart gehouden testbestand. "Apart gehouden" betekent dat het bestand nooit is gebruikt voor training of modelselectie.

De standaard byte-encoder kapt de context af op 192 bytes en elke optie op 32 bytes. Verhoog --context-tokens of --option-tokens wanneer je tekst meer ruimte nodig heeft. Training ondersteunt CPU, Apple MPS voor een Mac GPU, en CUDA voor een NVIDIA GPU via --device.

Een bevroren, vooraf getrainde encoder gebruiken

Installeer de optionele afhankelijkheid en noem een compatibele encoder van Hugging Face:

uv pip install -e '.[transformers]'
jevlike-train data/synthetic/train.jsonl \
--validation data/synthetic/validation.jsonl \
--output runs/qwen-head.pt \
--encoder hf \
--hf-model Qwen/Qwen2.5-0.5B \
--rank 256 \
--batch-size 8

Het checkpoint slaat de getrainde scorer-head en de naam van de encoder op. Het kopieert de bevroren encoder-gewichten niet. Het laden van het checkpoint vereist daarom toegang tot hetzelfde Hugging Face-model.

--rank stelt de breedte van de kleine scorer-head in. Een bredere head heeft meer trainbare gewichten en verbruikt meer geheugen.

Wikispeedia-voorbeeld

scripts/get_wikispeedia.sh downloadt de openbare SNAP-archieven en bouwt next-click JSONL-bestanden. De data blijven buiten deze repository.

scripts/get_wikispeedia.sh
jevlike-train data/wikispeedia/jsonl/train.jsonl \
--validation data/wikispeedia/jsonl/validation.jsonl \
--output runs/wikispeedia.pt

Citeer: Robert West and Jure Leskovec, Human Wayfinding in Information Networks, WWW 2012. Raadpleeg de voorwaarden van de brondata op de SNAP-datasetpagina.

Wat je kunt verwachten

In de experimenten die tot dit startmodel hebben geleid, behaalde de one-pass scorer ongeveer 98% nauwkeurigheid op synthetische menu's. Op target-disjoint Wikispeedia next-click data behaalde een bevroren Qwen2.5-0.5B encoder plus de scorer 26%, tegenover ongeveer 8% voor de shuffled en random-encoder controles. Een klein model dat vanaf nul is getraind op 40.000 kliks behaalde 29%. Bij acht opties was één pass ongeveer 100 keer sneller dan een kleine decoder die gedwongen werd 400 tokens te schrijven.

Deze cijfers beschrijven lokale experimenten, niet deze snelstart-run. We hebben geen gelijke kwaliteit aangetoond met Jev of de private trainingsmethode van TypeSafe gereproduceerd.

Beperkingen

  • Dit is een research-starter, geen kopie van Jev.
  • Nauwkeurigheid is afhankelijk van datakwaliteit, split-kwaliteit en de encoder.
  • De byte-encoder is goedkoop maar zwak in termen van taalbetekenis.
  • Het vooraf getrainde pad kan een groot model downloaden en vereist meer geheugen.
  • One-pass scoring vereist de volledige lijst met opties vóór de voorspelling.
  • De snelheidsvergelijking gebruikte een kleine lokale decoder in plaats van een groot commercieel model.

Licentie

De code is uitgebracht onder de MIT-licentie. Gedownloade datasets en vooraf getrainde modellen behouden hun eigen voorwaarden.