cardiffnlp/twitter-roberta-base-offensive
cardiffnlp
Clasificación de texto
Twitter-roBERTa-base para la Identificación de Lenguaje Ofensivo. Este es un modelo roBERTa-base entrenado en ~58M tweets y ajustado para la identificación de lenguaje ofensivo con el benchmark 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
# Preprocesamiento de texto (placeholders 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, emotion, hate, irony, offensive, sentiment
# stance/abortion, stance/atheism, stance/climate, stance/feminist, stance/hillary
task='offensive'
MODEL = f'cardiffnlp/twitter-roberta-base-{task}'
tokenizer = AutoTokenizer.from_pretrained(MODEL)
# descarga de 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)
# # TF
# model = TFAutoModelForSequenceClassification.from_pretrained(MODEL)
# model.save_pretrained(MODEL)
# text = 'Good night 😊'
# encoded_input = tokenizer(text, return_tensors='tf')
# output = model(encoded_input)
# scores = output[0][0].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) not-offensive 0.9073
2) offensive 0.0927
Funcionalidades
- Transformadores
- PyTorch
- TensorFlow
- JAX
- Clasificación de texto
- Compatible con AutoTrain
- Compatible con Endpoints
- arXiv:2010.12421
Casos de uso
- Identificación de lenguaje ofensivo en Twitter
- Clasificación de tweets
- Análisis de sentimiento en redes sociales