Repository navigation
Propuesta de Machine Learning
Estado: propuesta (no implementada), 2026‑09‑18. Documento completo: docs/ML-PROPUESTA.md.
EMMA tiene dos tipos de inteligencia y le falta la tercera:
| Tipo | Dónde vive | Limitación |
|---|---|---|
| Generativa (LLM) | Gemma local / nube | no aprende del aprendiz: cada turno parte del prompt |
| Reglas deterministas | políticas de promoción, Leitner, próximo escenario, recomendador | constantes fijas a ojo, iguales para todo aprendiz |
| Predictiva (ML) | — | falta: nada estima probabilidad de recuerdo, nivel real ni efecto de una recomendación |
BOX_INTERVALS_DAYS = {1,2,4,8,16} decide cuándo repasa cada usuario del mundo sin mirar un dato suyo. ML = reemplazar esas constantes por parámetros aprendidos de la propia telemetría, sin salir del dispositivo.
- Local‑first también para ML: inferencia y entrenamiento on‑device.
- El dominio sigue puro: los modelos lineales/logísticos/bayesianos son aritmética que recibe los pesos por argumento; los pesados entran por puerto (
MlScorer). - Regla antes que modelo (cold start): el ML toma el control solo tras un mínimo de observaciones.
- ML medible o no entra: baseline de reglas, métrica offline declarada y modo sombra.
- Determinismo en pruebas: pesos fijos; nada de entrenamiento en el gate.
| Id | Intervención | Reemplaza | Modelo | Métrica |
|---|---|---|---|---|
| M1 | SRS adaptativo | Leitner de 5 cajas | Half‑Life Regression: p = 2^(−Δt/h), h = exp(θ·x); ~50 parámetros, entrena en ms en un Worker |
MAE de vida media y log‑loss vs Leitner |
| M2 | Trazado de conocimiento | barra fija de promoción | Bayesian Knowledge Tracing por categoría de error (4 parámetros por EM) | AUC / log‑loss del acierto siguiente vs conteo |
| M3 | Recomendación | boosts fijos (ERROR_BOOST, PLAN_BOOST, GOAL_BOOST) |
contextual bandit (LinUCB / Thompson) acotado al plan de 24 semanas; reasonEs sigue explicable |
regret off‑policy vs política fija |
| M4 | Pronunciación real | comparación de strings | Goodness of Pronunciation sobre posteriores de fonema (wav2vec2‑phoneme / Whisper con alineación) en WebGPU | correlación con juicio humano; falsos positivos |
| M5 | Destilación del detector de errores | parte de la gramática silenciosa por LLM | clasificador ligero entrenado con el LLM como oráculo; LLM como fallback de baja confianza | F1 por categoría ≥ 0.85; latencia p95 < 100 ms |
application ──► domain
├─ srs/half-life.ts (M1, puro)
├─ progression/bkt.ts (M2, puro)
├─ pathway/bandit.ts (M3, puro)
└─ ml/ml-port.ts (MlScorer, MlWeightsRepository)
infrastructure
├─ ml/onnx-scorer.ts (M4/M5, WebGPU)
├─ ml/weights-repository.ts (pesos versionados en el store JSON)
└─ ml/trainer.worker.ts (entrenamiento fuera del hilo de UI, al cerrar sesión)
Fase 0 crea la colección ml_events (append‑only, esquema versionado) con srs_review, turn_error, recommendation_shown, recommendation_taken, pronunciation_attempt. Retención configurable, borrado y export a JSONL por acción del usuario. Arranque en frío: sombra desde el evento 1; control desde 50 repasos (M1) / 200 turnos (M2) / 100 sesiones (M3). Simulador sintético de aprendiz para validar que el entrenador recupera parámetros conocidos.
| Nivel | Qué se hace | Activación |
|---|---|---|
| Offline | backtest sobre ml_events; baseline = reglas actuales |
gana en la métrica declarada |
| Sombra | predice sin decidir; se registran ambas decisiones | ≥ 2 semanas sin degradación |
| Activo | feature flag por modelo, reversible | métrica de producto no empeora |
Métricas de producto: errores/turno por nivel, recuerdo en repasos, sesiones hasta promoción, adherencia al plan.
F0 datos y flags → F1 HLR → F2 BKT → F3 bandit → F4 GOP → F5 destilación. Cada fase es una feature SDD con TDD sobre dominio puro y gate verde.
Entrenar o afinar el LLM; aprendizaje federado; Deep Knowledge Tracing (sin datos suficientes, un BKT calibrado gana y se explica).
EMMA Desktop · Trabajo Integrador · Maestría CODING (EISC, Universidad del Valle) · Oscar Andrés Osorio y Raúl Alzate · Asesor: Raúl E. Gutiérrez de Piñerez Reyes, Ph.D. · Código en raalzate/emma-desktop