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