【免费下载链接】CrispASR
C++ ggml runtime hub for multilingual ASR and TTS models: Cohere Transcribe, Parakeet TDT, Voxtral, Canary 1B v2, etc, plus universal forced alignment, and more
CrispASR 是一个 C++ 的 ggml 运行时框架,除了语音识别(ASR)之外,还内置了一整套文本翻译与后处理引擎:支持 m2m100 和 MarianMT(Opus-MT)机器翻译、标点符号恢复(punctuation restoration),以及真值大写(truecasing,自动还原文本的正确大小写)。无论你想把德语会议录音实时翻译成英文,还是把没有标点、全小写的识别结果整理成规范文本,都可以在这一个工具里完成。
三大后处理能力速览
CrispASR 的翻译与后处理由三个独立模块组成,可以单独使用,也可以组合成完整流水线:
| 能力 | 引擎 | 输入 → 输出 | 典型用途 |
|---|---|---|---|
| 🌐 机器翻译 | m2m100 / MarianMT(Opus-MT) / WMT21 / MADLAD-400 | 任意语言文本 → 目标语言文本 | 跨语言转录、实时同传 |
| ✍️ 标点恢复 | FireRedPunc / Fullstop / Punctuate-all / PCS | 无标点文本 → 带标点的句子 | 清理 ASR 原始输出 |
| 🔠 真值大写 | Truecaser(LSTM / CRF 两种) | 全小写文本 → 正确大小写 | 德语专有名词、句首大写 |
💡 小提示:这三个能力在源码中分别位于 src/m2m100.cpp、crisp_punc/ 和 crisp_truecase/ 目录下,都是 GGUF 模型驱动,一次加载、反复调用。
快速上手:m2m100 文本到文本翻译
m2m100 是最通用的翻译后端,一个模型支持100 种语言任意互译。核心用法只需要四个参数:--backend、--text、-sl(源语言)、-tl(目标语言):
# 英文 → 德文(模型自动下载约 502 MB Q8_0) ./build/bin/crispasr --backend m2m100 -m auto \ --text "Hello world, how are you today?" \ -sl en -tl de # → Hallo Welt, wie bist du heute?翻译引擎的核心 API 只有几个函数:加载模型m2m100_init_from_file、执行翻译m2m100_translate,接口定义见 src/m2m100.h。
如何选择源/目标语言
-sl/-tl使用ISO-639-1 语言代码(en、de、fr、ja…)- 想支持哪些语言?运行时可以查询:
m2m100_n_languages()返回数量,m2m100_language()逐个取出 - 默认 beam size 为 5(与模型仓库的 generation_config 一致),设置
--beam-size 1即为贪心解码,速度最快
MarianMT / Opus-MT:轻量单语对翻译器
如果你只需要某一个固定方向的翻译,MarianMT(别名 Opus-MT)是更轻量的选择:
- 架构:MarianMT 6 层 encoder + 6 层 decoder,参数量约 75M,Q8_0 量化后仅84 MB
- 覆盖 24 个方向:德英、法德、法英、阿德、阿英、意德、意英、西德、西英、希伯来语、土耳其语等
- 官方文档说明见 docs/cli.md 的「Text-to-text translate」一节
# 德文 → 英文(单语对模型:-sl/-tl 必须匹配模型自带方向) ./build/bin/crispasr --backend marian -m auto \ --text "Die Konferenz findet am 3. Oktober in Berlin statt." \ -sl de -tl en⚠️ 单语对模型每个 checkpoint 只认一个方向,请求其他方向时会给出警告并忽略。MarianMT 的 GGUF 由 models/convert-marian-to-gguf.py 转换生成,与 m2m100 共享同一套运行时(post-norm 层、Marian 位置编码、SentencePiece 分词器均由 GGUF 元数据自动选择)。
四大翻译后端怎么选?
| 后端 | 模型 | 语言覆盖 | 特点 |
|---|---|---|---|
m2m100 | m2m100_418M | 100 种,任意互译 | 通用首选,生产就绪 |
m2m100-wmt21 | wmt21-dense-24-wide | 英语 ↔ 7 种语言 | 更宽更深(24L),单向需两个 checkpoint |
marian | opus-mt-* | 24 个固定方向 | 最小最快,~84 MB |
madlad | madlad400-3b-mt | 419 种语言 | T5 架构,长尾语言覆盖最广 |
标点恢复:让 ASR 输出"说人话"
很多 ASR 模型(包括 CrispASR 支持的大部分后端)输出的是不带标点的连续文本。--punc-model参数可以挂一个标点恢复模型,逐段修复:
crispasr -m auto -f meeting.wav --punc-model auto别名到具体模型的映射规则定义在 src/crispasr_punc_model.h,CLI、HTTP 服务器、C-ABI 三层共用同一套解析,保证行为一致:
| 参数值 | 模型 | 语言 | 说明 |
|---|---|---|---|
auto/firered | FireRedPunc(BERT) | 中、英 | 默认选项,中文场景首选 |
fullstop | Fullstop Punctuation Multilang(XLM-R) | 英、德、法、意 | 多语言句末标点 |
punctuate-all | Punctuate-all(XLM-R) | 13 种欧洲语言 | 覆盖最广的欧洲语系 |
pcs | PCS(XLM-R) | 多语言 | 一次完成标点 + 大写 + 分句 |
| 自定义路径 | 任意 GGUF | — | 指向本地.gguf文件 |
模型说明文档可参考 hf_readmes/fireredpunc-GGUF.md、hf_readmes/fullstop-punc-multilang-GGUF.md 和 hf_readmes/punctuate-all-GGUF.md。
两个工程细节值得知道:
--punc-model支持首次使用自动下载:解析出 URL 后走缓存机制,不需要手动管理模型文件- 与
--strict-pipeline搭配:strict 模式下,你显式声明的标点阶段如果加载失败会直接报错,而不是静默跳过
🔍 想彻底关掉标点?用
--no-punctuation。对 canary/cohere 这类原生带标点的后端,这会关闭其内置标点;对其他后端则跳过全部后处理。
真值大写(Truecasing):自动还原正确大小写
全小写的文本读起来像"机器人写的"——句首该大写的没大写,德语名词首字母也全错了。--truecase-model挂一个统计型 Truecaser 模型即可修复:
# auto = 德语模型;也可以传本地 .bin 路径 crispasr -m auto -f talk.wav --truecase-model autoTruecaser 有两套实现,接口都在 crisp_truecase/ 目录:
- LSTM 版(crisp_truecase/src/truecaser_lstm.cpp):经典统计模型,加载
.bin格式 - CRF 版(crisp_truecase/src/truecaser_crf.cpp):条件随机场模型,对上下文依赖更强的语言效果更好
C API 层面各暴露了init / process / free三个函数(如truecaser_process,见 src/truecaser.h),Go、Rust、Java 等语言绑定都可以直接调用。模型转换脚本为 models/convert-lstm-truecaser-to-bin.py。
组合拳:实时边说边翻译
把识别器 + 文本翻译器组合起来,--live-translate实现了逐句实时翻译:识别器每提交一句,翻译器立刻翻好输出:
# 麦克风输入:德语说话 → 英文逐句输出 crispasr --live-translate -l de --tr-tl en \ -m auto --backend parakeet --translate-model hy-mt2常用组合参数:
| 参数 | 作用 |
|---|---|
--translate-model | 选翻译器:auto=m2m100-418M,opus-mt-de-en=最快,hy-mt2=LLM |
--translate-backend | 指定引擎类型:m2m100/marian/madlad/llm |
--translate-beam | beam 宽度,默认 1(贪心);beam 4 精度更高但慢约 9 倍 |
--translate-revise | 慢速精翻通道:整段完成后用 LLM 重译一遍,替换快速译文 |
--no-translate-drafts | 只翻译已定稿的句子,不翻正在说的半句 |
完整参数表见 docs/cli.md 的「Live transcribe + translate」章节,机制细节见 docs/streaming.md。
后处理执行顺序与 API 入口
如果你通过 C API 集成,需要知道标点模型在分段合并之后、结果返回之前应用,CLI 与 API 的顺序严格一致(见 src/crispasr_c_api.cpp 中apply_session_punc_model的调用位置):
音频 → 识别器 → 分段合并(merge_segments) → 标点恢复(--punc-model) → 真值大写(--truecase-model) → 输出关键 API 一览:
crispasr_session_translate_text(s, text, src_lang, tgt_lang, max_tokens)— 对任意文本执行 m2m100/MarianMT 翻译(src/crispasr_c_api.cpp)crispasr_punc_init(model)— 独立加载标点模型,一次加载、对任意文本反复调用crispasr_session_set_translate(s, enable)— 切换 whisper 系后端的音频侧翻译
常见问题 FAQ
Q1:翻译结果和 Hugging Face 参考不一致?m2m100 的 en→de 已验证与 Python 参考逐 token 精确一致;MarianMT F16 下 greedy 与 beam 4 均与 HF 完全一致,Q8_0 量化下有极少量差异(12/14 逐 token 匹配)。量化版换一点精度换体积,是合理取舍。
Q2:中文场景标点用哪个模型?用--punc-model auto(即 FireRedPunc)。它是 BERT 架构,中英双语;fullstop和punctuate-all面向欧洲语言。
Q3:--translate(音频侧)和--backend m2m100(文本侧)有什么区别?前者让识别器本身直接输出英文(whisper/canary 等,一条路径);后者是独立的文本到文本翻译,可以对任意文本(不一定是 ASR 输出)翻译。
Q4:模型文件从哪来?所有别名(auto、firered、pcs等)首次使用时自动下载到缓存目录;也可以自行转换,转换脚本集中在 models/ 目录(convert-m2m100-to-gguf.py、convert-marian-to-gguf.py、convert-fireredpunc-to-gguf.py等)。
小结
CrispASR 的翻译与后处理引擎把三件"语音助手最后一公里"的事做成了开箱即用的 CLI 参数和 C API:
- 翻译:m2m100 百语通用、MarianMT 轻量单方向、WMT21 高质量、MADLAD-400 超长尾,四选一
- 标点恢复:
--punc-model一个参数,中文选 FireRedPunc,欧洲语言选 fullstop / punctuate-all,一步到位选 PCS - 真值大写:
--truecase-model还原句首和专有名词大写
配合--live-translate,你还能把它们串成"说一句话、立刻看到另一语言的标准文本"的实时流水线——这就是一个 ggml 运行时框架能做到的完整度。
【免费下载链接】CrispASR
C++ ggml runtime hub for multilingual ASR and TTS models: Cohere Transcribe, Parakeet TDT, Voxtral, Canary 1B v2, etc, plus universal forced alignment, and more
相关推荐
Sonic vs 其他语音变速工具:为什么它是开源项目的最佳选择
Sonic vs 其他语音变速工具:为什么它是开源项目的最佳选择 在数字音频处理领域,语音变速工具扮演着越来越重要的角色。无论是播客制作、语言学习还是无障碍辅助
终极开源翻译引擎:离线多语言翻译完整指南
终极开源翻译引擎:离线多语言翻译完整指南 Argos Translate是一个基于Python开发的开源离线翻译引擎,支持40多种语言互译,提供完全本地化的翻译
人工智能NLP本地部署CTranslate2:高性能的机器翻译引擎
CTranslate2:高性能的机器翻译引擎 是一个开源的、高效的神经机器翻译(Neural Machine Translation, NMT)库,由 Open
推理引擎模型量化模型优化NLP
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考