Análisis de Sentimientos y Entidades en Reseñas de Mercado Libre
Clase 14 de 16 • Curso de NLP con Python
Resumen
La inteligencia artificial y el procesamiento del lenguaje natural (NLP) han revolucionado la forma en que analizamos datos textuales. Estas tecnologías nos permiten extraer información valiosa de reseñas, comentarios y otros textos, proporcionando insights que pueden ser cruciales para empresas y organizaciones. En este contenido, exploraremos cómo implementar un sistema de análisis de reseñas de Mercado Libre utilizando modelos pre-entrenados y técnicas avanzadas de NLP.
¿Cómo aplicar el análisis de sentimiento a reseñas de Mercado Libre?
El análisis de reseñas de productos es una aplicación práctica y poderosa del procesamiento del lenguaje natural. Mediante una interfaz gráfica, podemos permitir a los usuarios cargar reseñas individuales o datasets completos para obtener métricas relevantes sobre el sentimiento y las entidades mencionadas.
La interfaz que desarrollaremos tiene dos funcionalidades principales:
- Análisis de texto individual: Permite ingresar una reseña específica y obtener su análisis de sentimiento y entidades reconocidas.
- Análisis de dataset completo: Procesa un archivo CSV con múltiples reseñas, generando análisis para cada una y creando visualizaciones como nubes de palabras (wordcloud).
Por ejemplo, al ingresar una reseña como "Me gustó el pantalón Levis que compré en Belgrano", el sistema identifica que es un comentario positivo (Label 1) con una certeza del 99%, y reconoce entidades como la marca "Levis" y la localidad "Belgrano".
¿Qué componentes necesitamos para desarrollar esta aplicación?
Para implementar esta solución, necesitamos instalar y utilizar varias bibliotecas de Python:
# Instalación de dependencias
!pip install transformers wordcloud pandas pillow
Luego, importamos las bibliotecas necesarias:
import pandas as pd
from transformers import pipeline
from wordcloud import WordCloud
from PIL import Image # Para exportar la nube de palabras como imagen
El núcleo de nuestra aplicación consiste en dos pipelines de NLP:
- Análisis de sentimiento: Utilizando un modelo pre-entrenado con fine-tuning para clasificar reseñas.
- Reconocimiento de entidades (NER): Para identificar marcas, localidades y otros elementos relevantes en el texto.
# Definición de los pipelines de NLP
sentiment_analysis = pipeline("text-classification", model="tu_modelo_entrenado")
ner = pipeline("ner", model="modelo_para_entidades_en_español")
¿Cómo procesamos y limpiamos el texto para el análisis?
La limpieza de texto es fundamental para obtener resultados precisos. A diferencia de otros casos, aquí mantendremos la estructura de mayúsculas y minúsculas, ya que es crucial para el reconocimiento de entidades como marcas:
def clean_text(text):
# Eliminar textos entre corchetes
# Eliminar URLs
# Eliminar etiquetas HTML
# Eliminar espacios extra
# Importante: NO convertimos a minúsculas para preservar entidades
return cleaned_text
Para el reconocimiento de entidades, necesitamos una función que reconstruya las entidades completas a partir de los tokens identificados:
def reconstruct_entity(ner_results):
# Procesar los resultados del NER para obtener entidades completas
# Devolver las entidades en formato estructurado
return processed_entities
¿Cómo implementamos el análisis de texto individual y de datasets?
Nuestra aplicación tiene dos funciones principales que corresponden a las dos funcionalidades de la interfaz:
Análisis de texto individual
def analyze_text(text):
# Limpiar el texto
cleaned_text = clean_text(text)
# Obtener análisis de sentimiento
sentiment = sentiment_analysis(cleaned_text)
# Obtener entidades reconocidas
ner_result = ner(cleaned_text)
entities = reconstruct_entity(ner_result)
# Devolver resultados estructurados
return {
"sentiment": sentiment,
"entities": entities
}
Análisis de dataset CSV
def analyze_csv(csv_file):
# Cargar el CSV con pandas
df = pd.read_csv(csv_file)
# Verificar que existe la columna 'ReviewBody'
if 'ReviewBody' not in df.columns:
return {"error": "El CSV debe contener una columna llamada 'ReviewBody'"}
results = []
all_entities = []
# Procesar cada reseña
for review in df['ReviewBody']:
cleaned_review = clean_text(review)
sentiment = sentiment_analysis(cleaned_review)
ner_result = ner(cleaned_review)
entities = reconstruct_entity(ner_result)
results.append({
"review": review,
"sentiment": sentiment,
"entities": entities
})
all_entities.extend(entities)
# Generar wordcloud de entidades
wordcloud = generate_wordcloud(all_entities)
return {
"results": results,
"wordcloud": wordcloud,
"file_size": len(df)
}
¿Cómo visualizamos los resultados con una nube de palabras?
Una característica interesante de nuestra aplicación es la generación de una nube de palabras (wordcloud) que muestra visualmente las entidades más frecuentes en el dataset:
def generate_wordcloud(entities):
# Crear un diccionario de frecuencias de entidades
entity_freq = {}
for entity in entities:
if entity['text'] in entity_freq:
entity_freq[entity['text']] += 1
else:
entity_freq[entity['text']] = 1
# Generar la nube de palabras
wordcloud = WordCloud(width=800, height=400, background_color='white').generate_from_frequencies(entity_freq)
# Guardar como imagen
wordcloud_image = wordcloud.to_image()
return wordcloud_image
Esta funcionalidad es especialmente útil para identificar rápidamente las marcas más mencionadas en las reseñas, como Nike, Adidas, Levi's o Zara, proporcionando una visión general de las preferencias de los consumidores.
La interfaz gráfica que hemos desarrollado no solo permite realizar estos análisis de forma interactiva, sino que también ofrece la posibilidad de generar una API práctica para integrar estas funcionalidades en otras aplicaciones.
El análisis de reseñas de productos es solo una de las muchas aplicaciones posibles del procesamiento del lenguaje natural en el ámbito del comercio electrónico. ¿Qué otras aplicaciones se te ocurren para estas tecnologías? Comparte tus ideas y experiencias en los comentarios.