FunASR语音识别模型教程:从推理到训练全流程指南

FunASR语音识别模型教程:从推理到训练全流程指南

FunASR A Fundamental End-to-End Speech Recognition Toolkit and Open Source SOTA Pretrained Models. FunASR 项目地址: https://gitcode.com/gh_mirrors/fu/FunASR

项目概述

FunASR是一个开源的语音识别工具包,提供了大量基于工业数据预训练的语音处理模型。该项目支持语音识别(ASR)、语音活动检测(VAD)、标点恢复(PUNC)等多种语音处理任务,同时提供了从模型推理到训练的全套解决方案。

模型推理指南

快速开始

FunASR提供了两种简单的模型调用方式:

命令行方式

funasr ++model=paraformer-zh ++vad_model="fsmn-vad" ++punc_model="ct-punc" ++input=asr_example_zh.wav

Python API方式(推荐)

from funasr import AutoModel

model = AutoModel(model="paraformer-zh")
res = model.generate(input="音频文件.wav")
print(res)

AutoModel核心参数详解

model = AutoModel(
    model="模型名称或路径",
    device="cuda:0",  # 指定计算设备
    ncpu=4,          # CPU线程数
    output_dir=None, # 结果输出目录
    batch_size=1,    # 批处理大小
    hub="ms",        # 模型下载源
    **kwargs         # 其他模型特定参数
)

典型应用场景

1. 非流式语音识别
model = AutoModel(
    model="paraformer-zh",
    vad_model="fsmn-vad",
    punc_model="ct-punc"
)
res = model.generate(
    input="长音频.wav",
    batch_size_s=300,  # 动态批处理总时长(秒)
    batch_size_threshold_s=60,  # 单音频最大时长阈值
    hotword="关键词"  # 热词增强
)

内存优化技巧

  • 减少batch_size_s降低初始内存
  • 调整batch_size_threshold_s处理长音频
  • 修改max_single_segment_time控制VAD分段长度
2. 流式语音识别
model = AutoModel(model="paraformer-zh-streaming")

# 流式处理参数
chunk_size = [0, 10, 5]  # 600ms实时+300ms前瞻
chunk_stride = 960  # 600ms采样点数

for i in range(总段数):
    is_final = (i == 总段数-1)
    res = model.generate(
        input=音频段,
        cache=cache,
        is_final=is_final,
        chunk_size=chunk_size
    )
3. 语音活动检测(VAD)

离线模式

model = AutoModel(model="fsmn-vad")
res = model.generate(input="音频.wav")
# 输出格式: [[开始1,结束1], [开始2,结束2], ...] (毫秒)

流式模式

for 音频段 in 流式音频:
    res = model.generate(
        input=音频段,
        cache=cache,
        is_final=是否最后一段,
        chunk_size=200  # 200ms
    )
    # 可能输出: [[beg,-1]], [[-1,end]], []等状态
4. 标点恢复
model = AutoModel(model="ct-punc")
res = model.generate(input="无标点文本")
5. 时间戳预测
model = AutoModel(model="fa-zh")
res = model.generate(
    input=("音频.wav", "文本.txt"),
    data_type=("sound", "text")
)

模型训练指南

快速开始

Python方式(推荐)

cd examples/industrial_data_pretraining/paraformer
bash finetune.sh

训练参数详解

funasr/bin/train_ds.py \
    ++model="模型名称或路径" \
    ++train_data_set_list="训练数据.jsonl" \
    ++valid_data_set_list="验证数据.jsonl" \
    ++dataset_conf.batch_size=20000 \
    ++dataset_conf.batch_type="token" \  # 动态批处理
    ++train_conf.max_epoch=50 \
    ++optim_conf.lr=0.0002 \
    ++output_dir="输出路径"

关键参数说明

  • batch_type: 可选"example"(固定样本数)/"token"(动态批处理)
  • batch_size: 与batch_type配合使用
  • validate_interval: 验证间隔步数
  • save_checkpoint_interval: 模型保存间隔

分布式训练方案

单机多GPU训练
export CUDA_VISIBLE_DEVICES="0,1"
gpu_num=$(echo $CUDA_VISIBLE_DEVICES | awk -F "," '{print NF}')

torchrun --nnodes 1 --nproc_per_node ${gpu_num} \
    funasr/bin/train_ds.py ${train_args}
多机多GPU训练

主节点(IP:192.168.1.1):

torchrun --nnodes 2 --node_rank 0 ... --master_addr=192.168.1.1 ...

工作节点:

torchrun --nnodes 2 --node_rank 1 ... --master_addr=192.168.1.1 ...

数据准备

  1. 准备标准格式文件:

    • train_wav.scp: 音频ID与路径映射
    • train_text.txt: 音频ID与文本映射
  2. 转换为JSONL格式:

scp2jsonl \
    ++scp_file_list='["wav.scp", "text.txt"]' \
    ++data_type_list='["source", "target"]' \
    ++jsonl_file_out="train.jsonl"

大规模数据训练技巧

当数据量极大(如>5万小时)时,可采用分片策略:

  1. 将数据拆分为多个JSONL分片
  2. 创建data.list列出所有分片路径
  3. 训练时设置:
++train_data_set_list="data.list" \
++dataset_conf.data_split_num=256  # 分片组数

注意:应确保各分片组数据分布均衡

训练监控

训练日志包含丰富信息:

[时间][rank][INFO] - train, epoch: 0/50, step: 6990/1, 
loss_avg_epoch: 0.409, 
ppl_avg_epoch: 1.506, 
acc_avg_epoch: 0.795, 
lr: 1.165e-04,
[('loss_att', 0.259), ('acc', 0.825)],
GPU memory: usage: 3.830 GB

关键指标:

  • loss_avg_epoch: 平均损失
  • ppl_avg_epoch: 困惑度
  • acc_avg_epoch: 准确率
  • GPU内存使用情况

结语

FunASR提供了一套完整的语音识别解决方案,从即用型的预训练模型到自定义训练流程,支持多种语音处理任务。通过本教程,您可以快速掌握FunASR的核心功能,包括模型推理、流式处理、分布式训练等高级特性。无论是研究还是工业应用,FunASR都能提供强大的支持。

FunASR A Fundamental End-to-End Speech Recognition Toolkit and Open Source SOTA Pretrained Models. FunASR 项目地址: https://gitcode.com/gh_mirrors/fu/FunASR

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卓艾滢Kingsley

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值