文章目录
语音识别入门
1.语音识别过程
语音识别的三大组件:
① 声学模型:描述在给定词的情况下,对应声学信号的概率
② 语音模型:描述语言序列关系的模型,关注序列产生的概率
③ 解码器:根据声学模型和语言模型,搜索出最有可能的词序列,其本质是一个动态规划算法
语音识别的一般流程为根据输入的语音,提取语音特征,通过解码器融合训练好的语言模型和声学模型,得到最终的词序列结果。字典的作用是根据声学模型识别出来的音素(汉语中一般为声韵母),来找到对应的汉字(词)或者单词,用来在声学模型和语言模型建立桥梁,将两者联系起来。
1.1 声学模型
在语音识别中,声学模型是用来确定给定一段声音信号最可能对应哪种语言符号(如音素、单词等)的模型。具体来说,声学模型是生成声音特征向量序列的概率密度函数。这个模型通常基于统计方法,如隐马尔可夫模型(Hidden Markov Model, HMM)、深度神经网络(Deep Neural Network, DNN)等。
例入在使用HMM的声学模型中,我们会有一系列的状态,每个状态对应一个特定的音素或者音素的一部分,然后模型会根据声音信号的变化推断出最可能的状态序列,也就是最可能的音素序列。声学模型的训练通常需要大量的有标注的语音数据,即语音信号以及对应的正确转录文本。通过学习这些数据,模型可以理解不同的音频特征如何对应到不同的语言符号。
假设我们正在试图创建一个语音识别系统,能够识别英文中的元音音素"a", “e”, “i”, “o”, “u”。我们将有一个具有五个状态的声学模型,每个状态分别对应一个元音。如果有一段声音信号输入到系统,声学模型的任务就是确定这段声音信号最可能对应于哪个元音。模型会计算声音信号特征向量序列在每个元音状态下的概率密度,并选择最有可能对应这段声音信号的元音为输出。例如,当听到一个清晰的"a" 音时,模型将会计算出该声音信号在 “a”、“e”、“i”、“o”、“u” 这五个状态下的概率,并发现在 "a"这个状态下的概率最高,因此确定这段声音信号对应的是 “a” 这个元音音素。需要注意的是,这个投影过程是基于模型从大量带标签的语音数据中学习到的模式。在训练过程中,模型学习了每个元音的典型声学特征,以及如何从这些特征来区分不同的元音。这就是声学模型在语音识别中的基本作用。
1.2 语音模型
语音模型也被称为语言模型,它是一种用于计算一段文字序列在某一种语言中出现概率的模型。这对于许多自然语言处理任务来说都非常重要,比如在语音识别、机器翻译等任务中,语音模型都可以用来评估生成的文本的合理性。
语音模型通过学习大量的语言数据来理解文字串连的概率。例如,一个基本的语音模型可能会计算哪一个词最有可能出现在一个给定的词组中,这个词组可能是一个句子,也可以是一个文档。比如在“我早上喝了一杯___”这个句子中,语言模型将会比较各种可能填充在空白处的词语,比如“茶”,“咖啡”,“饮料”等等,选择那个概率最高的词作为结果。
一个更复杂的语音模型,如基于神经网络的语音模型,能够理解更复杂的语义和语法规则。比如,它可以区分“她打开了灯”和“灯打开了她”这两句话,虽然这两句话使用的字词完全一样,但意思完全不同。前一句话在实际语境中更常见,因此模型会给这个文本序列一个更高的概率。
从某种意义上来说,一个好的语音模型是可以理解语言的自然性和连贯性的,可以用来生成一个实际且自然的文本串。
1.3 解码器
在语音识别中,解码器是一个系统组件,负责将声学模型的输出(通常为音素或者其他语音段的概率分布)与语音模型(即语言模型)结合起来,生成最终的文字输出。简单来说,解码器的工作是找到最可能的字词或句子序列,使之既符合声学模型的输出,也符合语言模型的约束。
举一个具体的例子来说明一下。假设我们的声学模型输出的是三个音素序列的概率,分别是 /ka/, /t/, 和 /s/,我们要从这些音素中识别出正确的单词。
如果我们只依赖声学模型,可能得到很多可能的输出,例如 “cats”, “coats”, “cuts” 等等。然而,如果结合语音模型的信息,我们可以根据上下文和语言的统计信息,如某个词在语言中的出现频率,来确定最有可能的词汇。比如,如果上下文信息提示我们这个句子是在描述一个人和他的宠物,那么 “cats” 就可能是最合适的输出。
在这个过程中,解码器的工作就是将所有可能的字词或句子考虑在内,并选择一个最可能的输出。这通常需要一些优化算法和搜索策略,因为可能的输出数量极大,无法简单地全部列出并比较。一种常用的策略是"束搜索"(Beam Search),它在每一步只维持一定数量的最有可能的假设,并且在搜索过程中逐渐剪去可能性较小的候选。
需要强调的是,解码器的任务并不简单,尤其是在实时的语音识别系统中,需要在保证识别准确率的同时,也要保证其运行的速度。
1.4 语音识别任务
语音识别是一个复杂的过程,但其最终任务归结为,找到对应观察值序列O的最可能的词序列 W ^ \widehat{W} W。按贝叶斯公式可转化为
W ^ = a r g m a x P ( W ∣ O ) = a r g m a x P ( O ∣ W ) P ( W ) P ( O ) \widehat{W}=arg\,max\; P(W|O)=arg\,max\;\dfrac{P(O|W)P(W)}{P(O)} W=argmaxP(W∣O)=argmaxP(O)P(O∣W)P(W)
其中,P(O)与P(W)没有关系,可以认为是常量,因此公式可化简为:
W ^ ≈ a r g m a x w P ( O ∣ W ) P ( W ) \widehat{W}\approx\,arg\,\underset{w}{max}\;P(O|W)P(W) W≈argwmaxP(O∣W)P(W)
第一项P(O|W)由声学模型决定,第二项P(W)由语音模型决定。
2 语音识别发展历史
语音识别的发展历史可以追溯到上21世纪50年代。以下是大致的发展概述:
- 1950-1960年代:这一时期的语音识别主要是在实验室环境下,识别单个说话者的有限词汇。例如,贝尔实验室的 “Audrey” 系统在1952年就能识别数字。
- 1970年代:在这个时期,一些关键的理论和技术开始被引入。如隐马尔可夫模型 (HMM) 被证明是一种有效的语音建模方法。同时,一些早期的商业语音识别产品也开始出现,如IBM的 “Shoebox”。
- 1980-1990年代:这一时期,语音识别技术开始大规模应用到电话服务中,例如自动应答、语音拨号等。同时,随着计算能力的提升,大规模词汇、连续语音识别成为可能。近其后期,神经网络开始被实验性地用于语音识别。
- 21世纪初:在这个阶段,随着计算能力和数据集的大幅增长,深度学习开始在语音识别领域大放异彩。尤其在2010年后,深度神经网络成为语音识别研究的主流,大幅提高了识别精度。
今天,我们看到了各种广泛使用的语音识别应用,包括智能手机的语音助手、语音输入法、智能家居的语音控制,以及更广泛的语音交互系统。同时,语音识别技术也开始进入更广阔的领域,例如医疗、教育和法律等行业。其中,尤为需要注意的领域,是端到端模型的发展和自然语言理解能力的提升,这两者正在大大推动语音识别技术的进步。
语音识别的发展历史可以主要概括为三个阶段,分别是模版匹配阶段,这阶段的代表算法是DTW算法,之后便是统计模型阶段,这阶段的代表是GMM-HMM,最后便是现在的深度学习阶段,涌现了如DNN-HMM、E2E之类的算法。下面对这三个阶段进行简要解释。
2.1 模版匹配(DTW)
最初的语音识别系统主要采用模板匹配的方法,即为每个预先定义的词或者声音片段建立一个唯一的模板,然后将输入语音与模板逐一比对,选择最佳匹配的模板作为输出。这种方法严重依赖于发音人和发音环境的一致性,且由于模板数量的限制,无法处理大词汇量或连续语音。
动态时间规整(Dynamic Time Warping,简称DTW)是动态规划在语音识别中的一种应用。这种算法用于计算并最小化两个序列(这里指的是语音样本)之间的差异(通常被认为是距离或者成本),并使它们能够进行有效的比对。这种方法主要应对的问题是在模板匹配步骤中的时间变化问题。因为语音的长度和语速会随着发音人的情况和语境改变,使得相同的词语也会有不同长度和节奏的表达方式,因此无法进行简单的线性比对。DTW就是为了解决这个问题。
它的基本算法步骤是:
首先构建一个代表两个序列之间每一对样本点距离的二维矩阵。
然后在这个矩阵中找寻一条路径,使得整条路径上的累计距离最小。这条路径就是使得两序列对齐最佳的一个匹配方案。
具体的求解过程都是通过动态规划来实现,基于局部的决策关系,逐步推导出全局最优的决策。
举例说明:
假设你有两条语音信号,一条是你说的"hello",另一条是你朋友说的"hello",你说话速度快,你朋友说话速度慢。虽然你们都说的是相同的单词,但因为语速不同,如果直接按照线性时间进行对比,可能“l”的位置就对应不上。这时候就可以用DTW算法,将你和你朋友所说的"hello"进行时间轴的动态调整,使得你们所说的各个音素位置对齐,从而可以准确的进行模板的比对。
DTW因为其能够解决时间的不一致问题,所以在早期的语音识别和其他类似的序列匹配问题中有着广泛的应用。但它也有一定的局限性,比如计算复杂度高,以及无法很好的应对大规模的语音数据等问题。所以现代的语音识别系统倾向于使用基于统计或者深度学习的方法。
2.2 统计模型(GMM-HMM)
随着计算机科学和统计学的发展,1960至1970年代,语音识别开始采用基于统计的方法,例如隐马尔可夫模型(HMM)等。这种方法对输入语音进行概率分析,通过学习大量的训练数据判断输入语音最可能对应的词或句。广义上讲,这些过程可以看作模式识别的一种。这种方法突破了模板方法的限制,支持大规模词汇和连续语音输入。
HMM,即隐马尔科夫模型,是一种具有状态的概率模型,用于描述一个隐藏的马尔科夫链随时间的进展。在语音识别中,HMM用于描述不可观测的语音产生过程。GMM,即高斯混合模型,是用来对数据进行概率密度建模的,用于描述状态到观察值的映射关系。
语音识别中的GMM-HMM是将这两个模型联用,将语音看作是由一系列状态通过状态转移产生的,每个状态产生观察值的概率由GMM进行建模。每一个单词或者音素可以由一个HMM模型表示,每个状态对应发音过程中的一部分,例如音素的开始、中间或结束。GMM建模的是从状态到观察值(对应实际的声学信号)的映射关系。
具体步骤如下:
- 将音频信号进行特征提取,转化为特征向量序列。
- 使用GMM-HMM模型计算这个特征向量序列最可能对应的单词序列。这一步主要涉及到三个问题:1)训练问题,即如何调整模型参数,使得模型能够最好地描述观察到的数据。2)解码问题,即给定模型和一串观测序列,如何找到最可能的状态序列。3)评估问题,即给定模型和一串观测序列,如何计算序列出现的概率。
举例说明:假设你说了一个句子"I like pizza",这句话就经过麦克风转化为声学信号,然后通过特征提取算法转化为特征向量序列。接下来就是基于GMM-HMM模型找出最可能的单词序列。在这个阶段,首先使用已经训练好的GMM-HMM模型,通过解码算法(比如Viterbi算法)找出最可能的状态序列,再根据状态序列找出对应的单词。
所以,在语音识别中,GMM-HMM能够处理大规模的语音数据,同时对音频信号的模糊性、不确定性和多样性进行了很好的处理。但是因为它不能直接建模语音信号的时序特性,所以在近年来深度学习技术发展之后,GMM-HMM逐渐被深度神经网络模型所取代。
2.3 深度学习(DNN-HMM、E2E)
进入21世纪,特别是近10年,随着计算机技术的深度学习算法的突破,以及大规模语音数据集的稳步增长,深度神经网络以其强大的表达能力和学习能力进一步改进了语音识别的性能。这种方法可以理解为排列复杂的神经网络层次所形成的函数,通过学习大量的训练数据解决语音识别问题。这种方法不仅能够处理大规模和复杂的输入,也能够更好地处理噪声和口音等实际问题。
DNN-HMM和E2E都是近年来在语音识别领域应用的比较广泛的深度学习模型,一起来了解一下吧:
DNN-HMM(Deep Neural Network-Hidden Markov Model):
类似于之前的GMM-HMM,DNN-HMM也是将两种模型联用。不过这里的GMM换成了深度神经网络DNN。在这个模型中,DNN用于进行特征到音素的映射,用来预测每个状态的后验概率,而HMM则用于对音素的时序特性进行建模。这种做法克服了GMM建模能力的局限,让模型综合考虑到多个特征的联合概率分布。也因为深度神经网络的引入,使模型在处理大规模语音数据时性能大幅提升。
举例:例如在识别一句英文"Hello, how are you"时,首先通过声学模型(DNN)对输入语音进行建模和预测,得到不同状态(音素)的后验概率。然后HMM模型用于处理这些音素的时序关系,找出最可能对应的音素序列。最后通过字典和语言模型得到相应的英文句子。E2E(End-to-End):
E2E是将语音识别问题看作一个整体进行建模的方法,也被称为序列到序列(Seq2Seq)模型。这个模型从输入的语音特征直接映射到对应的字符或者单词,不需经过中间的音素解码过程。这样做的好处是,模型直接学习到输入和输出之间的映射关系,让网络自己去学习内在的表示,可以捕获更丰富的信息,从而提高识别率。常见的E2E模型有Listen, Attend and Spell(LAS)模型,Connectionist Temporal Classification(CTC)模型等。
举例:在处理同样一句"Hello, how are you"的语音时,E2E模型直接接收语音特征作为输入,输出的是一系列字符或单词。而这个过程中,并没有将语音分解为音素或词素,而是直接输出了最终的文本结果。这种方式的优点是可以跳过许多复杂的中间步骤,直接得到结果。但缺点也很明显,比如对于长序列的处理上会有一定的困难,以及对数据的需求更大等。
总体来说,DNN-HMM和E2E代表了语音识别的两种主要的深度学习模型,前者保留了传统模型的优点同时利用神经网络的表征能力,后者代表了一个理念上的转变,直接对输入输出进行建模,简化了识别过程且在一定程度提高了准确性,但是对数据和计算能力的需求较大。
3 语音识别评价指标
3.1 识别错误率(Error Rate)
语音识别的错误率通常使用字错误率(Word Error Rate, WER)或者句子错误率(Sentence Error Rate, SER)来衡量。字错误率是预测的词和实际词之间的插入、删除和替换操作数占总词数的比例。句子错误率则是判断预测的句子和实际句子是否完全匹配,如果不匹配即为一个错误。明显地,字错误率对识别系统的要求更高。
比如一个语音识别系统在获取"Bring my red shoes"这样的语音输入后,输出为"Ring my read shoes",那么我们有一个替换错误(“Bring"被替换成了"Ring”)和一个插入错误(“red"被插入成了"read”)。因此字错误率为2/4=50%。
3.2 实时因子(Real-Time Factor, RTF)
在很多应用场景下,语音识别系统的响应速度十分关键。实时因子是识别用时与实际语音长度的比值,用来衡量识别的实时性。如果一个10秒的音频文件,系统用了20秒完全识别出文字,那么实时因子就是2.0
3.3 鲁棒性(Robustness)
良好的语音识别系统需要对各种环境噪声和说话人的变化具有鲁棒性。这通常通过在各种环境和说话人条件下的识别错误率来衡量。比如一个语音识别系统在安静环境下的字错误率为5%,但在嘈杂的街头环境下错误率却上升到了20%,那么这个系统就可以说在声音干扰下的鲁棒性较差。
3.4 适应性
一些语音识别系统可以通过学习来适应新的环境和说话人。这通常通过测量系统在经过短时间适应后的性能来评估。若一名从未使用过某语音识别系统的讲话者开始使用后,一开始的错误率为10%,但使用一段时间,系统对其语音特征学习和适应后,错误率降低到了6%,这就显示了该系统具有良好的适应性。
3.5 可用性
除了以上指标,实际的产品还需要考虑用户的体验。例如,系统是否容易使用,是否支持多种语言和方言,错误时是否容易修改等等。如果一个语音识别应用初始设置复杂,用户需要花费较长时间学习,或者在识别错误时,用户无法快速找到修改的途径,那么就可以认为这个应用的可用性较差。
除了以上指标,实际的产品还需要考虑用户的体验。例如,系统是否容易使用,是否支持多种语言和方言,错误时是否容易修改等等。如果一个语音识别应用初始设置复杂,用户需要花费较长时间学习,或者在识别错误时,用户无法快速找到修改的途径,那么就可以认为这个应用的可用性较差。
以上就是语音识别系统的主要评价指标,但根据特定的应用场合和需求,可能还会有其他的指标需要关注。