01
七大模型开源:
语音识别链路全线可选
开源模型1:Paraformer-large长音频模型https://www.modelscope.cn/models/damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch/summary在此前开源的paraformer-large模型的基础上集成了语音端点检测(VAD)模型, 文本后处理标点模型,音频文本对齐的时间戳模型。从而可以对时长为数小时的音频进行识别,输出带标点的文本,以及输出时间戳用于音字对齐。
开源模型2:语音端点检测VAD模型https://modelscope.cn/models/damo/speech_fsmn_vad_zh-cn-16k-common-pytorch/summary本次开源的VAD模型是达摩院语音实验室提出的基于FSMN-Monophone的高效语音端点检测模型,可以用于检测长音频中有效语音的起止时间点信息。从而可以将有效语音送入后续的语音识别模型,减少无效的噪声和长静音片段对语音识别的影响。
开源模型3:中文标点预测通用模型https://www.modelscope.cn/models/damo/punc_ct-transformer_zh-cn-common-vocab272727-pytorch/summary本次开源的中文标点预测通用模型是达摩院语音实验室提出的基于Controllable Time-delay Transformer的高效后处理框架中的标点模块。本次开源的中文通用标点模型可以被应用于文本类输入的标点预测,也可应用于语音识别结果的后处理步骤,协助语音识别模块输出具有可读性的文本结果。
开源模型4:5M量级的设备端指令词识别模型https://www.modelscope.cn/models/damo/speech_paraformer-tiny-commandword_asr_nat-zh-cn-16k-vocab544-pytorch/summary
Paraformer-Tiny-CommandWord是基于Paraformer框架的小参数量指令词自由说模型,模型的参数量在5M量级。本模型所建模的词表为智能家居语音交互中的常用指令词,共544个汉字与字母,指令词包括但不限于“打开/关闭/调大/调小 音乐/空调/照明”等。
开源模型5:说话人确认模型https://www.modelscope.cn/models/damo/speech_xvector_sv-zh-cn-cnceleb-16k-spk3465-pytorch/summary本次开源的说话人确认模型(Speaker Verification)基于ResNet34。该模型是达摩院语音团队在常用开源数据集CN-Celeb 1&2和会议场景数据集AliMeeting上预训练得到,可以用于通用任务的说话人嵌入码(speaker embedding)提取,或进行说话人确认任务。 该模型还可以用于说话人日志(speaker diarization)任务,并在callhome和Alimeeting上取得SOTA的识别效果。 具体可以参考我们发表于EMNLP 2022上的论文https://arxiv.org/abs/2211.10243。
开源模型6:中文无监督预训练Data2vec模型https://www.modelscope.cn/models/damo/speech_data2vec_pretrain-zh-cn-aishell2-16k-pytorch/summary本次开源的Data2vec预训练模型基于Meta AI在ICML上提出的data2vec实现。预训练采用开源数据集AISHELL-2,微调采用开源数据集AISHELL-1,微调代码开源在FunASR。不同于data2vec论文,我们采用FBANK代替原始音频作为输入,提高了模型训练和推理的效率。开源的预训练模型可以用于各种下游任务进行微调,也可以直接作为特征提取器使用。同时,我们还开源了微调后的语音识别模型。实验结果显示,相比于wav2vec2.0,其在AISHELL-1验证集上,CER相对降低13.6%;在AISHELL-1测试集上,CER相对降低12.8%。后续,我们将开源完整的预训练代码,方便科研人员进行复现与改进。
开源模型7:Paraformer-large-AISHELL1/AISHELL-2微调模型基于之前开源的Paraformer-large模型,进一步分别采用开源的AISHELL-1和AISHELL-2数据进行finetuning,从而在相应的测试集上可以获得进一步的性能提升。模型finetuning的recipe开源在FunASR。
02
功能完善:
代码易用,推理速度UPUP!
Pipeline更新
- 基于Modelscope模型推理pipeline,新增加多种输入音频方式,如wav.scp、音频bytes、音频采样点pcm格式、wav格式等。
- Paraformer与ParaformerBert模型新增加batch级解码,加快推理速度。
- 新增基于ModelScope微调训练定制模型,可通过调用modelscope.trainers快速实现模型微调训练。
- 优化pipeline推理速度,对于单条音频输入,推理速度提升显著。
基于ModelScope进行推理
推理支持音频格式如下:
- wav文件路径例如:data/test/audios/asr_example.wav
- wav文件url,例如:https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav
- wav二进制数据,格式bytes,例如:用户直接从文件里读出bytes数据或者是麦克风录出bytes数据。
- 已解析的audio音频,例如:audio, rate = soundfile.read("asr_example_zh.wav"),类型为numpy.ndarray或者torch.Tensor。
- wav.scp文件,需符合如下要求:
cat wav.scpasr_example1 data/test/audios/asr_example1.wavasr_example2 data/test/audios/asr_example2.wav
以输入格式为文件wav.scp(注:文件名需要以.scp结尾), 通过output_dir 参数指定识别结果写入路径(其他格式不需要指定output_dir参数),具体api调用方式可参考如下范例:
from modelscope.pipelines import pipelinefrom modelscope.utils.constant import Tasks inference_pipeline = pipeline( task=Tasks.auto_speech_recognition, model='damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch', output_dir='./output_dir') inference_pipeline("wav.scp")
识别结果输出路径output_dir结构如下
tree output_dir/output_dir/└── 1best_recog ├── rtf ├── score └── text1 directory, 3 files
其中,rtf:计算过程耗时统计;score:识别路径得分;text:语音识别结果文件。
基于ModelScope进行微调
大数据训练的通用领域识别模型,开发者可以基于此模型利用ModelScope的微调功能进一步进行模型的领域定制化。
>>以下演示基于私有数据集进行微调的操作过程:
私有数据集格式按如下准备:
tree ./example_data/./example_data/├── validation│ ├── text│ └── wav.scp└── train ├── text └── wav.scp2 directories, 4 files
其中,text文件中存放音频标注,wav.scp文件中存放wav音频绝对路径,样例如下:
cat ./example_data/textBAC009S0002W0122 而 对 楼 市 成 交 抑 制 作 用 最 大 的 限 购BAC009S0002W0123 也 成 为 地 方 政 府 的 眼 中 钉 cat ./example_data/wav.scpBAC009S0002W0122 /mnt/data/wav/train/S0002/BAC009S0002W0122.wavBAC009S0002W0123 /mnt/data/wav/train/S0002/BAC009S0002W0123.wav
训练私有数据代码范例如下:
import osfrom modelscope.metainfo import Trainersfrom modelscope.trainers import build_trainerfrom funasr.datasets.ms_dataset import MsDataset def modelscope_finetune(params): if not os.path.exists(params.output_dir): os.makedirs(params.output_dir, exist_ok=True) # dataset split ["train", "validation"] ds_dict = MsDataset.load(params.data_path) kwargs = dict( model=params.model, model_revision=params.model_revision, data_dir=ds_dict, dataset_type=params.dataset_type, work_dir=params.output_dir, batch_bins=params.batch_bins, max_epoch=params.max_epoch, lr=params.lr) trainer = build_trainer(Trainers.speech_asr_trainer, default_args=kwargs) trainer.train() if __name__ == '__main__': from funasr.utils.modelscope_param import modelscope_args params = modelscope_args(model="damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch") params.output_dir = "./checkpoint" # m模型保存路径 params.data_path = "./example_data/" # 数据路径 params.dataset_type = "small" # 小数据量设置small,若数据量大于1000小时,请使用large,加快训练速度 params.batch_bins = 2000 # batch size,如果dataset_type="small",batch_bins单位为fbank特征帧数,如果dataset_type="large",batch_bins单位为毫秒 params.max_epoch = 50 # 最大训练轮数 params.lr = 0.00005 # 设置学习率 modelscope_finetune(params)
若使用多卡进行训练,可将上述代码保存为py文件(如finetune.py)后,执行如下命令:
CUDA_VISIBLE_DEVICES=1,2 python -m torch.distributed.launch --nproc_per_node 2 finetune.py > log.txt 2>&1