如何部署与使用SenseVoice语音大模型

SenseVoice专注于高精度多语言语音识别、语音情感识别和音频事件检测。本博客将指导您完成SenseVoice模型的安装和使用。

前言

SenseVoice 是一种语音基础模型,具有多种语音理解功能,包括自动语音识别 (ASR)、口语识别 (LID)、语音情感识别 (SER) 和音频事件检测 (AED)。本博客将指导您安装和使用 SenseVoice 模型,使其尽可能方便用户使用。

SenseVoice

SenseVoice的亮点

SenseVoice专注于高精度多语言语音识别、语音情感识别和音频事件检测。

多语言语音识别:经过超过40万小时的数据训练,支持50多种语言,识别性能超越Whisper模型。

高效推理:SenseVoice-Small 模型采用非自回归端到端框架,从而实现极低的推理延迟。处理 10 秒的音频仅需 70ms,比 Whisper-Large 快 15 倍。

情绪识别:提供声音事件检测能力,支持bgm、掌声、笑声、哭泣、咳嗽、打喷嚏等各种常见人机交互事件的检测。

便捷的微调:提供方便的微调脚本和策略,让用户根据自己的业务场景轻松解决长尾样本问题。

服务部署:提供服务部署管道,支持多并发请求,客户端语言包括 Python、C++、HTML、Java 和 C# 等。

如何部署安装SenseVoice

步骤 1. 克隆项目并创建 python 3.8+ 虚拟环境

首先克隆官方项目并创建一个独立的 Python 虚拟环境。

git clone https://github.com/FunAudioLLM/SenseVoice.git
cd SenseVoice

#创建一个独立的 Python 3.8 虚拟环境并激活它
conda create -n sensevoice python=3.8
conda activate sensevoice

步骤 2. 然后安装依赖项

至此,虚拟环境已被激活。现在下载并安装项目所依赖的第三方软件包。

# 如果在GPUMart上租赁的服务器上
pip install -r requirements.txt

# 如果租赁的服务器在中国大陆,需要使用国内的镜像 
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com

步骤 3. 启动 SenseVoice WebUI

模型文件非常大,下载需要很长时间。完成后,使用以下命令启动服务:

python webui.py

现在,您可以通过访问局域网 IP 和端口号 7860 访问由gradient库构建的 WebUI 网络应用程序。

SenseVoice WebUI

如何使用SenseVoice

方法 1. 在 Web UI 中使用

使用网页界面非常简单,只需上传音频文件,选择语言(可选),然后点击开始按钮,等待后台处理完成,识别出的文本就会输出到结果区域。

我们使用GPUMart 的 RTX A4000 测试了 90 分钟的音频,耗时约七八分钟。

方法 2. 使用 Python 编程调用

如果需要基于模型进行应用程序开发,或调整更详细的参数,则需要对模型提供的应用程序接口进行封装和二次开发。

推理使用示例 - 支持任何格式和任何持续时间的音频输入。

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)

对于更高级的用户,还可以使用以下命令将模型导出到 ONNX 或 Libtorch:

# 以 Libtorch 为例
from pathlib import Path
from funasr_torch import SenseVoiceSmall
from funasr_torch.utils.postprocess_utils import rich_transcription_postprocess


model_dir = "iic/SenseVoiceSmall"

model = SenseVoiceSmall(model_dir, batch_size=10, device="cuda:0")

wav_or_scp = ["{}/.cache/modelscope/hub/{}/example/en.mp3".format(Path.home(), model_dir)]

res = model(wav_or_scp, language="auto", use_itn=True)
print([rich_transcription_postprocess(i) for i in res])

注意:Libtorch 模型会导出到原始模型目录。