Llama 3.2 3B Fine-Tuned para Extração de Endereços Brasileiros

Este é um modelo Llama 3.2 3B fine-tuned com LoRA/PEFT para a tarefa de Address Parsing (extração e estruturação de endereços brasileiros).

📋 Descrição

O modelo foi treinado para receber endereços brasileiros em formato livre/não estruturado e extrair os seguintes componentes em formato JSON:

  • tipo_logradouro: Tipo do logradouro (Rua, Avenida, Travessa, etc.)
  • logradouro: Nome do logradouro
  • numero: Número
  • complemento: Complemento (Apto, Bloco, Sala, etc.)
  • bairro: Bairro
  • cidade: Cidade/Município
  • cep: CEP

🚀 Como Usar

Instalação

pip install transformers peft torch bitsandbytes accelerate

Uso Básico

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

# Configuração de quantização
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_use_double_quant=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.float16
)

# Carrega modelo base
base_model_name = "unsloth/llama-3.2-3b-instruct-unsloth-bnb-4bit"
base_model = AutoModelForCausalLM.from_pretrained(
    base_model_name,
    quantization_config=bnb_config,
    device_map="auto",
    trust_remote_code=True
)

# Aplica adapter fine-tuned
model = PeftModel.from_pretrained(base_model, "felipergcpqd/llama3b-address-parser-5k-sft")
tokenizer = AutoTokenizer.from_pretrained("felipergcpqd/llama3b-address-parser-5k-sft")

# Prompt
system_prompt = """Você é um assistente especialista em estruturação de dados de endereços brasileiros.
Sua tarefa é receber um endereço em texto não estruturado e extrair os componentes para o formato JSON."""

user_content = "Estruture o seguinte endereço:\nRua das Flores 123 apto 45 Centro São Paulo SP 01234-567"

messages = [
    {"role": "system", "content": system_prompt},
    {"role": "user", "content": user_content}
]

# Gera resposta
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(text, return_tensors="pt").to(model.device)

with torch.no_grad():
    outputs = model.generate(
        **inputs,
        max_new_tokens=300,
        temperature=0.1,
        do_sample=True,
        top_p=0.9
    )

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

Saída Esperada

{
  "tipo_logradouro": "Rua",
  "logradouro": "das Flores",
  "numero": "123",
  "complemento": "apto 45",
  "bairro": "Centro",
  "cidade": "São Paulo",
  "cep": "01234-567"
}

🏋️ Treinamento

  • Modelo Base: unsloth/llama-3.2-3b-instruct-unsloth-bnb-4bit
  • Método: LoRA (Low-Rank Adaptation)
  • Rank (r): 16
  • Alpha: 16
  • Dropout: 0.05
  • Módulos Alvo: q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj

📊 Métricas

O modelo foi avaliado em um conjunto de teste de endereços brasileiros reais.

⚠️ Limitações

  • Otimizado para endereços brasileiros
  • Requer quantização 4-bit para uso eficiente
  • Pode ter dificuldade com endereços muito ruidosos ou incompletos

📝 Licença

Apache 2.0

🙏 Agradecimentos

  • Meta AI pelo modelo Llama 3.2
  • Unsloth pelo modelo base quantizado
  • Hugging Face pelo PEFT
Downloads last month
-
Safetensors
Model size
3B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support