Files
2025-02-20 12:17:03 +08:00

31 KiB
Raw Blame History

tasks, domain, model-type, frameworks, backbone, metrics, license, language, tags, datasets, indexing, widgets, finetune-support
tasks domain model-type frameworks backbone metrics license language tags datasets indexing widgets finetune-support
auto-speech-recognition
audio
Non-autoregressive
pytorch
transformer/conformer
CER
Apache License 2.0
cn
Paraformer
Alibaba
INTERSPEECH 2022
train test
60,000 hour industrial Mandarin task
AISHELL-1 dev/test
AISHELL-2 dev_android/dev_ios/dev_mic/test_android/test_ios/test_mic
WentSpeech dev/test_meeting/test_net
SpeechIO TIOBE
60,000 hour industrial Mandarin task
results
task dataset metrics
name
Automatic Speech Recognition
name type args
60,000 hour industrial Mandarin task audio 16k sampling rate, 8404 characters
type value description args
CER 8.53% greedy search, withou lm, avg. default
type value description args
RTF 0.0251 GPU inference on V100 batch_size=1
task inputs examples inferencespec
auto-speech-recognition
type name title
audio input 音频
name title inputs
1 示例1
name data
input git://example/asr_example.wav
cpu memory
8 4096
True

Paraformer-large模型介绍

Highlights

  • 热词版本:Paraformer-large热词版模型支持热词定制功能,基于提供的热词列表进行激励增强,提升热词的召回率和准确率。
  • 长音频版本:Paraformer-large长音频模型集成VAD、ASR、标点与时间戳功能可直接对时长为数小时音频进行识别并输出带标点文字与时间戳。

Release Notes

项目介绍

Paraformer是达摩院语音团队提出的一种高效的非自回归端到端语音识别框架。本项目为Paraformer中文通用语音识别模型采用工业级数万小时的标注音频进行模型训练保证了模型的通用识别效果。模型可以被应用于语音输入法、语音导航、智能会议纪要等场景。

Paraformer模型结构

Paraformer模型结构如上图所示由 Encoder、Predictor、Sampler、Decoder 与 Loss function 五部分组成。Encoder可以采用不同的网络结构例如self-attentionconformerSAN-M等。Predictor 为两层FFN预测目标文字个数以及抽取目标文字对应的声学向量。Sampler 为无可学习参数模块依据输入的声学向量和目标向量生产含有语义的特征向量。Decoder 结构与自回归模型类似为双向建模自回归为单向建模。Loss function 部分除了交叉熵CE与 MWER 区分性优化目标,还包括了 Predictor 优化目标 MAE。

其核心点主要有:

  • Predictor 模块:基于 Continuous integrate-and-fire (CIF) 的 预测器 (Predictor) 来抽取目标文字对应的声学特征向量,可以更加准确的预测语音中目标文字个数。
  • Sampler通过采样将声学特征向量与目标文字向量变换成含有语义信息的特征向量配合双向的 Decoder 来增强模型对于上下文的建模能力。
  • 基于负样本采样的 MWER 训练准则。

更详细的细节见:

如何使用与训练自己的模型

本项目提供的预训练模型是基于大数据训练的通用领域识别模型开发者可以基于此模型进一步利用ModelScope的微调功能或者本项目对应的Github代码仓库FunASR进一步进行模型的领域定制化。

在Notebook中开发

对于有开发需求的使用者特别推荐您使用Notebook进行离线处理。先登录ModelScope账号点击模型页面右上角的“在Notebook中打开”按钮出现对话框首次使用会提示您关联阿里云账号按提示操作即可。关联账号后可进入选择启动实例界面选择计算资源建立实例待实例创建完成后进入开发环境进行调用。

基于ModelScope进行推理

  • 推理支持音频格式如下:
    • wav文件路径例如data/test/audios/asr_example.wav
    • pcm文件路径例如data/test/audios/asr_example.pcm
    • 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.scp
asr_example1  data/test/audios/asr_example1.wav
asr_example2  data/test/audios/asr_example2.wav
...
  • 若输入格式wav文件urlapi调用方式可参考如下范例
from modelscope.pipelines import pipeline
from 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')

rec_result = inference_pipeline(audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav')
print(rec_result)
  • 输入音频为pcm格式调用api时需要传入音频采样率参数audio_fs例如
rec_result = inference_pipeline(audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.pcm', audio_fs=16000)
  • 输入音频为wav格式api调用方式可参考如下范例:
rec_result = inference_pipeline(audio_in='asr_example_zh.wav')
  • 若输入格式为文件wav.scp(注:文件名需要以.scp结尾),可添加 output_dir 参数将识别结果写入文件中api调用方式可参考如下范例:
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(audio_in="wav.scp")

识别结果输出路径结构如下:

tree output_dir/
output_dir/
└── 1best_recog
    ├── rtf
    ├── score
    ├── text
    └── time_stamp

1 directory, 4 files

rtf计算过程耗时统计

score识别路径得分

text语音识别结果文件

time_stamp时间戳结果文件

  • 若输入音频为已解析的audio音频api调用方式可参考如下范例
import soundfile

waveform, sample_rate = soundfile.read("asr_example_zh.wav")
rec_result = inference_pipeline(audio_in=waveform)
  • ASR、VAD、PUNC模型自由组合

可根据使用需求对VAD和PUNC标点模型进行自由组合使用方式如下

inference_pipeline = pipeline(
    task=Tasks.auto_speech_recognition,
    model='damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch',
    vad_model='damo/speech_fsmn_vad_zh-cn-16k-common-pytorch',
    vad_model_revision="v1.1.8",
    punc_model='damo/punc_ct-transformer_zh-cn-common-vocab272727-pytorch',
    punc_model_revision="v1.1.6",
)

若不使用PUNC模型可配置punc_model=""或不传入punc_model参数如需加入LM模型可增加配置lm_model='damo/speech_transformer_lm_zh-cn-common-vocab8404-pytorch'。

长音频版本模型默认开启时间戳若不使用时间戳可通过传入参数param_dict['use_timestamp'] = False关闭时间戳使用方式如下

param_dict['use_timestamp'] = False
rec_result = inference_pipeline(audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav', param_dict=param_dict)
)

基于ModelScope进行微调

  • 基于ModelScope上数据集进行微调

AISHELL-1数据集为例完整数据集已经上传ModelScope可通过数据集英文名speech_asr_aishell1_trainsets搜索

import os
from modelscope.metainfo import Trainers
from modelscope.trainers import build_trainer
from modelscope.msdatasets.audio.asr_dataset import ASRDataset

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 = ASRDataset.load(params.data_path, namespace='speech_asr')
    kwargs = dict(
        model=params.model,
        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"                      # 模型保存路径
    params.data_path = "speech_asr_aishell1_trainsets"      # 数据路径可以为modelscope中已上传数据也可以是本地数据
    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直接python finetune.py运行若使用多卡进行训练如下命令

CUDA_VISIBLE_DEVICES=1,2 python -m torch.distributed.launch --nproc_per_node 2 finetune.py > log.txt 2>&1
  • 基于私有数据集进行微调: 只需要设置本地数据存放路径即可:
params.data_path = "speech_asr_aishell1_trainsets"

私有数据集格式按如下准备:

tree ./example_data/
./example_data/
├── validation
│   ├── text
│   └── wav.scp
└── train
    ├── text
    └── wav.scp
2 directories, 4 files

其中text文件中存放音频标注wav.scp文件中存放wav音频绝对路径样例如下

cat ./example_data/text
BAC009S0002W0122 而 对 楼 市 成 交 抑 制 作 用 最 大 的 限 购
BAC009S0002W0123 也 成 为 地 方 政 府 的 眼 中 钉

cat ./example_data/wav.scp
BAC009S0002W0122 /mnt/data/wav/train/S0002/BAC009S0002W0122.wav
BAC009S0002W0123 /mnt/data/wav/train/S0002/BAC009S0002W0123.wav

在本地机器中开发

基于ModelScope进行微调和推理

支持基于ModelScope上数据集及私有数据集进行定制微调和推理使用方式同Notebook中开发。

基于FunASR进行微调和推理

FunASR框架支持魔搭社区开源的工业级的语音识别模型的training & finetuning使得研究人员和开发者可以更加便捷的进行语音识别模型的研究和生产目前已在Github开源https://github.com/alibaba-damo-academy/FunASR 。若在使用过程中遇到任何问题,欢迎联系我们:联系方式

FunASR框架安装

  • 安装FunASR和ModelScope详见
pip install "modelscope[audio_asr]" -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html
git clone https://github.com/alibaba/FunASR.git
cd FunASR
pip install --editable ./

基于FunASR进行推理

接下来会以私有数据集为例介绍如何在FunASR框架中使用Paraformer-large进行推理以及微调。

cd egs_modelscope/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch
python infer.py

基于FunASR进行微调

cd egs_modelscope/paraformer/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch
python finetune.py

若修改输出路径、数据路径、采样率、batch_size等配置及使用多卡训练可参照在Notebook开发中私有数据微调部分的代码修改finetune.py文件中配置。

Benchmark

结合大数据、大模型优化的Paraformer在一序列语音识别的benchmark上获得当前SOTA的效果以下展示学术数据集AISHELL-1、AISHELL-2、WenetSpeech公开评测项目SpeechIO TIOBE白盒测试场景的效果。在学术界常用的中文语音识别评测任务中其表现远远超于目前公开发表论文中的结果远好于单独封闭数据集上的模型。

AISHELL-1

AISHELL-1 test w/o LM w/ LM
Espnet
4.90
4.70
Wenet
4.61
4.36
K2
-
4.26
Blockformer
4.29
4.05
Paraformer-large
1.95
1.68

AISHELL-2

dev_ios test_android test_ios test_mic
Espnet
5.40
6.10
5.70
6.10
WeNet
-
-
5.39
-
Paraformer-large
2.80
3.13
2.85
3.06

Wenetspeech

dev test_meeting test_net
Espnet
9.70
15.90
8.80
WeNet
8.60
17.34
9.26
K2
7.76
13.41
8.71
Paraformer-large
3.57
6.97
6.74

SpeechIO TIOBE

Paraformer-large模型结合Transformer-LM模型做shallow fusion在公开评测项目SpeechIO TIOBE白盒测试场景上获得当前SOTA的效果目前Transformer-LM模型已在ModelScope上开源以下展示SpeechIO TIOBE白盒测试场景without LM、with Transformer-LM的效果

  • Decode config w/o LM:
    • Decode without LM
    • Beam size: 1
  • Decode config w/ LM:
testset w/o LM w/ LM
SPEECHIO_ASR_ZH00001
0.49
0.35
SPEECHIO_ASR_ZH00002
3.23
2.86
SPEECHIO_ASR_ZH00003
1.13
0.80
SPEECHIO_ASR_ZH00004
1.33
1.10
SPEECHIO_ASR_ZH00005
1.41
1.18
SPEECHIO_ASR_ZH00006
5.25
4.85
SPEECHIO_ASR_ZH00007
5.51
4.97
SPEECHIO_ASR_ZH00008
3.69
3.18
SPEECHIO_ASR_ZH00009
3.02
2.78
SPEECHIO_ASR_ZH000010
3.35
2.99
SPEECHIO_ASR_ZH000011
1.54
1.25
SPEECHIO_ASR_ZH000012
2.06
1.68
SPEECHIO_ASR_ZH000013
2.57
2.25
SPEECHIO_ASR_ZH000014
3.86
3.08
SPEECHIO_ASR_ZH000015
3.34
2.67

使用方式以及适用范围

运行范围

  • 现阶段只能在Linux-x86_64运行不支持Mac和Windows。

使用方式

  • 直接推理:可以直接对输入音频进行解码,输出目标文字。
  • 微调:加载训练好的模型,采用私有或者开源数据进行模型训练。

使用范围与目标场景

  • 适合与离线语音识别场景如录音文件转写配合GPU推理效果更加推荐输入语音时长在20s以下若想解码长音频推荐使用Paraformer-large长音频模型集成VAD、ASR、标点与时间戳功能可直接对时长为数小时音频进行识别并输出带标点文字与时间戳。

模型局限性以及可能的偏差

考虑到特征提取流程和工具以及训练工具差异会对CER的数据带来一定的差异<0.1%推理GPU环境差异导致的RTF数值差异。

相关论文以及引用信息

@inproceedings{gao2022paraformer,
  title={Paraformer: Fast and Accurate Parallel Transformer for Non-autoregressive End-to-End Speech Recognition},
  author={Gao, Zhifu and Zhang, Shiliang and McLoughlin, Ian and Yan, Zhijie},
  booktitle={INTERSPEECH},
  year={2022}
}