test: measure the alphabet engine against real fingerspelling - #76
Merged
Conversation
Endika
force-pushed
the
feat/alphabet-bench
branch
from
August 26, 2026 11:06
aec9f45 to
24ea08f
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
HandshapeAlphabetClassifierera el único motor que el README anunciaba sin ninguna cifra: «geometric handshape rules, no training data needed», y nada más. LSE-FS-UVigo (CC BY 4.0) trae 456 secuencias de deletreo continuo real con signantes apartados. Aquí está la cifra.El resultado
0 de 456 palabras deletreadas exactamente. 0,919 operaciones de edición por carácter. El total esconde la forma del fallo:
No se equivoca tanto como calla. Cuando se moja acierta la mitad, que para una tabla escrita a mano contra ningún dato no está mal. Casi nunca se moja.
Por qué
MIN_SIGN_MSimponía a los signos cortos. Y faltan las frecuentes: R toca el 53% de las palabras, N el 44%, T el 35%.kno está en ninguna de las dos listas, ni enLSE_ALPHABETni enUNSUPPORTED_LETTERS, así que la UI no avisa de ella. No lo toco aquí.El banco es TypeScript a propósito
Los demás bancos reimplementan la app en Python y luego tienen que demostrar el puerto fiel; esa demostración ha fallado dos veces, una con la lateralidad y otra con los umbrales en frames. Este ejecuta la tabla, la geometría y el estabilizador publicados, sin tocarlos, bajo un
vitest.bench.config.tsaparte.npm testno lo recoge: necesita un corpus que no está en el repo.Antes de creerme el 0% comprobé que la escala de z de LSE-FS es la que asume
describeHandShape, que es 3D. Curls medianos en 3D0.13 0.31 0.34 0.41 0.27, con z=00.13 0.34 0.35 0.38 0.22. El 0% es del motor, no del arnés.Un cambio en el motor
HandshapeAlphabetClassifierganalastScores, las puntuaciones antes del filtro. Es inerte para la app —RecognizeSignsUseCasesolo lo lee de motoreswindow, y este esframe— pero sin ello no hay forma de distinguir «la tabla está mal» de «la tabla es estricta», que es justo lo que decide si toca reentrenar.Qué dice sobre reentrenar
Los fallos son borrados con puntuación máxima baja, no sustituciones ni umbral mal puesto. Aflojar el suelo compra ruido y editar la tabla no arregla un frame que está entre dos letras: las reglas geométricas no describen estas manos. Un clasificador aprendido está justificado, y tendría que cubrir el alfabeto y decir algo sobre los frames de transición. LSE-FS etiqueta la palabra, no las letras, así que la supervisión sale de alineamiento o CTC — spec aparte, con 2.158 + 430 secuencias intactas esperando.
Lint, typecheck y 179 tests en verde. El corpus no entra en git.