• Skip to primary navigation
  • Skip to main content
  • Skip to footer

Codemotion Magazine

We code the future. Together

  • Discover
    • Events
    • Community
    • Partners
    • Become a partner
    • Hackathons
  • Magazine
    • DevOps
    • Carreras tech
    • Frontend
    • Inteligencia Artificial
    • Dev life
    • Desarrollo web
  • Talent
    • Discover Talent
    • Jobs
    • Manifiesto
  • Companies
  • For Business
    • EN
    • IT
    • ES
  • Sign in
ads

Orli Dunoctubre 13, 2025 5 min read

Nivel Avanzado en PLN: Análisis de Sentimientos con Hugging Face y Transformers

Inteligencia Artificial
facebooktwitterlinkedinreddit

Si ya entendiste la base del Análisis de Sentimientos (AS) con técnicas de Bag-of-Words o TF-IDF, es hora de subir de nivel. El PLN moderno no se hace con métodos estadísticos simples; se hace con la arquitectura que lo cambió todo: los Transformers.

La Ironía, el contexto y las negaciones sutiles son el cemento en los métodos tradicionales. La solución es sumergirse en el ecosistema de Hugging Face, la plataforma que ha democratizado el Deep Learning en lenguaje.

Recommended article
agosto 1, 2025

Humano 2.0: Cómo la Living Intelligence está Redefiniendo Quiénes Somos

Orli Dun

Orli Dun

Deep Learning

¿Por Qué Transformers y Hugging Face?

Antes del Transformer (introducido en 2017 por Google con el artículo “Attention Is All You Need”), los modelos de PLN se basaban en Redes Neuronales Recurrentes (RNNs) o LSTMs. Estos modelos tenían problemas para manejar dependencias de largo alcance (recordar la primera parte de una frase muy larga) y eran lentos de entrenar.

1. La Revolución del Transformer

El Transformer introdujo el mecanismo de Auto-Atención (Self-Attention). En esencia, permite que el modelo:

  • Pese la importancia de otras palabras en la frase al procesar una palabra específica.
  • Procese todas las palabras de forma paralela, haciendo el entrenamiento increíblemente más rápido.

Esto dio origen a modelos como BERT, RoBERTa, y DistilBERT, que entienden el contexto en ambas direcciones (izquierda y derecha), permitiendo una comprensión semántica del lenguaje humano sin precedentes.

Los modelos de transformers han revolucionado el NLP porque capturan el contexto completo de una frase, no solo palabras aisladas. Esto significa que entienden matices como ironía, negaciones o expresiones más complejas.

2. El Ecosistema Hugging Face (HF)

Hugging Face se ha convertido en el GitHub del Machine Learning. Es una biblioteca open source que proporciona miles de modelos pre-entrenados (Transformers) listos para usar, entrenar y compartir.

Su principal ventaja es el aprendizaje por transferencia (Transfer Learning): en lugar de entrenar un modelo desde cero (lo cual es carísimo y requiere terabytes de datos), tomas un modelo ya entrenado en un corpus masivo (como toda la Wikipedia) y lo ajustas (fine-tuning) a tu tarea específica de Análisis de Sentimientos.

Tu Ruta Avanzada de AS con Hugging Face

Paso 1: Seleccionar el Modelo Base (El Pre-entrenamiento)

La elección del modelo base es crucial. Para tareas de clasificación de texto como el Análisis de Sentimientos, los siguientes modelos son excelentes puntos de partida:

  • BERT (Bidirectional Encoder Representations from Transformers): El pionero. Bueno, pero a veces lento.
  • RoBERTa: Una versión optimizada de BERT. Generalmente, ofrece un rendimiento superior con la misma arquitectura.
  • DistilBERT: Una versión “destilada” (más pequeña) de BERT. Es más rápido y liviano, ideal para despliegues en producción o entornos con recursos limitados, con una pérdida mínima de precisión.
  • Modelos Multilingües: Si trabajas con español, modelos como XLM-RoBERTa o BETO (BERT en español) son esenciales, ya que entienden las particularidades de nuestro idioma. Ejemplo en código: Instalación de librerías necesarias
pip install transformers torch

Paso 2: Fine-Tuning (Ajuste Fino) para Sentimientos

Aquí es donde ocurre la magia y pasamos del clasificador genérico de lenguaje a un experto en emociones:

  • Carga del Modelo Pre-entrenado: Utiliza la clase AutoModelForSequenceClassification de la biblioteca transformers de Hugging Face. Esta clase ya tiene una capa de clasificación lineal añadida sobre el cuerpo del Transformer, lista para tu tarea.
  • Preparación del Tokenizador: Cada modelo Transformer tiene su propio Tokenizer asociado (ej. BertTokenizer). Este convierte tus frases de texto a los IDs de tokens que el modelo entiende, además de añadir tokens especiales como [CLS] (clasificación) y [SEP] (separador).
  • Entrenamiento: Alimenta al modelo con tu conjunto de datos etiquetado de sentimientos (positivo, negativo, neutral). El modelo no aprende el idioma desde cero; solo ajusta los pesos de sus últimas capas para optimizar la clasificación de sentimientos.
  • Optimización: Utiliza el Trainer API de Hugging Face. Simplifica enormemente el proceso, permitiendo definir fácilmente parámetros clave como la tasa de aprendizaje (learning rate) y la técnica de optimización (como AdamW).

Paso 3: Puesta en Producción con Pipeline

Una de las características más brillantes de Hugging Face es la clase pipeline. Permite realizar tareas de PLN con una sola línea de código, sin preocuparse por el preprocesamiento o la carga del modelo. Ejemplo: La forma más sencilla de empezar es con el pipeline de Hugging Face:

from transformers import pipeline

# Cargamos un pipeline de análisis de sentimientos
analizador = pipeline("sentiment-analysis")

# Ejemplos de prueba
frases = [
    "Me encanta este curso, aprendí muchísimo.",
    "El servicio fue pésimo, no vuelvo jamás.",
    "Está bien, pero esperaba algo mejor."
]

for frase in frases:
    resultado = analizador(frase)[0]
    print(f"Texto: {frase}")
    print(f"Etiqueta: {resultado['label']} | Confianza: {resultado['score']:.2f}\n")Lenguaje del código: PHP (php)

Explicación: pipeline("sentiment-analysis") carga un modelo preentrenado (por defecto, DistilBERT fine-tuned en reseñas), luego, devuelve una etiqueta (POSITIVE o NEGATIVE) y un score de confianza.

Ejemplo avanzado: usando un modelo específico

Podemos elegir un modelo más robusto, como BERTimbau (para portugués) o BETO (para español). Aquí un ejemplo con un modelo en español:

from transformers import AutoTokenizer, AutoModelForSequenceClassification
from transformers import pipeline

# Modelo entrenado en español
modelo = "nlptown/bert-base-multilingual-uncased-sentiment"

tokenizer = AutoTokenizer.from_pretrained(modelo)
modelo_sentimientos = AutoModelForSequenceClassification.from_pretrained(modelo)

analizador = pipeline("sentiment-analysis", model=modelo_sentimientos, tokenizer=tokenizer)

# Ejemplo en español
texto = "La película fue increíble, me emocioné mucho."
resultado = analizador(texto)[0]

print(f"Texto: {texto}")
print(f"Etiqueta: {resultado['label']} | Confianza: {resultado['score']:.2f}")Lenguaje del código: PHP (php)

Explicación: Aquí usamos un modelo multilingüe entrenado en reseñas con 5 niveles de sentimiento (1 a 5 estrellas). Esto permite un análisis más fino que solo positivo/negativo.

¿Cómo escalar este análisis?

  • Batch processing: analizar miles de comentarios en bloque.
  • Visualización: graficar la distribución de sentimientos con matplotlib o seaborn.

Aplicaciones reales:

  • Monitoreo de redes sociales.
  • Feedback de clientes.
  • Evaluación de encuestas internas en comunidades.

Con Hugging Face, pasamos de un análisis rápido y básico a un enfoque profundo y contextual, ideal para proyectos reales.

  • TextBlob y NLTK → perfectos para aprender fundamentos.
  • Transformers → ideales para aplicaciones modernas y multilingües.

Mini-Proyecto: Análisis de Sentimientos en Español + Bot de Discord

  • Dependencias
!pip install -U transformers accelerate datasets

# 2️⃣ Importaciones
import os
import warnings
from datasets import load_dataset
from transformers import (
    AutoTokenizer,
    AutoModelForSequenceClassification,
    Trainer,
    TrainingArguments,
)Lenguaje del código: PHP (php)
  • Cargar un dataset en español
# 4️⃣ Cargar dataset español
dataset = load_dataset("mteb/spanish_sentiment", "default")

# Revisar estructura
print(dataset)
print(dataset["train"][0])Lenguaje del código: PHP (php)
  • Preparar el modelo y el tokenizador

Usaremos un modelo multilingüe como BETO (BERT entrenado en español).

# 5️⃣ Preparar tokenizer y modelo base
model_name = "dccuchile/bert-base-spanish-wwm-cased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=3)

# 6️⃣ Tokenizar dataset
def preprocess_function(examples):
    return tokenizer(examples["text"], truncation=True, padding="max_length", max_length=128)

dataset_tokenized = dataset.map(preprocess_function, batched=True)Lenguaje del código: PHP (php)
  • Entrenar el modelo
# 7️⃣ Configuración del entrenamiento
training_args = TrainingArguments(
    output_dir="./results",
    eval_strategy="epoch",  # ← en lugar de evaluation_strategy
    learning_rate=2e-5,
    per_device_train_batch_size=16,
    num_train_epochs=2,
    weight_decay=0.01,
    logging_dir="./logs",
    logging_strategy="epoch",
    save_strategy="epoch",
    report_to="none",
)

# 8️⃣ Inicializar Trainer
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=dataset_tokenized["train"],
    eval_dataset=dataset_tokenized["validation"],
    processing_class=tokenizer,  # compatible con futuras versiones
)

# 9️⃣ Entrenar el modelo
trainer.train()Lenguaje del código: PHP (php)
  • Guardar y cargar el modelo entrenado
# 🔟 Guardar el modelo final
save_path = "./sentiment-es"
trainer.save_model(save_path)
tokenizer.save_pretrained(save_path)

print(f"\n✅ Modelo guardado en: {save_path}")Lenguaje del código: PHP (php)

Luego, para usarlo:

from transformers import pipeline

analizador = pipeline("text-classification", model="./sentiment-es", tokenizer=tokenizer)

print(analizador("Me encantó la película, fue maravillosa."))Lenguaje del código: JavaScript (javascript)

Integración con un bot de Discord

Ahora lo divertido:

  • Instalar dependencias
pip install discord.pyLenguaje del código: CSS (css)
  • Código del bot
import discord
import nest_asyncio
import asyncio
from transformers import pipeline, AutoTokenizer, AutoModelForSequenceClassification
from google.colab import userdata

nest_asyncio.apply()

# Cargar modelo entrenado
tokenizer = AutoTokenizer.from_pretrained("./sentiment-es")
model = AutoModelForSequenceClassification.from_pretrained("./sentiment-es")
analizador = pipeline("text-classification", model=model, tokenizer=tokenizer)

# Inicializar bot
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)

@client.event
async def on_ready():
    print(f"Bot conectado como {client.user}")

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.content.startswith("!sentimiento"):
        texto = message.content[len("!sentimiento "):]
        resultado = analizador(texto)[0]
        await message.channel.send(
            f"📊 Texto: {texto}\n🔎 Sentimiento: {resultado['label']} (confianza {resultado['score']:.2f})"
        )

# Get the Discord bot token from Colab Secrets Manager
# Make sure you have added a secret named 'DISCORD_BOT_TOKEN' to Secrets Manager
DISCORD_BOT_TOKEN = userdata.get("DISCORD_BOT_TOKEN")

# Reemplaza con tu token de Discord
client.run(DISCORD_BOT_TOKEN)Lenguaje del código: PHP (php)

Ahora, en tu servidor de Discord, cualquier usuario puede escribir:

!sentimiento Hoy estoy muy feliz con este proyecto

Y el bot responderá con el análisis de sentimientos.

Extensiones posibles

  • Añadir gráficas en tiempo real con matplotlib para mostrar la distribución de sentimientos en el canal.
  • Guardar los resultados en una base de datos para análisis posterior.
  • Crear un ranking de palabras más positivas/negativas en la comunidad.

Con esto tienes un flujo completo: dataset → entrenamiento → despliegue en Discord.

Desafíos Avanzados y Cómo Resolverlos

El Análisis de Sentimientos Avanzado con Hugging Face y Transformers no es solo una mejora incremental; es un cambio de paradigma. Significa que puedes crear clasificadores de sentimientos con precisión cercana a la humana en cuestión de horas o días, no meses, aprovechando la investigación y el poder de cálculo invertido por gigantes tecnológicos.

Codemotion Collection Background
deep learning
Seleccionados para ti

¿Te gustaría leer más artículos como este? Explora la colección deep learning , con una selección personalizada y siempre actualizada de contenido nuevo.

Share on:facebooktwitterlinkedinreddit

Tags:Deep Learning IA

Orli Dun
¡De las finanzas a la revolución digital! Software Developer - Cloud & AI - OCI Certified - Tech Content Creator #porunmillondeamigos
Primeros Pasos en PLN y el Análisis de Sentimientos
Artículo anterior
El arte de entender SQL desde dentro
Próximo artículo

Footer

Discover

  • Events
  • Community
  • Partners
  • Become a partner
  • Hackathons

Magazine

  • Tech articles

Talent

  • Discover talent
  • Jobs

Companies

  • Discover companies

For Business

  • Codemotion for companies

About

  • About us
  • Become a contributor
  • Work with us
  • Contact us

Follow Us

© Copyright Codemotion srl Via Marsala, 29/H, 00185 Roma P.IVA 12392791005 | Privacy policy | Terms and conditions