Introducción

El análisis de sentimientos es una técnica de procesamiento de lenguaje natural (NLP) que se utiliza para determinar la actitud emocional de un texto. En este proyecto, aprenderás a construir un modelo de análisis de sentimientos para clasificar textos de redes sociales como positivos, negativos o neutrales.

Objetivos del Proyecto

  1. Comprender el flujo de trabajo del análisis de sentimientos.
  2. Preprocesar datos textuales para su uso en modelos de Machine Learning.
  3. Construir y evaluar modelos de análisis de sentimientos.
  4. Implementar el modelo en un entorno de producción.

Paso 1: Recolección de Datos

Fuentes de Datos

Para este proyecto, puedes utilizar datasets públicos disponibles en plataformas como Kaggle o recolectar tus propios datos utilizando APIs de redes sociales como Twitter.

Ejemplo de Dataset

Un dataset típico para análisis de sentimientos puede tener la siguiente estructura:

Texto Sentimiento
"¡Me encanta este producto!" Positivo
"El servicio fue terrible." Negativo
"Es un día normal, nada especial." Neutral

Paso 2: Preprocesamiento de Datos

Limpieza de Datos

  1. Eliminar caracteres especiales y números:

    import re
    
    def limpiar_texto(texto):
        texto = re.sub(r'[^a-zA-Z\s]', '', texto)
        texto = texto.lower()
        return texto
    
  2. Eliminar stopwords:

    from nltk.corpus import stopwords
    
    stop_words = set(stopwords.words('spanish'))
    
    def eliminar_stopwords(texto):
        palabras = texto.split()
        palabras_filtradas = [palabra for palabra in palabras if palabra not in stop_words]
        return ' '.join(palabras_filtradas)
    
  3. Lematización:

    import spacy
    
    nlp = spacy.load('es_core_news_sm')
    
    def lematizar_texto(texto):
        doc = nlp(texto)
        lemas = [token.lemma_ for token in doc]
        return ' '.join(lemas)
    

Transformación de Datos

  1. Vectorización:
    from sklearn.feature_extraction.text import CountVectorizer
    
    vectorizer = CountVectorizer()
    X = vectorizer.fit_transform(textos_limpiados)
    

Paso 3: Construcción del Modelo

Selección del Algoritmo

Para este proyecto, utilizaremos un modelo de Naive Bayes, que es comúnmente utilizado para tareas de clasificación de texto.

Entrenamiento del Modelo

from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, classification_report

# Dividir los datos en conjuntos de entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Entrenar el modelo
modelo = MultinomialNB()
modelo.fit(X_train, y_train)

# Evaluar el modelo
y_pred = modelo.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))
print(classification_report(y_test, y_pred))

Paso 4: Evaluación del Modelo

Métricas de Evaluación

  1. Precisión (Accuracy)
  2. Precisión (Precision)
  3. Recall
  4. F1-Score
from sklearn.metrics import confusion_matrix

# Matriz de confusión
matriz_confusion = confusion_matrix(y_test, y_pred)
print(matriz_confusion)

Interpretación de Resultados

  • Precisión: Proporción de predicciones correctas.
  • Precision: Proporción de verdaderos positivos sobre el total de positivos predichos.
  • Recall: Proporción de verdaderos positivos sobre el total de positivos reales.
  • F1-Score: Media armónica de Precision y Recall.

Paso 5: Implementación en Producción

Frameworks y Bibliotecas

  1. Flask para crear una API web.
  2. Heroku para el despliegue.

Ejemplo de Implementación con Flask

from flask import Flask, request, jsonify
import pickle

app = Flask(__name__)

# Cargar el modelo entrenado
modelo = pickle.load(open('modelo_sentimientos.pkl', 'rb'))
vectorizer = pickle.load(open('vectorizer.pkl', 'rb'))

@app.route('/predict', methods=['POST'])
def predict():
    datos = request.get_json(force=True)
    texto = datos['texto']
    texto_limpio = limpiar_texto(texto)
    texto_vectorizado = vectorizer.transform([texto_limpio])
    prediccion = modelo.predict(texto_vectorizado)
    return jsonify({'sentimiento': prediccion[0]})

if __name__ == '__main__':
    app.run(debug=True)

Conclusión

En este proyecto, hemos cubierto los pasos esenciales para construir un modelo de análisis de sentimientos, desde la recolección y preprocesamiento de datos hasta la construcción, evaluación e implementación del modelo. Este flujo de trabajo es aplicable a una variedad de problemas de clasificación de texto y proporciona una base sólida para proyectos más avanzados en el campo del procesamiento de lenguaje natural.


Resumen:

  • Recolección de Datos: Obtuvimos datos de redes sociales.
  • Preprocesamiento: Limpiamos y transformamos los datos textuales.
  • Construcción del Modelo: Utilizamos Naive Bayes para clasificar los textos.
  • Evaluación: Medimos la precisión y otras métricas del modelo.
  • Implementación: Desplegamos el modelo utilizando Flask.

Este proyecto te prepara para abordar problemas reales de análisis de sentimientos y te proporciona las habilidades necesarias para implementar soluciones en un entorno de producción.

Curso de Machine Learning

Módulo 1: Introducción al Machine Learning

Módulo 2: Fundamentos de Estadística y Probabilidad

Módulo 3: Preprocesamiento de Datos

Módulo 4: Algoritmos de Machine Learning Supervisado

Módulo 5: Algoritmos de Machine Learning No Supervisado

Módulo 6: Evaluación y Validación de Modelos

Módulo 7: Técnicas Avanzadas y Optimización

Módulo 8: Implementación y Despliegue de Modelos

Módulo 9: Proyectos Prácticos

Módulo 10: Recursos Adicionales

© Copyright 2024. Todos los derechos reservados