Skip to content

Whispering: A dynamic multi-language, multi-task Whisper model training framework

License

Notifications You must be signed in to change notification settings

lsrami/Whispering

Repository files navigation

(简体中文|English)

Whispering: 动态多语言、多任务Whisper模型训练框架

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.jsonbos_token_ideos_token_id的值都为50257,这可能是一个bug

因此做padding时使用了指向50258的decoder_start_token_id去除labels中的第一个token,而不是官方教程中的bos_token_id

准备数据

首先准备好text和wav.scp文件,然后使用提供的脚本自动转换为raw或者shard训练数据格式

  1. 创建train dev test文件夹
cd examples/aishell/s0

bash run.sh --stage -1 --stop_stage -1
  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
  1. 生成训练数据格式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,欢迎语音兴趣爱好者进行交流和讨论。

致谢名单

  1. dataloader及trainer大量参考wenet实现

  2. tokenizer部分参考Whisper-Finetune实现

About

Whispering: A dynamic multi-language, multi-task Whisper model training framework

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published