自监督学习
自监督学习
这是ESPnet2中ssl1配方的模板,专为通用SSL设计。
与其他方案的差异
ESPnet2 提供两种不同的自监督学习(SSL)方案:ssl1 (当前方案) 和 hubert1。
hubert1 是 HuBERT 预训练框架下自监督学习的原始实现。该方案涵盖了预训练所需的所有环节,包括K-means伪标签生成和离散标记评估。这对实现可复现性非常重要。但由于HuBERT需要多个离线处理阶段,该实现较为复杂,因此难以针对新训练方法或其他场景进行修改/适配。
我们创建了新的ssl1配方,旨在使代码库面向未来,以适应其他纯端到端的预训练技术,例如DinoSR、SpeechFlow或w2v-BERT。该配方设计易于定制,并能更好地扩展到大规模预训练设置。
HuBERT在SSL1中的预训练
ssl1代码库也支持HuBERT预训练,但生成伪标签的步骤未包含在该配方中。用户需要运行hubert1配方来获取标签,或自行生成。
要使用hubert1的标签,请按照以下步骤操作
给定一个名为
train_ssl的训练集和一个名为dev_ssl的开发集运行
hubert1/hubert.sh从阶段1到5进行单次迭代。这将生成:一个词汇标记列表。文件名类似
hubert1/data/en_token_list_kmeans_iter1_espnet_hubert_500clusters/word/tokens.txt。具体名称取决于您的超参数设置。两个集合的伪标签文本文件。具体路径取决于您的超参数,但看起来类似于
hubert1/dump/<feat_type>/espnet_hubert/layer_<x>/<data split name>/pseudo_labels_km<num>.txt。
将每个
pseudo_labels_km<num>.txt文件复制到对应的kaldi目录下的ssl文件夹中,并重命名为text。例如:cp hubert1/dump/ssl_feats/espnet_hubert/layer_9/train_ssl/pseudo_labels_km500.txt ssl1/dump/train_ssl/text在
ssl1/run.sh中,添加以下标志:--token_type word--token_list <步骤1.1中的token列表路径>
更新您的训练配置,使用已采用的k-means聚类尺寸
loss: - name: hubert conf: num_classes: <update this>
