🚀 FireRedASR:開源工業級自動語音識別模型
FireRedASR 是一系列開源的工業級自動語音識別(ASR)模型,支持普通話、中文方言和英語。該模型在公開的普通話 ASR 基準測試中達到了新的最優水平(SOTA),同時還具備出色的歌詞識別能力。
[代碼]
[論文]
[模型]
[博客]
🔥 最新消息
✨ 主要特性
FireRedASR 旨在滿足各種應用中對卓越性能和最佳效率的多樣化需求。它包含兩種變體:
- FireRedASR-LLM:旨在實現最優(SOTA)性能,並實現無縫的端到端語音交互。它採用了編碼器 - 適配器 - 大語言模型(LLM)框架。
- FireRedASR-AED:旨在平衡高性能和計算效率,並作為基於大語言模型的語音模型中的有效語音表示模塊。它採用了基於注意力機制的編碼器 - 解碼器(AED)架構。
📦 安裝指南
環境搭建
創建 Python 環境並安裝依賴項
$ git clone https://github.com/FireRedTeam/FireRedASR.git
$ conda create --name fireredasr python=3.10
$ pip install -r requirements.txt
設置 Linux 的 PATH 和 PYTHONPATH
$ 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
從 huggingface 下載模型文件,並將其放置在 pretrained_models
文件夾中。
如果你想使用 FireRedASR-LLM-L
,還需要下載 Qwen2-7B-Instruct 並將其放置在 pretrained_models
文件夾中。然後,進入 FireRedASR-LLM-L
文件夾並運行 $ ln -s ../Qwen2-7B-Instruct
💻 使用示例
基礎用法
快速開始
$ 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 使用
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.25,
"aed_length_penalty": 0.6,
"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": 3.0,
"llm_length_penalty": 1.0,
"temperature": 1.0
}
)
print(results)
📚 詳細文檔
評估結果
結果以中文的字符錯誤率(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 基準測試評估
測試集 |
KeSpeech |
LibriSpeech test-clean |
LibriSpeech test-other |
FireRedASR-LLM |
3.56 |
1.73 |
3.67 |
FireRedASR-AED |
4.48 |
1.93 |
4.44 |
之前的最優結果 |
6.70 |
1.82 |
3.50 |
使用提示
批量束搜索
⚠️ 重要提示
使用 FireRedASR-LLM 進行批量束搜索時,請確保輸入的語音長度相似。如果語音長度差異較大,較短的語音可能會出現重複問題。你可以按長度對數據集進行排序,或將 batch_size
設置為 1 以避免重複問題。
輸入長度限制
⚠️ 重要提示
- FireRedASR-AED 支持最長 60 秒的音頻輸入。超過 60 秒的輸入可能會導致幻覺問題,超過 200 秒的輸入將觸發位置編碼錯誤。
- FireRedASR-LLM 支持最長 30 秒的音頻輸入。目前,對於更長輸入的表現未知。
🔗 致謝
感謝以下開源項目:
📄 許可證
本項目採用 Apache-2.0 許可證。
📖 引用
@article{xu2025fireredasr,
title={FireRedASR: Open-Source Industrial-Grade Mandarin Speech Recognition Models from Encoder-Decoder to LLM Integration},
author={Xu, Kai-Tuo and Xie, Feng-Long and Tang, Xu and Hu, Yao},
journal={arXiv preprint arXiv:2501.14350},
year={2025}
}