虽然通用语音识别模型在大多数场景下表现不错,但有些时候,面对专业术语、特定口音或私有词汇时,难免"听错"甚至"幻听",比如把内部产品代号识别为常见词,或在方言会议中漏掉关键信息。
如果你希望模型更贴合 自己的业务场景 ,微调 是一个高效且实用的选择。通过使用领域内标注数据微调模型(几百到几千小时不等),可以提升模型 在特定场景、特定领域、特定用户群体下的识别准确率,让通用的模型更好地适应具体应用需求。微调后的模型在保持通用能力的同时,在目标场景下表现更优。
为了让你更轻松地定制语音识别能力,我们支持了模型微调的代码。现在,你可以基于自己的业务数据,一键启动微调流程,快速打造属于你的"专属语音识别引擎"。
本文将带你通过微调 Fun-ASR-Nano,低成本打造贴合业务的专属语音识别能力。
Fun-ASR-Nano 1分钟带你快速回忆
Fun-ASR-Nano-2512 是通义百聆 发布的一款轻量级语音识别模型 ,总参数量仅0.8B,推理成本低,支持完全本地部署。模型采用端到端架构,开箱即用即可满足多数通用场景的语音转写需求。此外,它支持全参数微调(无需 LoRA),可基于自有语音数据快速适配医疗、金融、客服等垂直领域,打造更贴合业务的识别能力。
在通用不同场景的测试集中,Fun-ASR-Nano-2512均取得了不错的准确率指标,达到了商业可用的水平。

训练环境安装
Fun-ASR-Nano 模型基于 ModelScope/FunASR `框架进行模型的训练与微调,在微调模型之前需要安装该模型训练框架:
git clone https://github.com/FunAudioLLM/Fun-ASR.git
cd Fun-ASR
pip install -r requirements.txt
数据准备
Fun-ASR-Nano 包含了一个参数量为 0.6B 的大语言模型 Qwen/Qwen3-0.6B,其训练数据遵循 ChatML` (Chat Markup Language) 对话标记语言。
ChatML 是一种结构化的格式,由一系列消息组成,每条消息都包含一个 role和 content,我们模型训练、微调和测试数据的每一个样本都包含三条消息,对应三个 role:system,user 和 assistant。
其展开如下所示:
head -n1 data/train_example.jsonl | jq
{
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "语音转写:<|startofspeech|>!https://modelscope.cn/datasets/FunAudioLLM/funasr-demo/resolve/master/audios/IT0011W0002.wav<|endofspeech|>"
},
{
"role": "assistant",
"content": "几点了?"
}
],
"speech_length": 145,
"text_length": 3
}
其中
- system 的 content 固定为 You are a helpful assistant.
-
user 的 content 包含了 prompt 和音频文件的路径(位于 <|startofspeech|>!和 <|endofspeech|>之间)。
-
prompt 默认为语音转写:或Speech transcription:
-
可以结合对应的语种为语音转写成英文:或Transcribe speech into Chinese:
-
当音频文件对应的文本标注不含阿拉伯数字或者标点符号时,可以使用语音转写,不进行文本规整:或 Speech transcription without text normalization:
-
-
assistant 的 content 对应音频文件对应的文本标注
-
speech_length:音频文件的 fbank 帧数(一帧 10ms)
-
text_length:音频文件标注文本的 token 数 (用 Qwen/Qwen3-0.6B编码)
我们提供了数据格式转换工具 scp2jsonl.py,可以将常见的语音识别训练数据格式 wav scp 和 transcription 转成 ChatML 格式。
👉data/train_wav.scp
head -n1 data/train_wav.scp
IT0011W0002 https://modelscope.cn/datasets/FunAudioLLM/funasr-demo/resolve/master/audios/IT0011W0002.wav
👉data/train_text.txt
head -n1 data/train_text.txt
IT0011W0002 几点了?
python tools/scp2jsonl.py \
++scp_file=data/train_wav.scp \
++transcript_file=data/train_text.txt \
++jsonl_file=data/train_example.jsonl
wav scp 和 transcription 文件都是由两列组成,两个文件根据第一列 (Utterance ID) 一一对应,第二列分别是音频文件的路径和音频文件的文本标注。
启动训练
截止目前,我们开源的模型主要包含 audio_encoder,audio_adaptor 和 llm 模块。因此需要确认待微调的模块有哪些,进而修改 finetune.sh脚本中的对应参数:
-
audio_encoder_conf.freeze:false表示微调 audio_encoder
-
audio_adaptor_conf.freeze:false表示微调 audio_adaptor
-
llm_conf.freeze:false表示微调 llm
推荐配置
-
训练数据少于 1000 小时,建议微调 audio_adaptor
-
训练数据少于 5000 小时,建议微调 audio_encoder和audio_adaptor
-
训练数据大于 10000 小时,建议全量参数微调
接下来即可运行微调脚本:
bash finetune.sh
Tensorboard 可视化
tensorboard --logdir outputs/tensorboard
浏览器中打开:http://localhost:6006/

模型测评
当模型微调结束后,可以使用 decode.py 脚本对模型进行解码:
python decode.py \
++model_dir=/path/to/finetuned \
++scp_file=data/val_wav.scp \
++output_file=output.txt
解码结束后,需要对标注和识别结果做文本逆归一化,然后计算 WER:
python tools/whisper_mix_normalize.py data/val_text.txt data/val_norm.txt
python tools/whisper_mix_normalize.py output.txt output_norm.txt
compute-wer data/val_norm.txt output_norm.txt cer.txt
tail -n8 cer.txt
相信通过本文的指引,你已经了解了如何通过微调 Fun-ASR-Nano 来打造专属的语音识别能力。无论是医疗术语、法律条文,还是企业内部的专业词汇,都可以通过简单的数据准备和训练流程,让模型真正"听懂"你的业务语言。
现在就动手试试吧!从 GitHub 克隆代码开始,体验打造专属语音识别引擎的完整流程。
开源地址魔搭、HuggingFace、GitHub
https://github.com/FunAudioLLM/Fun-ASR(GitHub)
https://funaudiollm.github.io/funasr/(GitHub.io)
https://modelscope.cn/studios/FunAudioLLM/Fun-ASR-Nano/(国内体验demo)
https://huggingface.co/spaces/FunAudioLLM/Fun-ASR-Nano(海外体验demo)
https://modelscope.cn/models/FunAudioLLM/fun-asr-nano-2512(国内模型仓库)
https://huggingface.co/FunAudioLLM/Fun-ASR-Nano-2512(海外模型仓库)


阅读更多 Voice Agent 学习笔记:了解最懂 AI 语音的头脑都在思考什么
