/ Модель

Характеристики

Контекст
1 024 токена
Лицензия
Apache 2.0
Опубликована
31 авг 2026

Boris-1.7-D60M-n30M

Генерация текстаТекст → текст3 профессии

Экспериментальная компактная языковая модель с таблицей n-грамм для генерации текста и исследований эффективности lookup-эмбеддингов.

287скачиваний за 30 дней19лайковвеса обновлены31 авг 2026

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Публичные оценки

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

Boris-1.7-D60M-n30M — экспериментальная языковая модель opencerebral для генерации текста. Это плотный decoder-only Transformer с 60 млн параметров и отдельной таблицей n-грамм на 30 млн параметров, встроенной в остаточный поток после второго блока. Основная часть архитектуры включает 10 слоёв, размерность 768, 12 голов внимания и 4 KV-головы с GQA, SwiGLU, RoPE и RMSNorm; эмбеддинги связаны с выходным слоем. Используется собственный токенизатор byte-level BPE с размером словаря 32 768 и контекстом 1 024 токена.

Модель обучена на 2,5 млрд токенов из Ultra-FineWeb, Cosmopedia-v2 и FineWeb-Edu. Карточка приводит результаты zero-shot оценок на HellaSwag, ARC, WinoGrande, ArithMark-3 и BananaMind; отключение таблицы n-грамм снижает качество на указанных тестах. Модель предназначена для экспериментов с компактными языковыми моделями и генерацией текста, а не представлена как готовый универсальный продукт. Это не стандартный checkpoint для Transformers: для загрузки нужны предоставленные в репозитории loader и токенизатор. Файлы опубликованы в формате safetensors, лицензия — Apache-2.0.

Сценарии применения

  • эксперименты с генерацией текста компактной языковой моделью
  • сравнение n-граммных таблиц с плотными параметрами Transformer
  • оценка небольшой языковой модели на тестах общего рассуждения
  • изучение влияния n-граммных признаков на предсказание следующих токенов

Ограничения

Контекст ограничен 1 024 токенами; checkpoint использует собственную архитектуру и токенизатор и не загружается напрямую через Transformers. Модель обучена на ограниченном бюджете в 2,5 млрд токенов, поэтому её результаты и область применения ограничены экспериментами и приведёнными оценками.

Для каких профессий подходит3

Разделы каталога профессий, в задачах которых используется эта модель

Все профессии

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

Boris

Boris-1.7-D60M-n30M

A 60M-parameter dense decoder-only transformer with a 30M-parameter n-gram embedding table spliced into the residual stream after block 2. One experiment, one variable: does 30M of lookup buy what 30M of dense weight would, at a fixed 2.5B-token budget on a single RTX 3060 12GB?

The trunk is deliberately conventional — the table is the only thing under test.

Model

Trunk10 layers, d=768, 12 heads / 4 KV heads (GQA), SwiGLU 1920, RoPE, RMSNorm, tied embeddings
Context / vocab1024 / 32,768 (own byte-level BPE, trained on this corpus)
Dense (non-embedding) params59,981,568
Embedding params25,165,824 (tied)
N-gram table468,751 rows × rank 64 + 64→768 projection = 30,049,216

The table is keyed on the literal last 2 and 3 token ids — an explicit top-K vocabulary (281,250 bigram + 187,500 trigram rows, one shared OOV row), built by ngram.py over the corpus. No hashing, exact searchsorted lookup, one gather per position and no matmul, so compute per token barely moves.

Training

  • 2.5B tokens: Ultra-FineWeb bulk, then cosmopedia-v2 + fineweb-edu anneal over the final 15%
  • WSD schedule (2% warmup, 85% stable, 1-sqrt decay), Muon on 2-D linear maps, AdamW on everything else, bf16 + torch.compile
  • 10,172 steps, 245,760 tokens/step, 22h37m wall clock
  • Final val: loss 3.235, ppl 25.4, 1.0012 bits/char; n-gram hit rates ~65% bigram / ~21% trigram

Resumable to the byte (optimiser states, data cursor, all RNGs round-trip through the checkpoint).

Results (zero-shot)

Scored with the model's own tokenizer; harness validated against GPT-Neo-125M's published numbers first. --no-ngram ablates the table at inference, which measures how much the finished model leans on it — not the dense control (that needs its own training run).

Boris-Bench

Taskmetricintacttable ablatedΔ
HellaSwagacc_norm31.2230.54−0.68
ARC-Easyacc_norm45.8843.77−2.11
ARC-Challengeacc_norm26.0222.95−3.07
PIQAacc_norm62.5760.55−2.02
WinoGrandeacc51.0750.12−0.95
LAMBADAacc26.6625.33−1.33
val lossbits/char1.00121.0699+0.0687

Ablating the table costs 0.069 bits/char and 0.7–3.1 points across the six tasks. The two ARC splits move most; HellaSwag and WinoGrande barely notice.

Additional benchmarks, table intact only:

Benchmarkmetricscore
ArithMark-3acc_norm36.1 ±1.5 (random 25)
BananaMind Base Bench 1.1Elo1022 (54.3% acc)

Usage

This is not a transformers checkpoint — it's a custom architecture (60M dense trunk + 30M n-gram lookup table) with a custom byte-level BPE tokenizer. Load it with the loader in this repo:

from loader import load_model, load_tokenizer

model = load_model(".").eval()     # reads config.json + model.safetensors
tok = load_tokenizer(".")          # reads tokenizer.json (custom 32,768 BPE)

The n-gram table and its top-K lookup arrays are inside model.safetensors, so that one file — plus config.json — is enough to run the full model. lm_head.weight is tied to the input embedding and stored once.

Tokenize with the tokenizer's GPT-2-style byte-level split (digit runs are capped at three characters):

ids = tok.encode("The capital of France is")

Generation loop (greedy, single token step):

import torch

def generate(prompt, n_tokens=32):
    ids = tok.encode(prompt)
    for _ in range(n_tokens):
        with torch.no_grad():
            logits = model(torch.tensor([ids]))[0]
        nxt = int(logits[0, -1].argmax())
        ids.append(nxt)
        if nxt == 0:            # <|endoftext|>
            break
    return tok.decode(ids)

print(generate("The capital of France is"))

AutoTokenizer also works (self-contained tokenizer.json), but the model itself has no transformers class:

from transformers import AutoTokenizer
tok = AutoTokenizer.from_pretrained("opencerebral/Boris-1.7-D60M-n30M")

Run python loader.py "The capital of France is" for a next-token smoke test.

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм

Нельзя запустить

Архитектура ? неизвестна transformers в образе рантайма.

Ревизия весов
859f480

0 моделей