0.数据准备

如果是训练paraformer模型,我们只需要准备train_wav.scp和train_text.txt以及验证集val_wav.scp和val_text.txt即可。

如果是训练SenseVoice模型,我们需要准备下面几个文件:

train_text.txt
train_wav.scp
train_text_language.txt
train_emo.txt
train_event.txt

其中必须的是train_wav.scp和train_text.txt文件。

下面是每个文件的格式要求:

BAC009S0764W0121 甚至出现交易几乎停滞的情况
BAC009S0916W0489 湖北一公司以员工名义贷款数十员工负债千万
asr_example_cn_en 所有只要处理 data 不管你是做 machine learning 做 deep learning 做 data analytics 做 data science 也好 scientist 也好通通都要都做的基本功啊那 again 先先对有一些 > 也许对
ID0012W0014 he tried to think how it could be

注意:如果是中英混杂的句子,中文和英文之间要有空格。

BAC009S0764W0121 /root/train/data/BAC009S0764W0121.wav
BAC009S0916W0489 /root/train/data/BAC009S0916W0489.wav
asr_example_cn_en /root/train/data/asr_example_cn_en.wav
ID0012W0014 /root/train/data/ID0012W0014.wav

注意:音频路径不能使用URL路径,使用URL路径会导致生成的jsonl文件没有内容。

BAC009S0764W0121 <|zh|>
BAC009S0916W0489 <|zh|>
asr_example_cn_en <|zh|>
ID0012W0014 <|en|>
BAC009S0764W0121 <|NEUTRAL|>
BAC009S0916W0489 <|NEUTRAL|>
asr_example_cn_en <|NEUTRAL|>
ID0012W0014 <|NEUTRAL|>
BAC009S0764W0121 <|Speech|>
BAC009S0916W0489 <|Speech|>
asr_example_cn_en <|Speech|>
ID0012W0014 <|Speech|>

下面生成jsonl文件时需要注意,如果你只准备了train_wav.scp和train_text.txt文件,那么执行下面这样的命令。

# 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'

注意:SenseVoice会自动打标。

如果是准备了全部文件,那么执行下面命令。

# generate train.jsonl and val.jsonl from wav.scp, text.txt, text_language.txt, emo_target.txt, event_target.txt
sensevoice2jsonl \
++scp_file_list='["../../../data/list/train_wav.scp", "../../../data/list/train_text.txt", "../../../data/list/train_text_language.txt", "../../../data/list/train_emo.txt", "../../../data/list/train_event.txt"]' \
++data_type_list='["source", "target", "text_language", "emo_target", "event_target"]' \
++jsonl_file_out="../../../data/list/train.jsonl"

生成的jsonl文件会保存到上面指定的路径下。我们训练之前最好检查一下生成的jsonl文件是否对。

1.训练

现在我们可以开始训练了,首先是检查finetune.sh脚本中的参数看看对不对,如显卡索引对不对,默认是使用了两张显卡,如果你只有一张,那么就需要修改,如果你是两张,那么可以不用修改直接运行这个脚本。

训练中的loss曲线可通过tensorboard来查看,下面是我使用了300多条专业名词数据集做的微调训练的loss曲线。

训练loss曲线

可以看到这个训练是有效果的,如果这个loss曲线是上升的,说明这个模型训练的参数设置的不对或者训练的数据集不干净,比如音频或文本没有对应上,或者音频采样率过低,比如8k。训练这个模型,我们推荐使用的音频采样率是大于等于16k。

训练的时候我们执行bash finetune.sh就可以了。

如果想要查看tensorboard曲线,需要先安装这个tensorboard依赖,如果你使用的是autodl平台训练的,那么可以执行下面命令先把默认启动的tensorboard结束掉,然后重新执行,并且指定端口和路径。

ps -ef | grep tensorboard | awk '{print $2}' | xargs kill -9
nohup tensorboard --port 6007 --logdir /path/to/your/tf-logs/direction > tensorboard.log 2>&1 &

2. 评估字错率

如果评估字错率,可以看我的往期文章,点击这里跳转

3. 联系

如果你们想要训练Paraformer或者SenseVoice,但是不会训练,也可以添加我的微信lukeewin01,进行付费训练。添加时记得备注来自哪个平台,来意是什么。如果不备注,不会通过。

Q.E.D.


热爱生活,热爱程序