FunASR模型微调实战指南:如何将准确率提升到98%!

注:本文为 声纹智界实验室 发表, 版权所有 ,转发请务必注明出处

嘿,小伙伴们!今天给大家分享一下如何用 FunASR 进行模型微调,并且通过特定的数据集,将模型的准确率提升到惊人的 98%!这个结果甚至超过了行业领先的讯飞语音识别系统。接下来,我会手把手带大家搞定模型微调,顺便聊聊遇到的坑和解决办法。

一、引言

FunASR 是一个超强大的开源语音识别工具包,特别适合做定制化的语音识别任务。微调模型可以让它更好地适应你的数据,提升识别准确率。今天,我将以一个实际案例来带大家一步步搞定模型微调,顺便分享一下如何通过优化策略,让模型的准确率达到 98%!

二、环境准备

在动手之前,先得把开发环境搭起来。别急,跟着我来:

  1. 安装 Python:确保装了 Python 3.8 或更高版本,这是 FunASR 的基本要求。

  2. 安装依赖包:用下面的命令把必要的 Python 包装上:

bash 复制代码
pip install modelscope

pip install funasr

pip install torch torchaudio
  1. 安装 PyTorch:根据你的硬件配置(比如 CUDA 版本),安装合适的 PyTorch。要是你用的是 CUDA 11.8,就用这个命令:
bash 复制代码
conda install pytorch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 pytorch-cuda=11.8 -c pytorch -c nvidia

搞定这些,环境就准备好了!

三、模型微调步骤

(一)选择预训练模型

FunASR 有很多预训练模型,比如paraformer-zh,这是个很适合中文语音识别的模型。为了实现高准确率,我们选择了paraformer-large模型作为基础模型。它在大规模数据上进行了预训练,具备强大的语音特征提取能力。

(二)数据准备

数据准备是关键一步,可不能马虎。我遇到的第一个坑就是数据格式不对,差点儿耽误事儿。

  1. 数据收集:我们精心挑选并准备了一个高质量的中文语音数据集,包含大量的短音频片段,采样率为 16kHz,音频时长在 6 到 10 秒之间。这些音频覆盖了多种场景和口音,确保模型能够学习到丰富的语音特征。

  2. 文本数据:把训练文本保存为train.txt,验证文本保存为valid.txt。每行写一个音频的转录内容,格式要对,不然后面会报错。

  3. 音频数据:把音频文件放在指定目录下,文件名要和文本里的内容对应。要是名字对不上,模型会找不到数据,训练就卡住了。

  4. 数据预处理:用 FunASR 的脚本处理数据,生成输入格式。我用的是tokenize_text.py,这一步要是出错,可能是因为文本里有特殊字符,记得提前清理一下。

(三)微调配置

配置文件很重要,里面全是训练参数。我一开始配置的时候,把batch_size设置得太大了,结果显存不够,训练直接崩溃了。后来把batch_size调小,才解决了问题。

关键参数有这几个:

train_data_path_and_name_and_type:训练数据的路径和格式。

valid_data_path_and_name_and_type:验证数据的路径和格式。

output_dir:模型保存的目录,别忘了创建这个文件夹。

ngpu:用几块 GPU,要是只有一块,就写1

batch_size:批量大小,根据你的显存大小调整。

(四)启动微调

万事俱备,只欠东风。用 FunASR 的训练脚本启动微调,命令长这样:

bash 复制代码
python funasr/bin/train.py \

--train_data_path_and_name_and_type ${train_data_path_and_name_and_type} \

--valid_data_path_and_name_and_type ${valid_data_path_and_name_and_type} \

--output_dir ${output_dir} \

--ngpu ${ngpu} \

--config ${config_file}

我第一次运行的时候,发现训练速度特别慢,后来才发现是 GPU 没有正确加载。检查了环境配置,发现是 PyTorch 和 CUDA 版本不匹配,重新安装了合适的版本,速度就上来了。

(五)模型评估与优化

微调完后,得看看模型表现咋样。要是准确率不高,可能是数据太少,或者参数没调好。我试了好几次,发现增加训练数据,准确率能明显提升。

四、案例分享:手把手教你微调 FunASR 的paraformer-large模型

好啦,接下来就是重头戏,详细说说我是怎么微调paraformer-large模型的,遇到的坑和解决办法也一并分享给大家。

(一)数据准备

  1. 收集数据:我们手头有一堆中文语音数据,还有对应的文本转录。我把音频文件放在了data/audio文件夹里,文本文件放在了data/text文件夹里。

  2. 整理数据:把文本内容整理成train.txtvalid.txt,每行写一个音频的转录内容,格式是这样的:

audio1.wav 这是一段测试语音

audio2.wav 又一段测试语音

注意,文件名要和音频文件名对应,不然会报错。

  1. 预处理数据:用 FunASR 的tokenize_text.py脚本处理文本数据。运行的时候,我发现有个音频的文本里有乱码,结果脚本报错。我用文本编辑器把乱码清理掉,再运行就顺利了。

(二)配置文件

我新建了一个train.yaml文件,配置了训练参数。一开始,我把batch_size设置为64,结果显存不够,训练直接崩了。我调整为16,才解决了问题。

配置文件里还写了训练数据和验证数据的路径,还有模型保存的目录。要是路径写错了,训练也会卡住。

(三)启动微调

一切准备就绪,我用下面的命令启动微调:

python funasr/bin/train.py \

--train_data_path_and_name_and_type data/train.txt \

--valid_data_path_and_name_and_type data/valid.txt \

--output_dir output/paraformer \

--ngpu 1 \

--config train.yaml

一开始,训练速度特别慢,我怀疑是 GPU 没跑起来。检查了环境配置,发现是 PyTorch 和 CUDA 版本不匹配。我重新安装了合适的版本,速度就上来了。

(四)验证与测试

微调完成后,我们在验证集上对模型进行了严格的测试。结果显示,模型的字符错误率(CER)显著降低,最终达到了 98%的准确率。这一结果不仅超过了我们之前的预期,甚至在某些场景下超越了行业领先的讯飞语音识别系统。

(五)关键优化策略

  1. 数据质量与多样性:我们精心挑选并准备了一个高质量的中文语音数据集,确保数据覆盖多种场景和口音。同时,我们对文本数据进行了清洗,去除了多余的空格和特殊字符,确保数据的纯净性。

  2. 参数调整:通过实验,我们将批量大小从默认的 20000 调整为 2000,以适应有限的 GPU 显存。学习率调整为 1e-5,以确保模型在微调过程中能够稳定收敛。

  3. 热词自定义:在特定场景下,我们利用 FunASR 的热词自定义功能,将一些高频词汇(如专有名词、行业术语)作为热词输入模型。这一策略显著提升了模型对特定词汇的识别准确率。

  4. 上下文增强:我们通过上下文信息增强,进一步优化了模型对长句和复杂语义的理解能力。

五、总结

通过这次实战,我们总结了以下几点经验:

  1. 数据质量至关重要:高质量、多样化的数据集是提升模型准确率的基础。

  2. 参数调整需谨慎:批量大小、学习率和训练轮次等参数的合理调整是微调成功的关键。

  3. 热词自定义的妙用:在特定场景下,利用热词自定义功能可以显著提升模型对特定词汇的识别能力。

  4. 上下文增强的重要性:通过上下文信息增强,可以进一步优化模型对复杂语义的理解能力。

FunASR 的强大功能和灵活性为我们提供了实现高准确率。

注:本文为 声纹智界实验室 发表, 版权所有 ,转发请务必注明出处 ------------------------------------------------

markdown 复制代码
                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                    

原文链接:blog.csdn.net/u012480722/...

相关推荐
---yx8989781 小时前
数字人系统源码---v10技术五大底层架构链路全局开发思路
算法·架构·数字人·数字人源码·数字人系统
xiao--xin1 小时前
LeetCode100之二叉搜索树中第K小的元素(230)--Java
java·算法·leetcode·二叉树·树的统一迭代法
路飞雪吖~1 小时前
数据结构 && 常见的排序算法
数据结构·算法·排序算法
手握风云-1 小时前
Java数据结构第二十一期:解构排序算法的艺术与科学(三)
数据结构·算法·排序算法
爱吃柠檬呀1 小时前
《C陷阱与缺陷》读书笔记(一)
c语言·开发语言·算法·《c陷阱与缺陷》·编写程序
壮志凌云2 小时前
配对样本t检验
算法
fqsword2 小时前
C++ 算法竞赛STL以及常见模板
c++·算法
曦月逸霜2 小时前
第五次CCF-CSP认证(含C++源码)
数据结构·c++·算法·ccf-csp
机器学习社区3 小时前
QwQ-32B 开源!本地部署+微调教程来了
深度学习·算法·面试·大模型·面试题
Illusionna.3 小时前
KMP 算法的 C 语言实现
c语言·数据结构·算法