license: apache-2.0
language:
- en
- zh
tags:
- audio
- 自动语音识别
- asr
[代码]
[论文]
[模型]
[博客]
FireRedASR是一系列支持普通话、汉语方言和英语的开源工业级自动语音识别(ASR)模型,在公开普通话ASR基准测试中达到最新最优(SOTA)水平,同时具备卓越的歌词识别能力。
🔥 最新动态
方法架构
FireRedASR为满足不同应用场景对卓越性能和最优效率的多样化需求,设计了两类变体:
- FireRedASR-LLM:采用编码器-适配器-大语言模型框架,旨在实现SOTA性能并支持端到端语音交互
- FireRedASR-AED:基于注意力机制的编码器-解码器架构,平衡高性能与计算效率,可作为基于LLM的语音模型中的高效语音表征模块
性能评估
中文采用字错误率(CER%),英文采用词错误率(WER%)。
公开普通话ASR基准测试
模型 |
参数量 |
aishell1 |
aishell2 |
ws_net |
ws_meeting |
平均指标 |
FireRedASR-LLM |
83亿 |
0.76 |
2.15 |
4.60 |
4.67 |
3.05 |
FireRedASR-AED |
11亿 |
0.55 |
2.52 |
4.88 |
4.76 |
3.18 |
Seed-ASR |
120亿+ |
0.68 |
2.27 |
4.66 |
5.69 |
3.33 |
Qwen-Audio |
84亿 |
1.30 |
3.10 |
9.50 |
10.87 |
6.19 |
SenseVoice-L |
16亿 |
2.09 |
3.04 |
6.01 |
6.73 |
4.47 |
Whisper-Large-v3 |
16亿 |
5.14 |
4.96 |
10.48 |
18.87 |
9.86 |
Paraformer-Large |
2亿 |
1.68 |
2.85 |
6.74 |
6.97 |
4.56 |
注:ws表示WenetSpeech数据集
汉语方言及英语ASR基准测试
测试集 |
柯语语音 |
LibriSpeech test-clean |
LibriSpeech test-other |
FireRedASR-LLM |
3.56 |
1.73 |
3.67 |
FireRedASR-AED |
4.48 |
1.93 |
4.44 |
先前SOTA结果 |
6.70 |
1.82 |
3.50 |
使用指南
从huggingface下载模型文件至pretrained_models
目录。
使用FireRedASR-LLM-L
需额外下载Qwen2-7B-Instruct至pretrained_models
目录,并在FireRedASR-LLM-L
文件夹内执行$ ln -s ../Qwen2-7B-Instruct
环境配置
创建Python环境并安装依赖
$ git clone https://github.com/FireRedTeam/FireRedASR.git
$ conda create --name fireredasr python=3.10
$ pip install -r requirements.txt
设置Linux环境变量
$ export PATH=$PWD/fireredasr/:$PWD/fireredasr/utils/:$PATH
$ export PYTHONPATH=$PWD/:$PYTHONPATH
音频格式转换(16kHz/16位PCM)
ffmpeg -i input_audio -ar 16000 -ac 1 -acodec pcm_s16le -f wav output.wav
快速开始
$ cd examples/
$ bash inference_fireredasr_aed.sh
$ bash inference_fireredasr_llm.sh
命令行调用
$ speech2text.py --help
$ speech2text.py --wav_path examples/wav/BAC009S0764W0121.wav --asr_type "aed" --model_dir pretrained_models/FireRedASR-AED-L
$ speech2text.py --wav_path examples/wav/BAC009S0764W0121.wav --asr_type "llm" --model_dir pretrained_models/FireRedASR-LLM-L
Python API调用
from fireredasr.models.fireredasr import FireRedAsr
batch_uttid = ["BAC009S0764W0121"]
batch_wav_path = ["examples/wav/BAC009S0764W0121.wav"]
model = FireRedAsr.from_pretrained("aed", "pretrained_models/FireRedASR-AED-L")
results = model.transcribe(
batch_uttid,
batch_wav_path,
{
"use_gpu": 1,
"beam_size": 3,
"nbest": 1,
"decode_max_len": 0,
"softmax_smoothing": 1.0,
"aed_length_penalty": 0.0,
"eos_penalty": 1.0
}
)
print(results)
model = FireRedAsr.from_pretrained("llm", "pretrained_models/FireRedASR-LLM-L")
results = model.transcribe(
batch_uttid,
batch_wav_path,
{
"use_gpu": 1,
"beam_size": 3,
"decode_max_len": 0,
"decode_min_len": 0,
"repetition_penalty": 1.0,
"llm_length_penalty": 0.0,
"temperature": 1.0
}
)
print(results)
使用技巧
批处理束搜索
- 使用FireRedASR-LLM进行批处理束搜索时,请确保输入语音长度相近。若长度差异较大,短语音可能出现重复问题。可通过按长度排序数据集或设置
batch_size=1
避免该问题。
输入时长限制
- FireRedASR-AED支持最长60秒音频输入,超过60秒可能产生幻觉问题,超过200秒将触发位置编码错误
- FireRedASR-LLM支持最长30秒音频输入,更长输入的识别效果尚待验证
致谢
感谢以下开源项目: