Skip to content

Commit fc72293

Browse files
ZhaoChaoqunclaude
andcommitted
fix: restore default streaming params and use minimal silence flush
- QwenASRRecognizer: revert chunk_sec/rollback/unfixed_chunks to C API defaults (2.0s/5/2) — custom values (1.5/3/1) caused decoder degeneracy on long audio - ASREngine.flush: push 0.1s silence + finalize instead of reading stable+unfixed directly, ensuring rollback tokens are committed Streaming CER improved from 0.0968 to 0.0519 on 67-sample benchmark. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 431aa9e commit fc72293

2 files changed

Lines changed: 11 additions & 10 deletions

File tree

Sources/ASREngine.swift

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -201,11 +201,13 @@ class QwenASREngine: ASREngine {
201201
return
202202
}
203203

204-
// 直接取 stable + unfixed 作为最终结果,不推送 silence
205-
// 推送 silence + finalize 会导致 decoder 在静音上 hallucinate(重复之前的内容)
206-
let stableText = self.recognizer.getResult()
207-
let unfixedText = self.recognizer.getUnfixed() ?? ""
208-
let result = stableText + unfixedText
204+
// 推送极少量 silence(0.1s)+ finalize,让 Rust 处理尾部不足一个 chunk 的音频
205+
// 并 commit rollback 窗口内的 token。0.1s silence 不会导致 decoder hallucinate,
206+
// 而之前的 1s silence 在长音频上导致 decoder 重复之前的内容。
207+
let minimalSilence = [Float](repeating: 0.0, count: 1600)
208+
_ = self.recognizer.pushAudio(samples: minimalSilence, finalize: true)
209+
210+
let result = self.recognizer.getResult()
209211
self.recognizer.reset()
210212

211213
DispatchQueue.main.async {

Sources/QwenASRRecognizer.swift

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,10 @@ class QwenASRStreamRecognizer {
2727
// 强制简体中文输出,避免自动检测导致输出繁体字
2828
qwen_asr_set_language(engine, "chinese")
2929

30-
// 流式参数:chunk_sec 和 max_new_tokens 保持默认以获得更好的准确度
31-
// rollback 和 unfixed_chunks 适度降低以减少首字延迟
32-
qwen_asr_stream_set_chunk_sec(engine, 1.5)
33-
qwen_asr_stream_set_rollback(engine, 3)
34-
qwen_asr_stream_set_unfixed_chunks(engine, 1)
30+
// 流式参数:使用 C API 默认值
31+
qwen_asr_stream_set_chunk_sec(engine, 2.0)
32+
qwen_asr_stream_set_rollback(engine, 5)
33+
qwen_asr_stream_set_unfixed_chunks(engine, 2)
3534
qwen_asr_stream_set_max_new_tokens(engine, 32)
3635

3736
streamState = qwen_asr_stream_new()

0 commit comments

Comments
 (0)