关于音视频:深入篇漫游语音识别技术带你走进语音识别技术的世界

6次阅读

共计 9286 个字符,预计需要花费 24 分钟才能阅读完成。

前有今人,后有小王,大家好,我是你们爱思考的小王学长,明天咱们持续漫游语音辨认技术哈,明天内容略微业余一些,大家能够联合上一篇漫游语音辨认技术一起学习。


上篇咱们简略理解了语音辨认技术的概念、前世今生以及根本辨认原理,一会学长带着大家漫游到语音辨认技术更深(更业余)的世界里。

文章目录:(大家先预览下)

一、语音辨认根底
二、信号处理过程
    1、降噪解决 
        ①小波变换降噪法
        ②谱减法
        ③自适应噪声对消法
        ④声音滤波器
    2、预减轻
    3、分帧加窗
    4、端点检测
三、特征提取
四、语音识别方法
    1、声学模型
    2、语言模型
    3、解码器
    4、基于端到端的学习办法
五、深度学习 -CNN 实战举例
六、声网 Agora 一站式智能语音辨认计划
七、语音辨认开发平台
    深度学习平台
    语音辨认开发平台
八、语音辨认相干开源学习材料
    开源数据集
    开源语音辨认我的项目
作者介绍

一、语音辨认根底

​说到语音辨认,咱们应该先思考一下声音是什么呢?

​通常咱们能够认为声音是在空气中流传的波,然而它不像水波那样流传波的高下变动,它流传的是空气的密度变动。比方,咱们拍手时手掌的振动将空气挤出,比照四周的大气压,空气被挤入的中央压力增高,而空气被挤出的中央则绝对压力升高;压力高的局部向手掌周围挪动,而压力低的局部则紧随其后。这种由手掌振动所引发空气密度产生周期性变动的波称为压缩波,空气中的压缩波一旦碰到鼓膜那样的薄膜,就会使其产生振动。麦克风的作用就是将这种振动以电信号的模式提取进去。上面的图大家能够参考一下

几种波形或叠加模式(点击图片可见起源)

以振动的幅度为纵轴,以工夫为横轴,就可能将声音可视化。

换句话说,声音以波的模式流传,即声波。当咱们以波的视角来了解声音时,幅度(Magnitude)、频率(Frequency)、相位(Phase)便形成了声波及其所有的叠加声波,声音的不同音高(Pitch)、音量(Loudness)、音色(Timbre)也由这些根本单位组合而来。

世界上各种各样的声波都能够“降解”到根本波身上,傅里叶变换(Fourier Transform)的根本思维也是这样的。不同的声波有不同的频率和幅度(决定音量),人耳也有本人的承受范畴。人耳对频率的承受范畴大抵为 20 Hz 至 20 kHz,于是以人为本地将更高频率的声波定义为超声波(Ultrasound Wave)、更低频率的声波定义为次声波(Infrasound Wave),尽管其它动物能够听到不同范畴的声音。

上一篇大家应该对 ASR 有了个初步的理解,语音辨认说白了最终是统计优化问题,给定输出序列 O={O1,…,On},寻找最可能的词序列 W={W1,…,Wm},其实就是寻找使得概率 P(W|O)最大的词序列。用贝叶斯公式示意为:

其中 P(O|W)叫做声学模型,形容的是给定词 W 时声学察看为 O 的概率;P(W)叫做语言模型,负责计算某个词序列的概率;P(O)是察看序列的概率,是固定的,所以只看分母局部即可。

语音抉择的根本单位是帧(Frame),一帧数据是由一小段语音通过 ASR 前端的声学特征提取模块产生的,整段语音就能够整顿为以帧为单位的向量组。每帧的维度固定不变,但跨度可调,以适应不同的文本单位,比方音素、字、词、句子。

大多数语音辨认的钻研都是别离求取声学和语言模型,并把很多精力放在声学模型的改良上。但起初,基于深度学习和大数据的端到端(End-to-End)办法倒退起来,能将声学和语言模型融为一体,间接计算 P(W|O)。

二、信号处理过程

1、降噪解决

在降噪之前,我先跟大家讲讲为什么要进行降噪解决?

咱们在录制音频数据的同时,大量噪声都会掺杂进来,不同环境和情境下产生的噪声也不尽相同,噪声信号中的无规则波纹信息影响了声学信号所固有的声学个性,使得待剖析的声音信号品质降落,并且噪声对声音识别系统的辨认后果会产生重要影响。所以说,咱们在对声音信号剖析和解决之前,是肯定要进行降噪解决的。(语音的具体噪声分类:看学长这篇文章)

上面咱们来看几个降噪的罕用办法:

①小波变换降噪法

小波变换降噪法简称小波降噪,个别在声音降噪中应用最多的是小波阈值降噪法,它次要是说在带噪声音信号中,无效声音信号与噪声在不同频率上有着不同的小波系数,其中无效信号能量谱体现会比拟集中,在能量谱集中的区域小波系数的绝对值会比拟大;而噪声的能量谱比拟扩散,所以其系数的绝对值比拟小。接下来,依据此特点,利用小波变换法将带噪声音信号合成到不同频率上,而后设置阈值进行差分调整,保留无效声音信号的小波系数,最初依据小波重构算法还原带噪信号中的无效信号,从而能够达到降噪的成果。

这是其基本原理,其中阈值的设定也能够分为硬阈值和软阈值法。具体波及的相干公式和计算方法大家感兴趣的能够百度或者跟我留言。以下是利用小波降噪法失去的前后比照图(在 MATLAB 环境下失去):


含噪声信号的波形


小波降噪后的波形

②谱减法

谱减法又称频谱减法降噪,是依据噪声的可加性、部分平稳性以及噪声和无效声音信号不相关性的一种声音信号降噪办法。这种降噪办法不会波及到参考信号,其 次要思维 就是带噪声音信号是无效信号与噪声的叠加,那么带噪信号的功率也是相当于无效声音信号的功率和噪声功率的叠加,利用计算失去“静音”片段(信号中不含有无效信号,只含有零碎噪声或者环境噪声)中噪声的频谱估计值来等值替换无效声音信号存在期间所含噪声的频谱,最初带噪声音信号的频谱与噪声的频谱估计值相减,就能够失去无效声音信号频谱的估计值。

③自适应噪声对消法

自适应噪声对消法的外围组成部分是自适应算法和自适应滤波器。自适应算法能够主动调节输出滤波器的加权系数使滤波器达到最优滤波成果,所以自适应噪声对消法的要害是在于找到某种算法,能够实现主动调节加权系数。

自适应噪声对消法的次要思维是:除了带噪声音信号 x(t)=s(t)+n(t), 假如还能够失去另外一个参考信号 r(t),而这个参考信号与噪声 n(t) 相干,然而与无效声音信号 s(t)不相干,那么就能够依据 Widrow 算法 (一种近似最速降落的神经网络算法) 对消带噪声信号中的噪声,从而达到降噪的成果。

④声音滤波器

数字滤波器作为数字信号处理中的重要组成部分,能够通过数值之间的运算来实现滤波的成果,去除噪声成分。数字滤波器有很多品种,依据冲激响应函数的时域个性数字滤波器可分为两种,即有限冲激响应(Infinite Impulse Response,IIR)滤波器和无限冲激响应(Finite Impulse Response,FIR)滤波器。这两种滤波器可别离实现低通、高通、带通和带阻 4 种性能。

2、预减轻

​预减轻是一种在发送端对输出信号高频重量进行弥补的信号处理形式。随着信号速率的减少,信号在传输过程中受损很大,为了在接管终端能失去比拟好的信号波形,就须要对受损的信号进行弥补,预减轻技术的思维就是在传输线的始端加强信号的高频成分,以弥补高频重量在传输过程中的过大衰减。而预减轻对噪声并没有影响,因而无效地进步了输入信噪比。(百科官网解释)

预减轻原理:语音信号高频段能量大,低频段能量小。而鉴频器输入噪声的功率谱密度随频率的平方而减少(低频噪声大,高频噪声小),造成信号的低频信噪比很大,而高频信噪比显著有余,从而导致高频传输瘦弱,使高频传输艰难。因而,在传输之前把信号的高频局部进行减轻,而后接收端再去重,进步信号传输品质。

3、分帧加窗

“分帧”是把一段声音信号分成一些工夫长度相等的音频信号。它能够在预减轻后的声音信号上平滑地挪动规定长度的窗函数失去,窗函数的窗口大小由声音信号的采样频率来确定。采纳能够随着工夫挪动的窗函数对猪声音信号进行“交叠分帧”,能够避免在分帧时呈现脱漏无效的声音信号,也能够保障每段声音信号在滑动时放弃平稳性和连续性。

罕用的几种窗函数:幂窗、矩形窗、三角窗、汉宁窗、汉明窗、高斯窗(不懂的自行百度下或评论问我哈)


汉明窗举例

4、端点检测

端点检测是指确定一段声音信号中无效信号的起始点和终止点。采集到的声音信号中含有有效的声音片段,进行端点检测确定出猪声音信号的起始点与终止点,能够排除大量的干扰信号,剪除静音片段,为后续的特征参数提取减小了运算量,缩短了提取工夫。


matlab 端点检测比照

罕用办法:

短时过零率 是指每帧声音信号通过零点的次数,其算法就是计算每帧声音信号幅值符号扭转的总次数,如果相邻采样点的幅值符号是雷同的,则没有产生过零点的状况,相同,如果相邻采样点幅值的符号产生了扭转,那么示意声音信号产生了过零的状况。

短时能量 肯定水平上反馈了声音信号的幅度变动, 利用在辨别声音信号中的浊音和清音,因为声音信号中浊音的能量比清音的能量小很多;辨别无声片段和有声片段,因为无声片段的短时能量根本等于零,而有声片段是有能量存在的。

双门限端点检测法 是罕用的端点检测办法之一,其通过声音信号的短时能量和短时均匀过零率确定声音信号的端点地位,短时过零率检测到声音信号的起始点和终止点可能过于宽泛,这样就升高了声音信号处理零碎的速度;而短时能量检测到声音信号的起始点和终止点可能蕴含噪声信号,这样会导致提取的声音信号不太精确。所以将二者 联合 起来来检测猪声音信号的起始点和终止点,即双门限检测法提取声音信号的端点。

三、特征提取

接下来带大家具体学习下 MFCC 特征提取常识:

先说下 MFCC,人的耳朵在接管信号的时候,不同的频率会引起耳蜗不同部位的触动。耳蜗就像一个频谱仪,主动在做特征提取并进行语音信号的解决。在语音辨认畛域中 MFCC(Mel Frequency Cepstral Coefficents)特征提取是最罕用的办法,具体来说,MFCC 特征提取的步骤如下:

  • 对语音信号进行分帧解决
  • 用周期图 (periodogram) 法来进行功率谱 (power spectrum) 预计
  • 对功率谱用 Mel 滤波器组进行滤波,计算每个滤波器里的能量
  • 对每个滤波器的能量取 log
  • 进行离散余弦变换(DCT)变换
  • 保留 DCT 的第 2-13 个系数,去掉其它

其中,后面两步是短时傅里叶变换,前面几步次要波及到梅尔频谱。


根本流程图

大家须要重要把握的特征提取知识点:

过零率(zero crossing rate) 是一个信号符号变动的比率,即在每帧中语音信号从正变为负或从负变为正的次数。这个特色已在语音辨认和音乐信息检索畛域失去宽泛应用,通常对相似金属、摇滚等高冲击性的声音的具备更高的价值。个别状况下,过零率越大,频率近似越高。

频谱质心(Spectral Centroid) 是形容音色属性的重要物理参数之一,是频率成分的重心,是在肯定频率范畴内通过能量加权均匀的频率,其单位是 Hz。它是声音信号的频率散布和能量散布的重要信息。在主观感知畛域,谱质心形容了声音的亮堂度,具备明朗、消沉品质的声音偏向有较多低频内容,谱质心绝对较低,具备亮堂、欢快品质的少数集中在高频,谱质心绝对较高。该参数罕用于对乐器声色的剖析钻研。

声谱衰减(Spectral Roll-off) 是对声音信号形态(波形图)的一种掂量,示意低于总频谱能量的指定百分比的频率。

梅尔频率倒谱系数(Mel-frequency cepstral coefficients,MFCC) 是在 Mel 标度频率域提取进去的倒谱参数,Mel 标度形容了人耳频率的非线性个性。其中梅尔尺度(Mel Scale)是建设从人类的听觉感知的频率;比方若把音调频率从 1000Hz 进步到 2000Hz,咱们的耳朵只能觉察到频率仿佛进步了一些而不是一倍。然而通过把频率转换成梅尔尺度,咱们的特色就可能更好的匹配人类的听觉感知成果。

色度频率(Chroma Frequencies) 色度频率是音乐音频乏味且弱小的示意,其中整个频谱被投影到 12 个区间,代表音乐八度音的 12 个不同的半音。

四、语音识别方法

在明天的支流语音识别系统中,声学模型是一个混合 (hybrid) 模型,它包含用于序列跳转的隐马尔可夫模型 (HMM) 和依据以后帧来预测状态的深度神经网络。

1、声学模型

隐马尔可夫模型(Hidden Markov Model,HMM) 是用于建模离散工夫序列的常见模型,它在语音辨认中曾经应用了几十年了,算是很典型的声学模型。

HMM 波及的次要内容有:两组序列(隐含状态和观测值),三种概率(初始状态概率,状态转移概率,发射概率),和三个根本问题(产生观测序列的概率计算,最佳隐含状态序列的解码,模型自身的训练),以及这三个问题的罕用算法(前向或后向算法,Viterbi 算法,EM 算法)。语音辨认的最终利用对应的是解码问题,而对语音识别系统的评估、应用也叫做解码(Decoding)。

在钻研 HMM 之前,先带大家简略的回顾一下马尔科夫链。马尔科夫链是建模随机过程的一种办法, 用天气来举个简略点的例子就是,明天是否下雨和前一天是否下雨无关,有一种关联的特点。放在语音辨认里就是,咱们能晓得语音的频谱,但不晓得之前的频谱代表什么意思的,就能够通过历史的频谱,来 推导 新的频谱的对应后果。

高斯混合模型(GMM,Gaussian Mixed Model),次要就是通过 GMM 来求得某一音素的概率。

在语音辨认中,HMM 用于建模 subword 级别 (比方音素) 的声学建模。通常咱们应用 3 个状态的 HMM 来建模一个音素,它们别离示意音素的开始、两头和完结。

当初风行的语音零碎不再应用 GMM 而是应用一个神经网络模型模型,它的输出是以后帧的特征向量(可能还要加上前后一些帧的特色),输入是每个音素的概率。比方咱们有 50 个音素,每个音素有 3 个状态,那么神经网络的输入是 50×3=150。这种声学模型叫做”混合”零碎或者成为 HMM-DNN 零碎,这有别于之前的 HMM-GMM 模型,然而 HMM 模型目前还在被应用。

2、语言模型

语言模型要解决的问题是如何计算 P(W),罕用的办法基于 n 元语法(n-gram Grammar)或 RNN。目前次要有 n-gram 语言模型和 RNN 语言模型。

n-gram 语言模型是典型的的自回归模型,而 RNN 语言模型因为以后的后果依赖于之前的信息,所以能够应用单向循环神经网络进行建模,在这里感兴趣的本人再去学习下哈,内容切实太多了,学长挑重要的跟大家讲。

3、解码器

依据后面说的 P(W|O),咱们的最终目标是抉择使得 P(W|O) = P(O|W)P(W) 最大的 W,所以解码实质上是一个搜寻问题,并可借助加权无限状态转换器(Weighted Finite State Transducer,WFST)对立进行最优门路搜寻(先理解下)

4、基于端到端的学习办法

CTC(连贯时序分类,Connectionist temporal classification), CTC 办法早在 2006 年就已提出并利用于语音辨认,但真正大放异彩却是在 2012 年之后,随之各种 CTC 钻研铺展开来。CTC 仅仅只是一种损失函数,简而言之,输出是一个序列,输入也是一个序列,该损失函数欲使得模型输入的序列尽可能拟合指标序列。之前须要语音对齐到帧,用这个就能够不须要对齐,它只会关怀预测输入的序列是否和实在的序列是否靠近(雷同)。

Attention 模型 看了很多概念还是感觉援用之前的例子最容易了解了:

当咱们人在看一样货色的时候,咱们以后时刻关注的肯定是咱们以后正在看的这样货色的某一地方,换句话说,当咱们眼光移到别处时,注意力随着眼光的挪动也在转移。Attention 机制的实现是通过保留 LSTM 编码器对输出序列的两头输入后果,而后训练一个模型来对这些输出进行选择性的学习并且在模型输入时将输入序列与之进行关联。

五、深度学习 -CNN 实战举例

后面说了这么多理论知识,当初用 Python 代码把 CNN 网络模型进行简略解说(让大家以实例来更加理解语音分类过程),同时举荐大家看下此 PPT(点击可查看下载)实属学习干货!!!

# 搭建 CNN 模型
model = Sequential()

# 输出的大小
input_dim = (16, 8, 1)

model.add(Conv2D(64, (3, 3), padding = "same", activation = "tanh", input_shape = input_dim))# 卷积层
model.add(MaxPool2D(pool_size=(2, 2)))# 最大池化
model.add(Conv2D(128, (3, 3), padding = "same", activation = "tanh")) #卷积层
model.add(MaxPool2D(pool_size=(2, 2))) # 最大池化层
model.add(Dropout(0.1))
model.add(Flatten()) # 开展
model.add(Dense(1024, activation = "tanh"))
model.add(Dense(20, activation = "softmax")) # 输入层:20 个 units 输入 20 个类的概率

# 编译模型,设置损失函数,优化办法以及评估规范
model.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = ['accuracy'])

model.summary()

# 训练模型
model.fit(X_train, Y_train, epochs = 20, batch_size = 15, validation_data = (X_test, Y_test))


# 预测测试集
def extract_features(test_dir, file_ext="*.wav"):
    feature = []
    for fn in tqdm(glob.glob(os.path.join(test_dir, file_ext))[:]): # 遍历数据集的所有文件
        X, sample_rate = librosa.load(fn,res_type='kaiser_fast')
        mels = np.mean(librosa.feature.melspectrogram(y=X,sr=sample_rate).T,axis=0) # 计算梅尔频谱(mel spectrogram), 并把它作为特色
        feature.extend([mels])
    return feature
  X_test = extract_features('./test_a/')
  X_test = np.vstack(X_test)
predictions = model.predict(X_test.reshape(-1, 16, 8, 1))
preds = np.argmax(predictions, axis = 1)
preds = [label_dict_inv[x] for x in preds]

path = glob.glob('./test_a/*.wav')
result = pd.DataFrame({'name':path, 'label': preds})

result['name'] = result['name'].apply(lambda x: x.split('/')[-1])
result.to_csv('submit.csv',index=None)
!ls ./test_a/*.wav | wc -l
!wc -l submit.csv

六、声网 Agora 一站式智能语音辨认计划

讲完后面的语音辨认必备常识,接下来咱们思考一下语音辨认在语音聊天、音乐社交、视频直播,这些与“声音”无关的社交场景中利用越来越广的背景下,还会呈现哪些问题呢,其中最突出的问题就是现有的语音内容审核 + 实时音视频服务,部署、调试、运维的老本高,而且很多计划对有背景音乐、噪声的音频辨认成果差。

小王学长也是查看了许多利用解决方案,感觉声网 Agora 一站式智能语音辨认计划是比拟不错的,举荐给大家。必定会有人问为什么你感觉好,好在哪里?

先说说现有 传统计划,简略分为三步:

  1. 内容通过转码或间接推流至 CDN;
  2. 内容审核厂商从 CDN 拉流,而后进行 AI、人工内容审核;
  3. 实现审核后,传回给服务器端。


<center size=1> 传统的实时音视频内容审核流程(点击图片可见起源)</center>

存在问题: 首先,开发者须要对接三个厂商,要进行很屡次的部署与调试,其中有很多调试会产生老本与危险,并且,当 CDN 呈现故障的时候,会消耗较长时间来排查问题,也须要领取额定的拉流老本。

另一方面,目前的计划还需解决噪声的问题,例如语音社交、语音 FM 这些场景经常伴有背景音乐和环境噪声,会影响现有内容审核计划的识别率。

声网 现已提供业界 独有 的一站式智能语音辨认计划:

开发者只须要在利用中集成声网 Agora SDK,即可让音频在 Agora SD-RTN™ 网络中实时传输的过程中实现语音内容辨认与审核。并整合了业界 Top 3 语音辨认服务,通过声网独家研发的 AI 音频降噪引擎打消背景音,优化音频品质,让语音更加清晰。

声网语音辨认计划的 劣势

1、调用 RESTful API,一站式接入: 在利用中集成 Agora SDK 后,开发者能够通过调用 RESTful API,即可为本人的利用减少语音内容审核服务。相比传统内容审核计划,声网计划能够节俭开发工夫、服务器等接入老本。

2、AI 降噪,识别率更高: 利用声网 AI 音频降噪引擎对音频进行优化,以晋升语音的识别率。

3、语音交互低延时: 声网 SDK 实现了寰球端到端 76ms 的实时音视频低延时传输。声网 Agora SD-RTN™ 实时通信网络采纳公有 UDP 协定进行传输,基于软件定义优化路由抉择最优传输门路,主动躲避网络拥塞和骨干网络故障带来的影响。

所以说,看完声网与传统解决方案的优缺点比照是不是感觉声网的一站式解决方案很香!!!

除此之外,再跟大家举荐一个好用的工具 -声网 Agora 的工具水晶球

简略说,水晶球是声网 Agora 推出的 RTC 行业首个品质监控与数据分析工具,次要解决终端用户的问题反馈链太长等问题。想深刻理解的能够点击这里

特点:1. 自建监控

2. 集成多种 RTC 监控工具

3. 应用同一 RTC 服务商所提供的品质考察工具

七、语音辨认开发工具

深度学习平台


小王学长用心总结(放松珍藏)

语音辨认开发工具


小王学长用心总结(放松珍藏哈)

八、语音辨认相干开源学习材料

开源数据集

  • Google 公布的语音拆散数据集
  • 字节跳动公布寰球最大钢琴 MIDI 数据集
  • 中英文 NLP 数据集搜寻库:CLUEDatasetSearch
  • 清华中文语音数据集 THCHS-30
  • 中国明星声纹数据集 CN-Celeb2

开源语音辨认我的项目

  • 声网 Agora SOLO 开源音频编码器
  • https://github.com/Uberi/speech_recognition
  • https://github.com/xxbb1234021/speech_recognition
  • https://github.com/SeanNaren/deepspeech.pytorch
  • https://github.com/srvk/eesen
  • https://github.com/kaldi-asr/kaldi

(小伙伴们看完记得点赞珍藏下哈,小王学长心愿能帮忙到大家~)

正文完
 0