Análisis de Sentimiento: De datos a insights
El análisis de sentimiento (sentiment analysis) es una de las aplicaciones más poderosas del Procesamiento de Lenguaje Natural (NLP). Permite transformar opiniones textuales no estructuradas en datos cuantificables que impulsan decisiones estratégicas. En este artículo, exploraremos desde los fundamentos teóricos hasta implementaciones prácticas.
¿Qué es el Análisis de Sentimiento?
El análisis de sentimiento, también conocido como opinion mining, es el proceso computacional de identificar y extraer información subjetiva de textos. Su objetivo principal es determinar la actitud del escritor respecto a un tema particular: ¿es positiva, negativa o neutral?
Niveles de Análisis
El análisis de sentimiento opera en diferentes niveles de granularidad:
1. Nivel de Documento
Evalúa el sentimiento general del texto completo.
Ejemplo:
Texto: "El hotel fue increíble. Las habitaciones estaban limpias,
el personal era amable y la ubicación perfecta. Definitivamente
volveré."
Resultado: Positivo (0.95)
Casos de uso:
- Análisis de reseñas de productos
- Evaluación de comentarios de clientes
- Clasificación de artículos de noticias
2. Nivel de Oración
Analiza cada oración independientemente.
Ejemplo:
Texto: "La comida estuvo deliciosa. El servicio fue lento.
Los precios son razonables."
Resultados:
- Oración 1: Positivo (0.90)
- Oración 2: Negativo (-0.65)
- Oración 3: Neutral (0.10)
Ventaja: Captura matices y opiniones mixtas dentro del mismo documento.
3. Nivel de Aspecto/Característica
Identifica sentimiento sobre aspectos específicos del tema.
Ejemplo:
Texto: "El iPhone tiene una cámara excelente pero la batería
es decepcionante."
Resultados:
- Aspecto: Cámara → Positivo (0.85)
- Aspecto: Batería → Negativo (-0.70)
Ventaja: Proporciona insights granulares y accionables.
Nota: El nivel de análisis que elijas debe alinearse con tus objetivos de negocio y la naturaleza de tus datos.
Técnicas de Análisis de Sentimiento
1. Enfoques Basados en Léxicos
Utilizan diccionarios predefinidos de palabras con puntuaciones de sentimiento.
Diccionarios Populares
VADER (Valence Aware Dictionary and sEntiment Reasoner):
- Optimizado para textos de redes sociales
- Maneja emoticonos, mayúsculas, y modificadores
- Funciona bien con inglés informal
AFINN:
- Lista de palabras con puntuaciones de -5 a +5
- Simple y rápido
- Limitado a palabras individuales
SentiWordNet:
- Basado en WordNet
- Asigna puntuaciones positivas, negativas y objetivas
- Más de 117,000 synsets anotados
Implementación Básica con VADER
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
# Inicializar analizador
analyzer = SentimentIntensityAnalyzer()
# Textos de ejemplo
textos = [
"Me encanta este producto! Es INCREÍBLE!!! 😍",
"No me gustó para nada. Muy decepcionante.",
"El producto es aceptable, nada especial."
]
# Analizar sentimientos
for texto in textos:
scores = analyzer.polarity_scores(texto)
print(f"\nTexto: {texto}")
print(f"Scores: {scores}")
# Clasificar
if scores['compound'] >= 0.05:
sentimiento = "POSITIVO"
elif scores['compound'] <= -0.05:
sentimiento = "NEGATIVO"
else:
sentimiento = "NEUTRAL"
print(f"Clasificación: {sentimiento}")
Salida esperada:
Texto: Me encanta este producto! Es INCREÍBLE!!! 😍
Scores: {'neg': 0.0, 'neu': 0.294, 'pos': 0.706, 'compound': 0.9468}
Clasificación: POSITIVO
Texto: No me gustó para nada. Muy decepcionante.
Scores: {'neg': 0.514, 'neu': 0.486, 'pos': 0.0, 'compound': -0.7003}
Clasificación: NEGATIVO
Ventajas y Limitaciones
Ventajas:
- No requiere entrenamiento
- Rápido de implementar
- Interpretable y transparente
Limitaciones:
- No captura contexto complejo
- Sensible al dominio específico
- Dificultad con sarcasmo e ironía
- Vocabulario limitado
2. Enfoques de Machine Learning
Utilizan modelos entrenados con datos etiquetados para clasificar sentimientos.
Algoritmos Comunes
Naive Bayes:
- Rápido y eficiente
- Funciona bien con textos cortos
- Asume independencia entre palabras
Support Vector Machines (SVM):
- Efectivo en espacios de alta dimensión
- Robusto contra overfitting
- Requiere más recursos computacionales
Regresión Logística:
- Simple e interpretable
- Buen baseline para comparación
- Escalable a grandes datasets
Implementación con Scikit-learn
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, confusion_matrix
import pandas as pd
# Dataset de ejemplo (en la práctica, usarías un dataset real)
datos = {
'texto': [
'Excelente producto, muy recomendable',
'Pésima calidad, no lo compren',
'Buen precio y buena calidad',
'Horrible experiencia, nunca más',
'Me gusta mucho, lo recomiendo',
'No vale la pena, muy malo'
],
'sentimiento': ['positivo', 'negativo', 'positivo',
'negativo', 'positivo', 'negativo']
}
df = pd.DataFrame(datos)
# Vectorización TF-IDF
vectorizer = TfidfVectorizer(max_features=1000, ngram_range=(1, 2))
X = vectorizer.fit_transform(df['texto'])
y = df['sentimiento']
# Split train/test
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# Entrenar modelo
modelo = LogisticRegression(max_iter=1000)
modelo.fit(X_train, y_train)
# Predicciones
y_pred = modelo.predict(X_test)
# Evaluación
print("Reporte de Clasificación:")
print(classification_report(y_test, y_pred))
# Función para predecir nuevos textos
def predecir_sentimiento(texto):
texto_vectorizado = vectorizer.transform([texto])
prediccion = modelo.predict(texto_vectorizado)[0]
probabilidad = modelo.predict_proba(texto_vectorizado)[0]
return {
'sentimiento': prediccion,
'confianza': max(probabilidad)
}
# Ejemplo de uso
nuevo_texto = "Este producto superó mis expectativas"
resultado = predecir_sentimiento(nuevo_texto)
print(f"\nTexto: {nuevo_texto}")
print(f"Sentimiento: {resultado['sentimiento']}")
print(f"Confianza: {resultado['confianza']:.2%}")
3. Enfoques de Deep Learning
Utilizan redes neuronales profundas para capturar patrones complejos.
Arquitecturas Populares
LSTM (Long Short-Term Memory):
- Captura dependencias a largo plazo
- Maneja secuencias de longitud variable
- Efectivo para contextos complejos
BERT (Bidirectional Encoder Representations from Transformers):
- Estado del arte en NLP
- Comprende contexto bidireccional
- Pre-entrenado en corpus masivos
RoBERTa, DistilBERT, ALBERT:
- Variantes optimizadas de BERT
- Balance entre rendimiento y eficiencia
Implementación con Transformers
from transformers import pipeline, AutoTokenizer, AutoModelForSequenceClassification
import torch
# Cargar modelo pre-entrenado para español
modelo_nombre = "finiteautomata/beto-sentiment-analysis"
# Crear pipeline
clasificador = pipeline(
"sentiment-analysis",
model=modelo_nombre,
tokenizer=modelo_nombre
)
# Textos a analizar
textos = [
"Estoy muy feliz con mi compra, excelente calidad",
"Qué decepción, esperaba mucho más de este producto",
"Es un producto normal, ni bueno ni malo"
]
# Analizar sentimientos
resultados = clasificador(textos)
for texto, resultado in zip(textos, resultados):
print(f"\nTexto: {texto}")
print(f"Sentimiento: {resultado['label']}")
print(f"Confianza: {resultado['score']:.2%}")
Ventajas de Deep Learning:
- Alta precisión
- Captura contexto complejo
- Transferencia de aprendizaje (transfer learning)
- Maneja sarcasmo y matices mejor
Desafíos:
- Requiere más recursos computacionales
- Tiempo de entrenamiento considerable
- Menos interpretable (caja negra)
- Necesita datasets grandes para entrenar desde cero
Tip: Para la mayoría de aplicaciones empresariales, usar modelos pre-entrenados y fine-tuning es más eficiente que entrenar desde cero.
Clasificación de Sentimientos
Clasificación Binaria
Categorías: Positivo vs. Negativo
Cuándo usar:
- Análisis simple de satisfacción
- Detección de crisis o problemas
- Decisiones binarias (recomendar/no recomendar)
Ejemplo de aplicación:
# Clasificación binaria simple
def clasificar_binario(score):
return "positivo" if score > 0 else "negativo"
Clasificación Ternaria
Categorías: Positivo, Neutral, Negativo
Cuándo usar:
- Análisis más matizado
- Cuando muchos textos son informativos sin opinión clara
- Métricas como Net Sentiment Score
Rangos comunes:
def clasificar_ternario(score):
if score > 0.05:
return "positivo"
elif score < -0.05:
return "negativo"
else:
return "neutral"
Clasificación de Escala
Categorías: Escala numérica (ej: 1-5 estrellas)
Cuándo usar:
- Predicción de ratings
- Alineación con sistemas de reseñas existentes
- Análisis granular de satisfacción
Ejemplo:
def score_a_estrellas(score):
# Mapear score [-1, 1] a estrellas [1, 5]
estrellas = ((score + 1) / 2) * 4 + 1
return round(estrellas)
Clasificación por Emociones
Categorías: Alegría, Tristeza, Enojo, Miedo, Sorpresa, etc.
Cuándo usar:
- Análisis profundo de reacciones emocionales
- Marketing emocional
- Soporte al cliente (detección de frustración)
Implementación con librería de emociones:
from transformers import pipeline
# Modelo de clasificación de emociones
clasificador_emociones = pipeline(
"text-classification",
model="j-hartmann/emotion-english-distilroberta-base",
top_k=None
)
texto = "No puedo creer que hayan cancelado mi pedido sin avisar"
emociones = clasificador_emociones(texto)[0]
# Ordenar por score
emociones_ordenadas = sorted(emociones, key=lambda x: x['score'], reverse=True)
print("Emociones detectadas:")
for emocion in emociones_ordenadas[:3]:
print(f"- {emocion['label']}: {emocion['score']:.2%}")
Herramientas y Librerías
Python - Ecosistema Principal
NLTK (Natural Language Toolkit)
Características:
- Biblioteca fundamental de NLP
- Amplia variedad de corpus y léxicos
- Funciones de tokenización y preprocesamiento
import nltk
from nltk.sentiment import SentimentIntensityAnalyzer
nltk.download('vader_lexicon')
sia = SentimentIntensityAnalyzer()
score = sia.polarity_scores("Este producto es fantástico!")
print(score)
TextBlob
Características:
- API simple e intuitiva
- Análisis de sentimiento integrado
- Traducción y corrección ortográfica
from textblob import TextBlob
texto = "I love this amazing product!"
blob = TextBlob(texto)
print(f"Polaridad: {blob.sentiment.polarity}")
print(f"Subjetividad: {blob.sentiment.subjectivity}")
spaCy
Características:
- Rápido y eficiente
- Procesamiento industrial
- Extensiones para análisis de sentimiento
import spacy
from spacytextblob.spacytextblob import SpacyTextBlob
nlp = spacy.load('en_core_web_sm')
nlp.add_pipe('spacytextblob')
doc = nlp("The customer service was excellent but the product quality disappointing.")
for sent in doc.sents:
print(f"{sent.text}")
print(f"Polaridad: {sent._.polarity}")
Transformers (HuggingFace)
Características:
- Acceso a modelos estado del arte
- Soporte multiidioma
- Pipeline simplificado
from transformers import pipeline
# Análisis en español
sentiment_analyzer = pipeline(
"sentiment-analysis",
model="nlptown/bert-base-multilingual-uncased-sentiment"
)
resultado = sentiment_analyzer("El servicio fue excelente")[0]
print(f"Estrellas predichas: {resultado['label']}")
print(f"Confianza: {resultado['score']:.2%}")
Herramientas Comerciales
Google Cloud Natural Language API:
- Análisis de sentimiento por entidad
- Soporte multiidioma
- Fácil integración
AWS Comprehend:
- Análisis de sentimiento y emociones
- Detección de idioma automática
- Escalable y serverless
Azure Text Analytics:
- Análisis de sentimiento a nivel de documento y oración
- Opinion mining integrado
- Integración con otros servicios Azure
IBM Watson NLU:
- Análisis de sentimiento y emociones
- Análisis de conceptos y entidades
- Modelos personalizables
Consideración: Las herramientas comerciales son excelentes para prototipos rápidos, pero pueden ser costosas a escala. Evalúa el balance entre desarrollo interno vs. servicios externos.
Casos de Estudio Reales
Caso 1: E-commerce - Mejora de Productos
Empresa: Tienda online de electrónicos
Desafío: Miles de reseñas de productos, imposibles de leer manualmente.
Solución implementada:
Recopilación de datos:
- 50,000 reseñas de productos en 6 meses
- Fuentes: sitio web propio, Amazon, redes sociales
Análisis de sentimiento por aspecto:
# Análisis de aspectos mencionados
aspectos = {
'batería': ['bateria', 'battery', 'carga', 'duración'],
'pantalla': ['pantalla', 'screen', 'display'],
'cámara': ['cámara', 'camera', 'foto'],
'precio': ['precio', 'price', 'caro', 'barato'],
'diseño': ['diseño', 'design', 'estética']
}
def analizar_por_aspecto(reviews):
resultados = {aspecto: [] for aspecto in aspectos}
for review in reviews:
doc = nlp(review['texto'])
for aspecto, palabras_clave in aspectos.items():
for sent in doc.sents:
if any(palabra in sent.text.lower() for palabra in palabras_clave):
sentimiento = sia.polarity_scores(sent.text)
resultados[aspecto].append({
'texto': sent.text,
'score': sentimiento['compound'],
'producto': review['producto_id']
})
return resultados
Insights obtenidos:
- 35% de menciones negativas sobre "batería" en smartphone modelo X
- 82% de sentimiento positivo sobre "cámara" en modelo Y
- "Precio" tiene correlación negativa con ventas en segmento premium
Acciones tomadas:
- Mejora de batería en siguiente versión del producto
- Destacar cámara en marketing del modelo Y
- Ajuste de precios en productos con sentimiento negativo
Resultados:
- Reducción del 28% en devoluciones
- Aumento del 15% en satisfacción del cliente (NPS)
- Mejora del 12% en conversión de reseñas positivas
Caso 2: Aerolínea - Gestión de Crisis
Empresa: Aerolínea internacional
Desafío: Cancelaciones masivas por mal tiempo generaron crisis en redes sociales.
Solución implementada:
- Monitoreo en tiempo real:
import tweepy
from datetime import datetime
# Configurar streaming de Twitter
class SentimentStreamListener(tweepy.StreamListener):
def on_status(self, status):
# Analizar sentimiento
texto = status.text
sentimiento = clasificador(texto)[0]
# Alertar si sentimiento muy negativo y alto alcance
if sentimiento['label'] == 'NEGATIVE' and status.user.followers_count > 10000:
enviar_alerta_crisis(status, sentimiento)
# Almacenar para análisis
guardar_en_db(status, sentimiento)
Dashboard de monitoreo:
- Visualización de volumen de menciones en tiempo real
- Gráfico de sentimiento a lo largo del tiempo
- Alertas automáticas para picos negativos
Estrategia de respuesta:
- Respuestas priorizadas basadas en sentimiento y alcance
- Mensajes personalizados según tipo de queja
- Escalamiento a equipo especializado para casos críticos
Resultados:
- Tiempo de respuesta reducido de 4 horas a 15 minutos
- 60% de clientes frustrados convertidos en neutrales/positivos
- Evitaron trending topic negativo mediante respuesta rápida
- Ahorro estimado de $500,000 en daño reputacional
Caso 3: Banco - Análisis de Encuestas
Empresa: Banco nacional
Desafío: Encuestas de satisfacción con respuestas abiertas sin analizar.
Solución implementada:
- Procesamiento automatizado:
def analizar_encuesta(respuestas):
resultados = []
for respuesta in respuestas:
# Análisis de sentimiento general
sentimiento_general = clasificador(respuesta['comentario'])[0]
# Extracción de temas
doc = nlp(respuesta['comentario'])
temas = extraer_temas(doc)
# Análisis por tema
sentimientos_temas = {}
for tema in temas:
sent_tema = analizar_sentimiento_tema(respuesta['comentario'], tema)
sentimientos_temas[tema] = sent_tema
resultados.append({
'cliente_id': respuesta['cliente_id'],
'sentimiento_general': sentimiento_general,
'temas': sentimientos_temas,
'prioridad': calcular_prioridad(sentimiento_general, temas)
})
return resultados
Identificación de patrones:
- 45% de menciones negativas sobre "tiempo de espera"
- 78% de sentimiento positivo sobre "amabilidad del personal"
- Correlación entre menciones de "app móvil" y frustración
Segmentación de clientes:
- Promotores: Sentimiento consistentemente positivo
- Pasivos: Sentimiento neutral, riesgo de churn
- Detractores: Sentimiento negativo, requieren intervención
Resultados:
- Identificación de 3 problemas críticos antes no visibles
- Implementación de mejoras en app móvil
- Reducción de tiempo de espera en sucursales
- Incremento de NPS de 32 a 48 en 6 meses
Mejores Prácticas
1. Preprocesamiento de Datos
El preprocesamiento adecuado es crucial para resultados precisos:
import re
import string
from nltk.corpus import stopwords
from nltk.stem import SnowballStemmer
def preprocesar_texto(texto, idioma='spanish'):
# Convertir a minúsculas
texto = texto.lower()
# Remover URLs
texto = re.sub(r'http\S+|www\S+|https\S+', '', texto, flags=re.MULTILINE)
# Remover menciones y hashtags (opcional, dependiendo del caso)
# texto = re.sub(r'@\w+|#\w+', '', texto)
# Remover números (opcional)
# texto = re.sub(r'\d+', '', texto)
# Remover puntuación excesiva pero mantener algunos signos
# que pueden indicar emoción (!, ?)
texto = re.sub(r'[^\w\s!?]', '', texto)
# Normalizar espacios
texto = ' '.join(texto.split())
return texto
# Ejemplo
texto_original = "Me ENCANTÓ!!! 😍 Visita https://ejemplo.com para más info"
texto_procesado = preprocesar_texto(texto_original)
print(texto_procesado)
# Salida: "me encantó visita para más info"
Consideraciones importantes:
- No siempre remover stopwords (palabras como "no" son cruciales)
- Mantener signos de exclamación y interrogación
- Preservar emoticonos en análisis de redes sociales
- Cuidado con stemming/lemmatization (puede perder contexto)
2. Manejo de Datos Desbalanceados
Los datasets de sentimiento suelen estar desbalanceados:
from sklearn.utils import class_weight
import numpy as np
# Calcular pesos de clases
clases_unicas = np.unique(y_train)
pesos = class_weight.compute_class_weight(
'balanced',
classes=clases_unicas,
y=y_train
)
pesos_dict = dict(zip(clases_unicas, pesos))
# Usar en modelo
modelo = LogisticRegression(class_weight=pesos_dict)
Alternativas:
- Oversampling de clase minoritaria (SMOTE)
- Undersampling de clase mayoritaria
- Generar datos sintéticos
- Ajustar umbrales de clasificación
3. Validación y Evaluación
Métricas apropiadas para análisis de sentimiento:
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
from sklearn.metrics import confusion_matrix, classification_report
# Métricas básicas
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred, average='weighted')
recall = recall_score(y_test, y_pred, average='weighted')
f1 = f1_score(y_test, y_pred, average='weighted')
print(f"Accuracy: {accuracy:.3f}")
print(f"Precision: {precision:.3f}")
print(f"Recall: {recall:.3f}")
print(f"F1-Score: {f1:.3f}")
# Matriz de confusión
cm = confusion_matrix(y_test, y_pred)
print("\nMatriz de Confusión:")
print(cm)
Qué métrica priorizar:
- Precision: Cuando falsos positivos son costosos
- Recall: Cuando falsos negativos son críticos (ej: detección de crisis)
- F1-Score: Balance general
- Accuracy: Solo si clases están balanceadas
4. Consideraciones Culturales y de Idioma
El sentimiento varía significativamente entre idiomas y culturas:
Desafíos específicos del español:
- Variaciones regionales ("chido", "bacán", "guay" = bueno)
- Uso frecuente de diminutivos afectivos
- Sarcasmo y doble sentido común
- Expresiones idiomáticas
Recomendaciones:
- Usar modelos entrenados específicamente en español
- Considerar variantes regionales si es relevante
- Adaptar léxicos a tu mercado específico
- Validar con hablantes nativos
# Ejemplo: Diccionario personalizado para español mexicano
expresiones_mexicanas = {
'chido': 0.7,
'padre': 0.7,
'chafa': -0.6,
'naco': -0.5,
'gacho': -0.7
}
# Integrar con analizador existente
def analizar_con_regionalismos(texto, expresiones_custom):
score_base = analyzer.polarity_scores(texto)
# Ajustar por expresiones regionales
for expresion, valor in expresiones_custom.items():
if expresion in texto.lower():
score_base['compound'] += valor
# Normalizar
score_base['compound'] = max(min(score_base['compound'], 1), -1)
return score_base
5. Manejo de Casos Especiales
Sarcasmo e Ironía
El sarcasmo es uno de los desafíos más difíciles:
# Indicadores potenciales de sarcasmo
indicadores_sarcasmo = [
r'claro que sí',
r'por supuesto',
r'justo lo que necesitaba',
r'genial', # en contexto negativo
]
def detectar_sarcasmo(texto):
# Buscar patrones contradictorios
palabras_positivas = ['excelente', 'genial', 'increíble']
palabras_negativas = ['pero', 'lamentablemente', 'desafortunadamente']
tiene_positiva = any(p in texto.lower() for p in palabras_positivas)
tiene_negativa = any(n in texto.lower() for n in palabras_negativas)
if tiene_positiva and tiene_negativa:
return True, "Posible sarcasmo detectado"
return False, "No se detecta sarcasmo"
# Ejemplo
texto = "Genial, justo lo que necesitaba, que me llegue el producto roto"
es_sarcasmo, mensaje = detectar_sarcasmo(texto)
print(f"{mensaje}: {texto}")
Estrategias:
- Modelos entrenados específicamente en sarcasmo
- Análisis contextual profundo
- Considerar historial del usuario
- Bandera manual para revisión humana
Negaciones
Las negaciones invierten el sentimiento:
# Manejo de negaciones
from nltk.sentiment.util import mark_negation
texto = "no me gustó nada el producto"
tokens = texto.split()
tokens_marcados = mark_negation(tokens)
print(tokens_marcados)
# ['no', 'me', 'gustó_NEG', 'nada_NEG', 'el_NEG', 'producto_NEG']
Textos Mixtos
Cuando un texto contiene sentimientos contradictorios:
def analizar_texto_mixto(texto):
# Separar por oraciones
oraciones = texto.split('.')
sentimientos = []
for oracion in oraciones:
if oracion.strip():
score = analyzer.polarity_scores(oracion)
sentimientos.append(score['compound'])
# Análisis
positivos = sum(1 for s in sentimientos if s > 0.05)
negativos = sum(1 for s in sentimientos if s < -0.05)
if positivos > 0 and negativos > 0:
return {
'tipo': 'mixto',
'positivos': positivos,
'negativos': negativos,
'promedio': sum(sentimientos) / len(sentimientos)
}
return {'tipo': 'uniforme', 'promedio': sum(sentimientos) / len(sentimientos)}
Próximos Pasos
Has aprendido los fundamentos y técnicas del análisis de sentimiento. Para profundizar:
Practica con datasets reales:
- Kaggle: Sentiment140, IMDB Reviews
- UCI ML Repository: Sentiment datasets
- Tus propios datos de redes sociales o reseñas
Experimenta con diferentes modelos:
- Compara rendimiento de métodos léxicos vs. ML vs. DL
- Fine-tune modelos pre-entrenados con tus datos
- Prueba modelos específicos de dominio
Implementa un proyecto end-to-end:
- Scraping de datos
- Preprocesamiento y análisis
- Visualización de resultados
- Dashboard interactivo
Explora temas avanzados:
- Análisis de sentimiento multimodal (texto + imagen)
- Detección de emociones granulares
- Análisis temporal de sentimiento
- Explicabilidad de modelos (LIME, SHAP)
Profundiza en aspectos específicos:
- Aspect-Based Sentiment Analysis (ABSA)
- Sentiment en conversaciones (análisis de threads)
- Cross-lingual sentiment analysis
Siguiente lectura recomendada: "Machine Learning aplicado al Marketing Digital" para ver cómo integrar análisis de sentimiento en estrategias de negocio más amplias.
El análisis de sentimiento es una herramienta poderosa, pero recuerda: los algoritmos proporcionan señales, el juicio humano sigue siendo esencial para decisiones críticas.