Skip to content

v0.17.0: window merge duplicates words on long audio (single-window decode of the same audio is correct) #954

Description

@maboa

Since v0.17.0, transcribing long audio duplicates occasional words. The same audio decoded as a single window is correct, so it is the cross-window merge rather than the acoustic model.

Noticed while upgrading an app from 0.15.6 to 0.17.0.

Reproduction

A ~660 s recording of a conference talk (single speaker, natural hesitant delivery), 16 kHz mono WAV, through the CLI at each tag:

fluidaudiocli transcribe talk.wav --word-timestamps --output-json out.json
doubled-word pairs in 1,6xx words
v0.15.6 8
v0.17.0 9

Most are genuine — the speaker really does say "taking taking", "the the", "I I". The interesting ones are the two v0.17.0 adds:

v0.15.6   …they gave them no budget and uh no guidance on like what the regulation…
v0.17.0   …they gave them no budget and uh no no guidance on like what the regulation…
                                            ^^^^^

v0.15.6   …It also can use JSYC which is another experiment presentation library.…
v0.17.0   …It also can use JSYC, which is another experiment presentation presentation library.…
                                                             ^^^^^^^^^^^^^^^^^^^^^^^^^

v0.17.0 also loses one I I that v0.15.6 emitted, so the net count barely moves — but the inserted tokens are new.

The part that localises it

Cutting a 14.5 s clip of the same audio around each word — short enough to decode in one window, so no merging happens — gives the correct text at both versions:

clip around "no"            0.15.6: …gave them no budget and…
                            0.17.0: …gave them no budget and…
clip around "presentation"  0.15.6: …another experiment presentation library. Then…
                            0.17.0: …another experiment presentation library. Then…

Same model, same audio, correct output. The duplication appears only when that audio is part of a longer file that gets windowed.

Where I would look

This looks like the window-entry rework in AsrManager+Transcription.swift for #855 / #897 — every window after the first now re-decodes from frame 0 on a fresh decoder state with source-level emission suppression, leaving dedup "only the jitter margin" (redecodeEmissionJitterFrames = 5). The leaked tokens are short function words and word-initial repeats, which is what I would expect if a re-emitted token lands outside that margin or is not matched by reconcileFinalWindowSeam's head-stripping.

One caveat on the evidence: the reported startTime of both inserted tokens (179.28 s and 386.56 s) does not fall inside a nominal overlap region for 15 s windows at 13 s stride, so I could not confirm alignment from timestamps alone. The clip test above is the stronger signal.

Why the benchmarks may not show it

Both cases sit in hesitant, filler-heavy delivery ("uh no guidance", a restarted phrase). Clean read speech does not seem to trigger it — a 64 s single-speaker studio narration produced zero doubles at either version, with only punctuation differences. Utterance-level corpora like LibriSpeech would also never exercise the window merge at all.

Happy to share the sample audio if useful, and to test a patch.

Not a regression report against the fix itself

To be clear, 0.17.0 is otherwise a clear improvement in our testing — noticeably better sentence punctuation, ~28% faster, and the macOS 14 BNNS diarizer warning in 0.15.7 matters to us. The old mid-window entry dropping 10 s of speech is plainly worse than a duplicated "no". This is a rough edge in the new approach, not an argument for the old one.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions