cardiffnlp/twitter-roberta-base-sentiment

cardiffnlp
Clasificación de texto

Este es un modelo roBERTa-base entrenado en ~58M tweets y ajustado para análisis de sentimiento con el benchmark TweetEval. Este modelo es adecuado para inglés (para un modelo multilingüe similar, vea XLM-T). Artículo de referencia: TweetEval (Conclusiones de EMNLP 2020). Repositorio Git: Repositorio oficial de TweetEval.

Como usar

Ejemplo de clasificación

from transformers import AutoModelForSequenceClassification
from transformers import TFAutoModelForSequenceClassification
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 enlaces)
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 = 'sentiment'
MODEL = f'cardiffnlp/twitter-roberta-base-{task}'

tokenizer = AutoTokenizer.from_pretrained(MODEL)

# Descargar mapeo de etiquetas
labels = []
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]

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

text = 'Good night 😊'
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)}')

Resultado:

1) positivo 0.8466
2) neutral 0.1458
3) negativo 0.0076

Funcionalidades

Clasificación de Texto
Transformers
PyTorch
TensorFlow
JAX
roberta
tweet_eval
Compatible con AutoTrain
Compatibilidad con Puntos de Inferencia

Casos de uso

Análisis de Sentimiento
Detección de Emojis
Clasificación de Emoción
Detección de Odio
Identificación de Ironía
Detección de Contenido Ofensivo
Análisis de Postura en temas como aborto, ateísmo, cambio climático, feminismo y Hillary Clinton