tabularisai/robust-sentiment-analysis

tabularisai
Clasificación de texto

Este modelo es una versión ajustada de bert-base-uncased para análisis de sentimientos. Fue entrenado solo en datos sintéticos producidos por los modelos LLM de última generación: Llama3.1, Gemma2 y más. Este modelo permite un entrenamiento enfocado en una amplia gama de expresiones de sentimiento sin las limitaciones que se encuentran a menudo en los conjuntos de datos del mundo real. El proceso de entrenamiento incluyó datos diseñados para cubrir una amplia gama de expresiones de sentimientos, utilizando el marco de trabajo PyTorch Lightning durante 5 épocas. Alcanzó una precisión de aproximadamente 0,95 en el conjunto de datos de validación, permitiendo predicciones desfasadas en una clase. Es importante tener en cuenta las consideraciones éticas, ya que el modelo puede presentar sesgos y se debe monitorear su rendimiento.

Como usar

Here's a quick example of how to use the model:

from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch

# Load model and tokenizer
model_name = "tabularisai/robust-sentiment-analysis"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)

# Function to predict sentiment
def predict_sentiment(text):
    inputs = tokenizer(text.lower(), return_tensors="pt", truncation=True, padding=True, max_length=512)
    with torch.no_grad():
        outputs = model(**inputs)
    probabilities = torch.nn.functional.softmax(outputs.logits, dim=-1)
    predicted_class = torch.argmax(probabilities, dim=-1).item()
    sentiment_map = {0: "Muy negativo", 1: "Negativo", 2: "Neutral", 3: "Positivo", 4: "Muy positivo"}
    return sentiment_map[predicted_class]

# Example usage
texts = [
    "¡Me encantó esta película! La actuación fue excelente y la trama cautivadora.",
    "El servicio en este restaurante fue terrible. Nunca volveré.",
    "El producto funciona como se esperaba. Nada especial, pero hace el trabajo.",
    "Estoy un poco decepcionado con mi compra. No es tan bueno como esperaba.",
    "¡Este libro me cambió la vida! No pude dejar de leerlo y aprendí mucho."
]
for text in texts:
    sentiment = predict_sentiment(text)
    print(f"Texto: {text}")
    print(f"Sentimiento: {sentiment}\n")

Example of JS usage:

script type="module"
import { AutoTokenizer, AutoModel, env } from 'https://cdn.jsdelivr.net/npm/@xenova/[email protected]';

env.allowLocalModels = false;
env.useCDN = true;

const MODEL_NAME = 'tabularisai/robust-sentiment-analysis';

function softmax(arr) {
    const max = Math.max(...arr);
    const exp = arr.map(x => Math.exp(x - max));
    const sum = exp.reduce((acc, val) => acc + val);
    return exp.map(x => x / sum);
}

async function analyzeSentiment() {
    try {
        const tokenizer = await AutoTokenizer.from_pretrained(MODEL_NAME);
        const model = await AutoModel.from_pretrained(MODEL_NAME);

        const texts = [
            "¡Me encantó esta película! La actuación fue excelente y la trama cautivadora.",
            "El servicio en este restaurante fue terrible. Nunca volveré.",
            "El producto funciona como se esperaba. Nada especial, pero hace el trabajo.",
            "Estoy un poco decepcionado con mi compra. No es tan bueno como esperaba.",
            "¡Este libro me cambió la vida! No pude dejar de leerlo y aprendí mucho."
        ];

        const output = document.getElementById('output');

        for (const text of texts) {
            const inputs = await tokenizer(text, { return_tensors: 'pt' });
            const result = await model(inputs);

            console.log('Model output:', result);

            if (result.output && result.output.data) {
                const logitsArray = Array.from(result.output.data);
                console.log('Logits array:', logitsArray);

                const probabilities = softmax(logitsArray);
                const predicted_class = probabilities.indexOf(Math.max(...probabilities));

                const sentimentMap = {
                    0: "Muy negativo",
                    1: "Negativo",
                    2: "Neutral",
                    3: "Positivo",
                    4: "Muy positivo"
                };

                const sentiment = sentimentMap[predicted_class];
                const score = probabilities[predicted_class];

                output.innerHTML += `Texto: "${text}"`;
                output.innerHTML += `Sentimiento: ${sentiment}, Puntuación: ${score.toFixed(4)} `;
            } else {
                console.error('Unexpected model output structure:', result);
                output.innerHTML += `No se pudo procesar: "${text}"`;
            }
        }
    } catch (error) {
        console.error('Error:', error);
        document.getElementById('output').innerHTML = 'Ocurrió un error. Verifique la consola para más detalles.';
    }
}

analyzeSentiment();

Funcionalidades

Clasificación de texto
Transformadores
ONNX
Safetensors
Datos sintéticos
Puntos de inferencia

Casos de uso

Monitoreo de redes sociales
Análisis de retroalimentación de clientes
Clasificación de sentimientos en reseñas de productos
Seguimiento del sentimiento de la marca