twitter-roberta-base-emotion

cardiffnlp
Clasificación de texto

Este es un modelo RoBERTa-base entrenado con aproximadamente 58 millones de tweets y ajustado para el reconocimiento de emociones con el benchmark TweetEval. Paper: TweetEval benchmark (Conclusiones de EMNLP 2020). Repositorio Git: Repositorio oficial de Tweeteval. ¡Nuevo! Acabamos de lanzar un nuevo modelo de reconocimiento de emociones entrenado con más tipos de emociones y con un modelo basado en RoBERTa más reciente. Consulte twitter-roberta-base-emotion-multilabel-latest y TweetNLP para más detalles.

Como usar

from transformers import AutoModelForSequenceClassification
from transformers import AutoTokenizer
import numpy as np
from scipy.special import softmax
import csv
import urllib.request

# Preprocesar texto (marcadores de posición de nombre de usuario y enlace)
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)

# Tareas:
# emoji, emoción, odio, ironía, ofensivo, sentimiento
# postura/aborto, postura/ateísmo, postura/clima, postura/feminista, postura/hillary
task='emotion'
MODEL = f"cardiffnlp/twitter-roberta-base-{task}"

tokenizer = AutoTokenizer.from_pretrained(MODEL)

# Descargar mapeo de etiquetas
mapping_link = f"https://raw.githubusercontent.com/cardiffnlp/tweeteval/main/datasets/{task}/mapping.txt"
with urllib.request.urlopen(mapping_link) as f:
    html = f.read().decode('utf-8').split("\n")
    csvreader = csv.reader(html, delimiter='\t')
    labels = [row[1] for row in csvreader if len(row) > 1]

# PyTorch
model = AutoModelForSequenceClassification.from_pretrained(MODEL)
model.save_pretrained(MODEL)

text = "Celebrando mi promoción 😎"
text = preprocess(text)
encoded_input = tokenizer(text, return_tensors='pt')
output = model(**encoded_input)
scores = output[0][0].detach().numpy()
scores = softmax(scores)

ranking = np.argsort(scores)
ranking = ranking[::-1]
for i in range(scores.shape[0]):
    l = labels[ranking[i]]
    s = scores[ranking[i]]
    print(f"{i+1}) {l} {np.round(float(s), 4)}")

# Salida de ejemplo:
# 1) alegría 0.9382
# 2) optimismo 0.0362
# 3) ira 0.0145
# 4) tristeza 0.0112

Funcionalidades

Clasificación de texto
Compatible con Transformers
Entrenado en PyTorch
Compatibilidad con TensorFlow
Soporte para JAX
Basado en RoBERTa
Compatible con AutoTrain
Compatible con Endpoints de inferencia

Casos de uso

Reconocimiento de emociones en tweets
Análisis de sentimientos
Detección de odio
Identificación de ironía
Detección de contenido ofensivo
Análisis de postura sobre temas específicos (aborto, ateísmo, clima, feminismo, Hillary Clinton)