SamLowe/roberta-base-go_emotions-onnx
SamLowe
Clasificación de texto
Versión ONNX del modelo roberta-base-go_emotions creado por SamLowe. Este modelo es una versión optimizada para inferencia, compatible con ONNX y más rápida que la versión original de Transformers. Está diseñado para la clasificación de emociones en texto y ofrece tanto una versión de precisión completa como una versión cuántica INT8.
Como usar
Cómo usar
Usando las Clases de ONNX de la Biblioteca Optimum
sentences = ["ONNX es extremadamente rápido para lotes pequeños. Impresionante"]
from transformers import AutoTokenizer, pipeline
from optimum.onnxruntime import ORTModelForSequenceClassification
model_id = "SamLowe/roberta-base-go_emotions-onnx"
file_name = "onnx/model_quantized.onnx"
model = ORTModelForSequenceClassification.from_pretrained(model_id, file_name=file_name)
tokenizer = AutoTokenizer.from_pretrained(model_id)
onnx_classifier = pipeline(
task="text-classification",
model=model,
tokenizer=tokenizer,
top_k=None,
function_to_apply="sigmoid", # opcional ya que es el valor predeterminado para la tarea
)
model_outputs = onnx_classifier(sentences)
print(model_outputs)
Usando ONNXRuntime
from tokenizers import Tokenizer
import onnxruntime as ort
from os import cpu_count
import numpy as np # solo se usa para la posprocesamiento sigmoid
sentences = ["hola mundo"] # por ejemplo un lote de 1
labels = ['admiration', 'amusement', 'anger', 'annoyance', 'approval', 'caring', 'confusion', 'curiosity', 'desire', 'disappointment', 'disapproval', 'disgust', 'embarrassment', 'excitement', 'fear', 'gratitude', 'grief', 'joy', 'love', 'nervousness', 'optimism', 'pride', 'realization', 'relief', 'remorse', 'sadness', 'surprise', 'neutral']
tokenizer = Tokenizer.from_pretrained("SamLowe/roberta-base-go_emotions")
params = {**tokenizer.padding, "length": None}
tokenizer.enable_padding(**params)
tokens_obj = tokenizer.encode_batch(sentences)
def load_onnx_model(model_filepath):
_options = ort.SessionOptions()
_options.inter_op_num_threads, _options.intra_op_num_threads = cpu_count(), cpu_count()
_providers = ["CPUExecutionProvider"] # podría usar ort.get_available_providers()
return ort.InferenceSession(path_or_bytes=model_filepath, sess_options=_options, providers=_providers)
model = load_onnx_model("path_to_model_dot_onnx_or_model_quantized_dot_onnx")
output_names = [model.get_outputs()[0].name] # por ejemplo ["logits"]
input_feed_dict = {
"input_ids": [t.ids for t in tokens_obj],
"attention_mask": [t.attention_mask for t in tokens_obj]
}
logits = model.run(output_names=output_names, input_feed=input_feed_dict)[0]
def sigmoid(x):
return 1.0 / (1.0 + np.exp(-x))
model_outputs = sigmoid(logits)
for probas in model_outputs:
top_result_index = np.argmax(probas)
print(labels[top_result_index], "con puntuación:", probas[top_result_index])
Funcionalidades
- Compatible con ONNX
- Clasificación de textos en múltiples etiquetas de emociones
- Inferencia más rápida en comparación con los modelos Transformers normales
- Disponible en versiones de precisión completa y cuántica (INT8)
- Optimizado para ejecutarse en CPU modernas
Casos de uso
- Clasificación de emociones en comentarios de redes sociales
- Análisis de sentimientos en reseñas de productos
- Clasificación de feedback en diferentes categorías emocionales
- Desarrollo de bots de atención al cliente que puedan detectar emociones de los usuarios