写点什么

(实战篇)漫游语音识别技术—带你走进语音识别技术的世界

用户头像
攻城先森
关注
发布于: 刚刚
(实战篇)漫游语音识别技术—带你走进语音识别技术的世界

前有古人,后有小王,大家好,我是你们爱思考的小王学长,今天咱们继续漫游语音识别技术,之前基础篇深入篇想必大家对语音识别的理论知识已经有所了解,接下来咱们以实战的形式进一步拿下语音识别。


在实战之前,小王学长觉得有必要让大家先了解一下目前主要的四种语音识别方法,在此基础上咱们再结合主流的深度学习算法对语音信号进行识别。

一、语音识别方法

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

1、声学模型

隐马尔可夫模型(Hidden Markov Model,HMM)是用于建模离散时间序列的常见模型,它在语音识别中已经使用了几十年了,算是很典型的声学模型。

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

在研究 HMM 之前,先带大家简单的回顾一下马尔科夫链。马尔科夫链是建模随机过程的一种方法,用天气来举个简单点的例子就是,今天是否下雨和前一天是否下雨有关,有一种关联的特点。放在语音识别里就是,我们能知道语音的频谱,但不知道之前的频谱代表什么意思的,就可以通过历史的频谱,来推导新的频谱的对应结果。


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

在语音识别中,HMM 用于建模 subword 级别(比如音素)的声学建模。通常我们使用 3 个状态的 HMM 来建模一个音素,它们分别表示音素的开始、中间和结束。

现在流行的语音系统不再使用 GMM 而是使用一个神经网络模型模型,它的输入是当前帧的特征向量(可能还要加上前后一些帧的特征),输出是每个音素的概率。比如我们有 50 个音素,每个音素有 3 个状态,那么神经网络的输出是 50x3=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. 完成审核后,传回给服务器端。

传统的实时音视频内容审核流程(点击图片可见来源)

存在问题:首先,开发者需要对接三个厂商,要进行很多次的部署与调试,其中有很多调试会产生成本与风险,并且,当 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 服务商所提供的质量调查工具

四、语音识别开发工具

深度学习平台

小王学长用心总结(抓紧收藏)


语音识别开发工具

小王学长用心总结(抓紧收藏哈)


五、语音识别相关开源学习资料

开源数据集

开源语音识别项目

(小伙伴们看完记得点赞收藏下哈,小王学长希望能帮助到大家~)


作者介绍

王凯,计算机在读硕士,两年音视频学习开发经验,主攻音频语音识别方向,对 NLP、深度学习、神经网络、数学建模、音视频编解码技术有一定研究和实践经验。


发布于: 刚刚阅读数: 2
用户头像

攻城先森

关注

爱思考的小王学长 2021.04.23 加入

计算机在读硕士,两年ASR、Deep Learning学习开发经验

评论

发布
暂无评论
(实战篇)漫游语音识别技术—带你走进语音识别技术的世界