简介
SenseVoice 是一个具备多种语音理解能力的语音基础模型,包括自动语音识别(ASR)、语言识别(LID)、语音情感识别(SER)和音频事件检测(AED)。
主页 | 最新动态 | 基准测试 | 安装 | 用法 | 社区
模型库: modelscope, huggingface
在线演示: modelscope demo, huggingface space
亮点 🎯
SenseVoice 专注于高精度的多语言语音识别、语音情感识别和音频事件检测。
- 多语言语音识别: 使用超过40万小时的数据进行训练,支持50多种语言,识别性能超越Whisper模型。
- 丰富的转录:
- 具备优秀的情感识别能力,在测试数据上达到了当前最佳情感识别模型的效果甚至超越。
- 提供音频事件检测功能,支持检测多种常见的人机交互事件,如背景音乐、掌声、笑声、哭泣、咳嗽和打喷嚏等。
- 高效推理: SenseVoice-Small模型采用非自回归的端到端框架,推理延迟极低。处理10秒音频仅需70毫秒,速度是Whisper-Large的15倍。
- 便捷的微调: 提供便捷的微调脚本和策略,用户可以根据业务场景轻松解决长尾样本问题。
- 服务部署: 提供服务部署管道,支持多并发请求,客户端语言包括Python、C++、HTML、Java和C#等。
最新动态 🔥
- 2024/7:新增了对ONNX和libtorch的导出功能,以及Python版本的运行时:funasr-onnx-0.4.0, funasr-torch-0.1.1
- 2024/7:SenseVoice-Small语音理解模型开源,提供高精度的多语言语音识别、情感识别和音频事件检测功能,支持普通话、粤语、英语、日语和韩语,并具有超低的推理延迟。
- 2024/7:CosyVoice用于多语言、音色和情感控制的自然语音生成。在多语言语音生成、零样本语音生成、跨语言语音克隆和指令遵循能力方面,CosyVoice表现优异。CosyVoice repo 和 CosyVoice space。
- 2024/7:FunASR 是一个基础的语音识别工具包,提供多种功能,包括语音识别(ASR)、语音活动检测(VAD)、标点恢复、语言模型、说话人验证、说话人分离和多说话人语音识别。
基准测试 📝
多语言语音识别
我们对SenseVoice和Whisper在开源基准数据集(包括AISHELL-1、AISHELL-2、Wenetspeech、LibriSpeech和Common Voice)上的多语言语音识别性能进行了对比。在中文和粤语识别方面,SenseVoice-Small模型具有优势。
语音情感识别
由于目前缺乏广泛使用的语音情感识别基准和方法,我们在多个测试集上通过多种指标进行了评估,并与近期多个基准结果进行了综合对比。选定的测试集包含了中文和英文的数据,涵盖了表演、电影和自然对话等多种风格。在未对目标数据进行微调的情况下,SenseVoice已能够达到并超越当前最佳语音情感识别模型的性能。
此外,我们还在测试集上对多个开源的语音情感识别模型进行了对比,结果显示SenseVoice-Large模型在几乎所有数据集上都达到了最佳性能,而SenseVoice-Small模型也在大多数数据集上超越了其他开源模型。
音频事件检测
尽管只在语音数据上进行了训练,SenseVoice仍然能够作为独立的事件检测模型使用。我们在环境声音分类ESC-50数据集上将其表现与行业中广泛使用的BEATS和PANN模型进行了对比。SenseVoice在这些任务中取得了不错的成绩,但由于训练数据和方法的局限性,其事件分类性能与专用的AED模型相比仍存在一些差距。
计算效率
SenseVoice-Small模型采用非自回归的端到端架构,推理延迟极低。其参数数量与Whisper-Small模型相似,但推理速度比Whisper-Small快5倍以上,比Whisper-Large快15倍。
要求
pip install -r requirements.txt
用法
推理
支持任意格式和任意时长的音频输入。
from funasr import AutoModel
from funasr.utils.postprocess_utils import rich_transcription_postprocess
model_dir = "iic/SenseVoiceSmall"
model = AutoModel(
model=model_dir,
trust_remote_code=True,
remote_code="./model.py",
vad_model="fsmn-vad",
vad_kwargs={"max_single_segment_time": 30000},
device="cuda:0",
)
# en
res = model.generate(
input=f"{model.model_path}/example/en.mp3",
cache={},
language="auto", # "zh", "en", "yue", "ja", "ko", "nospeech"
use_itn=True,
batch_size_s=60,
merge_vad=True, #
merge_length_s=15,
)
text = rich_transcription_postprocess(res[0]["text"])
print(text)
`完整引用 'data/train_example.jsonl'
数据准备详情
描述:
key
:音频文件唯一IDsource
:音频文件路径source_len
:音频文件的fbank帧数target
:转录文本target_len
:转录文本的长度text_language
:音频文件的语言IDemo_target
:音频文件的情感标签event_target
:音频文件的事件标签with_or_wo_itn
:是否包含标点符号和逆文本标准化
train_text.txt
BAC009S0764W0121 甚至出现交易几乎停滞的情况
BAC009S0916W0489 湖北一公司以员工名义贷款数十员工负债千万
asr_example_cn_en 所有只要处理 data 不管你是做 machine learning 做 deep learning 做 data analytics 做 data science 也好 scientist 也好通通都要都做的基本功啊那 again 先先对有一些>也许对
ID0012W0014 he tried to think how it could be
train_wav.scp
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
asr_example_cn_en https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_cn_en.wav
ID0012W0014 https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_en.wav
train_text_language.txt
语言ID包括、
、、
和``。
BAC009S0764W0121
BAC009S0916W0489
asr_example_cn_en
ID0012W0014
train_emo.txt
情感标签包括、
、、
、、
和``。
BAC009S0764W0121
BAC009S0916W0489
asr_example_cn_en
ID0012W0014
train_event.txt
事件标签包括、
、、
、、
、和
。
BAC009S0764W0121
BAC009S0916W0489
asr_example_cn_en
ID0012W0014
命令
# 从 wav.scp, text.txt, text_language.txt, emo_target.txt, event_target.txt 生成 train.jsonl 和 val.jsonl
sensevoice2jsonl \
++scp_file_list='["../../../data/list/train_wav.scp", "../../../data/list/train_text.txt", "../../../data/list/train_text_language.txt", "../../../data/list/train_emo.txt", "../../../data/list/train_event.txt"]' \
++data_type_list='["source", "target", "text_language", "emo_target", "event_target"]' \
++jsonl_file_out="../../../data/list/train.jsonl"
如果没有 train_text_language.txt
, train_emo_target.txt
和 train_event_target.txt
,语言、情感和事件标签将使用 SenseVoice
模型自动预测。
# 从 wav.scp 和 text.txt 生成 train.jsonl 和 val.jsonl
sensevoice2jsonl \
++scp_file_list='["../../../data/list/train_wav.scp", "../../../data/list/train_text.txt"]' \
++data_type_list='["source", "target"]' \
++jsonl_file_out="../../../data/list/train.jsonl" \
++model_dir='iic/SenseVoiceSmall'
微调
确保在 finetune.sh 中将 train_tool 修改为 FunASR 安装目录下的 funasr/bin/train_ds.py
的绝对路径。
bash finetune.sh
WebUI
python webui.py
突出的第三方工作
- Triton (GPU) 部署最佳实践:使用 Triton + TensorRT,在 V100 GPU 上测试,使用 FP32,达到526倍加速比。FP16 支持正在进行中。仓库
- Sherpa-onnx 部署最佳实践:支持在 10 种编程语言中使用 SenseVoice:C++、C、Python、C#、Go、Swift、Kotlin、Java、JavaScript 和 Dart。还支持在 iOS、Android 和 Raspberry Pi 等平台上部署 SenseVoice。仓库
社区
如果在使用中遇到问题,可以直接在github页面上提出问题。
你也可以扫描以下钉钉群二维码加入社区群进行交流和讨论。
FunAudioLLM | FunASR |
---|---|