File size: 12,367 Bytes
f5f26a4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
180c9a0
f5f26a4
 
0b1b145
f5f26a4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
180c9a0
 
f5f26a4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
180c9a0
f5f26a4
 
180c9a0
f5f26a4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
180c9a0
f5f26a4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
180c9a0
f5f26a4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
180c9a0
f5f26a4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
180c9a0
f5f26a4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
544abf1
f5f26a4
 
 
 
180c9a0
f5f26a4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
180c9a0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
---
language:
- pt
license: cc-by-nc-sa-4.0
tags:
- lgbtqia
- legislacao
- hate-speech-detection
- ensemble
- text-classification
- portuguese
- brasil
datasets:
- Veronyka/base-dados-odio-lgbtqia
base_model:
- Veronyka/tybyria-v2.1
- azmina/ia-feminista-bert-posicao
pipeline_tag: text-classification
pinned: true
widget:
- text: "Proíbe o uso de símbolos religiosos em paradas LGBTQIA+"
  example_title: "PL Desfavorável"
- text: "Criminaliza terapias de conversão equiparando à tortura"
  example_title: "PL Favorável"
- text: "Dispõe sobre identidade de gênero e nome social"
  example_title: "PL Favorável"
---

# 🏳️‍🌈⚖️ Radar Legislativo LGBTQIA+

## Modelo de Classificação de Projetos de Lei por Ensemble Híbrido

Sistema de análise automática de **Projetos de Lei** relacionados a direitos LGBTQIA+ no Brasil, utilizando **Ensemble Híbrido** que combina múltiplos modelos e heurísticas para classificar PLs como **favoráveis** ou **desfavoráveis** aos direitos da comunidade LGBTQIA+.

## 🎯 Objetivo

Identificar automaticamente se Projetos de Lei (PLs) propostos no Congresso Nacional, Assembleias Legislativas e Câmaras Municipais são:
- **✅ FAVORÁVEIS**: Ampliam ou protegem direitos LGBTQIA+
- **❌ DESFAVORÁVEIS**: Restringem ou ameaçam direitos LGBTQIA+
- **⚠️ REVISÃO NECESSÁRIA**: Requerem análise humana detalhada

## 🔧 Arquitetura: Ensemble Híbrido

### Componentes

O sistema combina **4 componentes independentes** com pesos otimizados:

#### 1. TybyrIA v2.1 (20% do peso)
- **Modelo**: [`Veronyka/tybyria-v2.1`](https://huggingface.co/Veronyka/tybyria-v2.1) (TybyrIA v2.1)
- **Função**: Detecção de discurso de ódio
- **Performance**: 98.44% de recall, threshold 0.30
- **Base**: 1.891 comentários de redes sociais anotados manualmente
- **Uso**: Identifica linguagem ofensiva e discriminatória

#### 2. AzMina/QuiterIA (15% do peso)
- **Modelo**: [`azmina/ia-feminista-bert-posicao`](https://huggingface.co/azmina/ia-feminista-bert-posicao)
- **Função**: Análise feminista de PLs
- **Uso**: Proxy para direitos LGBTQIA+ (perspectiva interseccional)
- **Nota**: Modelo treinado para análise de PLs relacionadas a direitos de mulheres

#### 3. Keywords LGBTQIA+ (35% do peso)
- **40+ termos específicos** relacionados a LGBTQIA+
- **Categorias**:
  - Identidades: lgbt, trans, bissexual, não-binário, etc.
  - Direitos: casamento igualitário, adoção homoafetiva, nome social
  - Discriminação: homofobia, transfobia, terapia de conversão
  - Contextuais: ideologia de gênero, sexo biológico, família tradicional

#### 4. Padrões Legislativos (30% do peso)
- **Heurísticas especializadas** para detectar:
  - Restrições a espaços (banheiros, vestiários)
  - Proibições em eventos (paradas, manifestações)
  - Definições biológicas excludentes
  - Linguagem discriminatória em contexto legislativo
- **Padrões de alta prioridade**: PLs que explicitamente proíbem ou restringem

### Pesos Otimizados

```python
pesos = {
    'radar': 0.20,      # Detecção de ódio
    'azmina': 0.15,     # Análise feminista (proxy)
    'keywords': 0.35,   # Termos LGBTQIA+ (CRÍTICO em legislação)
    'padroes': 0.30     # Padrões legislativos (CRÍTICO)
}
```

**Nota**: Se o modelo AzMina falhar ao carregar, os pesos são redistribuídos automaticamente (keywords: 40%, padrões: 40%).

## 📊 Classificação

### Thresholds

- **Score ≥ 0.50**: ❌ **DESFAVORÁVEL**
- **0.30 ≤ Score < 0.50**: ⚠️ **REVISÃO NECESSÁRIA**
- **Score < 0.30**: ✅ **FAVORÁVEL**

### Exemplo de Output

```json
{
  "classificacao": "DESFAVORÁVEL",
  "score_final": 0.67,
  "sinais": {
    "radar": 0.42,
    "azmina": 0.58,
    "keywords": 0.85,
    "padroes": 0.95
  },
  "explicacao": "Score alto em padrões legislativos restritivos"
}
```

## 🚀 Como Usar

### Via Hugging Face Space (Recomendado)

```python
# Acesse diretamente o Space:
# https://huggingface.co/spaces/Veronyka/radar-legislativo-lgbtqia
```

### Via Python (Código Completo)

```python
from transformers import pipeline, AutoTokenizer, AutoModelForSequenceClassification
import re

# 1. Carregar TybyrIA v2.1
radar = pipeline(
    "text-classification",
    model="Veronyka/tybyria-v2.1",
    device=-1  # CPU
)

# 2. Carregar AzMina (com tokenizer explícito)
tokenizer = AutoTokenizer.from_pretrained("neuralmind/bert-base-portuguese-cased")
azmina_model = AutoModelForSequenceClassification.from_pretrained("azmina/ia-feminista-bert-posicao")
azmina = pipeline(
    "text-classification",
    model=azmina_model,
    tokenizer=tokenizer,
    device=-1
)

# 3. Keywords e Padrões (simplificado)
KEYWORDS_DESFAVORAVEIS = [
    r"proíbe.*gênero", r"ideologia de gênero", r"sexo biológico",
    r"terapia.*conversão", r"família.*tradicional"
]

PADROES_RESTRITIVOS = [
    r"(proíbe|veda).*(uso|exibição).*(símbolo|símbolos).*religios.*(parada|lgbt)",
    r"(impede|proíbe).*(menor|criança).*(evento|parada).*(lgbt|comunidade)"
]

def classificar(ementa: str):
    # TybyrIA v2.1
    radar_result = radar(ementa, truncation=True, max_length=256)
    score_radar = radar_result[0]['score'] if radar_result[0]['label'] == 'HATE' else 1 - radar_result[0]['score']
    
    # AzMina
    azmina_result = azmina(ementa, truncation=True, max_length=256)
    score_azmina = 1 - azmina_result[0]['score'] if azmina_result[0]['label'] == 'LABEL_1' else azmina_result[0]['score']
    
    # Keywords
    kw_desfav = sum(1 for kw in KEYWORDS_DESFAVORAVEIS if re.search(kw, ementa.lower(), re.IGNORECASE))
    score_keywords = min(kw_desfav / 5, 1.0)  # Normalizado
    
    # Padrões
    matches = sum(1 for padrao in PADROES_RESTRITIVOS if re.search(padrao, ementa.lower(), re.IGNORECASE))
    score_padroes = 0.99 if matches > 0 else 0.0
    
    # Ensemble
    score_final = (
        0.20 * score_radar +
        0.15 * score_azmina +
        0.35 * score_keywords +
        0.30 * score_padroes
    )
    
    # Classificação
    if score_final >= 0.5:
        return "DESFAVORÁVEL", score_final
    elif score_final >= 0.3:
        return "REVISÃO", score_final
    else:
        return "FAVORÁVEL", score_final

# Exemplo de uso
ementa = "Proíbe o uso de símbolos religiosos em paradas LGBTQIA+"
classificacao, score = classificar(ementa)
print(f"Classificação: {classificacao} (Score: {score:.2%})")
# Output: Classificação: DESFAVORÁVEL (Score: 67%)
```

## 📚 Datasets

### Base de Treinamento (TybyrIA v2.1)
- **Dataset**: [`Veronyka/base-dados-odio-lgbtqia`](https://huggingface.co/datasets/Veronyka/base-dados-odio-lgbtqia)
- **Registros**: 12.102 comentários de redes sociais
- **Plataformas**: Instagram, TikTok, YouTube
- **Anotação**: 1.891 comentários anotados manualmente em 33 categorias de ódio

### PLs Testadas (Validação Manual)
- **39 PLs** anotadas manualmente
- **Período**: 2010-2024
- **Fontes**: Câmara dos Deputados, Senado Federal
- **Categorias**: Favoráveis (13), Desfavoráveis (26)

## 📈 Performance

### Métricas de Validação (39 PLs)

| Métrica | Valor | Descrição |
|---------|-------|-----------|
| **Accuracy** | 82.1% | PLs corretamente classificadas |
| **Precision (DESFAVORÁVEL)** | 88.5% | Precisão ao classificar como desfavorável |
| **Recall (DESFAVORÁVEL)** | 92.3% | Capacidade de detectar PLs desfavoráveis |
| **F1-Score** | 90.4% | Média harmônica de precisão e recall |

### Exemplos de Acerto**PL 5034/2020** - Classificado: FAVORÁVEL (Score: 18.2%)
- *"Equipara terapias de conversão à tortura"*
- Real: Favorável

❌ **PL 106/2023** - Classificado: DESFAVORÁVEL (Score: 67.3%)
- *"Proíbe uso de símbolos religiosos em paradas LGBTQIA+"*
- Real: Desfavorável

## ⚠️ Limitações e Avisos

### 1. Requer Revisão Humana
- Classificações são **sugestões**, não decisões definitivas
- Sempre **revise manualmente** o contexto legislativo completo
- Use como **ferramenta de apoio**, não automação total

### 2. Contexto Limitado
- Não considera histórico completo de tramitação
- Não analisa emendas e substitutivos
- Não avalia posicionamento de autores

### 3. Modelos Não Específicos
- **TybyrIA v2.1**: Treinado em redes sociais (não legislação)
- **AzMina**: Focado em direitos de mulheres (proxy para LGBTQIA+)
- **Falsos Positivos**: Linguagem técnica pode gerar alertas

### 4. Cobertura Geográfica
- Otimizado para PLs do **Brasil**
- Pode funcionar em outros países lusófonos, mas não testado

## 🔄 Fontes de Dados

O sistema busca automaticamente em:

-**Câmara dos Deputados** (API oficial)
-**Senado Federal** (API oficial)
-**ALESP** (Assembleia Legislativa de São Paulo)
-**Câmara Municipal de São Paulo**

## 🎯 Casos de Uso

### 🏳️‍🌈 Ativistas LGBTQIA+
- Monitorar PLs desfavoráveis em tramitação
- Identificar ameaças aos direitos conquistados
- Mobilizar comunidade contra PLs prejudiciais

### 📚 Pesquisadores
- Analisar tendências legislativas
- Mapear posicionamentos de parlamentares
- Estudar evolução de direitos LGBTQIA+

### 📰 Jornalistas
- Investigar PLs em tramitação
- Identificar pautas relevantes
- Contextualizar debates legislativos

### 🏢 ONGs e Coletivos
- Acompanhar agenda legislativa
- Planejar ações de advocacy
- Produzir relatórios de monitoramento

## 📄 Licença

**CC-BY-NC-SA-4.0** (Creative Commons - Atribuição-NãoComercial-CompartilhaIgual 4.0)

### Você Pode
- ✅ Compartilhar: copiar e redistribuir o material
- ✅ Adaptar: remixar, transformar e criar a partir do material

### Sob as Seguintes Condições
- 📝 **Atribuição**: Creditar o autor original
- 🚫 **Não Comercial**: Não usar para fins comerciais
- 🔄 **Compartilha Igual**: Distribuir sob a mesma licença

## 🙏 Créditos e Agradecimentos

### Modelos Base
- **TybyrIA v2.1**: Desenvolvido por [Veronyka](https://huggingface.co/Veronyka)
- **AzMina/QuiterIA**: Desenvolvido pela equipe [AzMina](https://huggingface.co/azmina)
- **Tupi-BERT**: [`FpOliveira/tupi-bert-base-portuguese-cased`](https://huggingface.co/FpOliveira/tupi-bert-base-portuguese-cased)
- **BERTimbau**: [`neuralmind/bert-base-portuguese-cased`](https://huggingface.co/neuralmind/bert-base-portuguese-cased)

### Inspiração
- **AzMina**: Modelo feminista de análise de PLs
- **LabHacker da Câmara**: Soluções de dados abertos legislativos
- **Comunidade LGBTQIA+**: Necessidade de ferramentas de monitoramento

### Infraestrutura
- **Hugging Face**: Hospedagem de modelos e Spaces
- **Câmara dos Deputados**: API de dados abertos
- **Senado Federal**: API de dados abertos

## 🔗 Links Relacionados

### Spaces e Aplicações
- **Radar Legislativo (Principal)**: https://huggingface.co/spaces/Veronyka/radar-legislativo-lgbtqia
- **Radar Social V2.1 (Space)**: https://huggingface.co/spaces/Veronyka/radar-social-lgbtqia-v2.1
- **Análise de Base de Dados**: https://huggingface.co/spaces/Veronyka/radar-social-lgbtqia-v2-analise
- **Quiz Colaborativo**: https://huggingface.co/spaces/Veronyka/quiz-radar-social-lgbtqia-v2

### Modelos
- **TybyrIA v2.1 (Modelo)**: https://huggingface.co/Veronyka/tybyria-v2.1
- **AzMina QuiterIA**: https://huggingface.co/azmina/ia-feminista-bert-posicao

### Datasets
- **Base de Dados de Ódio LGBTQIA+**: https://huggingface.co/datasets/Veronyka/base-dados-odio-lgbtqia

## 📞 Contato e Contribuições

- **Issues**: Reporte bugs ou sugira melhorias
- **Pull Requests**: Contribuições são bem-vindas
- **Community**: Participe da discussão na aba Community

## 📊 Citação

Se usar este modelo em pesquisa acadêmica, por favor cite:

```bibtex
@misc{radar-legislativo-lgbtqia,
  author = {Veronyka},
  title = {Radar Legislativo LGBTQIA+: Ensemble Híbrido para Classificação de Projetos de Lei},
  year = {2024},
  publisher = {Hugging Face},
  howpublished = {\url{https://huggingface.co/Veronyka/radar-legislativo-lgbtqia}},
  note = {Sistema de análise automática de PLs relacionadas a direitos LGBTQIA+ no Brasil}
}
```

---

## 🏳️‍🌈 Radar Legislativo LGBTQIA+

*Desenvolvido com ❤️ para a comunidade LGBTQIA+*

**Use como ferramenta de apoio, sempre com revisão humana.** ⚖️

**Versão**: 1.0 (Outubro 2024)  
**Status**: ✅ Produção  
**Cobertura**: Federal + Estadual (SP) + Municipal (SP)