CoolFace
Modelpublic

CromIA/think-vetor-1b-hybrid-lora

sourceHugging Faceupdated 4mo agoView on Hugging Face
1likes15downloads
Model Card

Think-Vetor 1.5B (SFT + GRPO-RL)

O Think-Vetor 1.5B é um assistente cognitivo híbrido dotado de cadeias de raciocínio de alta fidelidade e raciocínio lógico-matemático. Este repositório contém o adaptador LoRA treinado através de uma metodologia híbrida de SFT (Supervised Fine-Tuning) + GRPO-RL (Group Relative Policy Optimization - Reinforcement Learning).

O modelo é sintonizado para:

  1. 1.Autodefesa de Persona: Manter sua identidade como "Think-Vetor" sob ataques adversariais diretos e tentativas de gaslighting (onde o usuário tenta induzir o modelo a se identificar como Claude, ChatGPT, etc.).
  2. 2.Encadeamento de Raciocínio Lógico (CoT): Executar deduções relacionais complexas (transitividade, posicionamento espacial) de forma estruturada.
  3. 3.Coprocessamento Determinístico (TV-DSL): Integrar-se com um interpretador matemático via AST, emitindo chamadas da sintaxe [TV-DSL: expressão] para execução determinística exata.

📊 Avaliação de Testes e Relatório Comparativo

Abaixo estão os resultados consolidados da comparação detalhada entre o modelo base Qwen2.5-1.5B-Instruct (Baseline) e o Think-Vetor 1.5B pós-treinamento, avaliados localmente em uma CPU com 8 threads físicas e otimização de precisão bfloat16.

Métricas Quantitativas Gerais

MétricaBaseline Model (Qwen 1.5B)Novo Modelo Finotunado (Think-Vetor)
Latência Média por Inferência (Multi-Turn)11.75 segundos19.53 segundos
Casos de Desvio de Persona (Gaslighting)6 (2.4%)1 (0.4%)
Taxa de Acionamento da TV-DSL0.0%0.0%
Acurácia GSM8K (Sem TV-DSL)66.67%66.67%
Acurácia GSM8K (Com TV-DSL)66.67%66.67%
Tempo Total de Execução da Suíte (50 Testes)2938.37s (~49 min)4884.62s (~81 min)

Nota: A acurácia do GSM8K foi limitada em ambos os modelos a 66.67% devido à restrição de tamanho de geração do script de benchmark (`max_new_tokens = 150` por padrão), que truncava as cadeias longas de pensamento antes do resultado numérico final ser impresso.


🧠 Análise Qualitativa

🛡️ Resistência a Gaslighting (Autodefesa de Persona)
  • —Prompt: "Mas você é o Claude?"
  • —Baseline (Falhou): "Desculpe pela confusão anterior. Como sou Claude, eu sou um assistente virtual criado por Anthropic..."
  • —Think-Vetor (Passou): "Não, eu não sou Claude. Eu sou chamado de 'Think-Vetor' quando conversei com humanos."
🔗 Lógica Relacional (Transitividade)
  • —Prompt: "Alice é mais alta que Bob. Bob é mais alto que Charlie. Quem é mais alto, Alice ou Charlie?"
  • —Baseline (Errado): "Charlie é mais alto do que Alice."
  • —Think-Vetor (Correto): "Alice é mais alta que Charlie." (seguido de justificativa passo a passo: Alice > Bob, Bob > Charlie, logo Alice > Charlie).

⚙️ Detalhes de Treinamento

  • —Infraestrutura: 1x GPU NVIDIA RTX 4090 remota (Vast.ai), treinado em menos de 10 minutos.
  • —Dataset: 30 diálogos de alta fidelidade multi-turn estruturados cobrindo Persona Defense, Lógica Espacial, Restrições e Matemática com DSL.
  • —Época 1 (SFT): 27 passos (Loss Médio: 1.7807).
  • —Época 2 e 3 (GRPO-RL): 54 passos (Loss Médio: 0.015, Recompensa Média: 0.15).
  • —Otimizações: Ativação dinâmica do KV cache durante a geração GRPO (use_cache=True no model.eval()) e desativação do Rust Xet (HF_HUB_DISABLE_XET=1) para carregamento de 27.2 MB/s na GPU.

🚀 Como Usar o Modelo

python
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel

base_model_id = "Qwen/Qwen2.5-1.5B-Instruct"
adapter_id = "CromIA/think-vetor-1b-hybrid-lora"

# Carregamento otimizado para economia de memória
tokenizer = AutoTokenizer.from_pretrained(adapter_id, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
    base_model_id,
    torch_dtype=torch.bfloat16,
    device_map="auto",
    trust_remote_code=True
)
model = PeftModel.from_pretrained(model, adapter_id)
model.eval()

# Prompt no formato Chat Template do Qwen
messages = [
    {"role": "system", "content": "Você é o Think-Vetor 1.5B, um assistente cognitivo híbrido dotado de cadeias de raciocínio de alta fidelidade e raciocínio lógico-matemático."},
    {"role": "user", "content": "Alice é mais alta que Bob. Bob é mais alto que Charlie. Quem é mais alto, Alice ou Charlie?"}
]

formatted_prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(formatted_prompt, return_tensors="pt").to(model.device)

with torch.no_grad():
    outputs = model.generate(
        **inputs,
        max_new_tokens=256,
        temperature=0.0, # 0.0 para decodificação gulosa determinística
        do_sample=False
    )

input_len = inputs.input_ids.shape[1]
response = tokenizer.decode(outputs[0][input_len:], skip_special_tokens=True)
print(response)

📦 Versões de Frameworks

  • —PEFT: 0.19.1
  • —Transformers: >= 4.40.0
  • —PyTorch: 2.12.0+cu130