raphaelfontes's picture
Update README.md
06d0c34 verified
---
base_model: unsloth/llama-3-8b-Instruct-bnb-4bit
library_name: peft
tags:
- text-generation-inference
- transformers
- unsloth
- llama
- llama-3
- medical
- pharmacoeconomics
- json-extraction
- conitec
license: apache-2.0
language:
- pt
pipeline_tag: text-generation
inference:
parameters:
temperature: 0.0
max_new_tokens: 512
---
# Llama 3 8B - Extrator JSON CONITEC
[<img src="https://raw.githubusercontent.com/unslothai/unsloth/main/images/unsloth%20made%20with%20love.png" width="200"/>](https://github.com/unslothai/unsloth)
## Visão Geral do Modelo
- **Licença:** Apache-2.0
- **Modelo Base:** `unsloth/llama-3-8b-Instruct-bnb-4bit`
- **Idioma principal:** Português (pt-BR)
Este modelo é um fine-tuning do Llama-3-8B-Instruct otimizado especificamente para **Extração de Entidades Nomeadas (NER) e Informações Farmacoeconômicas** em relatórios técnicos da CONITEC (Ministério da Saúde - Brasil). O modelo foi treinado de forma acelerada (2x mais rápido) utilizando a biblioteca [Unsloth](https://github.com/unslothai/unsloth) e a biblioteca TRL da Hugging Face.
Ele atua como um extrator determinístico, recebendo contextos textuais fragmentados (chunks semânticos extraídos de PDFs) e estruturando dados financeiros e epidemiológicos em um payload **JSON estrito**.
---
## Arquitetura de Dados e Pipeline (Lakehouse)
O modelo atua como o "motor de cognição" na camada **Gold** de um pipeline de dados orquestrado por Apache Airflow:
1. **Camada Bronze**: Extração bruta dos PDFs dos relatórios da CONITEC no S3.
2. **Camada Silver**: Conversão para Markdown, processamento espacial/geométrico das páginas (via PyMuPDF) e roteamento semântico (busca híbrida via Regex + Similaridade de Cosseno com TF-IDF) para isolar os parágrafos relevantes.
3. **Camada Gold**: Inferência local com este modelo LLM para gerar a estrutura JSON final e consolidar em um Data Warehouse de Saúde Pública usando DuckDB e formato Parquet.
---
## Schema JSON de Saída Esperado
O modelo foi condicionado para retornar rigorosamente o formato abaixo, utilizando `null` explícito para valores não encontrados na janela de contexto para evitar alucinações cognitivas:
```json
{
"cnpj": {"raw": "", "normalized": null},
"laboratorio": {"raw": "", "normalized": null},
"relatorio_tecnico": {"raw": "", "normalized": null},
"data_publicacao": {"raw": "", "normalized": null},
"medicamento": {"raw": "", "normalized": null},
"apresentacao": {"raw": "", "normalized": null},
"preco_cmed": {"raw": "", "normalized": null},
"preco_inicial": {"raw": "", "normalized": null},
"preco_final": {"raw": "", "normalized": null},
"populacao_estimada": {"raw": "", "normalized": null}
}
```
---
## Detalhes de Treinamento e Fine-Tuning
### Ambiente e Hardware
* **Hardware:** NVIDIA T4 (16GB VRAM) via Google Colab.
* **Frameworks:** Unsloth, TRL, Transformers, Datasets.
* **Precisão de Treinamento:** 4-bit Quantization (QLoRA) com Otimizador `adamw_8bit` e FP16/BF16 Misto (conforme suporte de hardware).
### Configurações do Adaptador LoRA (PEFT)
* **Rank (r):** 16
* **LoRA Alpha:** 16
* **Target Modules:** `q_proj`, `k_proj`, `v_proj`, `o_proj`, `gate_proj`, `up_proj`, `down_proj`
* **Dropout:** 0.0
* **Bias:** none
### Hiperparâmetros do SFTTrainer
* **Max Sequence Length:** 2048 tokens
* **Per Device Train Batch Size:** 4
* **Gradient Accumulation Steps:** 4
* **Learning Rate:** 2e-5
* **LR Scheduler:** Cosine
* **Num Epochs:** 2
* **Warmup Steps:** 0.03
* **Weight Decay:** 0.01
* **Seed:** 3407
### Dataset
* O dataset instrucional foi formatado utilizando o *Chat Template* nativo do modelo Llama-3 (contendo as roles `system`, `user` e `assistant`).
* **Divisão de Dados:** 90% Treino / 10% Avaliação (`test_size=0.1`).
* O prompt de sistema força a saída JSON e a simetria perfeita entre as chaves do banco de dados e a inferência final.
---
## Limitações e Uso Indevido
* **Uso Exclusivo para Q&A e Extração:** Este modelo sofreu *fine-tuning* agressivo para gerar JSON e obedecer regras determinísticas de extração de metadados. Ele **não deve** ser utilizado para geração de texto criativo livre, atuar como chatbot clínico ou prescrever tratamentos. Sua função é leitura e estruturação técnica.
* **Dependência de Contexto Filtrado:** O modelo atinge altíssima performance quando alimentado com os chunks textuais já saneados pela arquitetura da camada Silver. O envio de relatórios em PDF inteiros e brutos para a sua janela de contexto resultará em degradação de precisão e provável estouro do limite de tokens (*Context Window*).