0


SenseVoice 语音识别微调技术方案

一、项目背景

    随着人工智能技术飞速发展,语音识别技术已成为人机交互的重要接口之一。在语音输入法、语音导航、智能会议纪要等多个应用场景中,高效的语音识别能力对于提升用户体验至关重要。本项目旨在通过SenseVoice产品,实现针对中文通用场景下的高精度语音识别自训练,以满足特定业务场景下的定制化需求。

二、SenseVoice介绍

    SenseVoice是由FunAudioLLM团队开发的音频基础模型,SenseVoice作为一款专注于高精度多语言语音识别的模型,其独特之处在于其广泛的语言覆盖、强大的情感辨识能力以及高效的推理性能。该模型基于超过40万小时的多样化语音数据训练而成,能够支持超过50种语言的识别,展现出卓越的跨语言识别能力。与市场上其他主流模型相比,SenseVoice在识别精度上实现了显著提升,特别是在复杂场景下的表现尤为出色。此外,SenseVoice还提供了便捷的微调脚本与策略,帮助用户根据特定业务场景进行模型定制与优化。

三、方案选型

    最开始准备使用的是百度推出的PaddleSpeech产品来完成语音识别任务,经过尝试发现该模型不适用,主要有以下3方面的原因:
  1. 模型版本比较旧,在服务器上部署存在一些依赖冲突问题需要解决,这个步骤很耗时。测试时使用的阿里云上的Ubantu服务器,这个问题是解决了。但如果部署到公司的服务器,之前的解决方案不一定行得通,可能需要重新探索;
  2. 官方GitHub代码很长时间没有维护,文档里的步骤和实际使用存在出入,需要自己改造,根据文档教程自训练时源代码会报错,这些bug无法在官网以及网络上找到解决方案。
  3. 使用PaddleSpeech训练时,要求的单样本时长不超过50s,只支持wav格式,这个限制不适用实际业务场景。经过以上原因分析,不采用PaddleSpeech,经过调研最终选SenseVoice产品。

四、模型选型

    SenseVoice支持多种预训练模型,和魔搭集成度比较好。一般默认的是使SenseVoiceSmall模型,但在本方案中没有采用这个模型,基于以下几个理由:

    1.SenseVoiceSmall支持富文本识别,包括情感识别和声音事件检测,所需要的数据集的格式也需要体现这两方面的内容。考虑到本项目只是基础的语音识别范畴,不需要额外的富文本识别;

    2.SenseVoiceSmall模型对于时长在几个小时的长音频文件的识别效果还有待验证。

基于前面两点的考虑,最终我们选用Paraformer语音识别-中文-通用-16k-离线-large-长音频版

(iic/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch)这个模型,可以很好地解决上述问题。

五、环境准备

(一)服务器环境

至少要采用单机多卡的配置来训练,最好能采用多机多卡的配置来加速训练。

(二)软件环境

1.安装python环境

conda create -y -n sense_voice python=3.10

conda init

conda activate sense_voice

2.下载SenseVoice

git clone GitHub - FunAudioLLM/SenseVoice: Multilingual Voice Understanding Model && cd SenseVoice

3.下载Paraformer模型

#创建模型存放目录

mkdir models

cd models

#更新系统软件包,安装git lfs用于拉取大文件

sudo apt update

sudo apt install git-lfs

git lfs install

#下载模型

git clone 魔搭社区

cd speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch

#拉取仓库里的大文件

git lfs pull

#检查文件完整性,文件名前是星号代表是完整的

git lfs ls-files

4.下载安装FunASR

git clone https://github.com/alibaba/FunASR.git && cd FunASR

pip3 install -e ./

六、数据集准备

音频文件的要求:建议统一使用wav格式,音频采样率为16K,文件时长在50s最佳,如果是长音频,文件大小最好不要超过10M。

首先需要按照train/val/test的类型划分数据集,样本比例为8:1:1。针对每个类型的数据集都需要先准备好wav.scp与text.txt文件,wav.scp与text.txt准备过程如下:

然后使用生成指令生成最终需要的jsonl格式文件

generate train.jsonl and val.jsonl from wav.scp and text.txt

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'

Jsonl文件格式如下图所示

七、微调(自训练)流程

需要找到finetune.sh脚本,根据自己的实际情况修改参数,如下图所示,一般需要修改的地方有:把使用的模型地址替换成前面下载好的模型路径、把训练和验证使用的数据集路径替换成自己的、指定日志和模型参数文件的输出路径、指定使用的训练脚本为前面下载好的FunASR下的train.py、指定训练轮次、如果担心显存不够用,可以把批次数量batch_size调小一些。如下图所示:

fintune.sh脚本修改完后,执行bash finetune.sh命令即可开始训练,等待训练完成后,可以去output路径下查看训练结果,可以使用tensorboard --logdir xxx命令可视化查看训练的loss和acc等指标。

八、部署流程

(一)Restful接口部署

找到api.py脚本,根据自己的业务需求调整其中的接口代码,如下图所示。

然后执行下面的命令就能快速将模型部署为Restful接口供后端工程师调用。

export SENSEVOICE_DEVICE=cuda:0

fastapi run --port 50000

  • ONNX导出部署

执行下面的命令将模型量化导出为ONNX格式模型。

funasr-export ++model=paraformer ++quantize=false

测试ONNX

pip3 install -U funasr-onnxfrom funasr_onnx import Paraformermodel_dir = "damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch"model = Paraformer(model_dir, batch_size=1, quantize=True)

wav_path = ['~/.cache/modelscope/hub/damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/example/asr_example.wav']

result = model(wav_path)print(result)

九、模型推理流程

找到webui.py脚本,修改里面的内容,更换模型为前面训练好的模型。运行python webui.py命令运行脚本,生成网站访问链接。通过该前端网页可以快速对单个音频样本实现推理。如下图所示:

十、总结与展望

本项目通过SenseVoice产品和Paraformer语音识别模型,实现了针对中文通用场景下的高精度语音识别自训练。通过定制化训练和部署,满足了特定业务场景下的需求。未来,我们将继续提高识别准确率和效率,并探索更多应用场景下的语音识别解决方案。同时,我们也将关注行业动态和技术发展,及时引入新技术和新方法,保持技术领先性。


本文转载自: https://blog.csdn.net/GOOD_CODER/article/details/140864357
版权归原作者 马斯洛金字塔下的小灵猴儿 所有, 如有侵权,请联系我们删除。

“SenseVoice 语音识别微调技术方案”的评论:

还没有评论