--- 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 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 ## 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'} ``` ## 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, o ajuste dos hiperparâmetros foi feito manualmente a partir do monitoramento manual das métricas de treinamento. ### 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