긴 오디오 청크 병합 시 공백 누락으로 한국어·영어 단어가 붙는 문제
Qwen3-ASR: 긴 오디오 청크 병합 시 공백 누락 (한국어·영어 단어 붙음)
링크: https://github.com/QwenLM/Qwen3-ASR/issues/217
- 대상: QwenLM/Qwen3-ASR (
qwen-asr0.0.6, main 7c6daf7) - 형태: Issue (수정 패치와 테스트는 로컬 브랜치
fix/chunk-text-merge-space에 미커밋 상태로 준비)
배경
SceneMaker STT 벤치마크에서 Qwen3-ASR 로 한국어 방송 음성을 타임스탬프와 함께 전사한다. Qwen3ASRModel.transcribe() 는 긴 오디오를 내부에서 청크로 자른다. return_time_stamps=True 이면 180초, 아니면 1200초가 한도다. 청크별 전사 결과를 다시 하나의 .text 로 합치는 단계에 결함이 있다. 현재 벤치마크는 VAD 로 미리 짧게 잘라 넣어서 이 경로를 타지 않고, 긴 파일을 그대로 넣을 때만 해당된다. 라이브러리 코드를 읽다가 발견했다.
원인
qwen_asr/inference/qwen3_asr.py 439행에서 청크 텍스트를 빈 구분자로 이어 붙인다.
merged_text = "".join([t for t in out_texts[i] if t is not None])
각 청크 텍스트는 그 전에 parse_asr_output() (utils.py 428행, 470행) 에서 strip() 되므로 모델이 청크 경계에 공백을 냈더라도 이미 사라진 상태다. 중국어·일본어는 문제가 없지만 띄어쓰기를 쓰는 언어(한국어, 영어, 독일어 등)는 청크 경계마다 앞 청크의 마지막 단어와 뒤 청크의 첫 단어가 붙는다.
"오늘 날씨가 정말"+"좋습니다."가"오늘 날씨가 정말좋습니다."로 합쳐짐"It was closed."+"So we went home."가"It was closed.So we went home."로 합쳐짐
타임스탬프를 요청하면 약 3분마다 한 번씩 발생하고, 경계 하나당 WER 기준 단어 오류 2개(치환 1, 삭제 1)가 생긴다. .time_stamps 항목 리스트는 영향이 없다. transformers, vLLM 두 백엔드 모두 해당된다.
재현 방법
모델 가중치 없이 재현했다. 백엔드 호출(_infer_asr )과 forced aligner 만 스텁으로 바꾸고 나머지는 실제 transcribe() 코드 경로(오디오 정규화, 청크 분할, 출력 파싱, 병합)를 그대로 탄다. 스크립트는 _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: '오늘 날씨가 정말좋습니다.'
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.'
제안한 수정
utils.py 에 merge_chunk_texts() 를 추가하고 병합 지점에서 사용한다. 비어 있지 않은 두 청크 사이에 공백 하나를 넣되, 경계 양쪽 중 한 글자라도 CJK 한자·가나·전각 문장부호이면 넣지 않는다. 변경량은 2개 파일 42줄 추가, 1줄 삭제.
검증
- 수정 전 HEAD 에서 새 테스트 7개 중 4개 실패, 수정 후 7개 모두 통과 (
tests/test_chunk_text_merge.py) - 재현 스크립트 출력이 수정 후
'We went to the store yesterday.','오늘 날씨가 정말 좋습니다.','It was closed. So we went home.'로 바뀜 - 중국어·일본어·중영 혼합 경계는 공백 없이 그대로 유지됨을 테스트로 확인
- 실제 모델 추론은 돌리지 않았다 (체크포인트 미다운로드, GPU 미사용)
참고
- 저장소에 CONTRIBUTING, 테스트, CI 가 없다. 이슈 템플릿은 영어 작성과 재현 코드를 요구한다.
- 메인테이너의 이슈 코멘트는 2026-01-30 공개 당일 이후 없고, 외부 PR 머지는 README 뉴스 1건(#189)뿐이다. 이슈는 45일 무응답 시 inactive, 이후 30일 뒤 자동 종료된다. 반영 가능성은 낮게 본다.