FunASR/docs_cn/get_started.md
2023-02-15 10:12:03 +08:00

7.5 KiB
Raw Blame History

快速开始

在此我们将以"使用AISHELL-1数据集从随机初始化训练一个paraformer模型"为例介绍如何使用FunASR。根据这个例子用户可以类似地使用别的数据集如AISHELL-2数据集等训练别的模型如conformertransformer等

整体介绍

我们提供了egs/aishell/paraformer/run.sh来实现使用AISHELL-1数据集训练一个paraformer模型。该脚本包含5个阶段包括从数据处理到训练解码等整个流程同时提供了单/多GPU训练和CPU/GPU解码。在详细介绍每个阶段之前我们先对用户需要手动设置的一些参数进行说明。

  • CUDA_VISIBLE_DEVICES: 可用的GPU列表
  • gpu_num: 用于训练的GPU数量
  • gpu_inference: 是否使用GPU进行解码
  • njob: for CPU decoding, indicating the total number of CPU jobs; for GPU decoding, indicating the number of jobs on each GPU. 对于CPU解码表示解码任务数对于GPU解码
  • data_aishell: AISHELL-1原始数据的路径
  • feats_dir: 经过处理得到的特征的保存路径
  • nj: 数据处理时的并行任务数
  • speed_perturb: 变速设置
  • exp_dir: 实验结果的保存路径
  • tag: 实验结果目录的后缀名

阶段 0 数据准备

本阶段用于处理原始的AISHELL-1数据并生成相应的wav.scptext,保存在$feats_dir/data/xxx目录下,这里的xxx表示train, devtest(下同)。 这里我们假设用户已经下载好了AISHELL-1数据集。如果没有用户可以在这里 下载数据,并将$data_aishell设置为相应的路径。下面给出生成的wav.scptext的示例: 本阶段用于处理原始的AISHELL-1数据并生成相应的wav.scptext,保存在$feats_dir/data/xxx目录下,这里的xxx表示train, devtest(下同)。 这里我们假设用户已经下载好了AISHELL-1数据集。如果没有用户可以在这里 下载数据,并将$data_aishell设置为相应的路径。下面给出生成的wav.scptext的示例:

  • wav.scp
BAC009S0002W0122 /nfs/ASR_DATA/AISHELL-1/data_aishell/wav/train/S0002/BAC009S0002W0122.wav
BAC009S0002W0123 /nfs/ASR_DATA/AISHELL-1/data_aishell/wav/train/S0002/BAC009S0002W0123.wav
BAC009S0002W0124 /nfs/ASR_DATA/AISHELL-1/data_aishell/wav/train/S0002/BAC009S0002W0124.wav
...
  • text
BAC009S0002W0122 而 对 楼 市 成 交 抑 制 作 用 最 大 的 限 购
BAC009S0002W0123 也 成 为 地 方 政 府 的 眼 中 钉
BAC009S0002W0124 自 六 月 底 呼 和 浩 特 市 率 先 宣 布 取 消 限 购 后
...

可以看到这两个文件均包括两列第一列是音频的id第二列分别是音频路径和音频对应的抄本。

阶段 1特征提取

本阶段将会基于原始的音频wav.scp提取FBank特征。如果指定了参数speed_perturb,则会额外对音频进行变速来实现数据增强。用户可以设置nj参数来控制特征提取的并行任务数。处理后的特征保存在目录$feats_dir/dump/xxx/ark下,相应的feats.scp文件路径为$feats_dir/dump/xxx/feats.scp。下面给出feats.scp的示例:

  • feats.scp
...
BAC009S0002W0122_sp0.9 /nfs/funasr_data/aishell-1/dump/fbank/train/ark/feats.16.ark:592751055
...

注意该文件的样本顺序已经进行了随机打乱。该文件包括两列第一列是音频的id第二列是对应的kaldi-ark格式的特征。另外在此阶段还会生成训练需要用到的speech_shapetext_shape两个文件,记录了每个样本的特征维度和抄本长度。下面给出这两个文件的示例:

  • speech_shape
...
BAC009S0002W0122_sp0.9 665,80
...
  • text_shape
...
BAC009S0002W0122_sp0.9 15
...

可以看到这两个文件均包括两列第一列是音频的id第二列是对应的特征的维度和抄本的长度。

阶段 2字典准备

本阶段用于生成字典,用于训练过程中,字符到整数索引之间的映射。生成的字典文件的路径为$feats_dir/data/zh_toekn_list/char/tokens.txt。下面给出tokens.txt的示例:

  • tokens.txt
<blank>
<s>
</s>
一
丁
...
龚
龟
<unk>
  • <blank>: 表示CTC训练中的blank
  • <s>: 表示句子的起始符
  • </s>: 表示句子的终止符
  • <unk>: 表示字典外的字符

阶段 3训练

本阶段对应模型的训练。在开始训练之前,需要指定实验结果保存目录exp_dir训练可用GPUCUDA_VISIBLE_DEVICES和训练的gpu数量gpu_num。默认情况下,最好的$keep_nbest_models模型结果会被平均从而来获取更好的性能。

  • DDP Training

我们提供了分布式训练DDP功能具体的细节可以在这里 找到。为了开启分布式训练,需要设置gpu_num大于1。例如设置CUDA_VISIBLE_DEVICES=0,1,5,6,7gpu_num=3则编号为01和5的GPU会被用于训练。

  • DataLoader

我们提供了基于Pytorch Iterable-style DataPipes 实现的大数据DataLoader用户可以通过设置dataset_type=large来启用。

  • Configuration

训练相关的参数,包括模型,优化器,数据等,均可以通过conf目录下的config文件指定。同时用户也可以直接在run.sh脚本中指定相关参数。请避免在config文件和run.sh脚本中设置相同的参数,以免造成歧义。

  • Training Steps

我们提供了两种方式来控制训练的总步数,对应的参数分别为max_epochmax_updatemax_epoch表示训练的最大epoch数max_update表示训练的最大迭代次数。如果这两个参数同时被指定,则一旦训练步数到达其中任意一个参数,训练结束。

  • Tensorboard

用户可以通过tensorboard来观察训练过程中的损失学习率等。可以通过下述指定来实现

tensorboard --logdir ${exp_dir}/exp/${model_dir}/tensorboard/train

阶段 4: 解码

本阶段用于解码得到识别结果同时计算CER来验证训练得到的模型性能。

  • Mode Selection

由于我们提供了paraformeruniasr和conformer等模型因此在解码时需要指定相应的解码模式。对应的参数为mode,相应的可选设置为asr/paraformer/uniasr等。

  • Configuration

我们提供了ctc解码, attention解码和ctc-attention混合解码。这几种解码方式可以通过conf下的解码配置文件中的ctc_weight参数来指定。具体的,ctc_weight=1.0表示CTC解码, ctc_weight=0.0表示attention解码, 0.0<ctc_weight<1.0表示ctc-attention混合解码。

  • CPU/GPU Decoding

我们提供CPU/GPU解码。对于CPU解码用户需要设置gpu_inference=False,同时设置njob来指定并行解码任务数量。对于GPU解码用户需要设置gpu_inference=True,设置gpuid_list来指定哪些GPU用于解码设置njobs来指定每张GPU上的并行解码任务数量。

  • Performance

我们采用CER来验证模型的性能。解码结果保存在$exp_dir/exp/$model_dir/$decoding_yaml_name/$average_model_name/$dset,具体包括text.certext.cer.txt两个文件。text.cer中的内容为识别结果和对应抄本之间的比较,text.cer.txt记录了最终的CER。下面给出text.cer的示例:

  • text.cer
...
BAC009S0764W0213(nwords=11,cor=11,ins=0,del=0,sub=0) corr=100.00%,cer=0.00%
ref:    构 建 良 好 的 旅 游 市 场 环 境
res:    构 建 良 好 的 旅 游 市 场 环 境
...