(简体中文|English)
Whispering支持OpenAI在hugging face上开源的Whisper所有型号模型预训练和微调,使用UIO方式进行数据加载,极大提升了大数据量训练IO瓶颈,该框架已在上万小时数据集上得到验证,训练稳定,快速高效。
- 支持同时做语音识别、语音翻译、VAD等多个任务,多个语言训练
- 支持raw/shard两种训练数据格式
- 支持static/dynamic两种训练batch类型
- 支持spec_aug、shuffle增强等数据增强方式
- 支持cer、wer、bleu等多个指标选择最优模型
- 支持交叉熵/标签平滑两种损失函数
- 支持base、large和large-v3模型
- 硬性要求:torch>=1.13.0 transformers>=4.28.0
conda create -n whispering python==3.10
conda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 pytorch-cuda=11.7 -c pytorch -c nvidia
conda activate whispering
pip install -r requirements.txt
请从openai/whisper下载预训练模型
mkdir pretrain_model/ && cd pretrain_model/
git clone https://huggingface.co/openai/whisper-base
注意:官方模型提供的config.json
中bos_token_id
和eos_token_id
的值都为50257,这可能是一个bug
因此做padding时使用了指向50258的decoder_start_token_id
去除labels中的第一个token,而不是官方教程中的bos_token_id
首先准备好text和wav.scp文件,然后使用提供的脚本自动转换为raw或者shard训练数据格式
- 创建train dev test文件夹
cd examples/aishell/s0
bash run.sh --stage -1 --stop_stage -1
- 手动生成text和wav.scp文件放到train dev test文件夹下面
- 单语言单任务数据text和wav.scp样例
==> text <==
BAC009S0002W0122 而对楼市成交抑制作用最大的限购
BAC009S0002W0123 也成为地方政府的眼中钉
BAC009S0002W0124 自六月底呼和浩特市率先宣布取消限购后
==> wav.scp <==
BAC009S0002W0122 /data_aishell/wav/train/S0002/BAC009S0002W0122.wav
BAC009S0002W0123 /data_aishell/wav/train/S0002/BAC009S0002W0123.wav
BAC009S0002W0124 /data_aishell/wav/train/S0002/BAC009S0002W0124.wav
-
多语言多任务数据text和wav.scp样例 text中参数说明:
所有参数均非必要,最小输入格式为
key {}
, 即无标注训练,等价于将sentence设置为<|nospeech|>
sentences
非必要(用于带时间戳训练),多个时间戳在sentences
列表中增加
==> text <==
BAC009S0002W0122 {"key": "BAC009S0002W0122", "language": "chinese", "task": "transcribe", "sentence": "而对楼市成交抑制作用最大的限购", "sentences": [{"start": 0, "end": 6.0, "text": "而对楼市成交抑制作用最大的限购"}]}
BAC009S0002W0123 {"key": "BAC009S0002W0123", "language": "chinese", "task": "transcribe", "sentence": "也成为地方政府的眼中钉", "sentences": [{"start": 0, "end": 3.87, "text": "也成为地方政府的眼中钉"}]}
BAC009S0002W0124 {"key": "BAC009S0002W0124", "language": "chinese", "task": "transcribe", "sentence": "自六月底呼和浩特市率先宣布取消限购后", "sentences": [{"start": 0, "end": 5.41, "text": "自六月底呼和浩特市率先宣布取消限购后"}]}
==> wav.scp <==
BAC009S0002W0122 /data_aishell/wav/train/S0002/BAC009S0002W0122.wav
BAC009S0002W0123 /data_aishell/wav/train/S0002/BAC009S0002W0123.wav
BAC009S0002W0124 /data_aishell/wav/train/S0002/BAC009S0002W0124.wav
- 生成训练数据格式data.list
# 确保 examples/aishell/s0/data 有如下文件
data/
├── dev
│ ├── text
│ └── wav.scp
├── test
│ ├── text
│ └── wav.scp
└── train
├── text
└── wav.scp
# 生成raw/shard格式训练数据,大数据量推荐shard
bash run.sh --stage 0 --stop_stage 0 --data_type shard
训练阶段
bash run.sh --stage 1 --stop_stage 1
日志监控
# 查看训练日志
tail -f finetuned_model/whispering/train_log/log_2024-03-28_11-40-25.txt
# 查看tensorboard
tensorboard --host 0.0.0.0 --port 6006 --logdir finetuned_model/whispering/tensorboard/
测试阶段
bash run.sh --stage 2 --stop_stage 2
# 查看测试结果
tail finetuned_model/whispering/test_cer.txt
参考教程:
如果您在使用中遇到其他问题,可以直接在github页面提Issues,欢迎语音兴趣爱好者进行交流和讨论。
-
dataloader及trainer大量参考wenet实现
-
tokenizer部分参考Whisper-Finetune实现