cardiffnlp/twitter-roberta-base-irony

cardiffnlp
Clasificación de texto

Este es un modelo basado en roBERTa entrenado en aproximadamente 58 millones de tweets y ajustado para la detección de ironía con el benchmark TweetEval. Este modelo se ha integrado en la biblioteca de Python TweetNLP. Papel: Benchmark de TweetEval (Resultados de EMNLP 2020). Repositorio Git: Repositorio oficial de Tweeteval.

Como usar

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 (placeholders de nombres 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
# posición/aborto, posición/ateísmo, posición/clima, posición/feminista, posición/hillary
task='irony'
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 = 'Genial, se rompió el primer día...'
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)}')

Output:
1) ironía  0.914
2) no_ironia  0.086

Funcionalidades

Clasificación de texto
Basado en transformers
Compatible con PyTorch
Compatible con TensorFlow
Compatible con JAX
Ajustado para la detección de ironía
Compatible con AutoTrain
Compatible con Endpoints de Inferencia

Casos de uso

Detección de ironía en tweets.
Clasificación de texto en otros contextos deportivos o sociales.
Análisis de sentimiento en redes sociales.