Skip to main content

Issue where Korean and English words become joined due to missing spaces when merging long audio chunks

Qwen3-ASR: Missing Spaces When Merging Long Audio Chunks (Korean and English Words Stuck Together)​

Link: https://github.com/QwenLM/Qwen3-ASR/issues/217

  • Target: QwenLM/Qwen3-ASR (qwen-asr 0.0.6, main 7c6daf7)
  • Type: Issue (Fix patch and tests are ready in the local branch fix/chunk-text-merge-space, pending commit)

Background​

In the SceneMaker STT benchmark, Qwen3-ASR transcribes Korean broadcast audio along with timestamps. Qwen3ASRModel.transcribe() internally splits long audio clips into chunks. The limit is 180 seconds for return_time_stamps=True, or 1,200 seconds otherwise. There is a bug in the step that merges the transcription results from each chunk back into a single .text. The current benchmark bypasses this path by pre-splitting the audio into short chunks using VAD, so the issue only occurs when a long file is input as-is. I discovered this while reading the library code.

Cause​

On line 439 of qwen_asr/inference/qwen3_asr.py, chunk text is concatenated using an empty separator.

merged_text = "".join([t for t in out_texts[i] if t is not None])

Since each chunk of text is already processed by parse_asr_output() (lines 428 and 470 of utils.py) beforehand, any spaces inserted by the model at chunk boundaries have already been removed. While Chinese and Japanese are not affected, in languages that use spaces (such as Korean, English, and German), the last word of the preceding chunk and the first word of the following chunk are joined together at each chunk boundary.

  • "오늘 날씨가 정말" + "좋습니다." are merged into "오늘 날씨가 정말좋습니다."
  • "It was closed." + "So we went home." are merged into "It was closed.So we went home."

When a timestamp is requested, this occurs approximately once every 3 minutes, resulting in 2 word errors (1 substitution, 1 deletion) per boundary, as measured by WER. The .time_stamps item list is unaffected. This issue applies to both the transformers and vLLM backends.

Reproduction Steps​

We reproduced the issue without model weights. We replaced only the backend call (_infer_asr) and the forced aligner with stubs, while the rest of the code follows the actual transcribe() code path (audio normalization, chunking, output parsing, and merging) exactly. The script is _drafts/Qwen3-ASR/repro_chunk_merge.py.

1) 200 s audio, return_time_stamps=True (chunk limit 180 s), language auto
chunk lengths (s): [175.0, 25.0]
text: 'We went to thestore yesterday.'
2) 200 s audio, return_time_stamps=True, language='Korean'
chunk lengths (s): [175.0, 25.0]
text: 'The weather is really nice today.'
3) 1300 s audio, no timestamps (chunk limit 1200 s), language='English'
chunk lengths (s): [1195.0, 105.0]
text: 'It was closed.So we went home.'

Proposed Fix​

Add merge_chunk_texts() to utils.py and use it at the merge point. Insert a single space between two non-empty chunks, but do not insert a space if any character on either side of the boundary is a CJK character, kana, or full-width punctuation mark. Changes: 2 files, 42 lines added, 1 line deleted.

Verification​

  • Before the fix, 4 out of 7 new tests failed on HEAD; after the fix, all 7 passed (tests/test_chunk_text_merge.py)
  • The output of the reproduction script changed to 'We went to the store yesterday.', '오늘 날씨가 정말 좋습니다.', and 'It was closed. So we went home.' after the fix
  • Tests confirmed that mixed Chinese, Japanese, and Chinese-English boundaries are preserved exactly as-is without spaces
  • Actual model inference was not run (checkpoints not downloaded, GPU not used)

Notes​

  • The repository lacks a CONTRIBUTING file, tests, and CI. The issue template requires English-language descriptions and reproducible code.
  • The maintainer has not commented on any issues since the project’s public release on January 30, 2026, and the only external pull request merged was the one mentioned in the README announcement (#189). Issues are marked as “inactive” after 45 days without a response and are automatically closed 30 days later. The likelihood of these changes being implemented is considered low.