git地址:https://gitee.com/Tele-AI/TeleSpeech-ASR
星辰超多方言语音识别大模型v1.0,由30万小时无标注多方言语音数据进行预训练,并利用内部30种有标注数据进行微调,打破单一模型只能识别特定单一方言的困境,可支持理解粤语、上海话、四川话、温州话等30种方言
本次开源三个模型:两个30万小时无标注语音预训练模型和一个KeSpeech数据集8种方言微调模型。发布版本和下载链接见下表
模型版本 | 参数量 | 下载链接 | 字典 | 备注 |
---|---|---|---|---|
pretrain_base | 0.09 B | TeleSpeech-ASR1.0-base | ✗ | 30万小时无标注语音预训练模型 |
pretrain_large | 0.3 B | TeleSpeech-ASR1.0-large | ✗ | 30万小时无标注语音预训练模型 |
finetune_large_kespeech | 0.3 B | TeleSpeech-ASR1.0-large-kespeech | dict.char7531.txt | 基于pretrain_large,采用KeSpeech数据集8种方言微调训练 |
finetune模型为已经在特定数据集微调过的模型,可直接使用
pretrain模型为无监督预训练模型,无法直接进行ASR任务,需要用少量标注数据进行有监督训练后使用。相比于直接训练的方言识别模型,基于预训练模型可以利用更少的有标注数据获得更好的方言识别性能。我们提供了两种有监督训练框架,用于下游ASR任务:1) 基于fairseq的预训练模型微调; 2) 基于wenet的表征提取(特征提取器)训练下游ASR模型
PyTorch version >= 1.13.0
Python version >= 3.8
数据准备、程序训练需要使用kaldi,请确保已正确安装:https://github.com/kaldi-asr/kaldi
若已有提好的特征,程序运行时可以使用wenet开源框架中kaldi_io.py实现的方法替换kaldiio.load_mat,从而无需安装kaldi
安装fairseq及其依赖
$ git clone https://github.com/pytorch/fairseq$ cd fairseq$ pip install --editable ./
安装fairseq额外依赖以及wenet表征训练任务运行所需依赖
$ pip install -r requirements.txt
若只需要fairseq进行微调、解码,可以不安装完整的requirements.txt,只需保证kaldiio, timm, editdistance, soundfile已正确安装
$ pip install kaldiio timm editdistance soundfile
模型输入为从16K采样率音频中提取的40维mfcc特征,非原始音频
利用kaldi提取40维mfcc特征,运行脚本参考prepare_kaldi_feats.sh
可将运行脚本prepare_kaldi_feats.sh
与参数设置mfcc_hires.conf
置于kaldi任一egs目录下(与cmd.sh等脚本平级,例如/path/to/kaldi/egs/aishell/s5/prepare_kaldi_feats.sh),运行prepare_kaldi_feats.sh
即可
为各数据集准备训练用文件data.list
,可参考make_datalist.py
,以\t
分隔:
$ cat train/data.listutt:X0000000000_100638174_S00037 feat:/data/raw_nnaudio.test.1.ark:2983479385 feat_shape:363,40 text:不惜在这种试验中毁灭包括自己在内的一切 token:不 惜 在 这 种 试 验 中 毁 灭 包 括 自 己 在 内 的 一 切 tokenid:[TOKENID] token_shape:19,5537utt:X0000000001_100849618_S00006 feat:/data/raw_nnaudio.test.1.ark:2984296665 feat_shape:345,40 text:在他们收到足够建立大统一模型的数据后 token:在 他 们 收 到 足 够 建 立 大 统 一 模 型 的 数 据 后 tokenid:[TOKENID] token_shape:18,5537...
微调阶段,需要准备fairseq格式的 dict.${label}.txt
,${label}
为建模单元类型,如ltr, bpe等。以dict.ltr.txt
为例:
是 2好 3...
预训练模型表征训练ASR任务阶段,需要准备wenet格式的lang_char.txt
,相比于dict.${label}.txt
额外添加<blank>
, <unk>
, <sos/eos>
3个token,例如
<blank> 0<unk> 1是 2好 3...<sos/eos> 5536
fairseq环境准备,修改data2vec_dialect/path.sh
文件中/path/to/fairseq
为fairseq安装路径
利用kaldi提取音频特征,并保存为以 .tsv 结尾的文件,格式参考特征提取
进入data2vec_dialect目录,并修改run_scripts/decode.sh
文件,参考推理与解码阶段
在data2vec_dialect路径下,执行run_scripts/decode.sh
*仅经过微调后的finetune模型支持直接推理,无监督预训练模型pretrain_base
和pretrain_large
需要先在标注数据上训练后,再进行推理,详见预训练模型微调或表征训练下游任务
准备train.tsv
和dev.tsv
,保存于同一训练目录下
$ ln -s /path/to/train/data.list /path/to/train/train.tsv$ ln -s /path/to/dev/data.list /path/to/train/dev.tsv
进入data2vec_dialect目录,修改path.sh
文件中/path/to/fairseq
为fairseq安装路径
将run_scripts/run_d2v_finetune.sh
中/path/to
相关路径替换
修改task.data
为 .tsv 文件保存路径,如task.data=/data/wenetspeech/train
在data2vec_dialect路径下,执行
$ bash run_scripts/run_d2v_finetune.sh
同样修改run_scripts/decode.sh
中的模型路径、测试数据路径等
dataset.gen_subset
为测试数据路径下 .tsv 文件的名称,可配置多个
执行
$ bash run_scripts/decode.sh
进入wenet_representation路径,修改path.sh
文件中fairseq
, data2vec_dialect
, wenet_representation
相关路径
连续表征训练与解码:
配置run_d2v.sh
中dataset相关内容,执行
$ bash run_d2v.sh
离散表征训练与解码:
首先根据data.list
,准备离散表征对应训练文件data.list.discrete
,修改wenet/discrete_token/kmeans_d2v.yaml
中model_dir
和user_dir
,执行
$ bash wenet/discrete_token/dump_feat.sh
再配置run_discrete.sh
中dataset相关内容,执行
$ bash run_discrete.sh