这篇文章主要是对CMU Sphinx系列教程的第一篇文章的主要内容做一些总结。学习某个知识,掌握这些知识的基本概念是必要的。不了解这些基本概念和他们的英文表述,对于代码(kalid)和论文的阅读都会存在一些障碍。对这些基本概念是否了解,是检验一个人是否入门语音识别的一个标志。
原文如下:
https://cmusphinx.github.io/wiki/tutorialconcepts/
语音构成
语音是一个连续的音频流,由大部分的稳态和小部分的动态组成,怎么对它进行建模呢。
语音可以认为是由多个词(word)构成,而每个词又是由多个音素(phones,在语言学中也称为 phonemes)构成。一个音素对应的波形(wave form)的声学特征的变化会受上下文,说话人等影响。需要被放到上下文中进行考虑,音素与音素相邻(过渡)部分可能比稳定部分蕴含更多的信息。所以,我们把一个音素分为几个不同的子状态(substates)。这就是多音素建模的思想。这些在上下文中的音素被称为三音素(triphones)甚至是五音素。三音素是常用的,对于三个状态也很好解释,音素的第一部分依赖于它的前一个音素,中间的是稳定的自身的部分,第三部分依赖于它的下一个音素。
波形中除了语音还有其他非语音的声音(non-linguistic sounds),这些声音又被称为填充物(filler)。语音和非语音一起构成了语音片段(utterances)。在语音识别中,一个帧长可以认为是一段utterances。目前通用的语音识别方式如下:有一段波形,通过静音(silences)将它分割成若干个语音片段(utterances),然后识别每一个语音片段说的是什么
特征
用帧frames去分割语音波形,从帧提取特征,一般使用MFCC或FBANK
模型
在语音识别中有3个模型
1. 声学模型(acoustic model)
表示某段语音是某个词或音素的概率。现在一般使用神经网络
2.发音词典(phonetic dictionary)
发音字典包含了从词到音素的映射关系。
3.语言模型(language model)
语言模型用于限制词的搜索范围。定义了哪个词可以跟在前一个已经被识别出来的词的后面。最广泛使用的语言模型就是n-gram语言模型
解码器
解码器就是对以上3个模型构成的Lattice进行搜索匹配。一般使用WFST。Lattice是用于表示所有识别可能的有向图(directed graph)
特征、模型和解码器三部分构成了一个语音识别系统。
评价指标
-词错误率(Word error rate)
假设我们有一个原始的文本以及长度为N个词的识别文本。I是插入词(inserted words)的数量,D是删除词(deleted words),S表示替换词(substituted words)
WER=(I+D+S)/N
-准确率(Accuracy)
Accuracy=(N−D−S)/N
-实时率(real time factor)
度量自动语音识别系统解码速度的值。当实时率等于或小于1时我们说该处理是实时的。详见百度百科:https://baike.baidu.com/item/rtf/15874401?fr=aladdin
-ROC曲线
对于一个检测任务,检测会出现误报和命中两种情况。ROC曲线就是用来评价检测性能的。
参考文献
1. https://blog.csdn.net/xm1076709179/article/details/82218262
2. https://blog.csdn.net/zouxy09/article/details/7941055