belisards's picture
Update README.md
6cf2f96 verified
---
library_name: transformers
license: mit
base_model:
- neuralmind/bert-large-portuguese-cased
- belisards/congretimbau
tags:
- congresso
- direito
- politica
metrics:
- accuracy
- f1
- recall
- precision
model-index:
- name: modelos
results: []
language:
- pt
pipeline_tag: text-classification
datasets:
- azmina/ementas_congresso
---
# IA Feminista
Este modelo faz classificação temática de projetos de lei relacionados a gênero a partir da ementa disponibilizada pela Câmara e o Senado brasileiro.
Ele foi desenvolvido a partir do ajuste fino (fine-tuning para classificação) do [Congretimbau](https://huggingface.co/belisards/congretimbau), que por sua vez é uma versão do [BERTimbau](https://huggingface.co/neuralmind/bert-base-portuguese-cased) adaptada (com técnicas de pré-treino continuado via modelagem de linguagem mascarada) para ementas de projetos de lei. O modelo deve ser usado em conjunto com o tokenizador do [BERTimbau](https://huggingface.co/neuralmind/bert-large-portuguese-cased), conforme o exemplo abaixo.
O modelo atinge as seguintes métricas no conjunto de dados de teste:
- Perda(loss): 0.5892
- Acurácia: 0.8155
- F1: 0.7939
- Recall: 0.7935
- Precisão: 0.8063
Mais informações sobre o modelo e o código utilizado podem ser encontrados no [repositório do Github](https://github.com/institutoazmina/ia-feminista-elas-no-congresso).
## Descrição do modelo
O modelo tem como objetivo fazer uma classificação multirrótulo a partir da ementa dos projetos de lei.
As ementas são atribuídas a uma das seguintes categorias:
```
{0: 'economia',
1: 'genero',
2: 'dignidade sexual',
3: 'violencia contra a mulher',
4: 'politica',
5: 'direitos sexuais e reprodutivos',
6: 'direitos sociais',
7: 'maternidade',
8: 'feminicidio'}
```
A definição de cada categoria está descrita na seção "Categorias" abaixo.
## Resultados
As métricas reportadas abaixo foram obtidas a partir do [conjunto de teste dos dados anotados](https://huggingface.co/datasets/azmina/ementas_congresso).
| Categoria | Precisão | Recall | F1-Score | Suporte |
|-------------------------------------|-----------|--------|----------|---------|
| dignidade sexual | 0.94 | 0.88 | 0.91 | 17 |
| direitos sexuais e reprodutivos | 0.89 | 0.84 | 0.86 | 19 |
| direitos sociais | 0.61 | 0.58 | 0.59 | 19 |
| economia | 0.78 | 0.50 | 0.61 | 14 |
| feminicidio | 0.67 | 0.80 | 0.73 | 5 |
| genero | 0.81 | 1.00 | 0.90 | 13 |
| maternidade | 0.70 | 0.74 | 0.72 | 19 |
| politica | 1.00 | 0.88 | 0.93 | 8 |
| violencia contra a mulher | 0.86 | 0.93 | 0.89 | 54 |
| **Accuracy** | | | 0.82 | 168 |
| **Macro Average** | 0.81 | 0.79 | 0.79 | 168 |
| **Weighted Average** | 0.82 | 0.82 | 0.81 | 168 |
## Casos de uso e limitações
O modelo deve ser usado para prover uma classificação temática inicial dos projetos de lei. Os temas atribuídos pelo modelo devem ser validado posteriormente por um profissional responsável. Recomenda-se também considerar a utilização de múltiplas classes, uma vez que a acurácia top-k (para k = 2) do modelo é de 95%.
O código abaixo demonstra um exemplo de utilização do modelo para inferência no conjunto de dados de teste:
```
from datasets import Dataset, load_dataset
dataset = load_dataset("azmina/ementas_anotadas")
cols = ["text","label"]
fix_columns = {"label_tema":"label"}
test = dataset["test"].to_pandas().rename(columns=fix_columns)[cols]
from transformers import AutoModelForSequenceClassification, AutoConfig, AutoTokenizer
from torch import cuda
import torch
device = 'cuda' if cuda.is_available() else 'cpu'
model_name = "azmina/ia_feminista_tema"
tokenizer = 'neuralmind/bert-base-portuguese-cased'
tokenizer = AutoTokenizer.from_pretrained(tokenizer)
model = AutoModelForSequenceClassification.from_pretrained(model_name)
model.to(device)
config = AutoConfig.from_pretrained(model_name)
class_mapping = config.id2label
def inference(string):
tokens = tokenizer(string, truncation=True, max_length=512, return_tensors="pt")
tokens = {key: value.to(device) for key, value in tokens.items()}
with torch.no_grad():
outputs = model(**tokens)
predicted_index = outputs.logits.argmax(dim=-1).item()
# Retorna a principal classe predita
predicted_class = class_mapping[predicted_index]
# Lista as probabilidades de todas as classes
all_proba = outputs.logits.softmax(dim=-1).tolist()[0]
# Retorna a probabilidade da classe
pred_proba = all_proba[predicted_index]
return predicted_class, all_proba, pred_proba
test["pred_label"], test["all_proba"], test["pred_proba"] = zip(*test["text"].apply(lambda x: inference(x)))
```
Entre as limitações do modelo, destaca-se a taxa de acerto variável de acordo com a classe (consulte a tabela acima para mais detalhes). Recomenda-se cautela com casos de uso envolvendo decisões de risco, em especial nas classes com baixa taxa de acerto.
## Dados de treinamento e avaliação
Para treinar o modelo, foi utilizado um conjunto de dados anotado pelo Instituto AzMina.
Mais informações e o acesso aos dados podem ser obtidos no seguinte link: [https://huggingface.co/azmina/ementas_anotadas](https://huggingface.co/datasets/azmina/ementas_congresso)
## Treinamento
O treinamento (fine-tuning) foi feita em duas etapas.
Na primeira, foi usado o dataset de validação para monitorar o treinamento do modelo, utilizando técnicas de EarlyStopping. A avaliação comparativa com outros modelos foi feita com base no dataset de teste.
Para o treinamento do modelo final, este disponibilizado aqui, o dataset de validação foi incorporado aos dados de treinamento, mantendo o dataset de teste separado para fins de avaliação. Neste caso, não foi utilizado técnicas de EarlyStopping e o ajuste dos hiperparâmetros foi feito manualmente a partir de experimentos monitorados.
### Categorias
- dignidade sexual: refere-se ao reconhecimento do valor de cada indivíduo em relação à sua sexualidade. Isso implica que todas as pessoas têm o direito de viver sua sexualidade de maneira plena e respeitosa, sem discriminação ou violência. A dignidade sexual garante as relações interpessoais sejam baseadas no respeito mútuo e no consentimento. Neste conjunto de projetos de lei, estão incluídos nessa categoria todos os textos que envolvem crimes contra a dignidade sexual, incluindo estupro e atos relacionados, violação sexual mediante fraude, assédio sexual, divulgação de cena de sexo ou de pornografia, tráfico de pessoas e ato obsceno.
- direitos sexuais e reprodutivos: conjunto de direitos humanos que garantem a todos os indivíduos liberdade e capacidade para decidir sobre sua vida sexual e reprodutiva. Isso inclui o direito à informação, à educação, ao acesso a serviços de saúde reprodutiva, ao aborto, ao planejamento familiar, assistência médica durante a gravidez, parto e pós-parto e ao livre exercício da sexualidade.
- direitos sociais: aqueles que garantem condições mínimas de vida digna a todos os indivíduos, incluindo acesso à educação, saúde, trabalho, moradia e seguridade social. Esses direitos visam promover a igualdade e a justiça social, assegurando que todos tenham oportunidades iguais para desenvolver seu potencial humano.
- economia: todos os projetos de lei que envolver questões de produção, distribuição, acumulação e consumo de bens materiais com recorte de gênero. A categoria inclui, por exemplo, a concessão de benefícios financeiros exclusivos para mulheres e pessoas LGBT, participação econômica de mulheres e outros grupos, abordando temas como igualdade salarial, empreendedorismo feminino, inclusão no mercado de trabalho, acesso a crédito e medidas para combater a precarização do trabalho feminino.
- feminicidio: assassinato de mulheres motivado por questões de gênero, ou seja, por ela ser do sexo feminino. Inclui projetos para prevenir, combater e punir o feminicídio, como políticas para a prevenção, investigação e julgamento de crimes de feminicídio, bem como medidas de apoio e proteção às vítimas de violência de gênero.
- genero: construções sociais e culturais atribuídas aos papéis masculinos e femininos na sociedade, que influenciam comportamentos, oportunidades e relações entre os sexos. O conceito de gênero é fundamental para entender desigualdades sociais e promover políticas que visem à equidade. Eeste conjunto de projetos de lei, inclui propostas sobre ideologia de gênero, igualdade de gênero, lgbtfobia, orientação sexual e identidade de gênero, propostas para promover a igualdade e eliminar discriminações e preconceitos baseados no gênero, medidas para garantir direitos e oportunidades iguais para mulheres, homens, pessoas trans e não-binárias em áreas como trabalho, educação, saúde, segurança e participação política.
- maternidade: é a qualidade ou estado de ser mãe, envolvendo não apenas o ato biológico da gestação e do parto, mas também o cuidado, educação e proteção oferecidos à criança. Inclui iniciativas sobre licença-maternidade, saláario maternidade e adoção, proteção no ambiente de trabalho, acesso a creches, políticas de apoio à amamentação e assistência a mães em situação de vulnerabilidade.
- politica: atividade relacionada à governança do Estado nos níveis minucipal, estadual e federal, e às relações de poder entre indivíduos ou grupos. Envolve projetos de lei voltados à participação política das mulheres e à promoção da equidade de gênero na esfera política. Incluem propostas para aumentar a representatividade feminina em cargos eletivos e de liderança, além de garantir a participação em processos de tomada de decisão e elaboração de políticas públicas.
- violencia contra a mulher: qualquer ato de violência baseado no gênero que resulte em danos para mulheres. Inclui projetos para prevenir, punir e erradicar a violência contra mulheres em todas as suas formas, incluindo violência física, psicológica, sexual, patrimonial e moral. Envolvem políticas de proteção, atendimento e apoio às vítimas, bem como campanhas educativas e ações para responsabilizar os agressores. Essa categoria inclui todos os tipos de violência contra mulheres, com exceção dos crimes contra a dignidade sexual, que estão agrupados em categoria homônima.
### Hiperparâmetros de treinamento
- learning_rate: 1e-05
- train_batch_size: 32
- eval_batch_size: 32
- seed: 5151
- optimizer: Adam with betas=(0.9,0.999) and epsilon=1e-08
- lr_scheduler_type: linear
- lr_scheduler_warmup_steps: 50
- num_epochs: 8
### Versões
- Transformers 4.45.1
- Pytorch 2.4.1+cu121
- Datasets 3.0.1
- Tokenizers 0.20.0