CoolFace
Modelpublic

Madras1/Yara-50M-PTBR-QA

sourceHugging Faceupdated 13d agoView on Hugging Face
0likes227downloads
Model Card

Yara-50M-PTBR-QA

Yara-50M-PTBR-QA é um pequeno modelo de linguagem causal em português brasileiro, treinado do zero e posteriormente ajustado para responder perguntas factuais a partir de um contexto fornecido.

Apesar de usar uma arquitetura compatível com LlamaForCausalLM, Yara não deriva de pesos Llama nem de qualquer outro checkpoint pré-treinado. O tokenizer Byte-Level BPE e os aproximadamente 50 milhões de parâmetros foram inicializados e treinados do zero.

O comportamento mais forte observado é a produção de respostas curtas e diretas quando a resposta está explicitamente presente no contexto. Este é um modelo experimental e educacional, não um sistema de perguntas e respostas de produção.

Características

  • —Arquitetura: decoder causal Llama-like (LlamaForCausalLM)
  • —Parâmetros: 50.049.536
  • —Camadas: 12
  • —Dimensão oculta: 512
  • —MLP intermediário: 1.536
  • —Cabeças de atenção: 8
  • —Cabeças KV: 4 (GQA)
  • —Vocabulário: 24.000 tokens
  • —Janela máxima: 1.024 tokens
  • —Ativações: SwiGLU/SiLU
  • —Normalização: RMSNorm
  • —Posicionamento: RoPE
  • —Embeddings de entrada e saída compartilhados
  • —Idioma principal: português brasileiro

Yara é um decoder causal. Ela não é um encoder BERT, apesar de o experimento ter usado anteriormente o nome provisório “Bertinha”.

Treinamento

Pré-treinamento

O pré-treinamento utilizou a parte real de `Madras1/corpus-ptbr-v1`, com uma mistura-alvo de aproximadamente 75% de tokens de FineWeb2 PT e 25% de C4 PT.

  • —Tokens processados: 399.966.208
  • —Comprimento de sequência: 512
  • —Passos: 6.103
  • —Loss de validação medida no passo 6.000: 3,5559
  • —Perplexidade de validação medida: 35,02

Ajuste supervisionado

O SFT utilizou `Madras1/rag-qa-fulltext-ptbr`, com separação de documentos entre treino, validação e teste. A loss foi aplicada apenas à resposta e ao token EOS; contexto e pergunta foram mascarados.

  • —Tokens computados: 99.942.400
  • —Comprimento de sequência: 1.024
  • —Passos: 1.525
  • —Loss de validação medida no passo 1.400: 1,1214
  • —Perplexidade de validação medida: 3,069

As perplexidades de pré-treinamento e SFT não são diretamente comparáveis, pois no SFT a loss considera somente os tokens supervisionados da resposta.

O treinamento foi realizado em duas GPUs NVIDIA T4, com DDP e precisão FP16. Os pesos publicados estão armazenados em safetensors.

Formato de entrada

O modelo espera este protocolo:

text
<|contexto|>TEXTO DE REFERÊNCIA<|pergunta|>PERGUNTA<|resposta|>

O tokenizer adiciona o token BOS. A geração deve terminar em EOS.

Uso com Transformers

Recomenda-se uma versão de transformers compatível com o formato salvo pelo Transformers 5.

python
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

repo_id = "Madras1/Yara-50M-PTBR-QA"  # ajuste o proprietário se necessário
device = "cuda" if torch.cuda.is_available() else "cpu"
dtype = torch.float16 if device == "cuda" else torch.float32

tokenizer = AutoTokenizer.from_pretrained(repo_id)
model = AutoModelForCausalLM.from_pretrained(repo_id, dtype=dtype).to(device)
model.eval()
model.config.use_cache = True

contexto = (
    "Namar possui três ilhas. Solena tem como capital Varedo. "
    "Taris tem como capital Mavena. Orun tem como capital Celúria."
)
pergunta = "Qual cidade é a capital da ilha de Taris?"
prompt = (
    f"<|contexto|>{contexto}"
    f"<|pergunta|>{pergunta}"
    "<|resposta|>"
)

inputs = tokenizer(prompt, return_tensors="pt", add_special_tokens=True).to(device)
with torch.inference_mode():
    output = model.generate(
        **inputs,
        max_new_tokens=64,
        do_sample=False,
        repetition_penalty=1.08,
        pad_token_id=tokenizer.pad_token_id,
        eos_token_id=tokenizer.eos_token_id,
    )

new_tokens = output[0, inputs["input_ids"].shape[1]:]
resposta = tokenizer.decode(new_tokens, skip_special_tokens=True).strip()
print(resposta)

Uma resposta típica para o exemplo é A cidade de Mavena. ou Mavena.

Capacidades observadas

Em testes qualitativos simples, Yara mostrou boa tendência para:

  • —extrair uma entidade diretamente declarada no contexto;
  • —responder de forma curta em português;
  • —lidar com nomes fictícios, reduzindo a possibilidade de mera memorização;
  • —selecionar a entidade correta entre fatos independentes sobre sujeitos diferentes.

Esses resultados são observações qualitativas, não uma avaliação formal de acurácia. A loss de validação mede previsão de tokens e não garante correção factual.

Limitações

  • —O modelo possui apenas cerca de 50 milhões de parâmetros e 400 milhões de tokens de pré-treinamento.
  • —Pode alucinar, repetir partes da pergunta ou produzir frases gramaticalmente imperfeitas.
  • —Apresentou fragilidade quando o mesmo sujeito recebeu informações temporais concorrentes, como “capital antiga” versus “capital atual”.
  • —Não foi treinado especificamente para recusar perguntas sem resposta no contexto.
  • —Não possui chat template nem foi desenvolvido como assistente conversacional geral.
  • —O repositório contém o leitor/gerador; não inclui recuperador, embeddings ou banco vetorial de um pipeline RAG completo.
  • —Os dados sintéticos ou coletados da web podem conter erros e vieses.
  • —Não houve avaliação de segurança suficiente para uso sensível ou de alto impacto.

Antes de qualquer uso real, avalie o modelo em exemplos separados com Exact Match, F1, perguntas sem resposta, negação, contraste temporal e contextos com distratores.

Arquivos adicionais

  • —experiment_config.json: configuração completa do experimento.
  • —metrics.jsonl: logs de treinamento e validação do SFT.

Status

Modelo experimental, disponibilizado para pesquisa, aprendizado e exploração de modelos pequenos em português brasileiro.