--- language: - pt license: apache-2.0 library_name: peft base_model: unsloth/llama-3.2-3b-instruct-unsloth-bnb-4bit tags: - llama - llama-3.2 - address-parsing - ner - brazilian-portuguese - peft - lora - fine-tuned datasets: - custom pipeline_tag: text-generation --- # 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 ```bash pip install transformers peft torch bitsandbytes accelerate ``` ### Uso Básico ```python 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-dpo") tokenizer = AutoTokenizer.from_pretrained("felipergcpqd/llama3b-address-parser-5k-sft-dpo") # 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 ```json { "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