Fun-ASR 在中文普通话任务准确率超越 Whisper-small 近 5 个百分点
在智能语音技术快速发展的背景下,语音识别正从'能听清'向'听得准、理解对'演进。尤其在中文场景下,用户对识别精度的要求日益提高,通用大模型如 Whisper 在面对中文普通话的复杂语境时,仍常出现术语不准、数字混乱等问题。
由钉钉联合通义实验室推出的 Fun-ASR 系统是一款专为中文优化的轻量级端到端语音识别系统,在多个标准测试集上实现了相较 Whisper-small 接近 5 个百分点的准确率提升。这标志着语音识别正从'通用可用'走向'垂直精准'。
为什么 Fun-ASR 能在中文任务上胜出?
通用模型设计目标是覆盖多种语言,中文只是其中之一,因此对汉语特有的构词方式、数字表达等缺乏深度建模。Fun-ASR 从底层做了针对性改进:
- 子词切分策略重构:采用更适合中文构词规律的 BPE 变体,减少错误切分;
- 声学 - 语言联合建模增强:预训练阶段引入大量真实中文语料,熟悉实际发音模式;
- 本地化后处理内置化:将 ITN(逆文本归一化)直接集成进推理流程,输出即标准化结果。
实测数据显示,在包含教育、医疗、金融等领域的混合测试集中,Fun-ASR-Nano-2512 的 WER(词错误率)仅为 8.7%,而 Whisper-small 在相同条件下达到 13.5% —— 差距接近 4.8 个百分点,尤其在数字、专有名词识别上的提升最为显著。
不只是模型:一套真正可用的语音识别解决方案
高准确率的 ASR 模型离落地应用还有距离。Fun-ASR 的最小版本 Fun-ASR-Nano-2512 集成了多项工程级功能:
热词增强机制
在企业场景中,'热词'往往是决定识别成败的关键。Fun-ASR 支持动态注入热词列表,并通过注意力引导机制提升相关词汇的优先级。
result = model.generate(
audio_file="meeting.mp3",
hotwords=["开放时间", "营业时间", "客服电话"],
itn=True,
lang="zh"
)
开发者只需传入字符串列表即可生效,无需重新训练或微调模型。
内置 ITN 文本规整
Fun-ASR 内置了强大的 ITN 模块,能够自动完成以下转换:
- 数字规整:
两百三十四→234 - 日期标准化:
二零二五年春节→2025 年春节 - 单位统一:
五点五千克→5.5kg - 缩写还原:
WIFI→Wi-Fi
这一切都在推理过程中同步完成,用户可以直接获取清洁文本。
VAD 辅助分割
传统 ASR 模型在处理超过 10 分钟的音频时常出现内存溢出或识别质量下降的问题。Fun-ASR 通过集成 Voice Activity Detection(VAD)模块,先将长录音按语句片段切分,再逐段识别,最后拼接结果。这种方法不仅提升了稳定性,还带来了额外好处:静音段被自动跳过,整体处理速度更快。
实时流式体验是如何实现的?
尽管当前版本的 Fun-ASR 模型本身不支持增量流式解码,但系统通过巧妙设计模拟出了接近实时的交互效果。
其核心思路是:前端采集 + VAD 触发 + 快速识别 + 结果拼接
具体流程如下:
- 浏览器通过 Web Audio API 获取麦克风流;
- 使用
MediaRecorder实时捕获音频 chunk; - 当检测到语音活动(VAD 触发)时,立即封装成 WAV 文件发送至后端;
- 后端调用 ASR 模型进行快速识别;
- 将每次识别的部分结果返回前端并追加显示。
mediaRecorder.ondataavailable = event => { audioChunks.push(event.data); };
mediaRecorder.onstop = () => {
const audioBlob = new Blob(audioChunks, { type: 'audio/wav' });
sendToServer(audioBlob);
audioChunks = [];
};
虽然这不是严格意义上的流式模型,但在实际体验中,从说话结束到文字呈现的延迟可控制在 300ms 以内(GPU 环境下),足以满足会议字幕、语音笔记等准实时场景的需求。
批量处理与历史管理
Fun-ASR 提供了图形化的 WebUI 界面,支持拖拽上传多个文件,并统一配置语言、是否启用 ITN、热词列表等参数。系统会将任务加入异步队列,依次执行识别,并将每条记录存入本地 SQLite 数据库(history.db)。
def batch_transcribe(file_list, config):
results = []
for idx, file in enumerate(file_list):
print(f"Processing {idx+1}/{len(file_list)}: {file}")
try:
result = asr_model.generate(
audio_file=file,
hotwords=config['hotwords'],
itn=config['itn'],
lang=config['lang']
)
results.append({
"filename": file,
"text": result["text"],
"normalized": result.get("normalized"),
"status": "success"
})
except Exception as e:
results.append({
"filename": file,
"error": str(e),
"status": "failed"
})
return results
这套机制背后有几个关键设计考量:
- 进度可视化:实时显示处理进度条、当前文件名及耗时统计;
- 失败隔离机制:单个文件出错不影响整个批次,便于排查问题;
- 结果导出灵活:支持 CSV 和 JSON 格式下载,方便对接 BI 工具或归档系统;
- 数据库持久化:所有历史记录保存在
webui/data/history.db,支持搜索与定期备份。
建议用户每批控制在 50 个文件以内,避免内存压力过大。对于超长音频(>10 分钟),建议提前使用工具分割,以提升识别成功率。
此外,长时间运行可能导致 GPU 缓存堆积,系统已在 WebUI 中提供'清理 GPU 缓存'按钮,一键释放资源,保障服务稳定性。
部署灵活,适配多种环境
Fun-ASR 的一大亮点是极强的部署适应性。它支持 CPU、GPU 和 Apple MPS 多种计算后端,无需依赖特定硬件即可运行。
启动脚本示例如下:
#!/bin/bash
export CUDA_VISIBLE_DEVICES=0
python app.py \
--model-path models/funasr_nano_2512 \
--device cuda:0 \
--port 7860 \
--host 0.0.0.0
你可以根据设备情况自由切换:
- 在高性能服务器上使用 GPU 加速,单文件识别速度可达 0.3x 实时;
- 在普通笔记本电脑上启用 CPU 模式,虽速度稍慢(约 1.2x 实时),但仍可流畅使用;
- 在 M1/M2 Mac 上利用 MPS 后端,实现接近 GPU 的性能表现。
系统架构采用前后端分离设计:
[客户端浏览器] ↓ HTTPS [Flask/FastAPI 后端服务] ↓ [Fun-ASR 模型引擎] ← [GPU/CPU 计算资源] ↓ [SQLite 历史数据库] + [日志与缓存文件]
支持三种运行模式:
- 本地模式:仅限 localhost 访问,适合调试;
- 局域网模式:通过服务器 IP 暴露服务,团队共享使用;
- 远程部署模式:结合 Nginx 反向代理与 HTTPS 加密,实现公网安全访问。
它能解决哪些真实痛点?
| 实际痛点 | Fun-ASR 解决方案 |
|---|---|
| 专业术语识别不准 | 通过热词列表增强,提高关键词权重 |
| 数字日期口语化难读 | 启用 ITN 自动规整为标准格式 |
| 长音频识别卡顿 | 使用 VAD 分割为短片段处理 |
| 多人协作缺乏统一平台 | 提供 WebUI 支持多人并发访问 |
| GPU 内存不足崩溃 | 提供 CPU 模式切换与缓存清理选项 |
在实际客户反馈中,某在线教育公司曾因课程录音中的编号频繁被误识,导致知识点索引失效。接入 Fun-ASR 并启用 ITN 后,数字识别准确率显著提升。
另一个案例来自医疗机构,医生口述病历时常夹杂英文缩写和剂量单位。通过添加热词和启用单位规整,系统成功将关键信息提取完整度提升了 40% 以上。
总结
Fun-ASR 的意义在于不再盲目追求模型尺寸,而是聚焦于场景适配性、功能完整性与工程可用性。无论是生成会议纪要、分析客服录音、转写教学视频,还是归档医疗问诊,它都能以轻量化的方式提供高精度服务。

