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 logradouronumero: Númerocomplemento: Complemento (Apto, Bloco, Sala, etc.)bairro: Bairrocidade: Cidade/Municípiocep: 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
- -