注:本文为 声纹智界实验室 发表, 版权所有 ,转发请务必注明出处
嘿,小伙伴们!今天给大家分享一下如何用 FunASR 进行模型微调,并且通过特定的数据集,将模型的准确率提升到惊人的 98%!这个结果甚至超过了行业领先的讯飞语音识别系统。接下来,我会手把手带大家搞定模型微调,顺便聊聊遇到的坑和解决办法。
一、引言
FunASR 是一个超强大的开源语音识别工具包,特别适合做定制化的语音识别任务。微调模型可以让它更好地适应你的数据,提升识别准确率。今天,我将以一个实际案例来带大家一步步搞定模型微调,顺便分享一下如何通过优化策略,让模型的准确率达到 98%!
二、环境准备
在动手之前,先得把开发环境搭起来。别急,跟着我来:
-
安装 Python:确保装了 Python 3.8 或更高版本,这是 FunASR 的基本要求。
-
安装依赖包:用下面的命令把必要的 Python 包装上:
bash
pip install modelscope
pip install funasr
pip install torch torchaudio
- 安装 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
模型作为基础模型。它在大规模数据上进行了预训练,具备强大的语音特征提取能力。
(二)数据准备
数据准备是关键一步,可不能马虎。我遇到的第一个坑就是数据格式不对,差点儿耽误事儿。
-
数据收集:我们精心挑选并准备了一个高质量的中文语音数据集,包含大量的短音频片段,采样率为 16kHz,音频时长在 6 到 10 秒之间。这些音频覆盖了多种场景和口音,确保模型能够学习到丰富的语音特征。
-
文本数据:把训练文本保存为
train.txt
,验证文本保存为valid.txt
。每行写一个音频的转录内容,格式要对,不然后面会报错。 -
音频数据:把音频文件放在指定目录下,文件名要和文本里的内容对应。要是名字对不上,模型会找不到数据,训练就卡住了。
-
数据预处理:用 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
模型的,遇到的坑和解决办法也一并分享给大家。
(一)数据准备
-
收集数据:我们手头有一堆中文语音数据,还有对应的文本转录。我把音频文件放在了
data/audio
文件夹里,文本文件放在了data/text
文件夹里。 -
整理数据:把文本内容整理成
train.txt
和valid.txt
,每行写一个音频的转录内容,格式是这样的:
audio1.wav 这是一段测试语音
audio2.wav 又一段测试语音
注意,文件名要和音频文件名对应,不然会报错。
- 预处理数据:用 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%的准确率。这一结果不仅超过了我们之前的预期,甚至在某些场景下超越了行业领先的讯飞语音识别系统。
(五)关键优化策略
-
数据质量与多样性:我们精心挑选并准备了一个高质量的中文语音数据集,确保数据覆盖多种场景和口音。同时,我们对文本数据进行了清洗,去除了多余的空格和特殊字符,确保数据的纯净性。
-
参数调整:通过实验,我们将批量大小从默认的 20000 调整为 2000,以适应有限的 GPU 显存。学习率调整为 1e-5,以确保模型在微调过程中能够稳定收敛。
-
热词自定义:在特定场景下,我们利用 FunASR 的热词自定义功能,将一些高频词汇(如专有名词、行业术语)作为热词输入模型。这一策略显著提升了模型对特定词汇的识别准确率。
-
上下文增强:我们通过上下文信息增强,进一步优化了模型对长句和复杂语义的理解能力。
五、总结
通过这次实战,我们总结了以下几点经验:
-
数据质量至关重要:高质量、多样化的数据集是提升模型准确率的基础。
-
参数调整需谨慎:批量大小、学习率和训练轮次等参数的合理调整是微调成功的关键。
-
热词自定义的妙用:在特定场景下,利用热词自定义功能可以显著提升模型对特定词汇的识别能力。
-
上下文增强的重要性:通过上下文信息增强,可以进一步优化模型对复杂语义的理解能力。
FunASR 的强大功能和灵活性为我们提供了实现高准确率。
注:本文为 声纹智界实验室 发表, 版权所有 ,转发请务必注明出处 ------------------------------------------------
markdown
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。