一般没有网络时,语音识别是这样的
▽
而同等环境下,嵌入式语音识别,是这样的
▽
不仅可以帮您边说边识、出口成章,有个性化名字的时候也难不倒它。
这就是嵌入式语音识别的魅力。
本文将从微信智聆的嵌入式语音识别引擎的实现和优化,
介绍嵌入式语音识别的技术选型。
01
语音识别,大体是这么来的
语音识别,能让机器“听懂”人类的语音,把说话内容识别为对应文本。
开始于上世纪50年代
从最初的小词量孤立识别系统
到如今的大词量连续识别系统
语音识别系统的发展,性能得到显著的提升,主要得利于以下几个方面:
大数据时代的到来
深度神经网络在语音识别中的应用
GPU硬件的发展
因此,语音识别逐步走向实用化和产品化
语音输入法,语音智能助手,语音车载交互系统……
可以说,语音识别是人类征服人工智能的前沿阵地,是目前机器翻译、自然语言理解、人机交互等的奠基石。
然而,性能的提升基于服务端CPU/GPU高计算能力和大内存,没有网络的时候将无法享受语音识别的便利。
为了解决这个问题,微信智聆针对嵌入式语音识别进行研发。嵌入式语音识别,也称为嵌入式LVCSR(或离线LVCSR,Large Vocabulary Continuous Speech Recognition),指全程运行在手机端的语音识别,而不依赖于服务端强大的计算能力。
在一些网络不稳的特殊场景(车载、境外等等),嵌入式语音识别可“曲线救国”。
那么,实现一个嵌入式语音识别,存在哪些难点呢?
语音识别的基本流程
主流的语音识别算法当中,包括声学和语言两大模型。声学模型得利于近十年深度学习的发展,从GMM(高斯模型)到DNN(深度神经网络),再从DNN到LSTM RNN(循环神经网络),识别率不断提升的同时,计算量也不断地飞涨。而语言模型常用的n-gram算法,阶数越高性能越好,常用的模型多达数十G的内存。
所以综合起来,嵌入式语音识别有以下几个难点:
\1. 深度学习运算复杂,仅仅对模型进行裁剪性能损失大,需寻找挽回性能的方法;
\2. 裁剪模型不可避免,在模型训练环节如何避免小模型训练易陷入局部最优的问题;
\3. 如何计算的更快,满足嵌入式的CPU环境;
\4. 如何组织语言模型存储,能在有限的内存下存储更多的语言信息。
本文将以语音识别的技术原理出发,浅谈微信智聆嵌入式的实现技术。
内容将分为四个部分:
\1. 回顾语音识别的基本概念;
\2. 简单介绍在速度和内存优化上我们做的部分工作,侧重于工程应用实现;
\3. 说一说为了更好的性能我们做了哪些事,侧重于算法研究介绍;
\4. 我们进行实验对比,最后我们进行总结。
02
语音识别的各个组件
语音识别“黑盒”
语音识别从输入录音输出文字,黑盒子处理经过特征提取、声学模型、发音词典、语言模型等流程,笔者认为可以把语音识别比作一台计算机。
特征提取相当于是路由器,作为领头羊给后续环节提供源源不断的数据来源。
声学模型相当于语音识别的心脏——CPU,他将最直接影响着识别的准确性能。
语言模型相当于语音识别的硬盘,大量的词汇组合信息存储于此。
发音词典相当于内存条,能有效组织声学模型与语言模型的关系。
除此之外,语音识别包含一个解码器,他如同计算机的操作系统,有效地组织着各个环节。
接下来,我们基于每个“部件”简介其基本概念,以便后续介绍如何在这些“部件”上对嵌入式ASR工作的展开。
1.特征提取
音识别特征提取包括预加重、分帧、加窗、FFT(Fast Fourier Transform)等一系列流程,常用的特征有PLP、MFCC、FBANK等等。一般来说,语音识别把一秒语音分成100段(之间有互相重叠),而特征提取能把每段语音数据转化为一个向量(常见的有39维MFCC特征)。
为了关联上下文信息,特征作为声学模型的输入时,常将相邻帧拼凑一起。比如以39维特征为例,前后各取5帧信息,那么总共有11帧,输入的向量维度为11*39=429。一般地,语音识别的性能与取帧宽度是正相关的。