Downloads · 30 days
103
3% of all-time downloads
azmina/ia-feminista-bert-tema
ia-feminista-bert-tema is a text classification model from azmina. Use it when you need a label for a piece of text. It is set up for transformers. The card lists the license as mit.
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.
Downloads · 30 days
103
3% of all-time downloads
All-time downloads
3.6K
Public
Parameters
334M
4 GB on disk
Likes
1
Public
Click a slice to open those files.
.safetensors1.3 GB · 100%
From the Hugging Face model README
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, que por sua vez é uma versão do BERTimbau 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, conforme o exemplo abaixo.
O modelo atinge as seguintes métricas no conjunto de dados de teste:
Mais informações sobre o modelo e o código utilizado podem ser encontrados no repositório do Github.
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.
As métricas reportadas abaixo foram obtidas a partir do conjunto de teste dos dados anotados.
| 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 |
| Acurácia | 0.82 | 168 | ||
| Média (macro) | 0.81 | 0.79 | 0.79 | 168 |
| Média ponderada | 0.82 | 0.82 | 0.81 | 168 |
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.
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
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.