|
--- |
|
license: cc-by-nc-3.0 |
|
language: |
|
- es |
|
base_model: |
|
- allenai/longformer-base-4096 |
|
pipeline_tag: text-classification |
|
library_name: transformers |
|
tags: |
|
- sgd, |
|
- documental |
|
- gestion |
|
- documental type |
|
- text-classification |
|
- longformer |
|
- spanish |
|
- document-management |
|
- smote |
|
- multi-class |
|
- fine-tuned |
|
- transformers |
|
- gpu |
|
- a100 |
|
- cc-by-nc-3.0 |
|
--- |
|
# Excribe Classifier SGD Longformer 4096 |
|
|
|
## Model Overview |
|
|
|
**Excribe/Classifier_SGD_Longformer_4099** is a fine-tuned version of the `allenai/longformer-base-4096` model, designed for text classification tasks in document management, specifically for classifying Spanish-language input documents into document type categories (`tipo_documento_codigo`). Developed by **Excribe.co**, this model leverages the Longformer architecture to handle long texts (up to 4096 tokens) and is optimized for GPU environments, such as NVIDIA A100. |
|
|
|
The model was trained on a Spanish dataset (`final.parquet`) containing 8,850 samples across 109 document type classes. It addresses class imbalance using SMOTE (Synthetic Minority Over-sampling Technique) applied to the training set, ensuring robust performance on minority classes. The fine-tuning process achieved an evaluation F1-score of **0.4855**, accuracy of **0.6096**, precision of **0.5212**, and recall of **0.5006** on a validation set of 1,770 samples. |
|
|
|
### Key Features |
|
- **Task**: Multi-class text classification for document type identification. |
|
- **Language**: Spanish. |
|
- **Input**: Raw text (`texto_entrada`) from documents. |
|
- **Output**: Predicted document type code (`tipo_documento_codigo`) from 109 classes. |
|
- **Handling Long Texts**: Processes the first 4096-token chunk of input text. |
|
- **Class Imbalance**: Mitigated using SMOTE on the training set. |
|
- **Hardware Optimization**: Fine-tuned with mixed precision (fp16) and gradient accumulation for A100 GPUs. |
|
|
|
## Dataset |
|
|
|
The training dataset (`final.parquet`) consists of 8,850 Spanish text samples, each labeled with a document type code (`tipo_documento_codigo`). The dataset exhibits significant class imbalance, with class frequencies ranging from 10 to 2,363 samples per class. The dataset was split into: |
|
- **Training set**: 7,080 samples (before SMOTE, expanded to 9,903 after SMOTE). |
|
- **Validation set**: 1,770 samples (untouched by SMOTE for unbiased evaluation). |
|
|
|
SMOTE was applied to the training set to oversample minority classes (those with fewer than 30 samples) to a target of 40 samples per class, generating 2,823 synthetic samples. Single-instance classes were excluded from SMOTE to avoid resampling errors and were included in the training set as-is. |
|
|
|
## Model Training |
|
|
|
### Base Model |
|
The model is based on `allenai/longformer-base-4096`, a transformer model designed for long-document processing with a sparse attention mechanism, allowing efficient handling of sequences up to 4096 tokens. |
|
|
|
### Fine-Tuning |
|
The fine-tuning process was conducted using the Hugging Face `Trainer` API with the following configuration: |
|
- **Epochs**: 3 |
|
- **Learning Rate**: 2e-5 |
|
- **Batch Size**: Effective batch size of 16 (per_device_train_batch_size=2, gradient_accumulation_steps=8) |
|
- **Optimizer**: AdamW with weight decay (0.01) |
|
- **Warmup Steps**: 50 |
|
- **Mixed Precision**: fp16 for GPU efficiency |
|
- **Evaluation Strategy**: Per epoch, with the best model selected based on the macro F1-score |
|
- **SMOTE**: Applied to the training set to balance classes |
|
- **Hardware**: NVIDIA A100 GPU |
|
|
|
The training process took approximately 159.09 minutes (9,545.32 seconds) and produced the following evaluation metrics on the validation set: |
|
- **Eval Loss**: 1.5475 |
|
- **Eval Accuracy**: 0.6096 |
|
- **Eval F1 (macro)**: 0.4855 |
|
- **Eval Precision (macro)**: 0.5212 |
|
- **Eval Recall (macro)**: 0.5006 |
|
|
|
Training logs and checkpoints are saved in `./results`, with TensorBoard logs in `./logs`. The final model and tokenizer are saved in `./fine_tuned_longformer`. |
|
|
|
## Usage |
|
|
|
### Installation |
|
To use the model, install the required dependencies: |
|
```bash |
|
pip install transformers torch pandas scikit-learn numpy |
|
``` |
|
|
|
### Inference Example |
|
Below is a Python script to load and use the fine-tuned model for inference: |
|
|
|
```python |
|
from transformers import LongformerTokenizer, LongformerForSequenceClassification |
|
import torch |
|
import numpy as np |
|
|
|
# Load the model and tokenizer |
|
model_path = "excribe/classifier_sgd_longformer_4099" |
|
tokenizer = LongformerTokenizer.from_pretrained(model_path) |
|
model = LongformerForSequenceClassification.from_pretrained(model_path) |
|
|
|
# Load label encoder classes |
|
label_encoder_classes = np.load("label_encoder_classes.npy", allow_pickle=True) |
|
id2label = {i: int(label) for i, label in enumerate(label_encoder_classes)} |
|
|
|
# Example text |
|
text = "Your Spanish document text here..." |
|
|
|
# Tokenize input |
|
inputs = tokenizer( |
|
text, |
|
add_special_tokens=True, |
|
max_length=4096, |
|
padding="max_length", |
|
truncation=True, |
|
return_tensors="pt" |
|
) |
|
|
|
# Move inputs to GPU if available |
|
device = torch.device("cuda" if torch.cuda.is_available() else "cpu") |
|
model.to(device) |
|
inputs = {k: v.to(device) for k, v in inputs.items()} |
|
|
|
# Perform inference |
|
model.eval() |
|
with torch.no_grad(): |
|
outputs = model(**inputs) |
|
logits = outputs.logits |
|
predicted_id = torch.argmax(logits, dim=1).item() |
|
|
|
# Map prediction to label |
|
predicted_label = id2label[predicted_id] |
|
print(f"Predicted document type code: {predicted_label}") |
|
``` |
|
|
|
### Notes |
|
- The model processes only the first 4096 tokens of the input text. For longer documents, consider chunking strategies or alternative models. |
|
- Ensure the input text is in Spanish, as the model was trained exclusively on Spanish data. |
|
- The label encoder classes (`label_encoder_classes.npy`) must be available to map predicted IDs to document type codes. |
|
|
|
## Limitations |
|
- **First Chunk Limitation**: The model uses only the first 4096-token chunk, which may miss relevant information in longer documents. |
|
- **Class Imbalance**: While SMOTE improves minority class performance, some classes (e.g., single-instance classes) may still be underrepresented. |
|
- **Macro Metrics**: The reported F1-score (0.4855) is macro-averaged, meaning it treats all classes equally, which may mask performance disparities across imbalanced classes. |
|
- **Hardware Requirements**: Inference on CPU is possible but slower; a GPU is recommended for efficiency. |
|
|
|
## License |
|
This model is licensed under the **Creative Commons Attribution-NonCommercial 3.0 (CC BY-NC 3.0)** license. You are free to share and adapt the model for non-commercial purposes, provided appropriate credit is given to Excribe.co. |
|
|
|
## Author |
|
- **Organization**: Excribe.co |
|
- **Contact**: Reach out via Hugging Face (https://huggingface.co/excribe) |
|
|
|
## Citation |
|
If you use this model in your work, please cite: |
|
``` |
|
@misc{excribe_classifier_sgd_longformer_4099, |
|
author = {Excribe.co}, |
|
title = {Classifier SGD Longformer 4099: A Fine-Tuned Model for Spanish Document Type Classification}, |
|
year = {2025}, |
|
publisher = {Hugging Face}, |
|
url = {https://huggingface.co/excribe/classifier_sgd_longformer_4099} |
|
} |
|
``` |
|
|
|
## Acknowledgments |
|
- Built upon the `allenai/longformer-base-4096` model. |
|
- Utilizes the Hugging Face `transformers` library and `Trainer` API. |
|
- Thanks to the open-source community for tools like `imbalanced-learn` and `scikit-learn`. |