Tele-AI / TeleSpeech-ASR

521 stars 45 forks source link

关于fairseq和wenet中模型结构的区别 #38

Open llh666521 opened 3 months ago

llh666521 commented 3 months ago

您好!

首先,非常感谢您开源了30万小时的预训练模型。我最近正在使用您的模型对粤语和四川话进行微调,过程中遇到了一些问题,想请教您:

  1. 预训练语料中粤语和四川话的占比:请问在您的预训练语料中,粤语和四川话分别占据了多大的比例?了解这一信息对我微调模型的效果评估非常重要。

  2. 动态帧和GPU显存利用:在Wenet中,通过动态帧来指定batch size时,不同GPU的显存使用差异很大,导致无法充分利用GPU资源。请问这是否是由于不同音频的MFCC特征长度差异较大引起的?

  3. 微调效果差异:我分别在Fairseq和Wenet中进行了微调。Fairseq中,预训练模型直接进行CTC微调;在Wenet中,预训练模型则作为前端,然后接入encoder+decoder进行训练。实验结果显示,Wenet中的微调效果明显不如Fairseq。请问这种差异是由于两者的训练架构不同导致的,还是因为我在Wenet中的参数设置不当?(我的训练资源是8卡24GB显存的4090)

谢谢您的解答!

再次感谢您的帮助!

TTTdas commented 3 months ago

您好!

首先,非常感谢您开源了30万小时的预训练模型。我最近正在使用您的模型对粤语和四川话进行微调,过程中遇到了一些问题,想请教您:

  1. 预训练语料中粤语和四川话的占比:请问在您的预训练语料中,粤语和四川话分别占据了多大的比例?了解这一信息对我微调模型的效果评估非常重要。
  2. 动态帧和GPU显存利用:在Wenet中,通过动态帧来指定batch size时,不同GPU的显存使用差异很大,导致无法充分利用GPU资源。请问这是否是由于不同音频的MFCC特征长度差异较大引起的?
  3. 微调效果差异:我分别在Fairseq和Wenet中进行了微调。Fairseq中,预训练模型直接进行CTC微调;在Wenet中,预训练模型则作为前端,然后接入encoder+decoder进行训练。实验结果显示,Wenet中的微调效果明显不如Fairseq。请问这种差异是由于两者的训练架构不同导致的,还是因为我在Wenet中的参数设置不当?(我的训练资源是8卡24GB显存的4090)

谢谢您的解答!

再次感谢您的帮助!

感谢您的关注!

  1. 预训练语料里大部分是普通话,不过粤语和四川话相比其他方言占比还是不少的。在我们自己数据集测试的时候,发现100h的粤语或者四川话进行微调,就可以达到很好的效果
  2. 根据您的描述来看,应该是存在某一条音频过长导致的。不过我没有尝试过使用bins的方式来指定batch,按理说wenet的ddp应该是给每张卡上相同的数据集才对。您可以直接使用给定yaml中batchsize的方式来指定batch
  3. 在wenet上是把预训练模型作为特征提取器来使用的,不会改变预训练模型的参数权重,所以结果上会比fairseq微调要差。另外,如果使用的是开源的训练参数并且希望与该训练参数一致的话,需要根据GPU数量减少/增加accum_grad及batch_size的设置。您可以将微调后的模型,放到wenet中训练下游模型,结果应该比微调的结果要好,这可以辅助验证wenet上参数是否合理。
llh666521 commented 3 months ago

您好! 首先,非常感谢您开源了30万小时的预训练模型。我最近正在使用您的模型对粤语和四川话进行微调,过程中遇到了一些问题,想请教您:

  1. 预训练语料中粤语和四川话的占比:请问在您的预训练语料中,粤语和四川话分别占据了多大的比例?了解这一信息对我微调模型的效果评估非常重要。
  2. 动态帧和GPU显存利用:在Wenet中,通过动态帧来指定batch size时,不同GPU的显存使用差异很大,导致无法充分利用GPU资源。请问这是否是由于不同音频的MFCC特征长度差异较大引起的?
  3. 微调效果差异:我分别在Fairseq和Wenet中进行了微调。Fairseq中,预训练模型直接进行CTC微调;在Wenet中,预训练模型则作为前端,然后接入encoder+decoder进行训练。实验结果显示,Wenet中的微调效果明显不如Fairseq。请问这种差异是由于两者的训练架构不同导致的,还是因为我在Wenet中的参数设置不当?(我的训练资源是8卡24GB显存的4090)

谢谢您的解答! 再次感谢您的帮助!

感谢您的关注!

  1. 预训练语料里大部分是普通话,不过粤语和四川话相比其他方言占比还是不少的。在我们自己数据集测试的时候,发现100h的粤语或者四川话进行微调,就可以达到很好的效果
  2. 根据您的描述来看,应该是存在某一条音频过长导致的。不过我没有尝试过使用bins的方式来指定batch,按理说wenet的ddp应该是给每张卡上相同的数据集才对。您可以直接使用给定yaml中batchsize的方式来指定batch
  3. 在wenet上是把预训练模型作为特征提取器来使用的,不会改变预训练模型的参数权重,所以结果上会比fairseq微调要差。另外,如果使用的是开源的训练参数并且希望与该训练参数一致的话,需要根据GPU数量减少/增加accum_grad及batch_size的设置。您可以将微调后的模型,放到wenet中训练下游模型,结果应该比微调的结果要好,这可以辅助验证wenet上参数是否合理。

谢谢您的解答,您提到的将微调后的模型,放到wenet中训练下游模型,我可以用我在fairseq微调过的模型来放到wenet中训练下游模型吗?

TTTdas commented 3 months ago

您好! 首先,非常感谢您开源了30万小时的预训练模型。我最近正在使用您的模型对粤语和四川话进行微调,过程中遇到了一些问题,想请教您:

  1. 预训练语料中粤语和四川话的占比:请问在您的预训练语料中,粤语和四川话分别占据了多大的比例?了解这一信息对我微调模型的效果评估非常重要。
  2. 动态帧和GPU显存利用:在Wenet中,通过动态帧来指定batch size时,不同GPU的显存使用差异很大,导致无法充分利用GPU资源。请问这是否是由于不同音频的MFCC特征长度差异较大引起的?
  3. 微调效果差异:我分别在Fairseq和Wenet中进行了微调。Fairseq中,预训练模型直接进行CTC微调;在Wenet中,预训练模型则作为前端,然后接入encoder+decoder进行训练。实验结果显示,Wenet中的微调效果明显不如Fairseq。请问这种差异是由于两者的训练架构不同导致的,还是因为我在Wenet中的参数设置不当?(我的训练资源是8卡24GB显存的4090)

谢谢您的解答! 再次感谢您的帮助!

感谢您的关注!

  1. 预训练语料里大部分是普通话,不过粤语和四川话相比其他方言占比还是不少的。在我们自己数据集测试的时候,发现100h的粤语或者四川话进行微调,就可以达到很好的效果
  2. 根据您的描述来看,应该是存在某一条音频过长导致的。不过我没有尝试过使用bins的方式来指定batch,按理说wenet的ddp应该是给每张卡上相同的数据集才对。您可以直接使用给定yaml中batchsize的方式来指定batch
  3. 在wenet上是把预训练模型作为特征提取器来使用的,不会改变预训练模型的参数权重,所以结果上会比fairseq微调要差。另外,如果使用的是开源的训练参数并且希望与该训练参数一致的话,需要根据GPU数量减少/增加accum_grad及batch_size的设置。您可以将微调后的模型,放到wenet中训练下游模型,结果应该比微调的结果要好,这可以辅助验证wenet上参数是否合理。

谢谢您的解答,您提到的将微调后的模型,放到wenet中训练下游模型,我可以用我在fairseq微调过的模型来放到wenet中训练下游模型吗?

可以的,在wenet上支持 预训练模型 或者 基于fairseq微调后的模型 来提特征。不过需要注意的是,如果您使用的是微调过的模型,需要在train_d2v2_ark_conformer.yaml参数设置中将finetune_model设置为true,num_layer的数值需要减1(如果使用的是多层加权求和方式的话),model_dir换成 微调后的模型 就可以了。详细参数介绍可以参考 https://github.com/Tele-AI/TeleSpeech-ASR/blob/master/wenet_representation/README.md

llh666521 commented 3 months ago

您好! 首先,非常感谢您开源了30万小时的预训练模型。我最近正在使用您的模型对粤语和四川话进行微调,过程中遇到了一些问题,想请教您:

  1. 预训练语料中粤语和四川话的占比:请问在您的预训练语料中,粤语和四川话分别占据了多大的比例?了解这一信息对我微调模型的效果评估非常重要。
  2. 动态帧和GPU显存利用:在Wenet中,通过动态帧来指定batch size时,不同GPU的显存使用差异很大,导致无法充分利用GPU资源。请问这是否是由于不同音频的MFCC特征长度差异较大引起的?
  3. 微调效果差异:我分别在Fairseq和Wenet中进行了微调。Fairseq中,预训练模型直接进行CTC微调;在Wenet中,预训练模型则作为前端,然后接入encoder+decoder进行训练。实验结果显示,Wenet中的微调效果明显不如Fairseq。请问这种差异是由于两者的训练架构不同导致的,还是因为我在Wenet中的参数设置不当?(我的训练资源是8卡24GB显存的4090)

谢谢您的解答! 再次感谢您的帮助!

感谢您的关注!

  1. 预训练语料里大部分是普通话,不过粤语和四川话相比其他方言占比还是不少的。在我们自己数据集测试的时候,发现100h的粤语或者四川话进行微调,就可以达到很好的效果
  2. 根据您的描述来看,应该是存在某一条音频过长导致的。不过我没有尝试过使用bins的方式来指定batch,按理说wenet的ddp应该是给每张卡上相同的数据集才对。您可以直接使用给定yaml中batchsize的方式来指定batch
  3. 在wenet上是把预训练模型作为特征提取器来使用的,不会改变预训练模型的参数权重,所以结果上会比fairseq微调要差。另外,如果使用的是开源的训练参数并且希望与该训练参数一致的话,需要根据GPU数量减少/增加accum_grad及batch_size的设置。您可以将微调后的模型,放到wenet中训练下游模型,结果应该比微调的结果要好,这可以辅助验证wenet上参数是否合理。

谢谢您的解答,您提到的将微调后的模型,放到wenet中训练下游模型,我可以用我在fairseq微调过的模型来放到wenet中训练下游模型吗?

可以的,在wenet上支持 预训练模型 或者 基于fairseq微调后的模型 来提特征。不过需要注意的是,如果您使用的是微调过的模型,需要在train_d2v2_ark_conformer.yaml参数设置中将finetune_model设置为true,num_layer的数值需要减1(如果使用的是多层加权求和方式的话),model_dir换成 微调后的模型 就可以了。详细参数介绍可以参考 https://github.com/Tele-AI/TeleSpeech-ASR/blob/master/wenet_representation/README.md

收到,感谢您的解答!