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

盛矽电子是专业从事方案与技术服务的提供商。专注于语音识别、智能玩具、儿童电脑、语音芯片等领域。盛矽电子由年轻有为、高学历、有多年工作经验的员工组成,踏实敬业,技术实力雄厚。成功的服务于消费类电子、玩具、礼品、仪器等行业,为客户提供高附加值的产品方案与技术支持。 您的产品如果选择了盛矽电子的语音识别(注1)产品线,就立即升级为能听懂人命令智能产品,能与人进行交互式对话,提升了产品附价值,为客户创造更多利润。盛矽电子的高品质语音级、音乐级的放音·录音(自有算法)产品线,硬件资源丰富,质优价廉,可以应用于各种需要语音产品中。 盛矽电子推出提升开发效率的软件虚拟机(注2)的录音放音芯片。芯片集成了专业的语音算法和简单实用的接口平台;Flash存储技术,简单、高效、灵活、便捷、低风险。 盛矽电子在儿童电脑,智能算法方向有着独到的技术优势,俱有先进自主产权算法,已经成功向多家知名厂商提供方案级、机芯级的产品。 盛矽电子甘做您的研发部门,完整的技术研发体系能为客户量身定制个性化产品,为客户创造更大价值。 更多信息请访问:www.semxi.com 或电话、E-mail咨询。盛矽电子科技遵循客户为本的服务理念,务实、高效的工作作风,竭诚为您服务! 注1:语音识别,也叫语音辨识,是机器能听懂人语言的技术,被视为本世纪最有挑战性、最具市场前景的应用技术之一。在玩具领域,该技术最具有交互娱乐性。 注2:软件虚拟机,技术类似于Java虚拟机,采用软件封装了技术;避免了专业的汇编指令难学的C指令及语音算法、电机控制等知识。
要构建一个实时语音识别系统,funasr库提供了强大的支持,而pyaudio则是处理音频输入的关键组件。具体步骤如下: 参考资源链接:[利用funasr与pyaudio开发实时语音识别系统](https://wenku.csdn.net/doc/3j42comm9c) 首先,需要安装必要的Python环境和库。推荐使用Anaconda3来管理Python环境和相关依赖,确保Python版本为3.9以保证与funasr的兼容性。同时,安装PyTorch 2.0.1版本和CUDA 11.7对应的cuDNN来支持深度学习模型的GPU加速。 接下来,安装funasr和PyAudio库。funasr库可以下载并安装最新版本,PyAudio可以通过pip进行安装,以确保可以进行音频数据的实时捕捉。 之后,需要准备一个预训练的语音识别模型。可以通过ModelScope获取经过优化的模型,这样可以保证识别的准确性和实时性。 编写代码实现实时语音识别系统的核心流程如下: 1. 初始化PyAudio,设置输入流参数,如采样率、通道数等。 2. 通过PyAudio的输入流捕获麦克风输入的音频数据。 3. 使用funasr进行实时的音频流处理,将其转换为语音识别引擎可以处理的格式。 4. 将处理后的音频流送入预训练模型,获取识别结果。 5. 将识别结果输出为文本,可以在控制台打印或者写入文件。 在代码实现中,需要注意实时处理的同步问题,确保音频流的实时捕捉和处理不会因为模型处理速度而发生延迟。 通过上述步骤,你可以完成一个基于funasr和pyaudio的实时语音识别系统。由于funasr本身提供了丰富的文档和教程,你可以参照《利用funasr与pyaudio开发实时语音识别系统》中的示例代码和详细说明,以获得更深入的理解和实践指导。 当你的系统运行起来后,为了进一步提升识别的准确度和性能,你可以考虑对预训练模型进行微调,以及优化实时处理的算法。这时,结合PyTorch的官方文档和ModelScope社区提供的技术资源,将非常有助于你深入研究和开发。 建议在掌握基本的实时语音识别系统构建后,进一步学习更多关于深度学习模型训练和优化的知识,以便在实际项目中更好地解决遇到的问题,并提升系统的整体性能。 参考资源链接:[利用funasr与pyaudio开发实时语音识别系统](https://wenku.csdn.net/doc/3j42comm9c)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值