beto-tass-sentiment / README.md
ralzate's picture
Upload README.md with huggingface_hub
5230677 verified
|
Raw
History Blame Contribute Delete
3.04 kB
---
language:
- es
license: cc-by-4.0
library_name: transformers
pipeline_tag: text-classification
base_model: dccuchile/bert-base-spanish-wwm-cased
tags:
- sentiment-analysis
- spanish
- beto
- tass
- text-classification
datasets:
- TASS
metrics:
- f1
- accuracy
model-index:
- name: beto-tass-sentiment
results:
- task:
type: text-classification
name: Sentiment Analysis
dataset:
name: TASS
type: TASS
metrics:
- type: f1
value: 0.668
name: F1 macro
- type: accuracy
value: 0.675
name: Accuracy
---
# BETO fine-tuned para análisis de sentimiento (TASS)
Modelo de **clasificación de sentimiento en español** basado en
[BETO](https://huggingface.co/dccuchile/bert-base-spanish-wwm-cased)
(`bert-base-spanish-wwm-cased`), afinado sobre el corpus **TASS** (tweets en español).
Clasifica un texto en **3 clases**:
| id | etiqueta | significado |
|----|----------|-------------|
| 0 | `N` | Negativo |
| 1 | `NEU` | Neutro |
| 2 | `P` | Positivo |
## Resultados
Evaluación sobre el split de validación de TASS (mejor checkpoint, batch size 16):
| Métrica | Valor |
|---------|-------|
| F1 macro | **0.668** |
| F1 weighted | 0.673 |
| Accuracy | 0.675 |
| Precision (macro) | 0.672 |
| Recall (macro) | 0.667 |
**Nota:** en este corpus BETO casi iguala a XLM-RoBERTa-large (F1 0.676) pese a ser
un modelo mucho más pequeño (~110M vs ~560M parámetros). La clase `NEU` es la más
difícil (ambigua), lo que limita el F1 macro en las tres clases.
## Uso
```python
from transformers import pipeline
clf = pipeline("text-classification", model="ralzate/beto-tass-sentiment")
clf("Me encantó la película, la mejor del año")
# [{'label': 'P', 'score': 0.97}]
```
O con la API de bajo nivel:
```python
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
tok = AutoTokenizer.from_pretrained("ralzate/beto-tass-sentiment")
model = AutoModelForSequenceClassification.from_pretrained("ralzate/beto-tass-sentiment")
inputs = tok("No me gustó para nada el servicio", return_tensors="pt")
pred = model(**inputs).logits.argmax(-1).item()
print(model.config.id2label[pred]) # N
```
## Entrenamiento
- **Base:** `dccuchile/bert-base-spanish-wwm-cased` (BETO).
- **Datos:** TASS (sentimiento, español, 3 clases N/NEU/P).
- **Hiperparámetros:** batch size 16, fine-tuning completo; mejor checkpoint por
F1 macro en validación.
- **Hardware:** Mac M1 Pro (16 GB), entrenamiento con MPS.
## Limitaciones
- Entrenado con texto de **Twitter**: rinde mejor en lenguaje informal/corto; puede
degradar en textos largos o formales.
- La clase `NEU` es ambigua y concentra la mayor parte de los errores.
- Sesgos propios de TASS y del dominio de redes sociales.
## Contexto
Modelo derivado de un trabajo de maestría en PLN sobre clasificación de texto y NER
en español. Modelo hermano: [`ralzate/beto-prostata-ner`](https://huggingface.co/ralzate/beto-prostata-ner)
(NER clínico).
Licencia: CC-BY-4.0.