自ModelScope魔搭社区发布以来,众开发者在ModelScope上传与下载模型,并集成到自己的语音识别服务中。为了方便用户更好地利用ModelScope进行语音识别服务,我们推出了语音识别基础框架FunASR,希望在语音识别的学术研究和工业应用之间架起一座桥梁。FunASR已经集成到ModelScope中,提供的工业级的语音识别模型的推理与微调定制,使得研究人员和开发者可以更加便捷的进行语音识别模型的研究和生产,促进语音识别生态的发展。本次同步迭代发布新版本和升级新功能,可支持用户基于自己的数据进行模型训练和微调,同时发布了语音识别链路上的七大技术模块和模型,来更好地构建面向应用的语音识别服务。新版本[funasr-0.1.6, modelscope-1.2.0]更新地址:ModelScope:https://www.modelscope.cn/home FunASR:https://github.com/alibaba-damo-academy/FunASR*(本文链接均推荐复制地址后在浏览器中打开)
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
▏联系我们
使用中如遇到任何问题,欢迎通过ModelScope社区与我们互动。https://developer.aliyun.com/community/modelscope
也欢迎语音开源和语音应用感兴趣的研究人员和开发人员加入魔搭语音服务社区和FunASR社区!
ModelScope与FunASR区别与联系:
ModelScope提供模型托管服务,同时通过集成高层API的方式对FunASR进行封装,提供方便快捷的统一接口,进行模型推理与微调功能,用户容易上手。
FunASR作为基础框架,可以独立于ModelScope提供模型推理与微调服务以及学术模型的训练能力。由于ModelScope封装较深,对于定制化需求较高的专业人士,可以通过修改FunASR源码的方式来满足自己的实际需求。