daveni/twitter-xlm-roberta-emotion-es
daveni
Clasificación de texto
Este es un modelo XLM-roBERTa-base entrenado en aproximadamente 198M de tweets y ajustado para análisis de emociones en el idioma español. Este modelo fue presentado en la competencia EmoEvalEs, parte de la Conferencia IberLEF 2021, donde la tarea propuesta fue la clasificación de tweets españoles entre siete clases diferentes: ira, disgusto, miedo, alegría, tristeza, sorpresa y otra. Alcanzamos la primera posición en la competencia con una puntuación F1 macro-averaged de 71.70%.
Como usar
from transformers import pipeline
model_path = "daveni/twitter-xlm-roberta-emotion-es"
emotion_analysis = pipeline("text-classification", framework="pt", model=model_path, tokenizer=model_path)
emotion_analysis("Einstein dijo: Solo hay dos cosas infinitas, el universo y los pinches anuncios de bitcoin en Twitter. Paren ya carajo aaaaaaghhgggghhh me quiero murir")
# Output:
# [{'label': 'ira', 'score': 0.48307016491889954}]
Full classification example
from transformers import AutoModelForSequenceClassification
from transformers import AutoTokenizer, AutoConfig
import numpy as np
from scipy.special import softmax
# Preprocess text (username and link placeholders)
def preprocess(text):
new_text = []
for t in text.split(" "):
t = '@user' if t.startswith('@') and len(t) > 1 else t
t = 'http' if t.startswith('http') else t
new_text.append(t)
return " ".join(new_text)
model_path = "daveni/twitter-xlm-roberta-emotion-es"
tokenizer = AutoTokenizer.from_pretrained(model_path)
config = AutoConfig.from_pretrained(model_path)
# PT
model = AutoModelForSequenceClassification.from_pretrained(model_path)
text = "Se ha quedao bonito día para publicar vídeo, ¿no? Hoy del tema más diferente que hemos tocado en el canal."
text = preprocess(text)
print(text)
encoded_input = tokenizer(text, return_tensors='pt')
output = model(**encoded_input)
scores = output[0][0].detach().numpy()
scores = softmax(scores)
# Print labels and scores
ranking = np.argsort(scores)
ranking = ranking[::-1]
for i in range(scores.shape[0]):
l = config.id2label[ranking[i]]
s = scores[ranking[i]]
print(f"{i+1}) {l} {np.round(float(s), 4)}")
# Output:
# Se ha quedao bonito día para publicar vídeo, ¿no? Hoy del tema más diferente que hemos tocado en el canal.
# 1) alegría 0.7887
# 2) otros 0.1679
# 3) sorpresa 0.0152
# 4) tristeza 0.0145
# 5) ira 0.0077
# 6) disgusto 0.0033
# 7) miedo 0.0027
Funcionalidades
- Clasificación de texto
- Transformers
- Compatibilidad con AutoTrain
- Compatibilidad con Endpoints de Inferencia
Casos de uso
- Análisis de emociones en tweets en español
- Clasificación de texto para identificar emociones
- Investigación en procesamiento del lenguaje natural