Skip to content

hashfwu/mathbot_ai_copy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🤖 MathBot AI - Tutor Inteligente de Matemáticas basado en Transformers

Python Flask PyTorch Transformers Bootstrap

Proyecto Final - Procesamiento del Lenguaje Natural (PLN)


📋 Tabla de Contenidos

  1. Descripción del Proyecto
  2. Características
  3. Arquitectura del Sistema
  4. Tecnologías Utilizadas
  5. Estructura del Proyecto
  6. Instalación
  7. Ejecución
  8. Modelo Transformer (Flan-T5)
  9. Dataset Math-QA
  10. Preprocesamiento de Texto
  11. Entrenamiento (Fine-Tuning)
  12. Evaluación
  13. API Endpoints
  14. Capturas de Pantalla

📖 Descripción del Proyecto

MathBot AI es un chatbot educativo especializado en matemáticas que utiliza modelos Transformer (Flan-T5 de Google) para comprender preguntas matemáticas escritas en lenguaje natural y generar respuestas útiles, coherentes y contextualizadas.

El proyecto demuestra el uso real de técnicas modernas de Procesamiento del Lenguaje Natural (PLN) incluyendo:

  • Preprocesamiento de texto
  • Tokenización con Transformers
  • Generación de embeddings contextuales
  • Fine-tuning de modelos preentrenados
  • Generación de texto con beam search
  • Evaluación con métricas NLP (BLEU, ROUGE)

Áreas matemáticas cubiertas:

  • 📐 Álgebra: Ecuaciones, factorización, polinomios
  • 📏 Geometría: Áreas, perímetros, volúmenes, teoremas
  • 📐 Trigonometría: Funciones trigonométricas, identidades
  • 📈 Cálculo: Derivadas, integrales, límites
  • 📊 Estadística: Media, mediana, desviación estándar
  • 🎲 Probabilidad: Eventos, distribuciones, Bayes
  • 🔢 Aritmética: Operaciones, porcentajes, MCD/MCM

✨ Características

Característica Descripción
🤖 Respuestas inteligentes Generación de texto con modelo Transformer
💬 Historial de conversación Mantiene el contexto de la sesión
⏱️ Tiempo de respuesta Muestra el tiempo de cada respuesta
🎨 Interfaz moderna Diseño estilo ChatGPT con tema oscuro
📱 Diseño responsive Funciona en móvil, tablet y escritorio
⌨️ Indicador de escritura Animación de "escribiendo..."
🔍 Preguntas rápidas Botones predefinidos por categoría
📊 Métricas del modelo Panel de información del Transformer
⚠️ Manejo de errores Respuestas de respaldo desde dataset

🏗️ Arquitectura del Sistema

┌─────────────────────────────────────────────────────┐
│                    USUARIO                           │
│              (Navegador Web)                         │
└──────────────────────┬──────────────────────────────┘
                       │ HTTP Request
                       ▼
┌─────────────────────────────────────────────────────┐
│              INTERFAZ WEB (Frontend)                 │
│         HTML5 + CSS3 + JavaScript + Bootstrap 5      │
│                                                      │
│  ┌──────────┐  ┌─────────────┐  ┌──────────────┐   │
│  │ Sidebar  │  │ Chat Area   │  │ Input Area   │   │
│  │ Categorías│  │ Mensajes    │  │ Textarea     │   │
│  │ Quick Q  │  │ Typing Ind. │  │ Send Button  │   │
│  └──────────┘  └─────────────┘  └──────────────┘   │
└──────────────────────┬──────────────────────────────┘
                       │ API REST (JSON)
                       ▼
┌─────────────────────────────────────────────────────┐
│                FLASK BACKEND                         │
│              (app.py - Python)                       │
│                                                      │
│  ┌──────────────────────────────────────────────┐   │
│  │  Rutas:                                       │   │
│  │  POST /api/chat    → Procesar pregunta        │   │
│  │  GET  /api/history → Historial                │   │
│  │  GET  /api/model-info → Info del modelo       │   │
│  │  POST /api/clear   → Limpiar historial        │   │
│  └──────────────────────┬───────────────────────┘   │
└─────────────────────────┼───────────────────────────┘
                          │
                          ▼
┌─────────────────────────────────────────────────────┐
│            PREPROCESAMIENTO (PLN)                    │
│            (preprocessing.py)                        │
│                                                      │
│  1. Conversión a minúsculas                          │
│  2. Eliminación de caracteres especiales             │
│  3. Eliminación de espacios redundantes              │
│  4. Tokenización (NLTK + T5 Tokenizer)              │
│  5. Agregar prefijo de instrucción                   │
└──────────────────────┬──────────────────────────────┘
                       │
                       ▼
┌─────────────────────────────────────────────────────┐
│          MODELO TRANSFORMER (Flan-T5)                │
│              (chatbot.py)                            │
│                                                      │
│  ┌─────────────────────────────────────────────┐    │
│  │         google/flan-t5-base                  │    │
│  │                                              │    │
│  │  ┌──────────┐         ┌──────────┐          │    │
│  │  │ ENCODER  │ ──────► │ DECODER  │          │    │
│  │  │          │         │          │          │    │
│  │  │ Self-    │         │ Cross-   │          │    │
│  │  │ Attention│         │ Attention│          │    │
│  │  │          │         │          │          │    │
│  │  │ Multi-   │         │ Beam     │          │    │
│  │  │ Head     │         │ Search   │          │    │
│  │  └──────────┘         └──────────┘          │    │
│  │                                              │    │
│  │  Parámetros: ~248M                           │    │
│  │  Vocabulario: 32,128 tokens                  │    │
│  └─────────────────────────────────────────────┘    │
└──────────────────────┬──────────────────────────────┘
                       │
                       ▼
┌─────────────────────────────────────────────────────┐
│           RESPUESTA GENERADA                         │
│                                                      │
│  - Texto decodificado                                │
│  - Tiempo de respuesta                               │
│  - Fuente (model/dataset)                            │
│  - Almacenado en historial                           │
└──────────────────────┬──────────────────────────────┘
                       │ JSON Response
                       ▼
┌─────────────────────────────────────────────────────┐
│              INTERFAZ WEB (Frontend)                 │
│         Muestra respuesta en burbuja de chat         │
└─────────────────────────────────────────────────────┘

🛠️ Tecnologías Utilizadas

Backend

Tecnología Versión Uso
Python 3.11 Lenguaje principal
Flask 3.0 Framework web
Flask-CORS 4.0 Cross-Origin Resource Sharing

PLN / IA

Tecnología Versión Uso
Transformers 4.36 Modelos preentrenados (Flan-T5)
PyTorch 2.1 Framework de Deep Learning
NLTK 3.8 Procesamiento de lenguaje natural
SentencePiece 0.1.99 Tokenización subword

Frontend

Tecnología Versión Uso
HTML5 - Estructura de la interfaz
CSS3 - Estilos y animaciones
JavaScript ES6+ Lógica del frontend
Bootstrap 5.3 Framework CSS responsive
Bootstrap Icons 1.11 Iconografía
Google Fonts - Tipografía Inter

Visualización

Tecnología Versión Uso
Matplotlib 3.8 Generación de gráficos
Pandas 2.1 Análisis de datos

📁 Estructura del Proyecto

mathbot_ai/
│
├── app.py                    # Aplicación principal Flask
├── config.py                 # Configuración centralizada
├── requirements.txt          # Dependencias del proyecto
├── README.md                 # Documentación (este archivo)
│
├── dataset/
│   └── mathqa.json           # Dataset de preguntas y respuestas
│
├── model/
│   ├── __init__.py           # Inicializador del paquete
│   ├── chatbot.py            # Motor del chatbot (Flan-T5)
│   ├── preprocessing.py      # Preprocesamiento de texto (PLN)
│   ├── trainer.py            # Fine-tuning del modelo
│   └── evaluator.py          # Evaluación de rendimiento
│
├── templates/
│   └── index.html            # Interfaz web del chatbot
│
├── static/
│   ├── css/
│   │   └── style.css         # Estilos CSS personalizados
│   ├── js/
│   │   └── chat.js           # JavaScript del chat
│   └── img/                  # Imágenes del proyecto
│
├── results/
│   ├── metrics.csv           # Métricas de evaluación
│   └── graphs.png            # Gráficos de resultados
│
└── docs/                     # Documentación adicional

🚀 Instalación

Prerrequisitos

  • Python 3.11 o superior
  • pip (gestor de paquetes de Python)
  • Conexión a internet (para descargar el modelo la primera vez)

Paso 1: Clonar o descargar el proyecto

cd mathbot_ai

Paso 2: Crear entorno virtual (recomendado)

python -m venv venv

# Windows
venv\Scripts\activate

# Linux/Mac
source venv/bin/activate

Paso 3: Instalar dependencias

pip install -r requirements.txt

Paso 4: Descargar recursos NLTK

python -c "import nltk; nltk.download('punkt'); nltk.download('punkt_tab'); nltk.download('stopwords')"

▶️ Ejecución

Iniciar la aplicación

python app.py

Acceder al chatbot

Abrir el navegador en: http://localhost:5000

Entrenamiento (opcional)

Para hacer fine-tuning del modelo con el dataset:

python model/trainer.py

Evaluación (opcional)

Para evaluar el rendimiento del chatbot:

python model/evaluator.py

Demostración de preprocesamiento

python model/preprocessing.py

🧠 Modelo Transformer (Flan-T5)

¿Qué es un Transformer?

Un Transformer es una arquitectura de red neuronal introducida en el paper "Attention Is All You Need" (Vaswani et al., 2017). Se basa en mecanismos de atención en lugar de recurrencia (RNN) o convolución (CNN).

Arquitectura Encoder-Decoder

Flan-T5 utiliza una arquitectura encoder-decoder:

  • Encoder: Procesa la secuencia de entrada (pregunta) y genera representaciones contextuales
  • Decoder: Genera la secuencia de salida (respuesta) token por token

Self-Attention

El mecanismo de Self-Attention permite a cada token de la secuencia "atender" a todos los demás tokens:

Attention(Q, K, V) = softmax(QK^T / √dk) · V

Donde Q (Query), K (Key) y V (Value) son proyecciones lineales de los embeddings.

Multi-Head Attention

Multi-Head Attention ejecuta múltiples mecanismos de atención en paralelo:

MultiHead(Q, K, V) = Concat(head₁, ..., headₕ) · W^O

Cada "cabeza" puede capturar diferentes tipos de relaciones lingüísticas.

¿Por qué Flan-T5?

Razón Descripción
Instruction-tuned Entrenado con instrucciones, ideal para Q&A
Open source Gratuito y sin necesidad de API de pago
Eficiente 248M parámetros, ejecutable en CPU
Encoder-decoder Arquitectura completa para generación
Google Desarrollado y respaldado por Google Research
Multilingüe Capacidad de entender múltiples idiomas

📊 Dataset Math-QA

Información del Dataset

Propiedad Valor
Nombre Math-QA
Fuente Hugging Face (rvv-karma/Math-QA)
Formato JSON
Registros locales 50 pares pregunta-respuesta
Categorías 7 (álgebra, geometría, trigonometría, cálculo, estadística, probabilidad, aritmética)

Estructura

{
    "id": 1,
    "category": "algebra",
    "question": "What is the solution of 2x + 5 = 15?",
    "answer": "To solve 2x + 5 = 15, subtract 5: 2x = 10. Divide by 2: x = 5.",
    "difficulty": "easy"
}

🔧 Preprocesamiento de Texto

El pipeline de preprocesamiento implementa 7 pasos:

Paso Técnica Ejemplo
1 Conversión a minúsculas "ALGEBRA" → "algebra"
2 Eliminar caracteres especiales "2+2??##" → "2+2"
3 Eliminar espacios redundantes "hello world" → "hello world"
4 Tokenización NLTK "hello world" → ["hello", "world"]
5 Construcción de vocabulario 500+ tokens únicos
6 Tokens con Transformers SentencePiece subword tokenization
7 Embeddings Vectores de 768 dimensiones

🎓 Entrenamiento (Fine-Tuning)

Proceso

  1. Carga: Dataset JSON → lista de pares Q&A
  2. División: 80% entrenamiento / 20% validación
  3. Tokenización: Texto → IDs con T5 Tokenizer
  4. Optimización: AdamW con learning rate 3e-4
  5. Épocas: 3 épocas con gradient clipping
  6. Guardado: Mejor modelo según validation loss

Hiperparámetros

Parámetro Valor
Épocas 3
Batch Size 8
Learning Rate 3e-4
Optimizador AdamW
Max Input Length 256 tokens
Max Output Length 256 tokens

📈 Evaluación

Métricas

Métrica Descripción
BLEU Score Precisión de n-gramas (0-1)
ROUGE Score Recall de unigramas (0-1)
Exact Match Coincidencia exacta con referencia
Coherencia Evaluación de estructura y fluidez
Utilidad Relevancia del contenido matemático
Tiempo Velocidad de generación de respuesta

🔌 API Endpoints

Método Endpoint Descripción
GET / Página principal
POST /api/chat Enviar pregunta al chatbot
GET /api/history Obtener historial
POST /api/clear Limpiar historial
GET /api/model-info Información del modelo
GET /api/welcome Mensaje de bienvenida
GET /api/health Estado del servidor

Ejemplo de uso

curl -X POST http://localhost:5000/api/chat \
  -H "Content-Type: application/json" \
  -d '{"message": "What is the derivative of x^2?"}'

👨‍💻 Autor

Proyecto universitario para la materia de Procesamiento del Lenguaje Natural (PLN).


📄 Licencia

Este proyecto es de uso académico y educativo.


MathBot AI - Tutor Inteligente de Matemáticas basado en Transformers 🤖📐

Desarrollado con ❤️ usando Python, Flask y Flan-T5

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors