语音识别系列︱paddlespeech的开源语音识别模型测试(三)

参考:
语音识别系列︱用python进行音频解析(一)
语音识别系列︱paddlehub的开源语音识别模型测试(二)

上一篇paddlehub是一些预训练模型,paddlespeech也有,所以本篇就是更新paddlespeech里面的模型。

1 安装

参考:PaddleSpeech 一键预测,快速上手Speech开发任务

PaddleSpeech 是 all-in-one 的语音算法工具箱,包含多种领先国际水平的语音算法与预训练模型。你可以从中选择各种语音处理工具以及预训练模型,支持语音识别,语音合成,声音分类,声纹识别,标点恢复,语音翻译等多种功能,PaddleSpeech Server模块可帮助用户快速在服务器上部署语音服务。

相关依赖:
gcc >= 4.8.5
paddlepaddle >= 2.3.1
python >= 3.7
linux(推荐), mac, windows

pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
pip install pytest-runner
pip install paddlespeech


2 quick start 示例

2.1 语音识别

文档链接:语音识别

第一个语音识别的示例:

>>> from paddlespeech.cli.asr.infer import ASRExecutor
>>> asr = ASRExecutor()
>>> result = asr(audio_file="zh.wav")
>>> print(result)
我认为跑步最重要的就是给我带来了身体健康

以为安装了paddlespeech,就直接可以用了;
但是有一些案例会报错,所以,最好就是直接git github的,再调用:

git clone https://github.com/PaddlePaddle/PaddleSpeech.git
cd PaddleSpeech

参数:

  • input(必须输入):用于识别的音频文件。
  • model:ASR 任务的模型,默认值:conformer_wenetspeech
  • lang:模型语言,默认值:zh
  • sample_rate:音频采样率,默认值:16000
  • config:ASR 任务的参数文件,若不设置则使用预训练模型中的默认配置,默认值:None
  • ckpt_path:模型参数文件,若不设置则下载预训练模型使用,默认值:None
  • yes;不需要设置额外的参数,一旦设置了该参数,说明你默认同意程序的所有请求,其中包括自动转换输入音频的采样率。默认值:False
  • device:执行预测的设备,默认值:当前系统下 paddlepaddle 的默认 device。
  • verbose: 如果使用,显示 logger 信息。

预训练模型包括:

模型 语言 采样率
conformer_wenetspeech zh 16k
conformer_online_multicn zh 16k
conformer_aishell zh 16k
conformer_online_aishell zh 16k
transformer_librispeech en 16k
deepspeech2online_wenetspeech zh 16k
deepspeech2offline_aishell zh 16k
deepspeech2online_aishell zh 16k
deepspeech2offline_librispeech en 16k

另外官方有一个demo,是使用预训练模型的jupyter : 使用 Transformer 进行语音识别tutorial_transformer.ipynb
感觉跟以上的不同,可能后续会试一下

2.2 标点恢复

可以看:punctuation_restoration/README_cn.md

>>> from paddlespeech.cli.text.infer import TextExecutor
>>> text_punc = TextExecutor()
>>> result = text_punc(text="今天的天气真不错啊你下午有空吗我想约你一起去吃饭")
今天的天气真不错啊!你下午有空吗?我想约你一起去吃饭。

案例2:

import paddle
from paddlespeech.cli.text import TextExecutor

text_executor = TextExecutor()
result = text_executor(
    text='今天的天气真不错啊你下午有空吗我想约你一起去吃饭',
    task='punc',
    model='ernie_linear_p7_wudao',
    lang='zh',
    config=None,
    ckpt_path=None,
    punc_vocab=None,
    device=paddle.get_device())
print('Text Result: \n{}'.format(result))

参数:

  • input(必须输入):原始文本。
  • task:子任务,默认值:punc
  • model:文本模型类型,默认值:ernie_linear_p7_wudao
  • lang:模型语言, 默认值:zh
  • config:文本任务的配置文件,若不设置则使用预训练模型中的默认配置,默认值:None
  • ckpt_path:模型参数文件, 若不设置则下载预训练模型使用,默认值:None
  • punc_vocab:标点恢复任务的标点词表文件,默认值:None
  • device:执行预测的设备,默认值:当前系统下 paddlepaddle 的默认 device。

两个预训练模型,以下是 PaddleSpeech 提供的可以被命令行和 python API 使用的预训练模型列表:

模型 语言 标点类型数
ernie_linear_p3_wudao zh 3(,。?)
ernie_linear_p7_wudao zh 7(,。!?、:;)

3 案例

3.1 视频字幕生成

是把语音识别 + 标点恢复同时使用。

参考:视频字幕生成

import paddle
from paddlespeech.cli.asr import ASRExecutor
from paddlespeech.cli.text import TextExecutor

asr_executor = ASRExecutor()
text_executor = TextExecutor()

text = asr_executor(
    audio_file='input.wav',
    device=paddle.get_device())
result = text_executor(
    text=text,
    task='punc',
    model='ernie_linear_p3_wudao',
    device=paddle.get_device())
print('Text Result: \n{}'.format(result))

输出:

Text Result:
当我说我可以把三十年的经验变成一个准确的算法,他们说不可能。当我说我们十个人就能实现对十九个城市变电站七乘二十四小时的实时监管,他们说不可能。

3.2 声音分类

不是本文重点,但是这个分类有点意思,就记录一下

识别声音:cls_tutorial.ipynb

声音分类根据用途还可以继续细分:

  • 副语言识别:说话人识别(Speaker Recognition), 情绪识别(Speech Emotion Recognition),性别分类(Speaker gender classification)
  • 音乐识别:音乐流派分类(Music Genre Classification)
  • 场景识别:环境声音分类(Environmental Sound Classification)
  • 声音事件检测:各个环境中的声学事件检测

语音识别系列︱paddlespeech的开源语音识别模型测试(三)_第1张图片

相较于 CV 领域的 ImageNet 数据集,谷歌在 2017 年开放了一个大规模的音频数据集 AudioSet[4],它是目前最大的用于音频分类任务的数据集。该数据集包含了 632 类的音频类别以及 2084320 条人工标记的每段 10 秒长度的声音剪辑片段(包括 527 个标签),数据总时长为 5,800 小时。
语音识别系列︱paddlespeech的开源语音识别模型测试(三)_第2张图片
音频样本可分为 5 个主要类别:

  • 动物声音(Animals)
  • 自然界产生的声音和水声(Natural soundscapes & water sounds)
  • 人类发出的非语言声音(Human, non-speech sounds)
  • 室内声音(Interior/domestic sounds)
  • 室外声音和一般噪声(Exterior/urban noises)。

4 paddlehub 与 paddlespeech的对比

4.1 语音识别模型对比

笔者随便用同一个视频,不同的模型跑了一下:

paddlehub里面最好的是u2_conformer_wenetspeech模型:

#u2_conformer_wenetspeech
强调他的粉质用细腻还有定妆或有的效果因为西得脸昂的水花西子那分花西子做事情是我真的很任务中国人的冬光彩妆红包们不是是机涂香粉核压了水者想打开我们包装得出以前是白色粉丝或者再走要让珍珠粉丝蜜粉还加了上瘾的感就是很丝滑的还经下了菊花山水花粉过璃花精华以及白几百点白树的植物量的成分好去上午少微好的分刚开始用的话爱下了它但是这么多鼻子都够了运输过程都不要整全部飞出来了它有个白色白色的一层不然后就把拿起来不要把那个网给我撕掉了

paddlespeech的模型,应该同时有好几个,但是不知道为什么调用起来输出都是一样的
而且deepspeech2offline_aishell会报错AttributeError: 'BiTransformerDecoder' object has no attribute 'init_decoder'
笔者就没有细究了。


# 模型:conformer_online_multicn 输出结果:
想调它的粉质又细腻还有定妆或有的效所所以记得两岸的水花西子地粉是水花西子做事情是我真的很任中国人的中装彩妆服锅方面不其是及图香粉和压了进水暖肉下打开我们的包装走出以前是白色粉丝或者带色让是珍珠粉丝密粉还加了上脸的感觉是很丝滑的拍金上了水花山水花粉茉莉花精华以及白集白脸白素的植物量成分保是上午稍微好的垃西色本取分刚开始有的话爱成它那是水子这么多不纸的就够了运输过程都标准植部堆出来了它有个白色的白色的A层布然后就把拿起来不要把那个网给我撕掉了  

4.2 标点恢复对比

paddlehub的结果:

punc_texts = model.add_puncs([text])
print(punc_texts)

>>> ['想调它的粉质,又细腻,还有定妆,或有的效所,所以记得两岸的水花西子,地粉,是水花西子,做事情是,我真的很任,中国人的,中装,彩妆,服,锅方面,不其是,及,图,香粉,和压了进水,暖肉下,打开我们的包装,走出,以前是白色粉丝,或者带色,让是珍珠粉丝,密粉,还加了上脸的,感觉,是很丝滑的,拍金,上了水花山,水花粉,茉莉花精华,以及白集,白脸,白素的植物量,成,分,保是上午稍微好的,垃西,色,本取分,刚开始有的话,爱成它,那是水子,这么多不纸的就够了,运输过程都标准,植部堆出来了,它有个白色的,白色的a层布,然后就把拿起来,不要把那个网给我撕掉了。']

paddlespeech的结果:


# 模型1:ernie_linear_p7_wudao
result = text_executor(
    text=text,
    task='punc',
    model='ernie_linear_p7_wudao',
    device=paddle.get_device())
print('Text Result: \n{}'.format(result))

>>> 想调它的粉质又细腻,还有定妆或有的效所,所以记得两岸的水花西子地粉是水花西子做事情是我真的很任中国人的中装彩妆服锅方面不其是及图香粉和压了进水暖肉下打开我们的包装,走出以前是白色粉丝或者带色让是珍珠粉丝密粉还加了,上脸的感觉是很丝滑的拍金上了水花山水花粉,茉莉花精华以及白集白脸白素的植物量成分保是上午稍微好的垃西色本取分刚开始有的话爱成它那是水子这么多不纸的就够了,运输过程都标准植部堆出来了它有个白色的白色的a层布,然后就把拿起来不要把那个网给我撕掉了。

# 模型2:
result = text_executor(
    text=text,
    task='punc',
    model='ernie_linear_p3_wudao',
    device=paddle.get_device())
print('Text Result: \n{}'.format(result))

>>> 想调它的粉质又细腻,还有定妆或有的效所,所以记得两岸的水花西子地粉是水花西子做事情是我真的很任中国人的中装彩妆服锅方面不其是及图香粉和压了进水暖肉下打开我们的包装,走出以前是白色粉丝或者带色让是珍珠粉丝密粉还加了,上脸的感觉是很丝滑的拍金上了水花山水花粉,茉莉花精华以及白集白脸白素的植物量成分保是上午稍微好的垃西色本取分刚开始有的话爱成它那是水子这么多不纸的就够了,运输过程都标准植部堆出来了它有个白色的白色的a层布,然后就把拿起来不要把那个网给我撕掉了。
​


4.3 整体评价

从已知的预训练模型调用来看,paddlehub > paddlespeech,但是整体效果都不是特别理想。

可能:

  • 语音识别模型,需要用paddlespeech重新训练会更好
  • 标点恢复对比,需要设置一些punc_vocab + 重训练会更好些

参考文献:

PaddleSpeech 一键预测,快速上手Speech开发任务

你可能感兴趣的:(语音识别,语音识别,开源,python,标点恢复,paddle)