FunASR 开源语音识别框架

💡 核心定位

FunASR 是阿里达摩院开源的语音识别工具框架,不是单个模型,而是一个包含多个 ASR 模型和配套组件的完整工具箱。


一、FunASR 与 Paraformer 的关系

1.1 概念辨析

FunASR(框架/工具箱)
  ├── Paraformer-zh          → 中文离线语音识别(大文件转写)
  ├── Paraformer-zh-streaming → 中文实时流式识别(对应云端 paraformer-realtime-v2)
  ├── SenseVoice-Small        → 多语种识别 + 情感/事件检测
  ├── FSMN-VAD                → 语音端点检测(判断何时开始/停止说话)
  ├── CT-Transformer          → 标点恢复(给识别结果加标点)
  ├── CT-Punc                 → 标点预测(轻量版)
  └── ... 其他组件

关键区分:

名词 指什么
FunASR 开源框架(GitHub: modelscope/FunASR)
Paraformer FunASR 中的一个 ASR 模型(非自回归端到端)
paraformer-realtime-v2 阿里云百炼上 Paraformer 的实时流式版本(商业服务)
paraformer-v1 阿里云百炼上 Paraformer 的离线文件转写版本(商业服务)

简单说:Paraformer 是 FunASR 框架里的核心 ASR 模型,阿里云百炼的 paraformer-realtime-v2 就是 Paraformer 的云端商业托管版。

1.2 开源版 vs 云端版

维度 FunASR 开源版 阿里云百炼云端版
模型架构 相同 相同
模型权重 开源发布(同一套训练) 同源,可能有量化优化
识别效果 基本一致 基本一致
热词支持 ✅ 支持 ✅ 支持
流式识别 ✅ paraformer-zh-streaming ✅ paraformer-realtime-v2
VAD ✅ FSMN-VAD(内置) 云端内置
标点恢复 ✅ CT-Transformer 云端内置
部署方式 自己服务器 无需部署,API 调用
费用 零 API 费(自有算力) 0.00024 元/秒
并发能力 取决于自己的 GPU 阿里云弹性伸缩
维护责任 自己维护 阿里云运维
数据隐私 数据不出本地 数据经过阿里云
方言支持 需自行配置 开箱即用

二、安装与部署

2.1 环境要求

资源 最低要求 推荐配置
CPU 4 核 8 核+
内存 8 GB 16 GB+
GPU 可选(CPU 也能跑,但慢) NVIDIA T4/A10/V100
显存 ~2 GB(Paraformer-zh) 4 GB+(含 VAD+标点)
磁盘 ~3 GB(模型文件) 10 GB+
Python 3.8+ 3.10
OS Linux(推荐)/ Windows / macOS Ubuntu 22.04

2.2 安装

# 安装 FunASR(含 PyTorch)
pip install funasr

# 如果已有 PyTorch,只装 FunASR
pip install funasr --no-deps

# 安装模型scope(用于下载模型)
pip install modelscope

2.3 离线识别(大文件转写)

from funasr import AutoModel

# 加载 Paraformer 中文离线模型(自动下载)
model = AutoModel(
    model="paraformer-zh",
    vad_model="fsmn-vad",         # 语音端点检测
    punc_model="ct-punc",         # 标点恢复
    # device="cuda:0",             # 指定 GPU(默认自动选择)
)

# 识别音频文件
result = model.generate(input="audio.wav")
print(result[0]["text"])
# 输出:带标点的完整文本

2.4 实时流式识别(对应云端 paraformer-realtime-v2)

from funasr import AutoModel

# 加载流式模型
model = AutoModel(
    model="paraformer-zh-streaming",
    vad_model="fsmn-vad",
    punc_model="ct-punc",
)

# 流式识别(逐 chunk 送入)
import soundfile
speech, sample_rate = soundfile.read("audio.wav")

# 模拟流式输入(每次送 10 秒)
chunk_size = [0, 10, 5]  # [左看秒数, 右看秒数, 步长]
encoder_chunk_look_back = 4
decoder_chunk_look_back = 1

result = model.generate(
    input=audio_data,
    chunk_size=chunk_size,
    encoder_chunk_look_back=encoder_chunk_look_back,
    decoder_chunk_look_back=decoder_chunk_look_back,
)
print(result[0]["text"])

2.5 SenseVoice(多语种 + 情感检测)

from funasr import AutoModel

model = AutoModel(
    model="iic/SenseVoiceSmall",
    vad_model="fsmn-vad",
    punc_model="ct-punc",
    # spk_model="cam++",  # 可选:说话人分离
)

result = model.generate(input="audio.wav")
# 输出包含:文本 + 情感标签(happy/sad/angry/neutral)+ 事件标记

三、热词功能

3.1 开源版热词用法

FunASR 开源版同样支持热词,通过 hotword 参数传入:

from funasr import AutoModel

model = AutoModel(
    model="paraformer-zh",
    vad_model="fsmn-vad",
    punc_model="ct-punc",
    hotword="海启星:5 龘思:4 外业通:4 天文潮:3",  # 格式:词:权重,空格分隔
)

result = model.generate(input="audio.wav")

3.2 热词格式

# 格式:词语:权重,多个词用空格分隔
hotword="海启星:5 龘思:4 外业通:4 智数通:4 培训通:3"

权重含义与云端版一致(1~5,越大越优先)。

3.3 开源版 vs 云端版热词对比

维度 FunASR 开源版 阿里云百炼云端版
传递方式 每次推理时传 hotword 字符串 预编译(传 ID)或即时(传字典)
持久化 不持久化(每次调用都传) 预编译热词持久化在云端
管理接口 无(代码里直接写) VocabularyService API
效果 相同 相同

四、与本项目当前方案的对比

4.1 当前使用情况

子系统 当前 ASR 方案 是否 FunASR
ping_04 阿里云 paraformer-realtime-v2(云端 API) 是(云端托管版)
hqxbot 阿里云 paraformer-v1(云端 API) 是(云端托管版)
HXXedge 2.1.0 阿里云 paraformer-realtime-v2(云端 API) 是(云端托管版)

4.2 何时考虑本地部署 FunASR

场景 推荐方案 理由
当前 ping_04 正常运行 保持云端 零运维、弹性伸缩、效果一致
数据隐私要求高(如涉密对话) 本地部署 数据不出服务器
调用量极大(每月数万元 API 费) 本地部署 自有 GPU 边际成本更低
需要离线/断网环境 本地部署 不依赖互联网
想尝试 SenseVoice 情感检测 本地部署 云端暂无 SenseVoice 流式版
小量调用(每月几十元) 保持云端 不值得运维 GPU 服务器

4.3 成本对比估算

假设每天 100 次语音对话,每次 30 秒:

方案 月费用 备注
阿里云 API ~216 元 0.00024 × 30 × 100 × 30
本地 GPU 服务器 ~300~800 元/月 云 GPU(如 AutoDL A10)
本地自有 GPU(一次性) ~0 元/月 电费 + 折旧,长期最省

结论:调用量小时云端划算,调用量大时本地划算。平衡点约在每月 500~1000 元 API 费时。


五、FunASR 服务端部署(WebSocket 服务)

FunASR 提供了开箱即用的 WebSocket 服务端,可直接替换阿里云的流式 ASR 端点:

# 启动 FunASR WebSocket 服务
python -m funasr.bin.ws_serve_main \
    --model paraformer-zh-streaming \
    --vad-model fsmn-vad \
    --punc-model ct-punc \
    --host 0.0.0.0 \
    --port 10095 \
    --ngpu 1

前端 WebSocket 协议与阿里云 DashScope 类似,迁移时主要改连接地址和鉴权方式。


六、开发注意事项

6.1 首次运行会自动下载模型

FunASR 首次加载模型时会自动从 ModelScope 下载到 ~/.cache/modelscope/,约 1~3 GB。如果服务器无法访问外网,需提前离线下载并指定本地路径。

6.2 GPU 推理 vs CPU 推理

硬件 Paraformer-zh 速度 适用场景
GPU(T4/A10) 实时率 < 0.1(比实时快 10 倍) 生产环境
CPU(8 核) 实时率 ~0.5(比实时慢 2 倍) 开发测试、低并发

6.3 与 Whisper 的对比

维度 FunASR Paraformer Whisper large-v3
中文效果 ⭐⭐⭐⭐⭐(中文优化) ⭐⭐⭐⭐(多语种通用)
速度 快(非自回归) 慢(自回归)
流式支持 ✅ 原生支持 ❌ 需分段模拟
热词 ✅ 支持 ❌ 不支持
语种数 中英日韩+方言 99 种
情感检测 ❌(SenseVoice 才有) ❌
开源协议 MIT MIT

结论:中文场景 FunASR 全面优于 Whisper;多语种/小语种场景 Whisper 覆盖更广。


七、参考资源

相关笔记