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