TourGuideBot: Smart Tourist Recommender for Cartagena
Based on Natural Language Processing and BERT
Autores:
- Juan David Colón Martínez
- Harlem Hernández Rodríguez
- Kaleth Benjumea Hernández
Afiliación:
Universidad Tecnológica de Bolívar, Cartagena, Colombia
- Descripción del Proyecto
- Objetivos
- Metodología
- Resultados Ejemplares
- Estructura del Repositorio
- Instalación y Dependencias
- Preparación y Organización de Datos
- Ejecución del Pipeline Completo
- Levantamiento de la Aplicación Web
- Uso de la Interfaz Web
- Posibles Mejoras Futuras
- Autores y Créditos
- Licencia
TourGuideBot es una plataforma web interactiva que ofrece recomendaciones turísticas personalizadas en la ciudad de Cartagena, Colombia. El usuario escribe libremente sus preferencias (“quiero un sitio con vista al mar y música en vivo”) y un modelo de BERT ajustado en un dataset propio interpreta esa consulta para sugerir lugares que cumplan con esas características. Toda la lógica de filtrado semántico corre en el backend (Flask), mientras que el frontend (HTML/CSS/JS con Bootstrap y AOS) brinda una experiencia “tipo chatbot” sencilla y atractiva.
- Interpretar consultas en lenguaje natural sin depender de menús o filtros estáticos.
- Utilizar BERT para capturar la intención y el contexto de la descripción del usuario.
- Proporcionar recomendaciones turísticas precisas y personalizadas, basadas en una base de datos local de lugares en Cartagena.
- Crear una interfaz web intuitiva que simule un chat, mostrando resultados con imágenes y puntuaciones de similitud.
-
Fuentes principales:
- Reseñas y descripciones en redes sociales (Instagram, TikTok, YouTube).
- Información de Google Maps (ubicación, horarios, valoraciones).
- Plataformas turísticas (TripAdvisor, Yelp) para enriquecer y validar atributos.
-
Formato original:
data/raw/datos.xlsx: Hoja de cálculo con nombres, categorías, direcciones, puntuaciones y breves descripciones.data/raw/indices.txt: Texto plano con campos adicionales de identificación y orígenes.
- Base: modelo preentrenado
msmarco-distilbert-base-tas-bde SentenceTransformers. - Tarea: entrenar (fine-tuning) usando pares “consulta ↔ lugar” que reflejen descripciones turísticas en español.
- Pérdida utilizada:
MultipleNegativesRankingLosspara que el embedding de la consulta se acerque al embedding del lugar relevante. - Salida:
models/bert_model.pt(modelo afinado listo para inferencia).
-
web/app.py:- Define una ruta
/que aceptaGETyPOST. - Al recibir una consulta (
request.form["query"]), calcula el embedding con el modelo BERT afinado. - Compara semánticamente contra los embeddings precomputados de cada lugar (cargados desde
data/processed/). - Devuelve un JSON con los lugares ordenados por “score” de similitud.
- Define una ruta
-
Dependencias clave:
flaskpandassentence_transformersotransformers + torchnumpy
-
Plantilla principal:
web/templates/index.html- Carrusel de imágenes (ciudad amurallada, Café del Mar, Bocagrande) con Bootstrap.
- Capa semitransparente para realzar textos sobre el slider.
- Buscador central (ligeramente desplazado a la izquierda) con un ícono de lupa.
- Flecha animada (CSS + AOS) que desplaza al usuario a los resultados.
- Tarjetas de resultados que muestran imagen, nombre del lugar y puntuación.
-
Estilos personalizados:
- Variables de color definidas en CSS (
:root). - Tipografía moderna con Google Fonts (
Poppins,Playfair Display). - Hover effects en tarjetas (3D tilt y zoom en la imagen).
- Animaciones de entrada con AOS.
- Variables de color definidas en CSS (
-
JavaScript ligero:
web/static/script.js- Controla la animación del carrusel (opcional).
- Maneja la aparición del botón “Volver arriba.”
- Validación mínima del campo de búsqueda.
- Creación de un conjunto de consultas reales en lenguaje natural (tanto literales como coloquiales).
- Comparación de la recomendación top-1 con la expectativa humana (p. ej., “quiero comer mariscos” → “La Cevichería”).
- Cálculo de métricas de “ranking accuracy” (top-1, top-3) en un pequeño set de validación manual.
- Ajuste de umbrales de similitud semántica para optimizar precisión vs. recall.
A continuación, tres consultas de ejemplo y su recomendación principal:
| Consulta | Lugar Recomendado |
|---|---|
| “Quiero comer mariscos con vista al mar” | La Cevichería: Restaurante icónico especializado en mariscos, ubicado en la Ciudad Amurallada, reconocido por su frescura y ambiente caribeño. |
| “Busco un sitio bohemio, música en vivo y cerveza” | Getsemaní (varios bares): Barrio bohemio repleto de bares con música en vivo, grafitis, ambiente cultural y cerveza artesanal. |
| “Necesito ir al aeropuerto para un vuelo” | Aeropuerto Internacional Rafael Núñez: Ubicado en Crespo, principal aeropuerto de Cartagena, con conexiones nacionales e internacionales. |