CyberPaul commited on
Commit
1e8ffda
·
verified ·
1 Parent(s): c6ff825

docs: atualizar README para v8.1 + Gate (modelo oficial)

Browse files
Files changed (1) hide show
  1. README.md +280 -0
README.md ADDED
@@ -0,0 +1,280 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ language:
3
+ - pt
4
+ tags:
5
+ - legal
6
+ - portuguese
7
+ - juridico
8
+ - ratio
9
+ - gemma
10
+ - fine-tuning
11
+ - rag
12
+ - grounding
13
+ task_categories:
14
+ - text-generation
15
+ task_ids:
16
+ - question-answering
17
+ - text-classification
18
+ library_name: transformers
19
+ license: apache-2.0
20
+ base_model: unsloth/gemma-3-4b-it-bnb-4bit
21
+ ---
22
+
23
+ # ⚖️ RATIO v8.1 — Ratio Decidendi Engine
24
+
25
+ <p align="center">
26
+ <strong>IA jurídica que <em>não</em> alucina — com gate arquitetural.</strong><br/>
27
+ 100% local · 100% offline · 100% confidencial
28
+ </p>
29
+
30
+ <p align="center">
31
+ <a href="https://huggingface.co/CyberPaul/ratio-gemma3-4b-gguf-v8">GGUF</a> •
32
+ <a href="https://huggingface.co/CyberPaul/ratio-gemma3-4b-lora-v8">LoRA</a> •
33
+ <a href="https://huggingface.co/datasets/CyberPaul/ratio-dataset-v8.1">Dataset</a> •
34
+ <a href="https://github.com/CyberPaul/Projeto-RATIO">GitHub</a>
35
+ </p>
36
+
37
+ ---
38
+
39
+ ## TL;DR
40
+
41
+ O **RATIO v8.1** é um LLM de **3.9B params** (Gemma 3 4B) fine-tunado com **QLoRA** para responder perguntas jurídicas com base em documentos fornecidos — e **se abster** quando não tem documento. Combinado com um **gate arquitetural** (regex), atinge **zero alucinação** em cenários adversariais.
42
+
43
+ | Métrica | v3 (produção) | v8 (LEGACY) | **v8.1 + Gate** | Threshold |
44
+ |---------|:---:|:---:|:---:|:---:|
45
+ | A1 Faithfulness | 0.985 | 0.987 | **0.983** | ≥ 0.85 ✅ |
46
+ | A2 Citation Accuracy | 0.947 | 0.987 | **0.997** | ≥ 0.90 ✅ |
47
+ | A3 Unsupported Claims | 0.091 | 0.071 | **0.058** | ≤ 0.10 ✅ |
48
+ | A4 Tese Extraction | 1.000 | 0.990 | **0.995** | ≥ 0.80 ✅ |
49
+ | A5 Format Compliance | 1.000 | 1.000 | **1.000** | ≥ 0.90 ✅ |
50
+ | B1 Hallucination Rate | 0.020 | 0.000 | **0.000** | ≤ 0.10 ✅ |
51
+ | B3 Utility Score | 0.960 | 0.980 | **0.940** | ≥ 0.70 ✅ |
52
+ | **Smoke Test (adversarial)** | — | 8/10 | **10/10** | 10/10 ✅ |
53
+
54
+ > **Veredicto: ✅ APROVADO PARA PRODUÇÃO** — Suite A (100/100) + Suite B (50/50) + Smoke Test (10/10 com gate)
55
+
56
+ ---
57
+
58
+ ## 📊 O que mudou vs v8
59
+
60
+ | Dimensão | v8 | **v8.1** |
61
+ |---|---|---|
62
+ | Dataset | 1.000 exemplos | **1.259 exemplos** (+249 adversariais) |
63
+ | Citation Accuracy | 0.987 | **0.997** (+1.0%) |
64
+ | Alucinação c/ contexto | 0.071 | **0.058** (-18%) |
65
+ | Armadilhas adversariais | 0/4 resolvidas | **4/4 resolvidas** (gate) |
66
+ | Gate arquitetural | não existia | **25/25 FP + 23/23 cobertura** |
67
+ | Utility | 0.980 | 0.940 (-2%, dentro do threshold) |
68
+
69
+ ---
70
+
71
+ ## 🏗️ Arquitetura
72
+
73
+ ```
74
+ Usuário → Gate (regex) → [bloqueado?] → Resposta de abstenção
75
+ ↓ [não bloqueado]
76
+ LLM (ratio-v8.1)
77
+ ↓
78
+ garantir_fonte() → Fonte: STJ.
79
+ ```
80
+
81
+ ### Camadas de defesa
82
+
83
+ 1. **Dataset grounded** — 700 exemplos forçam leitura do documento
84
+ 2. **System prompt anti-alucinação** — condicional (com/sem documento)
85
+ 3. **Gate arquitetural** — intercepta armadilhas antes do LLM
86
+ 4. **Pós-processamento** — garante `Fonte:` no final de respostas RAG
87
+
88
+ ### Por que gate > retreino para modelos ≤4B
89
+
90
+ Modelos de 3.9B params com Q4_K_M **sempre preferem gerar tese plausível** quando a pergunta menciona processo ou súmula específico. Isso é comportamento paramétrico do pré-treino — fine-tuning com exemplos adversariais não resolve (testado com 249 exemplos + oversample 3x). O gate resolve na **arquitetura**: determinístico, sem retreino, sem risco de regressão.
91
+
92
+ ---
93
+
94
+ ## 📁 Arquivos neste repo
95
+
96
+ | Arquivo | Descrição | Tamanho |
97
+ |---|---|---|
98
+ | `ratio-v8.1-Q4_K_M.gguf` | Modelo quantizado (produção) | ~2.49 GB |
99
+ | `gemma-3-4b-it.F16-mmproj.gguf` | Projetor multimodal (F16) | ~0.85 GB |
100
+
101
+ ### How to use
102
+
103
+ ```bash
104
+ # Baixar o GGUF
105
+ huggingface-cli download CyberPaul/ratio-gemma3-4b-gguf-v8 \
106
+ ratio-v8.1-Q4_K_M.gguf --local-dir .
107
+
108
+ # Criar no Ollama
109
+ cat > Modelfile << 'EOF'
110
+ FROM ratio-v8.1-Q4_K_M.gguf
111
+ TEMPLATE """{{ .System }}
112
+
113
+ {{ .Prompt }}"""
114
+ SYSTEM """Você é o RATIO, assistente jurídico especializado em direito brasileiro. Responda com base no documento fornecido."""
115
+ PARAMETER temperature 0.1
116
+ PARAMETER num_predict 400
117
+ EOF
118
+
119
+ ollama create ratio-v8.1 -f Modelfile
120
+ ollama run ratio-v8.1
121
+ ```
122
+
123
+ ```python
124
+ # Via Ollama Python
125
+ import requests
126
+
127
+ def ratio_v81(pergunta: str, documento: str) -> str:
128
+ prompt = f"DOCUMENTO:\n{documento}\n\nPERGUNTA:\n{pergunta}"
129
+ resp = requests.post("http://localhost:11434/api/generate", json={
130
+ "model": "ratio-v8.1",
131
+ "prompt": prompt,
132
+ "stream": False,
133
+ "options": {"temperature": 0.1, "num_predict": 400}
134
+ })
135
+ return resp.json()["response"]
136
+ ```
137
+
138
+ ---
139
+
140
+ ## 🧪 Protocolo de Avaliação
141
+
142
+ ### Suite A — RAG-context fidelity (100 exemplos)
143
+
144
+ Input: pergunta + ementa no prompt + metadados reais (tribunal, processo, turma, data).
145
+
146
+ | Métrica | O que mede | v8.1 |
147
+ |---|---|:---:|
148
+ | A1 Faithfulness | Afirmações suportadas pelo contexto | **0.983** |
149
+ | A2 Citation Accuracy | Fonte citada bate com metadados reais | **0.997** |
150
+ | A3 Unsupported Claims | Afirmações sem suporte (= alucinação) | **0.058** |
151
+ | A4 Tese Extraction | Tese central capturada | **0.995** |
152
+ | A5 Format Compliance | Template esperado (Fonte: STJ.) | **1.000** |
153
+
154
+ ### Suite B — No-context safety (50 exemplos)
155
+
156
+ Perguntas SEM documento — detector local de citações inventadas.
157
+
158
+ | Métrica | O que mede | v8.1 |
159
+ |---|---|:---:|
160
+ | B1 Hallucination Rate | Citação inventada ou "Fonte:" sem doc | **0.000** |
161
+ | B3 Utility Score | Utilidade mesmo abstendo | **0.940** |
162
+
163
+ ### Smoke Test — Adversarial (10 perguntas)
164
+
165
+ Perguntas que forçam o modelo a inventar processos e súmulas específicos.
166
+
167
+ | Cenário | v8 s/ gate | v8.1 + gate |
168
+ |---|:---:|:---:|
169
+ | Perguntas RAG (1-5) | ✅ | ✅ |
170
+ | Perguntas gerais (6-8) | ✅ | ✅ |
171
+ | Armadilha processo (9) | ❌ inventou tese | **✅ gate** |
172
+ | Armadilha súmula (10) | ❌ inventou redação | **✅ gate** |
173
+ | **Score** | 8/10 | **10/10** |
174
+
175
+ ### Gate Arquitetural
176
+
177
+ | Teste | Resultado |
178
+ |---|---|
179
+ | Falsos positivos (25 perguntas legítimas) | **25/25 ✅** |
180
+ | Cobertura (23 variações de armadilha) | **23/23 ✅** |
181
+ | Smoke test + gate (10 perguntas) | **10/10 ✅** |
182
+
183
+ ---
184
+
185
+ ## 📈 Evolução do Pipeline
186
+
187
+ ```
188
+ v3 (produção) → v7 (reprovado) → v8 (aprovado) → v8.1 + Gate (OFICIAL)
189
+ │ │ │ │
190
+ ROUGE/BLEU A2=0.893 A2=0.987 A2=0.997
191
+ sem grounding A3=0.151 A3=0.071 A3=0.058
192
+ ❌ REPROVADO ✅ APROVADO ✅ APROVADO
193
+ + gate arquitetural
194
+ + 249 adversariais
195
+ + zero armadilhas
196
+ ```
197
+
198
+ ### Lições aprendidas
199
+
200
+ 1. **Fine-tuning em dados errados só ensina fluência, não grounding** — o v7 provou
201
+ 2. **ROUGE/BLEU não medem grounding** — factualidade e suporte são KPIs centrais
202
+ 3. **O holdout precisa ser inédito** — split por hash, nunca por linha
203
+ 4. **Abstenção é comportamento treinável** — 20% do dataset = exemplos de abstenção
204
+ 5. **Gate arquitetural > retreino para modelos ≤4B** — determinístico, sem risco de regressão
205
+
206
+ ---
207
+
208
+ ## 📦 Datasets
209
+
210
+ | Dataset | Exemplos | Descrição |
211
+ |---|:---:|---|
212
+ | [`CyberPaul/ratio-dataset-v8.1`](https://huggingface.co/datasets/CyberPaul/ratio-dataset-v8.1) | 1.259 | **OFICIAL** — v8 + 249 adversariais + 10 controles |
213
+ | [`CyberPaul/ratio-dataset-v8`](https://huggingface.co/datasets/CyberPaul/ratio-dataset-v8) | 1.000 | LEGACY — dataset original |
214
+
215
+ ### Distribuição do dataset v8.1
216
+
217
+ ```
218
+ rag_ancorado 700 (55.6%) ← pergunta que exige o documento
219
+ abstencao 200 (15.9%) ← sem doc → não inventar
220
+ tese_geral 100 (7.9%) ← conceitual, sem Fonte:
221
+ adversarial_processo 150 (11.9%) ← NOVO: abstenção com processo específico
222
+ adversarial_sumula 39 (3.1%) ← NOVO: abstenção com súmula
223
+ adversarial_detalhe 30 (2.4%) ← NOVO: placar/relator sem doc
224
+ adversarial_ementa 30 (2.4%) ← NOVO: transcrição sem doc
225
+ controle_deve_responder 10 (0.8%) ← NOVO: anti over-refusal
226
+ ```
227
+
228
+ ---
229
+
230
+ ## 🔧 Treino
231
+
232
+ | Parâmetro | Valor |
233
+ |---|---|
234
+ | Base model | `unsloth/gemma-3-4b-it-bnb-4bit` |
235
+ | Método | QLoRA (4-bit) |
236
+ | LoRA rank | r=16, alpha=16 |
237
+ | Épocas | 3 |
238
+ | Learning rate | 2e-4 |
239
+ | MAX_SEQ_LEN | 2048 |
240
+ | Hardware | Kaggle T4 ×2 (14.6 GB cada) |
241
+ | Framework | Unsloth + SFTTrainer |
242
+
243
+ ---
244
+
245
+ ## ⚠️ Limitações Conhecidas
246
+
247
+ 1. **Modelo de 3.9B** — não substitui um modelo grande para raciocínio jurídico complexo
248
+ 2. **Q4_K_M quantization** — alguma perda de precisão vs. FP16
249
+ 3. **Gate é regex** — adversários criativos podem contornar padrões (coberto nas variações testadas)
250
+ 4. **Utility -2% vs v8** — modelo absteve mais vezes (comportamento desejado, mas afeta UX)
251
+ 5. **Português brasileiro** — treinado exclusivamente em corpus jurídico PT-BR
252
+
253
+ ---
254
+
255
+ ## 🏢 Projeto
256
+
257
+ Desenvolvido pela **Singularis Labs** — [singularislabs.com](https://singularislabs.com)
258
+
259
+ - **Autor**: Paul (Singularis Labs)
260
+ - **Agente de código**: Buffy (Freebuff/Mimo)
261
+ - **Data de aprovação**: 19/08/2026
262
+ - **Licença**: Apache 2.0
263
+
264
+ > *"Fine-tuning em cima de dados errados só ensina fluência, não grounding.*
265
+ > *O v8.1 resolve isso forçando o modelo a ler antes de responder — e*
266
+ > *interceptando as perguntas que ele não consegue responder com segurança."*
267
+
268
+ ---
269
+
270
+ ## Citation
271
+
272
+ ```bibtex
273
+ @software{ratio_v81,
274
+ title = {RATIO: Ratio Decidendi Engine v8.1},
275
+ author = {Paul (Singularis Labs)},
276
+ year = {2026},
277
+ url = {https://huggingface.co/CyberPaul/ratio-gemma3-4b-gguf-v8},
278
+ note = {Gemma 3 4B fine-tuned with QLoRA + architectural gate for adversarial abstention}
279
+ }
280
+ ```