ASR 方案深度调研:高识别率中文语音输入选型

ASR 方案深度调研:高识别率中文语音输入选型


0. 执行摘要

一句话结论:统一走"端上录音 → 上传自有服务端 → 服务端转写 + 服务端韵律提取 → 音频即焚"的管线;转写首选国内云厂商的录音文件识别(阿里云 NLS 或火山引擎豆包大模型版,0.8–2.5 元/小时量级),自托管 SenseVoiceSmall 作为降级与成本兜底;Web Speech API 降级为可选的"零上传"体验而非主通路。

推荐组合:

端 推荐方案 理由
网页端(桌面浏览器) MediaRecorder 录音上传服务端为主;SpeechRecognition 仅作为"音频不出本机"的可选模式保留 Chrome 的 Web Speech 后端是 Google 云端服务(见 1.1),大陆网络下质量/可用性不可控;Safari 支持但有 Siri 依赖与场景限制
Tauri iOS getUserMedia + MediaRecorder 录音(iOS 14.3+ WKWebView 支持),上传自有服务端 Web Speech 在 WKWebView 中不可用(WebKit 官方确认,见 3.1);SFSpeechRecognizer 有 1 分钟硬限制与每日限额,不适合几分钟的讲述(见 3.1)
Tauri Android 同上(WebView 需处理 onPermissionRequest) Android SpeechRecognizer 默认实现"很可能把音频流送到远端服务器",且大陆 ROM 无 GMS 时行为不可控(AOSP 源码注释,见 3.2)
服务端 现有 AsrProvider 可插拔接口接入:首选阿里云 NLS 录音文件识别(SpeechIO 中文榜 CER 3.40%,国内可用性最稳)或火山豆包录音文件识别模型 2.0(0.8 元/小时);并行跑 parselmouth + FFmpeg 韵律提取 见第 2、5 节;韵律旁路与"即焚"纪律完全兼容
降级/兜底 自托管 SenseVoiceSmall(FunASR 或 llama.cpp 单机二进制):中文识别优于 Whisper,自带情感/笑声/叹息等事件标签,CPU 可跑 见 4.1;云端不可用时顶上,也把单价打到近零

成本量级(按 300 DAU、人均 4 分钟/日估算,约 600 转写小时/月):国内云约 480–1,500 元/月;自托管 SenseVoiceSmall 一台 4–8 核 CPU 服务器即可承载(推算过程见 4.5)。境外 API 同等量级约 1,700–2,600 元/月且存在可用性与数据出境问题,不推荐作为主通路。

本调研中最反直觉的三个事实:

  1. Chrome 的"免费"语音识别本质是把麦克风音频流上传到 google.com/speech-api 的未公开服务——Chromium 源码的网络流量注解明确标注数据类型为 USER_CONTENT、目的地 GOOGLE_OWNED_SERVICE(源码)。大陆用户走这条通路,效果差是网络问题而非模型问题。
  2. Web Speech API 在 WKWebView 里根本不存在——即所有 iOS 上的"浏览器"(Chrome iOS、微信内置浏览器)和 Tauri iOS 应用都无法使用;WebKit 工程师在官方 bug 跟踪中确认"SFSafariViewController 与主屏 Web App 均不可用"(WebKit Bug 225298)。
  3. iOS 原生 SFSpeechRecognizer 对单次识别有 1 分钟硬限制,且"语音识别是基于网络的服务",每个设备/每个应用都有每日限额(Apple 官方文档)——哪怕写原生插件也接不住"几分钟的叙事讲述"。

1. 网页端现状与浏览器侧方案

1.1 Web Speech API(SpeechRecognition)支持矩阵与后端真相

Web Speech API 是 W3C 社区组草案(非正式标准),规范见 Web Speech API Editor's Draft;caniuse 数据标记其状态为 unoff(非标准)(caniuse speech-recognition 数据)。2026-10 的支持矩阵:

平台 支持情况 关键限制
Chrome 桌面(Win/macOS/Linux/ChromeOS) ✅ 自 Chrome 25(前缀 webkit),部分属性缺失 后端是 Google 云端服务(下详);必须联网
Edge 桌面 ⚠️ caniuse 标记为"不支持(#3)":API 存在但事件不触发(caniuse 注记 3) 实际 Chromium 系 Edge 多数场景可用,但 caniuse 记录存在例外报告,需实测
Safari 桌面(macOS 11.3+/Safari 14.1+) ⚠️ 前缀、部分支持 需系统开启 Siri 或听写;SpeechGrammar 不支持
iOS Safari(14.5+) ⚠️ 前缀、部分支持 SFSafariViewController、主屏 PWA 均不可用;需开启 Siri(WebKit Bug 225298,WebKit 工程师 Sihui Liu 确认)
Tauri iOS(WKWebView) ❌ 不可用 同上,WKWebView 不在暴露范围内
Android Chrome ✅ 依赖 Google 服务,大陆环境不可用
Firefox 桌面 ❌ 从未发布 仅有 media.webspeech.recognition.enable 实验开关,官方称"权限问题未解决"(caniuse 注记 2)

Chrome 的识别后端:Chromium 源码 network_speech_recognition_engine_impl.cc 写死服务地址 https://www.google.com/speech-api/full-duplex/v1,其网络流量注解原文:"Chrome provides translation from speech audio recorded with a microphone to text, by using the Google speech recognition web service. Audio is sent to Google's servers (upstream) and text is returned (downstream)",数据类别 USER_CONTENT,目的地 GOOGLE_OWNED_SERVICE,最近复核日期 2024-02-21(Chromium 源码)。即:免费、无 SLA、未对第三方开放、音频出境。Chromium 源码树中另有 soda_speech_recognition_engine_impl.cc(Speech On-Device API),但桌面 Chrome 的 Web Speech 路径走网络引擎;ChromeOS/Android 上 SODA 才用于本地听写。

Safari 的后端:Apple 官方未公开,社区一致认为是 Apple 的语音识别服务(与系统听写同源),证据是官方文档要求"Siri 或听写开启"及 supportsOnDeviceRecognition 属性(Apple 文档)。

对本产品的含义:当前 src/ui/VoiceInput.tsx 通路 1(SpeechRecognition)在桌面 Chrome 上把音频直送 Google,大陆用户体验取决于网络;这解释了"效果差"。该通路可作为隐私卖点保留(用户可选"零上传"模式),但不应是主通路。

1.2 浏览器本地推理(WASM)现状

方案 官方数据 官方 Demo 结论
whisper.cpp WASM 现代 CPU 浏览器上 tiny/base 模型约 2–3 倍实时(60 秒音频约 20–30 秒);最大只支持到 small 模型;音频上限 120 秒;tiny 模型 74MB(官方 README) ggml.ai/whisper.cpp tiny/base 的中文 CER 达不到"高识别率"要求;small 级在浏览器里延迟不可接受。仅适合离线兜底
sherpa-onnx WASM 官方提供 WebAssembly 构建与 Colab 教程;HuggingFace 上有官方 Spaces demo:英语 Zipformer、中英 Zipformer、中英 Paraformer、中英粤 Paraformer(官方文档) HuggingFace Spaces(文档内链接) 中文流式模型在浏览器可行,但模型下载量大(百 MB 级)、无官方中文准确率基准;适合作为技术储备
onnxruntime-web 支持 webgl/webgpu/webnn 执行后端 + WASM CPU;官方定位浏览器端 ML 推理(官方教程) 官方 examples 仓库 推理框架本身成熟,但"在浏览器跑 large-v3 级中文模型"没有官方 benchmark;WebGPU 在 Safari 上长期缺席,覆盖率仍是问题

结论:浏览器本地推理对"几分钟中文口语 + 高识别率"的组合不达标——能跑动的模型(tiny/base)中文识别率不够,识别率够的模型(large-v3 1.5GB+)下载与延迟都过不了产品关。WebGPU/WebNN 加速仍在推进,2026 年不具备全量用户覆盖条件。不推荐作为主通路。


2. 云端中文 ASR API 横向对比

2.1 中文普通话识别率:第三方基准

厂商宣传口径("准确率 98%"类)不可横向比较,本调研以 SpeechColab 维护的 SpeechIO Leaderboard 为第三方基准:46 组中文真实场景测试集(新闻联播、访谈、播客、演讲、直播、相声、方言电影等,由专业标注团队转写),2025.01 结果(SpeechIO Leaderboard):

排名 引擎 公开集 CER(ZH00001–26) 全量 CER(含未公开集)
1 Azure Batch(微软) 1.95% 2.99%
2 喜马拉雅 API 1.72% 3.35%
3 阿里云录音文件识别 1.80% 3.40%
4 讯飞语音转写(lfasr) 3.01% 4.80%
5 腾讯云 3.20% 4.64%
6 思必驰 3.61% 5.75%
7 百度(极速版) 7.30% 10.10%

与本产品场景最贴近的是播客/访谈/演讲类子集(如"故事FM"播客 4.5h、"鲁豫有约"访谈 3h):各引擎在这些口语集上的 CER 大致落在 2%–6% 区间(逐测试集结果)。注意:榜单未覆盖火山引擎(字节),且自 2025 年起各厂相继发布"大模型版"识别(见 2.2),榜单数字可能已偏保守——建议选型时用我们自己的讲述样本做一次小规模盲测。

阿里云官方的 SenseVoice 论文(阿里通义)报告 SenseVoice-Small 在 AISHELL-1/AISHELL-2/WenetSpeech 等中文集上识别率优于 Whisper-Small(arXiv:2407.04051,SenseVoice README 基准图),可作开源侧参照。

2.2 逐家详述

价格均为 2026-10-04 官方页面抓取。换算基准:1 小时 = 60 分钟。

阿里云 NLS(智能语音交互)

火山引擎(字节跳动,豆包语音)

腾讯云 ASR

讯飞开放平台(iFLYTEK)

百度智能云

OpenAI(GPT-4o transcribe 等)

Groq(Whisper 托管)

Deepgram

AssemblyAI

2.3 横向对比表(录音文件转写,中文普通话)

厂商 后付费单价 资源包低价 免费额度 第三方中文 CER(SpeechIO 2025.01) 单文件上限 时间戳/说话人 境内合规 情绪/韵律附加
阿里云 NLS 2.50 元/h 1.00 元/h(2 万 h 包) 3 个月试用 3.40%(#3) 512MB/12h 词级时间戳;说话人分离(FAQ) ✅ —(百炼另有模型)
火山引擎豆包 0.80 元/h(大模型 2.0) 0.67 元/h 新应用试用额度 未收录 异步队列 视版本 ✅ —
腾讯云 1.75 元/h;大模型 2.0 版 0.8 元/h 0.72 元/h 10 h/月 4.64% 极速版 100MB/2h 支持 ✅ 情绪识别增值 0.85 元/h、角色分离
讯飞 约 2.0–2.48 元/h(套餐) 1.2 元/h(30 万 h 包) 企业 50 h/年 4.80% 500MB/5h 时间戳 ✅ 方言最强(202 种)
百度 2.00 元/h 1.2 元/h(1000h 包) 10 万次短语音 10.10% — 支持 ✅ —
OpenAI gpt-4o-transcribe ≈2.16 元/h — — 英文强,中文无第三方基准 25MB word 级 ❌ 数据出境 ❌
Groq whisper-large-v3 ≈0.80 元/h — 有限免费层 自报 WER 10.3%(英文) 25/100MB segment/word ❌ ❌
Deepgram Nova-3 ≈1.7–4.0 元/h $200 额度 同上 中文支持,无第三方基准 — 含说话人分离 ❌ Audio Intelligence(情感/意图)
AssemblyAI ≈1.1–1.5 元/h — — 中文含于 99 语种 — 含 ❌ 情感分析

读表结论:

  1. 境内四家(阿里/火山/腾讯/讯飞)在可用性、合规、单价三个维度全面优于境外四家;百度的识别率在第三方基准上掉队。
  2. 阿里云是"识别率 × 工程成熟度"的最稳选择;火山大模型版是"单价最低 × 大厂背书"的高性价比选择;腾讯云附带唯一的云侧情绪识别增值,但韵律连续特征仍需旁路。
  3. 境外 API 只在一种情况下有意义:开发期做对照基准,或未来出海版本复用同一 AsrProvider 接口。

2.4 数据合规要点


3. Tauri iOS/Android 原生通路

3.1 iOS:SFSpeechRecognizer 能力与边界

Apple 官方文档(SFSpeechRecognizer,DocC 数据)明确:

Web 侧能不能直接用:不能。WebKit 工程师在官方 bug 跟踪中确认 SpeechRecognition API 在 SFSafariViewController 与主屏 Web App(PWA)中不可用(WebKit Bug 225298);Tauri iOS 使用 WKWebView,属同一未暴露范围。

如果非要原生插件:Tauri 2 插件可包含 Swift Package(官方插件开发文档),写一个 SFSpeechRecognizer 插件工作量约数百行 Swift,但 1 分钟限制与每日限额使其不适合做主通路。

3.2 Android:SpeechRecognizer 能力与边界

AOSP 源码 SpeechRecognizer.java 的类注释(源码)原文:

"The implementation of this API is likely to stream audio to remote servers to perform speech recognition. As such this API is not intended to be used for continuous recognition..."

3.3 Tauri 2 插件机制与社区现状

3.4 移动端录音的现实:getUserMedia / MediaRecorder

本节结论:Tauri 手机端的正确通路是 Web 层 getUserMedia + MediaRecorder 录音 → 上传自有服务端,与网页端完全共用代码与服务端管线;原生 STT 插件只在"未来要做离线模式"时才值得投入。


4. 自托管开源模型

4.1 SenseVoice(阿里 FunAudioLLM,重点推荐)

4.2 Paraformer(阿里)

非自回归工业级中文 ASR(FunASR 生态默认中文模型),SenseVoice 的同门前辈;阿里云百炼把它作为 API 出售(0.288 元/小时,见 2.2),模型本身在 ModelScope 开源(模型页)。长音频需配 VAD。若自托管,优先考虑 SenseVoiceSmall(同生态、多情感事件输出、更快)。

4.3 Whisper large-v3 / faster-whisper / whisper.cpp

4.4 sherpa-onnx 端侧部署

k2-fsa/sherpa-onnx:ONNX Runtime 驱动的离线 ASR,支持 Zipformer/Paraformer/SenseVoice/Whisper 等模型,覆盖 iOS/Android/树莓派/桌面,WASM 版见 1.2。移动端"录音 + 端侧转写 + 只上传文本"的极端隐私模式可以用它实现,代价是 App 包体增加数百 MB(模型文件)——建议作为二期选项。

4.5 自托管成本估算(与 2.3 对照)

量级假设:300 DAU × 4 分钟/日 ≈ 600 转写小时/月。


5. 韵律特征旁路

需求回顾(ADR-0004):语速、停顿分布、音高变化范围、能量、填充词频率、情绪唤醒度、笑/叹息等副语言信号;存储为不可逆统计向量,不含声纹。

5.1 端上提取(Web Audio API / 原生)

5.2 服务端提取

5.3 与"即焚"纪律的兼容设计

  1. 服务端接收音频后全程内存处理:解码(FFmpeg 管道)→ 分支 A 送 ASR、分支 B 送韵律提取 → 汇总(文本 + 统计向量)→ 释放缓冲,任何环节不落盘(含临时文件用 tmpfs/内存管道)。
  2. 特征只存聚合统计量(均值/方差/分位数/时长比),不存音高轮廓原始序列——音高随时间的曲线具有个体可辨识性,聚合后即不可逆。
  3. 转写文本与特征的关联通过讲述事件 ID,音频本身无 ID、无日志留存。
  4. 拒绝任何"声纹/说话人身份"类输出:说话人分离(diarization)与声纹识别(speaker verification)在本产品是明确禁区——注意阿里/腾讯的说话人分离参数不要开启(单用户讲述场景本来也不需要)。

6. 推荐架构

6.1 总体:一条管线,两个端复用

[网页端 / Tauri iOS / Tauri Android]
        │  getUserMedia + MediaRecorder(用户手势启动)
        │  录音 blob(webm/opus 或 mp4/aac,视平台)
        ▼
[自有服务端 Hono]  POST /api/asr(沿用现有路由与 AsrProvider 接口)
        │  ① FFmpeg 转码:16kHz mono PCM(全程内存管道)
        ├─②a ASR 分支:AsrProvider.transcribe()
        │      主:阿里云 NLS 录音文件识别 / 火山豆包大模型(可配置切换)
        │      备:自托管 SenseVoiceSmall(FunASR / llama.cpp)
        ├─②b 韵律分支:FFmpeg silencedetect + ebur128(停顿/能量)
        │      + parselmouth(音高统计)[+ SenseVoice 情感/事件标签]
        │  ③ 结果聚合 → { transcript, prosody_stats, emo_tags }
        │  ④ 音频缓冲立即释放(即焚);结果按 ADR-0004 落库
        ▼
[可编辑文本框回填](沿用 VoiceInput 的"确认后才提交"UX)

6.2 网页端

6.3 Tauri 手机端

6.4 服务端接入要点


7. 风险与开放问题

  1. 厂商"用客户音频训练"条款:各家默认承诺不一(尤其免费额度阶段),开通时须逐家确认数据处理协议并留存;免费档通常允许改进模型,付费/企业档可关闭——需要商务确认(待办,未在本次调研逐家抓取协议原文)。
  2. 榜单时效:SpeechIO 数据为 2025.01,火山缺席、各厂"大模型版"未覆盖;必须用自有讲述样本(情感化口语、随意语法)做一次 4 家盲测再最终定主 provider(建议样本 ≥30 分钟)。
  3. Web Speech 国内实测:Chrome 走 Google 服务的实际可达性与识别质量需在我们目标网络环境实测;Safari 桌面端"零上传"模式需验证 Siri 未开启时的失败提示文案。
  4. Tauri Android 麦克风授权链:WebView onPermissionRequest 在 Tauri 2 的默认实现是否直通 Android 运行时权限,需要真机验证(华为/小米/OPPO 各一)。
  5. SenseVoice 情感标签效度:七类情感与"情绪唤醒度"的映射关系需要心理学顾问校准;笑/叹息事件可先从 AED 标签直接采用。
  6. 方言/口音:默认"普通话 + 轻度口音"假设;重度方言用户(粤语等)在讯飞上体验最好,可作为后期 provider 策略维度(讯飞免费企业包 50h/年可作补充通道)。
  7. 成本临界点:DAU 涨到数千时,自托管比重上升(云约 0.7–2.5 元/h vs 自托管接近电费);AsrProvider 抽象保证切换成本可控。
  8. openSMILE 许可:开源版禁商用,已排除;若未来需要 GeMAPS 标准特征集,要么买商业许可,要么用 parselmouth 复现核心 LLD。
  9. 即焚的审计:建议加一条服务端日志规范——只记录"转写时长、耗时、特征维度数"等元数据,绝不记录音频哈希之外的可回放标识。
  10. iOS 录音中断:来电/锁屏导致的 MediaRecorder 停止需前端兜底(现状 onstop 已处理 blob 收尾,验证中断时 blob 完整性即可)。

附录:来源清单(按章节)

浏览器侧

云端 ASR

Tauri 移动端

自托管开源模型

韵律特征