Uso
from transformers import AutoModelForCausalLM, AutoTokenizer
tok = AutoTokenizer.from_pretrained("BrCamp/bee-150m-pt-sft")
modelo = AutoModelForCausalLM.from_pretrained("BrCamp/bee-150m-pt-sft")
msgs = [{"role": "user", "content": "Resuma o texto abaixo em uma frase:\n\n..."}]
entrada = tok.apply_chat_template(msgs, return_tensors="pt", add_generation_prompt=True)
print(tok.decode(modelo.generate(entrada, max_new_tokens=120)[0]))
Formato ChatML (<|im_start|> / <|im_end|>), com chat_template embutido.
Treino
7.152 exemplos (5.657 instruções em PT + 1.495 de uso de ferramentas), full fine-tune,
lr 6e-4 cosine · 2 épocas · max_seq_len 2048 · batch efetivo 32 · bf16. Loss mascarada
no prompt: o modelo é cobrado só pelo que responde.
Table with columns: holdout, eval_loss, acurácia/token| holdout | eval_loss | acurácia/token |
|---|
| instruções PT (n=300) | 1,7592 | 0,6074 |
| uso de ferramentas (n=150) | 1,0672 | 0,7693 |
Cada hiperparâmetro foi medido, não herdado — a varredura de LR (curva em U de 6 pontos,
com ruído de 0,001) e a de épocas estão em
docs/sft-resultado.md.
⚠️ Limitações — leia antes de usar
O SFT ensinou formato, não fatos. O modelo responde em português fluente, estruturado e
para no fim do turno — e inventa fatos com confiança. Pior: inventa diferente a cada
geração (perguntado duas vezes sobre Machado de Assis, respondeu "nasceu em 1839" — correto —
numa amostragem e "nasceu em 1831, em São Paulo" na outra). Ele amostra plausibilidade; não
tem o conhecimento guardado.
Isso é o esperado em 151M parâmetros e não se corrige com mais SFT — só com um pré-treino
maior.
Não use para perguntas factuais de mundo aberto, conselhos médicos/jurídicos/financeiros,
ou qualquer decisão em que uma afirmação inventada cause dano.
Use onde o conhecimento vem no contexto: extração estruturada, resumo, reescrita,
classificação, formatação — tarefas em que o texto de entrada contém a resposta e o modelo só
precisa manipulá-lo em bom português.