tde-es-en-lite-spec

Variante especializada (CC BY-NC 4.0, solo uso no comercial): ajustada además con los splits de entrenamiento de AG News y GoEmotions, así que en esas dos tareas NO es zero-shot (en el resto sí). Para zero-shot puro: tde-es-en-lite-plus (CC BY-NC) o tde-es-en-lite-v2 (MIT).

Motor de decisiones tipadas (choice / score / noul) sobre un encoder bidireccional int8 de ~42,5 M de parámetros (43 MB), recortado a español e inglés. No genera texto: elige entre opciones que le das, puntúa una rúbrica o estima si una proposición se desprende de un texto, y devuelve probabilidades, con la opción de abstenerse. Corre en CPU, 1 hilo, sin GPU y sin Python en runtime, con el binario nativo tde (Rust).

Código fuente (Apache-2.0) incluido en src/; repositorio de desarrollo: typed-decision-engine.

Recursos (medidos: i9-9880H, macOS Intel, 1 hilo, sin GPU)

este modelo Laya (421 M) Laya-multilingual (322 M)
parámetros ~42,5 M 421 M 322 M
pesos en disco 43 MB 223 MB (medido) 644 MB
RAM (RSS) ~90 MB n/d n/d
latencia por consulta (CPU) ~15 ms ~280 ms ~237 ms
GPU no sí para 33 ms (publicado) sí para 33 ms (publicado)

Resultados

Precisión sin ejemplos por opción (zero-shot salvo lo que se indica abajo), respuesta forzada, 150 casos por tarea (±4 puntos). El motor propio se mide con el binario desplegable (tde open-eval); Laya con su paquete Python en CPU, sin calibrar. La columna «respondidas» usa la abstención por defecto.

tarea n motor propio 0 ej. Laya 0 ej. respondidas (cobertura) 0 ej.
NLI inglés sí/no (MNLI) 150 0.83 0.78 0.87 (76%)
NLI español sí/no (XNLI) 150 0.74 0.65 0.77 (83%)
afirmación verdadera, 3 opciones 150 0.77 0.69 0.80 (95%)
intención MASSIVE en (60) 150 0.68 0.42 0.78 (82%)
intención MASSIVE es (60) 150 0.61 0.32 0.67 (76%)
intención CLINC150 (150) 118 0.67 no soportado 0.74 (86%)
escenario MASSIVE en (18) 150 0.72 0.57 0.77 (85%)
escenario MASSIVE es (18) 150 0.59 0.42 0.65 (83%)
emoción GoEmotions (28) 150 0.63 0.38 0.67 (85%)
tema AG News (4) 150 0.94 0.96 0.95 (98%)

AG News y GoEmotions se entrenaron con sus splits de entrenamiento (medidos en los de prueba): ahí no es zero-shot. Contra Laya (inglés) gana en 9 de 10 (pierde AG News: 0,94 vs 0,96 en 150 casos; 0,897 vs 0,918 en 600 casos más fiables). Contra Laya-multilingual (322 M) gana en 6 de 10 (intenciones y escenarios de MASSIVE, MNLI de 3 opciones, GoEmotions 0,63 vs 0,35), empata en MNLI (0,83) y XNLI-es (0,74) y pierde en CLINC (0,67 vs 0,69) y AG News (0,897 vs 0,910 en 600 casos). Las cabezas de schema (90 tickets) rinden menos que en plus: 0,844 frente a 0,922.

Texto de desarrollo de software (100 casos, 5 tareas; bench/uso_real/)

Peticiones, commits, logs, issues y enrutado de un agente de código, escritos por el autor. Acierto forzado medio: 0,42 sin ejemplos y 0,72 con 3 ejemplos por opción (clase mayoritaria 0,27). Solo con etiquetas no es fiable en este dominio; con ejemplos sirve como primer filtro con escalamiento al LLM (abstain).

Cabezas por schema (90 tickets de soporte, es/en)

Acierto 0,844, de las respondidas 0,997, cobertura 0,847 (tde eval; incluye los 67 casos de entrenamiento, escritos por el autor).

Qué incluye

  • Backbone intfloat/multilingual-e5-small (MIT), vocabulario recortado de 250.002 a 54.358 tokens, int8. Ajustado (contrastivo texto↔etiqueta, anclado al modelo base) con 17 datasets: los 15 de plus más los splits de ENTRENAMIENTO de AG News y GoEmotions. El backbone NO se ajustó con MASSIVE, CLINC ni NLI (zero-shot ahí); AG News y GoEmotions sí (los splits de prueba nunca). La cabeza claim (universal.bin) se entrenó con MultiNLI (train): MNLI no es zero-shot para claim; XNLI-es no entró.
  • Tokenizador propio en Rust (4933/4933 idéntico a la referencia de Hugging Face).
  • Modo abierto (tde ask): sin schema. choice/score = coseno (escala 80) contra el prototipo de cada opción (etiqueta, o etiqueta + ejemplos). claim = cabeza NLI (universal.bin); las afirmaciones «el texto habla de X» se resuelven con un z-score de coseno.
  • Reglas deterministas: negación (se descartan cláusulas negadas y nunca se elige una opción negada), aritmética y edades entre fechas; lo que no resuelven, se abstiene.
  • Autoaprendizaje sin reentrenar: tde feedback --task T --answer a "texto" guarda una corrección; tde ask --task T la usa como ejemplo. Costo ~0 ms; el modelo no cambia, así que no olvida.
  • Modo schema (tde decide): preguntas fijas con cabezas por pregunta (heads.bin); ejemplo en schemas/.

Instalación

El repositorio de Hugging Face es autocontenido (no necesita GitHub): trae los pesos, el binario tde para macOS Intel, el código fuente (src/, para compilar en otras plataformas con Rust 1.82+) y install.sh.

hf download jul879n/tde-es-en-lite-spec --local-dir tde-es-en-lite-spec
cd tde-es-en-lite-spec && bash install.sh       # baja ONNX Runtime 1.20.1 (SHA-256 verificado) y deja listo el binario
./tde ask --question "¿De qué trata?" --options 'deportes|política|tecnología' \
  "El equipo ganó la final con un gol en el último minuto"

bash install.sh --link además deja tde disponible en cualquier carpeta (~/.local/bin). ./tde es un envoltorio que ya apunta a estos pesos. Otros subcomandos: tde ask --claim '...' <texto>, tde decide support '<texto>', tde feedback ..., tde bench. Solo se verificó en macOS Intel; en Linux, Windows y Apple Silicon install.sh compila desde src/ (sin verificar en esas plataformas).

Usarlo desde una app web o un script

./tde serve levanta un servidor HTTP local (127.0.0.1:8787, JSON, sin dependencias):

./tde serve --allow-origin http://localhost:3000     # origen de tu app web; sin esta opción solo aceptan curl/servidores
const r = await fetch("http://127.0.0.1:8787/v1/ask", {
  method: "POST", headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ state: "Me cobraron dos veces", options: ["reembolso", "cancelar", "soporte"],
                         task: "mi-tarea" /* opcional: usa los ejemplos guardados con /v1/feedback */ }),
});
const { choice, confidence, abstain } = await r.json();   // abstain=true: escala a un LLM o a una persona

Rutas: POST /v1/ask (choice, score o claim), POST /v1/feedback (autoaprendizaje), POST /v1/embeddings (formato OpenAI), POST /v1/systemone (juez noul/choice/score, el protocolo de OMP), GET /health. Seguridad: solo escucha en localhost, rechaza Host no local y navegadores de otro origen; no tiene autenticación, no lo expongas a la red. Hay una página de ejemplo en examples/server.html.

Varios agentes a la vez, con sesiones aisladas

./tde serve --workers 4 carga 4 copias del modelo (mismos pesos, una sesión de ONNX Runtime de 1 hilo cada una) y atiende 4 consultas en paralelo. Cada agente manda su identificador en la cabecera X-TDE-Session y obtiene su propia memoria (correcciones y cabezas por tarea), aislada de las demás; no hay tope fijo de agentes o sesiones (--max-sessions, --max-conns). Una sesión prefiere siempre la misma copia y usa otra libre si está ocupada.

copias consultas por segundo (16 agentes a la vez) latencia p50 / p95 RAM del servidor
1 84 189 / 214 ms 91 MB
4 268 44 / 93 ms 308 MB
8 390 33 / 60 ms 598 MB
curl -s localhost:8787/v1/feedback -H 'X-TDE-Session: agente-7' -d '{"task":"rutas","state":"deshaz el último commit","answer":"comando"}'
curl -s localhost:8787/v1/ask -H 'X-TDE-Session: agente-7' -d '{"task":"rutas","state":"revierte el merge","options":["comando","editar","buscar"]}'
curl -s -X DELETE localhost:8787/v1/sessions/agente-7        # borra la memoria de esa sesión

Autoaprendizaje: con ≥ 30 correcciones de una tarea (≥ 3 por opción) el servidor entrena sola una cabeza de ~1,5 KB por opción (se reentrena cada 10 más); medido en 5 tareas de desarrollo, con 8 a 14 ejemplos por opción sube el acierto de 0,72 (ejemplos como prototipos) a 0,85-0,88, sin costo en inferencia. Probado: 30 agentes en paralelo con reglas contrarias, 30/30 sesiones aisladas.

En el navegador, sin servidor (WebAssembly)

El repositorio incluye tokenizer.json (formato Hugging Face, podado) y web/tde.js (~100 líneas, copia el archivo a tu app): el modelo corre en el cliente con onnxruntime-web, sin servidor y sin enviar el texto a ningún lado.

import { loadTde } from "./tde.js";
const tde = await loadTde("https://huggingface.co/jul879n/tde-es-en-lite-spec/resolve/main");   // ~43 MB la primera vez
const r = await tde.ask("El equipo ganó la final", ["deportes", "política", "tecnología"]);
// r = { top, choice (null si duda), confidence, abstain, probs }.  tde.feedback(tarea, texto, opción) guarda correcciones
// en localStorage y ask(..., { task }) las usa como ejemplos.

Probado: mismas probabilidades que el binario (coseno de embeddings 1,00000), en Chrome ~1 s de carga y 240 ms la primera consulta. Para ver la demo: python3 -m http.server 8000 dentro de la carpeta descargada y abre http://localhost:8000/web/. No incluye las reglas de negación/aritmética ni la cabeza NLI de claim: usa el binario o tde serve para eso.

Limitaciones

  • No genera texto; solo elige, puntúa o estima. Solo español e inglés (otros alfabetos: se abstiene).
  • Zero-shot medio en tareas nuevas; mejora mucho con ejemplos por opción (0,42 → 0,72 en texto de desarrollo). Pierde frente a Laya en temas (AG News) y emociones (GoEmotions) y frente a Laya-multilingual en CLINC y NLI; gana en intenciones y escenarios de MASSIVE. Laya no publica sus datos de entrenamiento, así que su zero-shot en AG News no es verificable.
  • claim con afirmaciones fuera de MNLI puede dar un veredicto falso con confianza alta; no sabe hechos.
  • Errores con confianza alta existen aunque haya abstención; escalar siempre los casos dudosos.
  • Comparaciones hechas por el autor, 150 casos por tarea, un solo equipo; una sola plataforma verificada (macOS Intel; las demás solo compilan).

Licencias y atribuciones

  • Pesos: CC BY-NC 4.0 (LICENSE): uso no comercial, con atribución. Motivo: datasets de ajuste con licencia no permisiva, other/unknown, no declarada o de uso no comercial (AG News). Base intfloat/multilingual-e5-small: MIT (Microsoft Corporation). Código del repositorio: Apache-2.0.

Detalle de datos y licencias en LICENSE. No es asesoría legal.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for jul879n/tde-es-en-lite-spec

Quantized
(289)
this model

Datasets used to train jul879n/tde-es-en-lite-spec