| --- |
| license: apache-2.0 |
| datasets: |
| - nilc-nlp/assin2 |
| language: |
| - pt |
| metrics: |
| - f1 |
| - accuracy |
| - mae |
| base_model: |
| - Itau-Unibanco/NorBERTo-base |
| tags: |
| - NLI |
| - MultiTask |
| - Similarity-Sentence |
| --- |
| |
| Modelo multitask para Natural Language Inference (NLI) em português brasileiro, baseado no [NorBERTo](https://huggingface.co/Itau-Unibanco/NorBERTo-base). |
|
|
| ## Tarefas |
|
|
| - **Classificação**: Entailment (NONE(0), ENTAILMENT(1)) |
| - **Regressão**: Similaridade semântica (escala 0-5) |
|
|
| ## Dataset |
|
|
| Treinado no [ASSIN2](https://huggingface.co/datasets/nilc-nlp/assin2) (Avaliação de Similaridade Semântica e Inferência Natural). |
|
|
| ## Resultados |
|
|
| ### Melhor desempenho em validação |
|
|
| | Métrica | Valor | |
| |----------|---------| |
| | Accuracy | 96.4% | |
| | F1 Score | 96.4% | |
| | MAE (Similaridade) | 0.233 | |
|
|
| ### Desempenho no conjunto de teste |
|
|
| | Métrica | Valor | |
| |----------|---------| |
| | Accuracy | 90.60% | |
| | F1 Score | 90.60% | |
| | MAE (Similaridade) | 0.467 | |
| | Loss | 0.804 | |
|
|
| ### Histórico de treinamento |
|
|
| | Epoch | Train Loss | Val Loss | Accuracy | F1 | Sim MAE | |
| |---------|---------|---------|---------|---------|---------| |
| | 1 | 0.524 | 0.488 | 90.2% | 90.2% | 0.366 | |
| | 2 | 0.329 | 0.318 | 94.6% | 94.6% | 0.284 | |
| | 3 | 0.174 | 0.283 | 95.8% | 95.8% | 0.259 | |
| | 4 | 0.134 | 0.253 | 96.4% | 96.4% | 0.239 | |
| | 5 | 0.064 | 0.266 | 96.4% | 96.4% | 0.233 | |
|
|
| ## Uso |
|
|
| ```python |
| from transformers import AutoTokenizer |
| from huggingface_hub import hf_hub_download |
| import onnxruntime as ort |
| import numpy as np |
| |
| tokenizer = AutoTokenizer.from_pretrained( |
| "palaciodata/NorBERTo-base-NLI-Multitask" |
| ) |
| |
| model_path = hf_hub_download( |
| repo_id="palaciodata/NorBERTo-base-NLI-Multitask", |
| filename="model.onnx" |
| ) |
| |
| session = ort.InferenceSession(model_path) |
| |
| premissa = "Uma criança risonha está segurando uma pistola de água e sendo espirrada com água" |
| hipotese = "Uma criança está segurando uma pistola de água" |
| |
| inputs = tokenizer( |
| premissa, |
| hipotese, |
| return_tensors="np", |
| max_length=256, |
| truncation=True, |
| padding="max_length" |
| ) |
| |
| logits, similarity = session.run( |
| None, |
| { |
| "input_ids": inputs["input_ids"].astype(np.int64), |
| "attention_mask": inputs["attention_mask"].astype(np.int64), |
| } |
| ) |
| |
| classe = np.argmax(logits, axis=1)[0] |
| |
| print( |
| f"Classe: {classe}, Similaridade: {float(similarity[0]):.3f}" |
| ) |