Skip to content

Propuesta de Machine Learning

doctiling edited this page Sep 25, 2026 · 1 revision

Propuesta de Machine Learning

Estado: propuesta (no implementada), 2026‑09‑18. Documento completo: docs/ML-PROPUESTA.md.

El problema

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.

Principios

  1. Local‑first también para ML: inferencia y entrenamiento on‑device.
  2. 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).
  3. Regla antes que modelo (cold start): el ML toma el control solo tras un mínimo de observaciones.
  4. ML medible o no entra: baseline de reglas, métrica offline declarada y modo sombra.
  5. Determinismo en pruebas: pesos fijos; nada de entrenamiento en el gate.

Las cinco intervenciones

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

Arquitectura

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)

Datos

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.

Evaluación

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.

Fases

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.

Lo que no se propone

Entrenar o afinar el LLM; aprendizaje federado; Deep Knowledge Tracing (sin datos suficientes, un BKT calibrado gana y se explica).

Clone this wiki locally