Ascend-SACT/Fun-ASR-Nano-2512-SFT
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

运行环境

1. 硬件环境

硬件名称配置信息
NPU型号910B
测试集群单机
操作系统X86

2 软件版本

软件版本
Python3.11.13
CANN8.3.RC1
Torch2.8.0
Torch_npu2.8.0
transformers5.0.0.dev0

环境安装

1. 代码准备

下载Fun-ASR官方代码用于推理Fun-ASR-Nano-2512模型(https://github.com/FunAudioLLM/Fun-ASR/tree/main)

git clone https://github.com/FunAudioLLM/Fun-ASR.git

2. 环境搭建

cd Fun-ASR
pip install -r requirements.txt
pip install funasr>=1.3.0

权重下载

pip install modelscope
modelscope download --model FunAudioLLM/Fun-ASR-Nano-2512

数据准备

数据格式需要包括如下几个字段:

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
}

详细可以参考:data/train_example.jsonl

数据准备细节介绍:

  • 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 格式。

train_wav.scp

左边为数据唯一 ID,需与 train_text.txt 中的 ID 一一对应 右边为音频文件的路径,格式如下

BAC009S0764W0121 https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/BAC009S0764W0121.wav
BAC009S0916W0489 https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/BAC009S0916W0489.wav

train_text.txt

左边为数据唯一 ID,需与 train_wav.scp 中的 ID 一一对应 右边为音频文件标注文本,格式如下:

BAC009S0764W0121 甚至出现交易几乎停滞的情况
BAC009S0916W0489 湖北一公司以员工名义贷款数十员工负债千万
python tools/scp2jsonl.py \
  ++scp_file=data/train_wav.scp \
  ++transcript_file=data/train_text.txt \
  ++jsonl_file=data/train_example.jsonl

SFT

获取trainer路径

which funasr-train-ds

例如trainer路径在 /usr/local/python3.11.13/bin/funasr-train-ds,对其进行修改:vim /usr/local/python3.11.13/bin/funasr-train-ds

第一行添加

from torch_npu.contrib import transfer_to_npu

移动本项目下的finetune.sh到Fun-ASR代码目录中

mv ../Fun-ASR-Nano-2512-SFT/finetune.sh . 

修改 finetune.sh 中的 audio_encoder_conf.freeze, audio_adaptor_conf.freeze 和 llm_conf.freeze。

将需要微调的模块 freeze 设置成 false(默认只微调 llm)。

bash finetune.sh

官方推荐配置

  • 训练数据少于 1000 小时,建议微调 audio_adaptor
  • 训练数据少于 5000 小时,建议微调 audio_encoder 和 audio_adaptor
  • 训练数据大于 10000 小时,建议全量参数微调