端到端流式「语音到语音」同声传译引擎 · 零依赖参考实现(腾讯混元 Hy-SimulMT 拆解)
一句话说清楚:一个把「边说边译」从模型能力变成可复现工程框架的纯 Python 实现——流式音频分块 → 同传读/写策略 → 级联或直通管道 → 延迟与质量双轴评测,全部确定性、零第三方依赖、可训练(skill 从 0.5 单调爬到 1.0)。
2026-10-26 腾讯混元开源了同声传译大模型 Hy-SimulMT(30B-A3B,Apache-2.0):中英语音到语音实时翻译 + 实时音色克隆,StreamLAAL 延迟约 3 秒(人类专业译员约 4-5 秒),在 RealSI 长音频评测上超过主流开源同传模型和多数商业 API。
本仓库不是那个模型的实现,而是把「同声传译」背后的工程方法抽出来,做成一个能直接跑、能照着改的参考实现。真正的难点从来不在模型本身,而在三个工程问题:
- 流式与增量:音频是持续到达的,不能等句子结束再译,必须在词级增量产出。
- 读/写策略:每步是「再读一个源词」还是「先吐一个目标词」,这个决策序列直接决定延迟。
- 质量-延迟权衡:读得越多译得越准,但越慢;好策略要在同一帕累托前沿上更靠左上。
同传的本质是一个 (source_read, target_written, confidence) -> READ|WRITE 的函数。四种策略,延迟各不相同:
| 策略 | 思路 | 平均滞后 AL |
|---|---|---|
| wait-k | 读 k 个源词后交替 | ≈ k |
| prefix-to-prefix | 保持源/目标前缀比例对齐 | 自适应 |
| confidence-adaptive | 置信度超阈值才 WRITE | 随 skill 下降 |
| MMA | 硬单调注意力对齐 | 可学习 |
可复用点:策略与模型解耦。换策略只改延迟、不动模型,所以部署可以「延迟优先/质量优先」一键切换(configs/latency_first.yaml vs quality_first.yaml)。
- 级联(ASR→MT→TTS):有可查的转写文本,但三级误差会累积、延迟叠加。
- 直通 S2S:语音进语音出,少两级、延迟更低,但丢了转写这一可观测中间态。
工程上二者并存,config.s2s.direct 一行切换。
AL = (1/τ) Σ_i (g_i − (i−1)/γ),StreamLAAL = LAAL × 秒/词。实现放在 latency/lag.py,用策略的 read/write 轨迹直接算,而不是拍脑袋估。
hyp = boost·ref + (1−boost)·noise,相似度 = 余弦。skill=0.5(boost=0)≈随机音色,skill=1.0(boost=1)完全还原说话人。训练信号 skill += lr·(1−skill) 单调趋 1。
# 依赖:无(纯标准库)
# 冒烟自检
python -m simulforge.cli doctor --skill 0.8
# 一次流式同传
python -m simulforge.cli interpret hello-world --speaker-id alice
# 训练 + 基准(看 skill 单调爬升)
python -m simulforge.cli train --steps 24
python -m simulforge.cli bench
# 起 HTTP 服务
python -m simulforge.cli serve --host 0.0.0.0 --port 8432
curl http://127.0.0.1:8432/health
curl -X POST http://127.0.0.1:8432/v1/interpret \
-H 'Content-Type: application/json' \
-d '{"audio_id":"demo","speaker_id":"spk"}'audio chunks ──> VAD ──> streaming ASR ──> streaming MT ──> streaming TTS ──> speech
│ │ │
└─── policy (read/write) 决定何时 commit ────┘
│
LatencyManager (AL / LAAL / StreamLAAL)
| skill | StreamLAAL(s) | quality | similarity | WER | qpl |
|---|---|---|---|---|---|
| 0.500 | 5.400 | 0.2574 | 0.3546 | 0.4000 | 0.0402 |
| 0.625 | 4.750 | 0.4183 | 0.5159 | 0.3000 | 0.0727 |
| 0.750 | 4.100 | 0.5791 | 0.6773 | 0.2000 | 0.1136 |
| 0.875 | 3.450 | 0.7399 | 0.8386 | 0.1000 | 0.1663 |
| 1.000 | 2.800 | 0.9008 | 1.0000 | 0.0000 | 0.2370 |
延迟 5.40→2.80s 单调降、质量 0.257→0.901 单调升、相似度 0.355→1.0 单调升、WER 0.4→0 单调降、qpl 0.040→0.237 单调升。好模型在「质量」和「延迟」两个轴同时变好,而不是用一个换另一个。以上数字为
python -m simulforge.bench实测输出。
simulforge/
audio/ 流式分块、能量 VAD、帧特征(mel/ZCR)、重采样
policy/ wait-k / prefix-to-prefix / adaptive / MMA
cascade/ 流式 ASR -> MT -> TTS 级联
s2s/ 直通 S2S + 说话人嵌入 + 音色克隆
latency/ AL / LAAL / StreamLAAL、commit/revision 记账
eval/ BLEU、GEMBA 式质量、WER、质量-延迟权衡
model/ 确定性可训练 mock 后端(ASR/MT/TTS/S2S)
engine.py SimultaneousEngine 集成入口
serving.py 零依赖 HTTP 服务
cli.py CLI
tests/ 30+ 单元测试
examples/ 8 个可独立运行的示例
docs/ 架构/策略/延迟指标/级联vs直通/音色克隆/基准/API
prompts/ ASR/MT/TTS/策略/评测/音色克隆 提示词模板
recipes/ waitk/adaptive/cascade/direct_s2s/voiceclone 配置配方
MIT