开发者学堂课程【模型社区实战课程:让AI能听会说-语音实战速成班】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1199/detail/18165
让 AI 能听会说-语音实战速成班
内容介绍:
一、前言大纲梳理
二、智能语音交互
三、智能互前端——降噪篇
四、智能互前端——唤醒篇
五、语音交互后端——语音识别,语音合成
六、问题解答
一、前言大纲梳理
1.智能语音交互:简单介绍
2.智能互前端——降噪唤醒篇
降噪篇包括智能降噪和智能回声消除
唤醒篇包括移动端唤醒和远场唤醒
3.语音交互后端——语音识别,语音合成
语音识别
语音合成
二、智能语音交互
智能语音交互(Intelligent Speech Interaction)主要是基于语音识别、语音合成、自然语音理解等技术,多种实际应用场景下,赋予产品“能听、会说、懂你”式的智能人机交互体验。
在大家身边,智能语音交互可能最常见的产品形态为 Siri 或者天猫精灵这样的终端产品,这些产品就很好的诠释了智能语音交互的一个产品状态;这类产品通过使用诸如“Hi Siri”或者“天猫精灵”这样的唤醒词,来触发语音互动。用户通过麦克风将音频信息传递给终端产品背后的云服务,由云服务内部的语音识别服务将音频识别成文本,由自然语言处理服务将文本处理成某种意图,由对话服务处理成文本结果,最终通过语音合成技术,将文本合成成语音,交由终端产品进行播放。
下图是智能语音交互的一个基本流程
1.ModelScope 社区智能语音交互相关模型:
(1)ModelScope 目前包括1个智能语音降噪模型,1个智能回声消除模型,2个唤醒模型,28个语音识别模型,8个语音合成模型。
(2)其中语音合成模型包括:4个中文发音入,,2个英式英文,2个美式英文。
(3)语音识别模型包括:
·Paraformer 16k中文online/offline 2个
·Paraformer 16k中文大模型
·Paraformer 8k中文online/offline 2个
·Paraformer Aishell-1/Aishell-2 2个
·UniASR 16k中文 online/offline 2个;8k中文 online/offline 2个;16k中文大模型;16k方言 online/offline 2个
·UniASR 16k中英混 online/offline 2个;16k英/俄/韩/印尼/西班牙/日语 online/offline 各2个
2.ModelScope 语音交互模型
(1)降噪类模型:
达摩智能降噪模型(speech_frcm_ans_cirm_16k)
达摩回声消除模型(speechdfsmn_ac_psm_16k)
(2)唤醒类模型:
移动端_小云小云_charCTC 唤醒模型
(speech_charctc_kws_phone xiaoyun)
达摩远场唤醒模型-你好米雅(speech_dfsmn_kwschar_farfield_16knihaomiya)
(3)语音识别:
Paraformer.Offline.16k.中文通用语音识别(speech_paraformer_asr_nat-zh-cn- 16k-common-vocab8358-tensorflow1)
(4)语音合成:
语音合成16k多情感中文发音人Zhitian(speech_sambert-hifigan_tts zhitianemo zh-cn_16k)
关于 online、offline 等具体的模型会在后文进项详细介绍,这次分享最主要的话是以这六个模型为主。通过 notebook 展示一下如何去使用和如何体验。
三、智能交互前端——降噪篇
降噪篇主要讲解解智能降噪模型和回声消除模型两个模型。
1.达摩智能降噪模型(speech_frcm_ans_cirm_16k)
整个语音交互的起点来自于麦克风从用户这里采集到音频,但是此部分音频不可避免的会携带环境噪音,语音降噪的最大功能就是将环境噪音剔除,给我们一个比较干净的声音。
下图是语音降噪一个整体流程
从此图可以看出处理是先输入 Audio 之后输出一个剔除噪音的Audio 。
(1)达摩智能降噪模型对应在 modelscope 社区的 URL:
https://modelscope.cn/models/damo/speech_frcrn_ans_cirm_16k/summary
(2)语音智能降噪介绍:
音频通话场景和各种噪声环境下语音音频录音的单通道语音智能降噪模型算法
(3)模型描述:
模型输入和输出均为16kHz采样率单通道语音时域波形信号,输入信号可由单通道麦克风直接进行录制,输出为噪声抑制后的语音音频信号[1]。下面第一个图简单介绍了这个模型的大概结构板,模型采用 Deep ComplexCRN 结构,模型输入信号通过STFT变换转换成复数频谱特征作为输入,并采用 ComplexFSMN 在频域上进行关联性处理和在时序特征上进行长序处理,预测中间输出目标Complexidealratio mask,然后使用预测的mask和输入频谱相乘后得到增强后的频谱,最后通过 STFT 逆变换得到增强后语音波形信号。模型的训练数据采用了 DNS-Challenge 开源数据集[2]。
语音智能降噪模型的支持场景有整句和断句语音去噪;各类生活噪声场景去噪;近场和远场去噪;混响消除;分为简单代码接入和 GPU算法加速。
(2)论文参考:
(这是此模型参考的一些论文,如果想跟深入了解此模型可以借鉴下面论文,另外也可以在model card 界面了解和阅读介绍。)
[1]Shengkui Zhao, Bin Ma, Karn N. Watcharasupat, and Woon-Seng Gan. "FRRN : Boosting Feature Representation Using Frequency Recurrence for Monaural Speech Enhancement."In ICASSP 2022.IEEE. May 2022.
[2]Harishchandra Dubey, Vishak Gopal, Ross Cutler, Ashkan Aazami, Sergiy Matusevych, Sebastian B raun, Sefik Emre Eskimez, Manthan Thakker, Takuya Yoshioka, Hannes Gamper, and Robert Aichner." ICASSP 2022 Deep Noise Suppression Challenge."In ICASSP 2022,IEEE.May,2022.
(5)代码范例:
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
ans=pipeline(
Tasks.acoustic_noise_suppression,
model='damo/speech_frcrn_ans_cirm_16k'
Pipeline_name=r’speech_frcrn_anscirm_16k)
result=ans('speech_with_noise.wav', output_path=’output.wav')
(6)在Notebook上对上述代码进行演示
首先提前准备一段带有噪音的音频作为输入,之后进入 modelscope,在modelscope 对应的 model card 页面通过在 Notebook 中打开一个虚拟环境。这样操作的好处是不需要再从头去搭建环境,减少搭建环境所耗费的时间。此代码是通过创建了ans的一个pipeline ,再在后面 'speech_with_noise.wav' 输入对应的音频文件,即在演示开头选取的带噪音的音频文件。最后将程序运行得到运行结果,之后将运行结果下载,就会得到输出文件,一个降噪处理后的音频。
2.达摩回声消除模型(speechdfsmn_ac_psm_16k)
在语音交互中或实时通信场景中会遇到需要回声消除的场景。例如天猫精灵在播放一些音乐或者提示音时,会通过 Loudspeake 传出声音,这时麦克风会将这些提示音伴随着人声一块录入,会对人声命令识别造成干扰,对语音交互产生影响。(左图)
下图是实时通信场景下的回声消除(AEC)原理图(右图)
(1)达摩回声消除模型(speech frcrn ans cirm16k)对应在modelscope 社区的 URL:
https://modelscope.cn/models/damo/speech_dfsmn_aec_psm_16k/summary
(2)模型描述
模型接受单通道麦克风信号和单通道参考信号(即上图中左图的情况)作为输入,输出回声消除和残余抑制后的音频信号[1]。模型采用 Deep FSMN 结构,提取原始观测信号以及线性滤波后信号的 Fbank特征作为输入,预测输出目标语音的 Phase senstive mask。模型的训练数据采用了AEC-Challenge 开源数据集[2]。
·语音回声消除模型分为简单代码接入和GPU算法加速
(3)论文参考:
(下面是此模型参考的一些论文,如果想跟深入了解此模型可以借鉴下面论文,另外也可以在 model card 界面了解和相关介绍。)
[1]Wang,Ziteng,Yueyue Na,Zhang Liu,Biao Tian,and Qiang Fu."Weighted recursive least square fil ter and neural network based residual echo suppression for the aec-challenge."In ICASSP 2021, pp.141-145.IEEE,2021.
[2]Sridhar, Kusha, Ross Cutler, Ando Saabas,T anel Parnamaa,Markus Loide, Hannes Gamper, Sebast ian Braun, Robert Aichner, and Sriram Srinivasan."ICASSP 2021 acoustic echo cancellation challenge: Datasets,testing framework,and results."In ICASSP 2021,pp.151-155.IEE,2021.
(4)代码范例:
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
input = {
'nearend _mic': 'nearend _mic.wav',
'farend _speech’: 'farend speech.wav’
}
aec=pipeline(
Tasks.acoustic _echo _cancellation,
model='damo/speech_dfsmn_aecpsm _16k’)
result=aec(input,output_path=’output.wav’)
(5)使用Notebook环境演示上述代码示例:
首先选取两段需要消除的音频,一个为 farend,一个为 nearend。之后打开 Modeiscope 模型库搜索 ace 找到达摩回声消除模型,之后打开对应的 notebook,跳转至对应的环境。先将刚才的音频上传。此代码的输入是 Dictionary,程序中一个叫 nearend _mic,另一个是farend _speech,这两个对应的就是刚才输入的两段音频,之后通过创建 aec 的 pipeline 就可以进行一个回声消除的处理。最后运行、下载,获得处理过的音频。
四、智能交互前端——唤醒篇
关键词检测(keywordspotting,KWS),即我们通常所说的语音唤醒,指的是一系列从实时音频流中检测出若干预定义关键词的技术。常见的有“hi,siri”、“天猫精灵”。
1.移动端小云小云 charCTC 唤醒模型(speech_charctc_kws_phone-xiaoyun)
(1)在 modelscope 社区的 URL:
https://modelscope.cn/models/damo/speech_charctc_kws_phone-xiaoy yun/summary
(2)模型描述
移动端语音唤醒模型,检测关键词为“小云小云”。模型主体为4层 F SMN 结构,使用 CTC 训练准则,参数量750K,适用于移动端设备运行。模型输入为 Fban k特征,输出为基子于char建模的中文全集 token 预测,测试工具根据每一帧的预测数据进行后处理得到输入音频的实时检测结果。
模型训练采用 “basetrain+finetu ne”的模式,basetrain 过程使用大量内部移动端数据,在此基础上,使用1万条设备端录制安静场景“小云小云”数据进行微调,得到最终面向业务的模型。后续用户可在 base train 模型基础上,使用其他关键词数据进行微调,得到新的语音唤醒模型,不久会开放模型 finetune 功能。
小云小云 charCTC 模型主要分为:简单代码接入、移动端 APP
(3)数据评估及结果:
模型在自建9个场景各50句的正样本集(共450条)测试唤醒率为93.11%。在自建40小时的负样本集测试,误唤醒率为0%
(4)代码范例:
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
Kwsbp_16k_pipline=pipeline(
task=Tasks.keyword_spotting,
model='damo/speech_charctc_kws_phone-xiaoyun’)
Kws_result = kwsbp_16k_pipline(audio_in=’data/test/audios/kws_xiaoyunxiaovun.way ‘)print(kws_result)
(5)代码示例在 notebook 中的演示
(在真实场景中是采用麦克风进行语音输入,此处为方便演示采用音频)首先找到语段音频,之后打开 Modeiscope 模型库搜索 kws 找到第一个语音唤醒模型,之后打开对应的 notebook ,跳转至对应的环境,之后将音频导入环境中。此代码通过创建 Kwsbp_16k_pipline 的 pipeline 进行工作,注意音频的输入是16k。通过 audio_in 传输,最后得出唤醒的结果为 {'kws_type':'wav' wav_count':1,'kws_list': [{'keyword':'小云小云','offset': 5.76,'length': 9.132938, 'confidence': 0.990345}]}。
这个结果透露出如下信息:1.此音频为 wav;2.音频有1条;3.它的关键词是小云、小云;4.关键词的位置大概在5.76秒;5.音频长度是9.132938;6.confidence大概是0.990345
2.达摩远场唤醒模型你好米雅(speech_dfsmn_kws_char_farfield_16k_nihaomiya)
针对各类 AloT 应用来说,由于需要在硬件条件有限的设备端对音频流进行实时监听,所以关键词检测模块必须做到``低资源、高性能”。所谓低资源,指的是全套算法所需的算力、功耗、存储、网络带宽等资源应当做到尽量节省,以满足实际设备硬件条件的限制。而所谓高性能,则是要求智能设备在包含各种设备回声、人声干扰,环境噪声、房间混响的实际应用场景中也能具有较高的唤醒率和较低的虚警率,同时具有较小的唤醒事件响应延时。针对实际场景中各种不利声学因素的影响,只靠关键词检测本身是无法应对的,所以关键词检测技术一般需要配合语音增强 (speechenhancement) 技术来使用。
基于信号处理的语音增强模块就好比于人的耳朵、耳蜗等感知器官,用于接收外界声音,并对音频信号进行加工,从中提取底层特征;而关键词检测模块则类比千人的大脑,对底层特征进行深度处理,从而对环境作出理解认知,并将决策信息反馈回感知器官,以实现对外界信息更好的感知从人类听觉系统的工作循环中可以看出,除了从感知器官向大脑的自底向上的信息传递之外,还存在从大脑向感知器官自上而下的控制反馈[1]。
[1]Huang, Yiteng, et al. "Supervised noise reduction for multichannel keyword spotting." 2018 IEEE International Conference on Acoustics. Speech and Signal Processing (ICASSP). IEEE,2018.
(1)在 modelscope 社区的 URL:
https://modelscope.cn/models/damo/speech_dfsmn_kws_char_farfield_16k_nihaomiya/summary
(2)模型描述
本模型提供的关键词检测算法框架主要由三个部分组成:特征提取、声学模型 (acousticmodelAM) 、解码器 (decoder) 。特征提取用于从增强过后的语音信号中提取声学特征;声学模型一般由深度神经网络( deep neural network,DNN) 构成,以特征为输入,并预测各个关键词建模单元的观测概率;解码器则用于对建模单元观测概率进行平滑处理,并从概率曲线随时间的变化逻辑中找出发音单元的变化序列,并以此作为某个关键词出现的标志。由于关键词检测之前的语音增强模块通常会输出多通道的音频信号,每路信号代表一个被分离出来的声源,而目标语音则包含在其中的某一路信号中,所以本项目中的关键词检测算法能对多路信号进行处理,并且能够选出信号质量最优的通道作为后续语音交互流程的数据通道。
达摩远场唤醒模型主要分为:简单代码介入、多通道输入、iot
(3)论文参考:
[1]Chen,Menqzhe and Zhang,Shiliang and Lei, Ming and Liu, Yong and Yao, Haitao and Gao, Jie."Compact Feedforward Sequential Memory Networks for Small-footprint Keyword Spotting." In Interspeech 2018, pp.2663-2667.
[2]Na,Yueyue and Wang, Ziteng and Wang, Liang and Fu, Qiang."Joint Ego-Noise Suppression and Keywor d Spotting on Sweeping Robots."In ICASSP 2022,pp.7547-7551.IEEE ,2022.
[3] Na, Yueyue and Wang, Ziteng and Liu, Zhang and Tian, Biao and Fu, Qiang."Joint Online Multichannel Ac oustic Echo Cancellation,Speech Dereverberation and Source Separation." In Interspeech 2021.
(4)代码范例:
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
Kws = pipeline(
Tasks.keyword_spotting,
model='damo/speech_dfsmn_kws_char_farfield_16k_nihaomiya’)
Inputs = {'input_file': '3ch_nihaomiya.wav'}
Result = kws(inputs)
print(result)
(5)范例代码在 notebook 中的演示
首先导入需要运算的你好,米雅的音频。此处有三个音源通道,一二通道是麦克风音源通道,第三是设备的参考音源通道。在之后在 modelscope 的模型库中输入 kws ,点击第二个模型“FSMN关键词检测模型介绍”,通过 notebook 打开虚拟环境。之后将前两个音频导入。跟之前代码同理,输入是 input_file ,运行是通过创建一个 pipeline 。最后运行输出结果
{'kws_list':[{'keyword':'0_ni_hao_mi_ya','offset’:6.4,'length’:0.7199999690055847,'confidence':
0.922585666179057},{'keyword':'0_ni_hao_mi_ya','offset’:10.719999995231628,'length’:0.8399999737739563,'confidence': 0.9719681143760681},{'keyword': '0_ni_hao_mi_ya','offset’:16.239999995231628,'length’:0.7999999523162842,'confidence':
0.9798973202705383},{'keyword': '0_ni_hao_mi_ya','offset’: 22.0000000333786,'length’: 0.8399999737739563,'confide nce':0.9865574240684509},{'keyword':'0_ni_hao_mi_ya','offset’:26.72000002861023,'length’:0.9599999785423279,
‘confidence’: 0.9933445453643799}]}。
在这个结果中可以看到音频中所对应的唤醒词的数量,一共有五次唤醒 ,每一次唤醒对应了一个 Offset、、 length 、Confidence。
五、语音交互后端——语音识别,语音合成
1.语音识别(ASR)
主要功能是将音频转化为文字,主主要是将音频采集进来后进行一个特征提取,将特征在给入 ASR 系统。最后 ASR 系统输出文字。下图为主要的流程图
(1)ASR需求场景分类
·低延迟实时听写:如电话客服, IOT 语音交互、天猫精灵、 hi,siri等;
·流式实时听写:如会议实时字幕,语音输入法等;
·离线文件转写:如音频转写,视频字幕生成等;
(三种对于实时性要求不同)
(2)对应3种解码模式
·online-fast:只有一遍解码,采用低延时实时出字模式;
·online-normal:2遍解码,第一遍低延时实时出字上屏,第二遍间隔3~6s(可配置)对解码结果进行刷新;
·offline:只有一遍解码,采用高精度离线模式;
(4)两大语音识别模型
①Paraformer.Offline.16k.中文通用语音识别
a.在 modelscope 社区的 URL:
https://modelscopecn/models/damo/speechparaformer_asr_nat-zh-cn-16k-common-vocab8358- tensorflow1/summary
b.模型描述
Paraformer 模型是一种非自回归 (Non-autoregressive) 端到端语音识别模型。非自回归模型相比于自回归模型,可以对整条句子并行输出目标文字,具有更高的计算效率,尤其采用 GPU 解码。Paraformer 模型相比于其他非自回归模型,不仅具有高效的解码效率,在模型参数可比的情况下,模型识别性能与 SOTA 的自回归模型相当。下图为模型大概结构。
基于 CIF 的 Predictor 来预测语音中目标文字个数以及抽取目标文字对应的声学特征向量。
通过采样,将声学特征向量与目标文字向量变换成含有语义信息的特征向量,配合双向的 Decoder 来增强模型对于上下文的建模能力。
基于负样本采样的 MWER 训练准则。
c.代码范例:
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
Inference_16_ pipline = pipeline
task=Tasks.auto_speech_recognition,
model='damo/speech_paraformer_asr_nat-zh-cn-16k-common-vocab-teorflow1’)
rec_result = inference_16k_pipline(audio_in=’data/test/audio s/asr_example.wav’)
②UniASR.Offline.16k.中文通用语音识别
a.在 modelscope 社区的 URL:
Speech_UniASR_ asr_ 2pass-zh-cn-16k-common-vocab8358-tensorflow1-offline
b.模型描述
UniASR 模型是一种2遍刷新模型 (Two pass) 端到端语音识别模型。
UniASR 模型结构如下图所示,包含离线语音识别部分和流式语音识别部分。其中,离线与流式部分通过共享一个动态编码器 (Encoder)结构来降低计算量。
流式语音识别部分是由动态时延Encoder与流式解码器 (Decoder)构成。
离线语音识别部分包含了降采样层 (Sride Conv)、Big Chunk Encoder、文本 Encoder 与 SCAMA Decoder
为了降低刷新输出结果的尾点延时,离线识别部分采用大 Chunk 流式结构。
为了让模型能够具有不同延时下进行语音识别的能力,我们创新性地设计了动态时延训练机制,使得模型能够同时满足不同业务场景对延时和准确率的要求。
c.代码范例
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
inference_16k_pipline=pipeline(
task=Tasks.auto_speech_recognition,
model='damo/speech_UniASR_ asr_2pass-zh-cn-16k-common-vcab8358
-tensorflow1-online')
rec_result=inference _16k_pipline(audio_in=’data/test/audios/asr_example.wav’)
(5)语音识别代码演示
首先导入需要运算的音频。之后在 modelscope 模型库搜索 asr 。大概出现28个模型,这28个模型主要分为 Paraformer 和 UniASR 两大类。由于此处的Demo是基于 Paraformer ,因此打开一个 paraformer 模型(在这个界面有对于此模型的详细介绍,如果想更深入研究可仔细阅读),再通过 notebook 打开虚拟环境,之后将对应的音频导入。此代码的运行原理和上文其他代码依旧相同。最后输出结果符合音频内容。
2.语音合成
当整个语音交互识别到用户所说的文字,语音交互系统。就要对此作出语言反馈,这个过程就要用到语音合成,将文本变成语音输出。
大部分语音合成都分为前端和后端两个部分。前端功能的功能主要是文本分析,获得音素、音调、停顿和位置等语言学信息,后端的主要功能是语言学特征转换为语音。
语音合成16k多情感中文发音人 Zhitian
(在 modelscope 提供了8个发音人,每个发音人的音色不同。其中4个中文发音人、2个英式英文发音人,2个美式英文发音人。在此以中文发音人zhitian 为例)
(1)在 modelscope 社区的 URL:
https://modelscope.cn/models/damo/speech_sambert-hifigan_tts_zhitian_emo_zh-cn_16k/summary
(2)前端主要是进行文本分析。
后端主要分为声学模型和声码器
后端模块中声学模型采用自研的 SAM-BERT ,将时长模型和声学模型联合进行建模,其结构(下图):
Backbone采用 Self-Attention-Mechanism(SAM) ,提升模型建模能力。
Encoder 部分采用 BERT 进行初始化,引入更多文本信息,提升合成韵律。
Variance Adaptor 对音素级别的韵律(基频、能量、时长)轮廓进行粗粒度的预测,再通过 decoder 进行帧级别细粒度的建模并在时长预测时考虑到其与基频、能量的关联信息,结合自回归结构,进一步提升韵律自然度.
Decoder 部分采用 PNCA AR-Decoder[@li2020robutrans] ,自然支持流式合成。
声码器(Hifi-GAN)
-基于生成对抗网络 (GAN) 的框架,利用判别器 (D) 来指导声码器(即生成器 G)的训练
-基于 MSD 和 MPD 建模语音中信号的平稳特性和周期特性,从而达到对声音更好的还原效果。
-对生成器和判别器的结构进行相应改造,使其在48k采样率下有更稳定的合成效果。
(3)代码范例:
from scipy.io.wavfile import write
from modelscope.outputs import Outputkeys
from modelscope .pipelines import pipeline
from modelscope .utils.constant import Tasks
text='待合成文本'
model_id='damo/speech_sambert-hifigantts_zhitian _emo_zh-cn_16k’
sambert_hifigan_tts=pipeline(task=Tasks.text_to_speech,model=model_id)
output=sambert_hifigan_tts(input=text)
pcm=output[OutputKeys.OUTPUT_PCM]
write('output.wav',16000,pcm)
(4)代码范例演示
打开 modelscope 的模型库输入 tts 。然后关键词搜索找到十个结果,对应的有各种各样的发言人,在这里依旧以 zhitian 为例(点开zhitian 的模型,在这个页面也有对此模型的具体介绍以及论文),打开 notebook ,进入虚拟环境,找到语音合成的代码。语音合成的代码原理也是类似,创建一个 pipeline ,输入的是文本,然后传输到 pipeline 获得一个 output 。这里的 output_pcm 是一种音频格式。但是由于常见的音频格式是 wav ,因此这里采用了一个wavfile 转换包,将 pcm 格式转换为 wav 格式。最后运行结果音频同输入的文本内容相符合。
六、问题解答
Q:语音转文字后,如果增加断句标点进行处理,目前有相应的模型吗?
A:这是属于AI的后处理范畴,后续会添加到对应的modelscope当中,作为一个坐标点预测的模型。