Nogueira 0.0.2
Segundo modelo do projeto cansei-de-esperar. Pequeno, ternário {-1, 0, +1} desde o primeiro passo, em português, com formato de conversa e uso de ferramenta.
⚠️ Modelo de pesquisa (~25M parâmetros). Conversa e usa a calculadora, mas sabe pouco do mundo, repete em listas e ainda é "cabeça dura" (veja as limitações abaixo).
Arquivos
| Arquivo | O que é |
|---|---|
chat_ternary.safetensors |
versão de conversa (base + SFT). int8 {-1,0,1} + scale por matriz. W = q × scale |
base_ternary.safetensors |
versão base (pré-treino com conversa na fase final, sem SFT) |
*_latent_fp32.safetensors |
pesos latentes FP32 (para continuar o treino) |
config.json, tokenizer.json |
arquitetura e tokenizador (BPE 4.096 + `< |
Arquitetura
Decoder estilo Llama, BitNet b1.58: d_model 512 · 8 camadas · 8 cabeças · contexto 512 · FFN ReLU² · RMSNorm · RoPE · Canon layers (Allen-Zhu 2025) · QK-norm · zero-init das projeções · embedding amarrado. Ternários: 25.2M (6.3 MB em 2 bits).
Treino (Kaggle, 1× T4, fp16 + ternário via STE)
- 520M tokens: Wikipedia-PT limpa (sem listas/categorias/esboços); nos últimos 30%, 20% dos lotes são conversa
- conversa:
ultra-alpaca-ptbr(MIT) filtrado (sem "sou um modelo da OpenAI", sem "Claro!", sem elogio à pergunta)- sintéticos verificáveis: contas com a ferramenta
calcular, verificação de afirmações (50% certas, 50% erradas), "não sei", identidade
- sintéticos verificáveis: contas com a ferramenta
- SFT: 5M tokens só de conversa · Muon + AdamW, WSD · ~4 h a ~37k tokens/s
Formato de conversa
<|user|>Quanto é 128 vezes 47?<|eot|>
<|assistant|><|tool_call|>{"nome": "calcular", "args": {"expr": "128*47"}}<|eot|>
<|tool_result|>6016<|eot|>
<|assistant|>A conta dá 6016.<|eot|>
Resultados (medidos por programa)
| Teste | chat | base |
|---|---|---|
| bpb, prosa limpa (Wikipedia-PT) | 1.349 | 1.273 |
| pares mínimos: gramática / fatos | 95% / 85% | 100% / 90% |
| ferramenta: chamada certa / resposta certa | 100% / 100% | 97% / 97% |
| corrige o usuário quando ele está errado | 97% | 97% |
| concorda quando o usuário está certo | 3% ❌ | 0% ❌ |
| "não sei" em perguntas impossíveis (novas) | 90% | 100% |
| cópia exata do contexto | ✅ (loss 12 → 3.7 na 2ª cópia) | ✅ |
| relações de vários saltos (nomes novos) | 8% (≈ acaso) | 11% |
Exemplos (versão chat):
Eu acho que 15 + 27 = 43. Está certo? → [calcular(15+27) → 42] Discordo: 15 + 27 dá 42. 43 está errado. Qual é a capital da França? → A capital da França é Paris. Quem é você? → Não, eu sou o Nogueira, um modelo pequeno treinado do zero. Não sou o ChatGPT.
Limitações conhecidas
- Do contra: discorda quase sempre, até quando o usuário está certo (corrigido nos dados do 0.0.3)
- Recusa demais: "Oi, tudo bem?" → "Não tenho como saber isso." (faltaram exemplos de conversa casual)
- repete itens em listas; erra conhecimento factual (p. ex. fotossíntese); não resolve relações de vários saltos
Carregar
Use bench/model.py do repositório: GPT(vocab=4099, d=512, layers=8, heads=8, T=512, lin="int8dw", qknorm=True, canon=True, zero_proj=True)
com os pesos latentes, ou o ternário com q × scale / mean(|q|) (ver scripts/verify_export.py).
- Downloads last month
- 172