TDT beam search fails above ~40-90s of audio: "zero-duration expansion did not reduce score" (greedy on the same audio is fine)
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 58/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Tranquilo
- Stack tecnológico
- cpp
- Área
- audio-video-rtc
Línea de trabajo
Reproduce el fallo mediante parakeet_capi_transcribe_pcm_nbest_json usando el caso PCM mono de 16 kHz proporcionado y compáralo después con los puntos de entrada greedy y con audio truncado. Sigue el recorrido de TDT beam-search alrededor de la invariante notificada “zero-duration expansion did not reduce score” y el comportamiento del modelo tdt-0.6b-v3. La tarea estará terminada cuando la decodificación N-best de entradas largas ya no se aborte, mientras el comportamiento existente para entradas greedy y más cortas permanezca intacto.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
parakeet_capi_transcribe_pcm_nbest_json aborts on longer inputs with
tdt_beam_search: zero-duration expansion did not reduce score
while greedy decoding of the same audio with the same model succeeds. It reads like an internal invariant that long inputs violate, rather than a bad-input case.
Environment
- parakeet.cpp v0.5.0, released
lib-macos-metal-arm64bundle (ABI 6) - macOS arm64, Metal backend
- Model:
mudler/parakeet-cpp-gguf→tdt-0.6b-v3-q4_k.gguf - Audio: 16 kHz mono float PCM, AMI meeting recordings (~100s each)
What fails
22 of 23 AMI clips (~100s each) fail. One succeeded, and only at beam 4.
It is not a beam-width interaction — beam 1 fails identically to beam 8:
beam_size=1 FAIL beam_size=2 FAIL beam_size=4 FAIL beam_size=8 FAIL
What succeeds on the identical audio
parakeet_capi_transcribe_pcm(greedy) — 242 words, no errorparakeet_capi_transcribe_pcm_batch_json(greedy + timestamps) — 242 words, 242 word records- The same N-best call on the first 30s or 40s of that same file
So the encoder, the model and the audio are all fine; it is specific to the beam search path at length.
Threshold varies with content, not a fixed limit
Truncating each file to N seconds and decoding at beam 4:
| file | length | 30s | 40s | 50s | 60s | 70s | 80s | 90s |
|---|---|---|---|---|---|---|---|---|
| ES2004a_FEE013 | 100.6s | ok | ok | ok | fail | fail | fail | fail |
| EN2002c_MEE071 | 100.0s | ok | ok | ok | ok | ok | ok | fail |
| ES2004b_MEO015 | 105.7s | ok | ok | fail | fail | fail | fail | fail |
All three pass at 30s and 40s and fail before 100s, at different points — consistent with something accumulating over frames rather than a hard cap.
Possibly model-specific
The same 100.6s clip decodes fine at beam 2, 4 and 8 with tdt_ctc-1.1b-q4_k.gguf. Only tdt-0.6b-v3 failed here, so it may be an interaction between that checkpoint's duration predictions and the expansion check.
Minimal reproduction
# ctypes against libparakeet.dylib from the v0.5.0 release
ptr = lib.parakeet_capi_transcribe_pcm_nbest_json(
ctx, samples_p, len(samples), 16000, 4, 1, 1, None)
# ptr is NULL; parakeet_capi_last_error(ctx) reports the message above.
# Truncating `samples` to 40s makes the same call succeed.
Possibly related to #55 (error above 5 min), though the threshold here is far lower and the message differs.
Not blocking for us — we moved to transcribe_pcm_batch_json, which gives greedy output with per-word timestamps and no beam search. Reporting because the failure is silent-until-it-isn't for anyone relying on N-best over long audio.
- Lenguaje dominante
- C++
- Estrellas
- 786
- Forks
- 93
- Merge medio
- 9 d 19 h
- PR fusionados (30 d)
- 4
Preparar el entorno
Aún no hemos revisado los archivos de configuración de este proyecto. Empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de mudler/parakeet.cpp
-
Dificultad 4/5 3-5 días Aptitud para principiantes 55/100
mudler/parakeet.cpp#68 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 58/100
mudler/parakeet.cpp#62 ·
-
Real streaming from a micAbierto
Dificultad 3/5 1-2 días Aptitud para principiantes 48/100
mudler/parakeet.cpp#60 ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
mudler/parakeet.cpp#59 · 3 comentarios ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
mudler/parakeet.cpp#55 · 1 comentario ·
Todos los issues de mudler/parakeet.cpp
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Icinga/icinga2#11058 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
component: split-view platform: windows
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
zen-browser/desktop#15616 · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
-
area/ysql kind/bug priority/medium status/awaiting-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
yugabyte/yugabyte-db#34415 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
WayfireWM/wayfire#3148 · 1 comentario ·
Los mantenedores suelen responder en 1 día