(一)语音识别基本概念

本文介绍了语音识别的基本概念,包括语音的构成、识别过程、模型等。文章以CMUSphinx系列教程为背景,探讨了语音如何由音素组成,以及在语音识别中常见的模型,如隐马尔可夫模型(HMM)的应用。此外,提到了声学模型、发音字典和语言模型在识别中的作用,以及评估识别性能的词错误率等关键指标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面
这是CMUSphinx系列教程的第一篇,文章译自官网,文中很多概念能翻译的尽量用中文翻译出来,并在后面跟上原英文,实在翻译不出来的就用原英文了,相信不会影响到大家的理解。如有翻译不当之处,请多但待并指出,谢谢!


语音是一个复杂的现象(phenomenon)。人们很少能理解它是怎样产生以及被感知的(perceived)。一个直观的感知(perception,和前面的感知意思类似,只不过词性不同)通常是:语音是由多个词(words)构建的,而每个词又是由多个音素(phones,语音学概念,但在多数情况下和语言学中phonemes(音位)的概念不做区分)构成的。但是很不幸,事实却和人们所感知的差别很大。语音是一个动态的过程,在它的每一部分之间没有明确的界限。因此,了解一段语音的一个很有效的方式是通过一个声音编辑器去观察(look into)下语音的波形(rcording),并去听一下。这是一段通过音频编辑器打开的语音的波形
image
当前所有对语音的刻画的方法或多或少都是用概率。这意味着在单元与单元,或者词与词之间不存在确定的界限。语音转写(speech to text)以及其他语音方面的应用不存在100%正确的情况。这和传统的软件开发人员的想法是相悖(rather unusual)的,他们通常是在确定的(deterministic)系统上进行工作的。这就产生了很多只属于语音技术的概念和话题。

语音的构成

目前的实践(practice)中,语音结构的描述如下文所示:
语音是一个连续的音频流,它是由相对稳定的状态和剧烈变化的状态混合而成的。在这些状态序列里,人们可以针对声音(sound)或者音素(phones)根据相似性定义一定数量的类别(我的理解是,作者想要表达的意思是确定一种建模方式,对于每一种建模方式,建模单元的数量是可以确定的)。词(words)通常被理解为是由音素(phones)构建的,但事实并不如此。一个音素对应的波形(waveform)的声学特性(acoustic properties)的变化会严重依赖于音素上下文(phone context)、说话人(speaker)、语音的风格(style)等等。所谓的协同发音(coarticulation,可以理解为一个音素的发音会受到相邻音素的影响,为了使发音自然连贯,人类在发音时总会使用协同发音以使音素与音素之间过渡平滑),会使得音素听起来和它原本的发音(canonical,单个音素的发音)差异很大。因为词与词之间的过渡所蕴含的信息要比稳定区域(stable regions,这里指一个词的内部)多得多,语音开发人员谈论的更多的是diphones,即两个音素相邻的部分(包括前一个音素的末尾部分和后一个音素的起始部分)。有时,他们也会谈论subphonetic单元,即一个音素的不同子状态(substates,这就是多音素建模方式的思想)。通常,一个音素可以根据不同的特性分成三个或更多的区域(regions)。
对于三个的情况很好解释:音素的第一部分依赖于它的前一个音素,中间的是稳定的自身的部分,第三部分依赖于它的下一个音素。这就是为什么在语音识别中一个音素常常包含三个状态。
有时,音素会被放到上下文中进行考虑。这些在上下文中的音素被称为三音素(triphones)甚至是五音素(quinphones)(注意:无论是考虑多少个相邻音素,这些音素都是一个音素,而不是将多个音素当作一个音素)。例如在单词”bad”中,”u”的左边是音素”b”,右边是音素”d”,它的发音和单词”ban”中,左边是音素”b”,右边是音素”n”的”u”发音就有点不同。注意,和diphones不同的是,考虑上下文的多音素和不考虑上下文的音素,对于同一个音素来说,它们在波形上的范围是一样的,多音素并不是将多个音素组成一个“大”的音素。它们只是因为发音有区别用不同的名字表示而已。
举例来说,如果你想对一个三音素的起始创建一个检测器,并将它在多个三音素之间共享,为了降低计算量,一个有效的做法是只检测(detect)部分三音素而不是检测所有(这里对detect的概念不是很明白,我的理解是,理论上,对于有 N N 个音素的模型,对应的三音素个数是N3,而实际系统中,可以采用一些手段来降低三音素的个数,如下面提到的决策数聚类方法)。这样,大量的声音检测器(sound detector)就可以用少量的具有区分度的声音检测器来代表(很多三音素类似,可以将它们聚在一起,共享参数,经过聚类之后,不同类别之间的三音素区分度是比较大的)。通常我们是以哦嗯4000个具有区分性的声音检测器去组成三音素的检测器。我们称这些检测器为senones(也称为tied triphone states,即将分布类似的状态聚成一类共享参数)。一个senone可以依赖除了左边和右边的上下文以外更多的上下文信息。可以通过决策数或者其他方式定义相当复杂的函数。
音素也可以构成子词单元,如音节(syllables)。有时,音节被定义为“减少的稳定实体”(reduction-stable entities)。举个例子,当语音变得快的时候,音素经常会变化,但是音节就可以保持不变。同时,音节还可以反映语调轮廓(intonational contour)。除了音节,还有其他方式构建子词,即基于形态学的(morphologically-based)或者基于发音的(phonetically-based)。子词常常被用于开放词汇(open vocabulary)语音识别。
子词构成词。在语音识别中,词是很重要的,因为它们极大地限制了音素的组合。如果有40个音素,平均每个词有7个音素,那就有 407 40 7 个词。庆幸的是,在实际生活中,人们的常用词汇不超过20000个,这使得语音识别变得更可行。
词和其他非语言的声音(non-linguistic sounds,这些声音我们称为填充物(fillers),具体有呼吸声、表示犹豫或说话中间停顿的嗯声(um)、表示不肯定、不清楚或征求同意的啊声(uh)以及咳嗽声)构成了语音片段(utterances,语音学概念,人在说话时,两个较长停顿之间说的语音片段称为一个utterance,与句子(sentence,语言学概念,句子是具有更强的语义概念的)不是一个概念)。
还有其他的一些概念这里就不表了(dialog acts like turns)。

识别过程

目前通用的语音识别方式如下:有一段波形,通过静音(silences)将它分割成若干个语音片段(utterances),然后识别每一个语音片段说的是什么。要想实现上述想法,我们需要穷举出所有可能的词的组合,然后和音频进行匹配(match),选择最好的匹配组合。
在匹配过程中,有几个重要的概念。第一是特征(features)。因为参数的数量非常大,我们尝试减少它。通常会将语音分成帧(frames),然后在帧的单位上计算参数数量。对于每一帧,通常选择10ms作为一帧的长度,然后提取39个数来表示语音。这39个数就构成了一个特征向量。至于这39个数怎么计算是一个活跃的研究方向,但是一个简单的方式是,它可以从声谱(spectrum)中得到。
第二个概念是模型(model)。一个模型描述了一些数学对象,这些对象集合了口语说的话(spoken word)的共同属性。实际上,对于一个senone音频模型,模型就是指它的三个状态的高斯混合,简单地说,它是最有可能的特征向量(这里是按照原文翻译的,可能不太好理解,我个人理解是模型就是通过高斯混合模型去刻画每一帧特征向量的分布,并将特征向量对齐到HMM每一个状态上去)。从模型的概念,可以导出如下议题:
- 1.模型对实际语音的刻画能力有多好
- 2.如果模型内部有问题,可以使模型变得更好吗
- 3.如果条件发生变化模型的适应能力有多强
语音的模型称为隐马尔可夫模型(Hidden Markov Model,HMM)。它是一个用于刻画黑盒通信信道(black-box communication channel)的通用模型。在这个模型中,过程被描述为一系列状态以特定的概率进行跳转。这个模型试图去描述包括语音在内的任何序列过程。HMMs已经被证明在语音解码(speech decoding)中是确实有效的。
第三,就是匹配过程本身。因为将所有的特征向量和所有的模型进行比较是非常耗时的,因此通常会应用很多技巧来优化搜索过程。在任何时候,我们保存最佳匹配的变量,并随着时间推移对其进行扩展,为下一帧生成最佳匹配变量(动态规划的思想,对于每一帧来说,它前面走过的路径是最优的)。

模型

按照语音结构,在语音识别中有三个被用到的模型去进行匹配:
-声学模型(acoustic model)
对于每一个senone,声学模型包含了其声学特性。有上下文无关的模型和上下文相关的模型两种。
-发音字典(phonetic dictionary)
发音字典包含了从词到音素的映射关系。这个映射并不是非常有效。例如,对大多数音素,字典中只记录了两种或三种不同的发音方式。但是,这在绝大多数情况下也够用了。字典并不是将词映射到音素的唯一方法。你也可以使用一些通过机器学习算法学习到的复杂的函数来进行映射。
-语言模型(language model)
语言模型用于限制词的搜索范围。它定义了哪个词可以跟在前一个已经被识别出来的词的后面(因为匹配是一个序列的过程,只有识别出前一个词才能识别后一个词),并且通过剔除不可能的词来帮助我们极大地限制匹配的过程。最广泛使用的语言模型就是n-gram语言模型(统计词序列)和有限状态(finite state)语言模型(通过有限状态自动机,有时还带有权重,来定义语音序列)。要想获得好的识别精度,你的语言模型必须限制搜索空间上做的非常成功。这就意味着它应该非常善于预测下一个词。一个语言模型常常会限制被考虑包含的单词的词汇量。这是命名识别(name recognition)中的一个问题。为了处理这种情况,一个语言模型可以包含更小的块(chunks),如子词甚至音素。但要注意的是,在这种情况下对搜索空间的限制要差很多,因此识别的精度也会比基于词的语言模型要低。
在一个引擎中,这三个部分被组合到一起用于识别语音。如果你想用你的引擎去识别其他的语言,你需要把这些部分放在适当的位置。对很多语言来说,有声学模型、发音字典甚至大词汇量语言模型可供下载。

其他常用概念

-Lattice
一个Lattice是用于表示所有识别可能的有向图(directed graph)。通常,获得最佳匹配是不实际的(动态规划只能获得局部最优,无法保证全局最优)。在这种情况下,lattices是一种好的用于表示识别结果的中间形式。
-N-best lists
和lattices类似,但是没有lattices稠密(只保留前N条概率最大的路径)
-词混淆网络(Word confusion networks)
和lattices一样,只是格式更为规整
-语音数据库
-文本数据库
用于语言模型训练。需要将格式转化成口语文本形式(spoken text form),即,将标签和头移除,将数字转化成口语的形式,将缩写转化为完整形式。

评价指标

当语音识别开发完成后,最复杂的问题是使搜索精确,并使搜索速度达到最快。因为模型不完美,另一个挑战是使模型匹配语音。
通常系统会在测试集上进行测试,评价指标如下:
-词错误率(Word error rate)
假设我们有一个原始的文本以及长度为N个词的识别文本。I是插入词(inserted words)的数量,D是删除词(deleted words),S表示替换词(substituted words)。则词错误率可以通过下式计算:

WER=(I+D+S)/N W E R = ( I + D + S ) / N

词错误率通常用百分数来表示。
- 准确率(Accuracy)
和词错误率类似,但是不考虑插入错误的情况:
Accuracy=(NDS)/N A c c u r a c y = ( N − D − S ) / N

在绝大多数情况下,准确率都是一种比词错误率更差的衡量指标,因为插入错误对最终的结果也非常重要。然而,对于一些任务,准确率是一个合理的评价指标。
- 速度
包括录音的时间和解码的时间
- ROC曲线
当我们谈论检测任务时,会有虚警(false alarms)和命中/错过(hits/misses)的概念。用ROC曲线可以描述它们。ROC曲线试图找出最佳点,在这个点上虚警小而命中数100%匹配上(意思是所有被命中的都是应该被命中的,即precision为100%)。关于ROC曲线可以参考 维基百科
还有一些其他一些不常被考虑但是对于很多应用很有用的特性。你的第一个任务应该是创建该评价方式并且将其应用到系统开发中。你的第二个人无是收集文本数据库,然后测试你的应用的性能怎么样。

<think>好的,我现在需要回答用户关于语音识别技术基本概念的问题。用户之前已经询问过光符号识别技术(OCR),现在转向语音识别,可能是在比较不同识别技术或者想了解相关领域。首先,我需要明确用户的需求,确保回答的结构和内容符合他们的预期。 首先,我需要回忆语音识别技术的基本概念,包括定义、关键组成部分、技术流程、应用场景等。可能需要分点来阐述,保持与之前OCR回答的结构致,便于用户对比。同时,用户可能对技术原理感兴趣,但作为基本概念,不需要太深入的技术细节,但需要涵盖主要步骤和关键技术。 接下来,要确保使用中文回答,并且按照用户的要求,使用正确的LaTeX格式,特别是行内公式要用$...$,独立公式用$$...$$。例如,在提到MFCC时可能需要公式,或者声学模型中的概率计算。 同时,要注意用户可能对技术演进、应用场景和挑战感兴趣,需要包含这些部分。另外,用户之前的OCR回答中有历史演进、技术原理分步、应用案例表格等,可以借鉴类似结构,但要根据语音识别的特点调整。 需要检查是否有遗漏的关键点,比如语音识别中的预处理、特征提取、声学模型、语言模型、解码器等组成部分。另外,还要提到当前的挑战,如噪声环境、口音、多语种支持等,以及主流的工具和框架,如Kaldi、DeepSpeech等,可能用户需要这些信息作为参考。 还要注意避免技术术语过于复杂,保持解释的易懂性。比如,解释声学模型时,可以提到它如何将声音信号转化为音素或字,而语言模型则处理上下文关系。同时,结合应用实例,如智能助手、语音输入法等,让用户更容易理解。 最后,确保回答结构清晰,分点明确,使用适当的标题和标题,可能用项目符号或表格来组织内容。检查LaTeX格式是否正确,比如声学模型中的概率公式是否用$...$包裹,或者MFCC的计算步骤是否需要独立公式。 总结,我需要组织以下内容: 1. 定义和概述 2. 核心组成部分(预处理、特征提取、声学模型、语言模型、解码) 3. 技术流程步骤 4. 关键技术(如HMM、DNN、端到端模型) 5. 应用场景 6. 技术挑战 7. 常用工具和框架 确保每个部分简明扼要,符合用户之前获得的OCR回答的结构,同时突出语音识别的独特之处,如实时性、环境噪声的影响等。另外,可能需要提到最新的趋势,如端到端模型、多语种支持、低资源语言处理等,展示技术的前沿发展。</think>### **、基本定义** 语音识别技术(ASR,Automatic Speech Recognition)是将人类语音信号转换为计算机可读文本的核心技术,其本质是**声学信号到语义符号的映射**。例如: - 手机语音助手(如Siri、小爱同学) - 会议实时字幕生成 - 语音输入法(微信语音转文字) --- ### **二、核心组成部分** 1. **预处理** - 分帧加窗:将连续语音切分为20-40ms的短帧(公式:$x[n] \cdot w[n]$,常用汉明窗) - 降噪:抑制环境噪声(如谱减法、维纳滤波) 2. **特征提取** - **MFCC(梅尔频率倒谱系数)**: 1. 傅里叶变换获取频谱 2. 梅尔滤波器组滤波(模拟人耳听觉特性) 3. 取对数后做DCT变换(公式:$c_n = \sum_{k=1}^{K} \log{E_k} \cdot \cos\left[\frac{\pi n}{K}\left(k-\frac{1}{2}\right)\right]$) - 其他特征:FBANK(滤波器组能量)、PLP(感知线性预测) 3. **声学模型** - **传统方法**:GMM-HMM(高斯混合模型+隐马尔可夫模型) - HMM状态对应音素(如汉语拼音的声母/韵母) - 输出概率:$P(o_t|s_i) = \sum_{m=1}^{M} w_{i,m} \mathcal{N}(o_t; \mu_{i,m}, \Sigma_{i,m}})$ - **深度学习方法**: - DNN-HMM(深度神经网络替代GMM) - 端到端模型(如CTC、RNN-T、Transformer) 4. **语言模型** - **N-gram**:基于统计的上下文预测(如$P(w_i|w_{i-1},w_{i-2})$) - **神经网络语言模型**:BERT、GPT等预训练模型提升长距离依赖建模 5. **解码器** - 动态搜索最优路径(如Viterbi算法、束搜索) - 联合优化声学与语言模型得分(公式:$\arg\max_W P(A|W)P(W)$) --- ### **三、技术流程示例** 以“打开空调”指令为例: 1. 麦克风采集音频 → 2. 降噪后提取MFCC → 3. 声学模型输出音素序列 → 4. 语言模型修正为“打开空调” → 5. 触发智能家居控制 --- ### **四、关键技术挑战** | 问题类型 | 具体表现 | 解决方法 | |----------------|---------------------------------------|-----------------------------------| | **环境噪声** | 车载场景信噪比<5dB时错误率上升50% | 多麦克风阵列波束成形 | | **说话人差异** | 方言识别率比普通话低30% | 方言语音数据增强 | | **重叠语音** | 多人同时说话导致字错误率>80% | 说话人分离(如TasNet) | | **低资源语言** | 藏语等语种标注数据不足100小时 | 迁移学习+无监督预训练 | --- ### **五、主流工具与框架** - **Kaldi**:基于HMM的传统ASR工具链(支持WFST解码) - **ESPnet**:端到端语音识别框架(集成Transformer、Conformer) - **DeepSpeech**:基于RNN-T的开源模型(百度DeepSpeech2中文WER 12.7%) - **商用API**:Azure Speech-to-Text(支持100+语种实时转写) --- ### **六、发展趋势** 1. **端到端模型**:简化传统流水线(如Google的LAS模型) 2. **多模态融合**:结合唇动特征提升噪声鲁棒性 3. **边缘计算**:在手机端实现离线识别(如TensorFlow Lite部署) 4. **个性化适配**:少量样本微调模型适应用户口音 当前最先进系统(如Whisper)在LibriSpeech测试集上错误率(WER)已低于3%,接近人类水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值