笔记为观看王赟老师的网课语音识别之前世之后所记录,记录下来帮助理解以及日后复习用。
最近很粉王老师呀!
贴上他的知乎主页 王老师知乎首页
孤立词识别
特征提取
语音识别采样率最低为8000Hz,8000Hz刚好听清楚说的什么东西。采样率更多,
如果原来的采样率为8000Hz,那么得到的频谱上限为4000Hz,为采样率的一半。由奈奎斯特1928年提出的。
频谱具有精细结构和包络结构。精细结构反映音高用处比较小,包络反映音色,是主要信息。
提取特征的任务就是将精细结构去掉,只留下包络.通过三角滤波实现.计算每一个三角形之中的能量.频谱(幅度谱得平方一下)乘上三角形在横轴上去积分.将每一个三角形的能量连接起来.得到滤波器组输出(Filterbank output,近似频谱包络).横轴就是三角形的个数.
三角形低频较密,高频较疏.模仿人耳的听觉敏感度.
再经行离散余弦变换,40个数变为13个数. MFCC是默认特征.
MFCC中第一个系数为能量.
将频谱图拼接在一起,就变成了语谱图.
将每一帧的MFCC系数拼在一起就成了MFCC序列.
优点:排除基频\符合听觉\纬度低
缺点:视野小,受环境影响大(噪声\回声\滤波)
改进:加入一阶二阶差分,各种归一化(差分:相邻两个相减)
动态弯算法 (对齐算法)
DTW
- 让待识别语音中的每一帧与模板中最相似的一帧匹配
- 要保持顺序
- 动态规划算法
总距离为各帧的欧式距离之和
找一种合适的方式让相似帧去匹配
GMM
将模板替换成模型
用高斯混合模型来拟合特征分布.高斯分布的叠加就是高斯混合模型
在空间呈椭球状
- 均值:中心
- 协方差:椭球形各个方向的长度
- 权重:各个椭球的权重 期望最大化(EM算法)
训练模型:
- 将模板切成多个段落(选择一个模板,剩余模板和它对齐)
- 用高斯分布的叠加拟合每段中特征向量的分布
- 对于任意特征向量可给出概率密度
如何用模型来识别未知语音:
- 用”动态弯”算法对齐待识别语音与模型
- 用GMM概率密度代替特征向量间的欧式距离
- 相乘得到P(待识别语音|模型) 这里隐含了一个独立性假设
- 取概率最大的模型为识别结果
HMM
对音素持续时间建模
- 添加状态间的转移概率(状态的个数看句子的复杂程度,其没有确切的物理意义的)
- P(语音,对齐方式|模型) = GMM观测概率 * HMM转移概率(语音和对齐方式的联合概率)
隐马尔可夫模型特点
- 隐性:特征序列由隐状态产生,对齐方式未知
- 马尔可夫性:
- 转移概率与观测概率只由当前状态决定
- 推论:状态持续时间服从指数分布 (无记忆分布,指数分布不符合事实,一般状态持续时间是高斯分布,这是一个缺陷)
- 模型参数:
- 转移概率
- 观测概率(GMM,若干个分量,均值协方差)
- 模型是单向的,不必讨论初始概率
HMM三大问题
- 求值问题: 给定模型参数和语音,求P(语音|模型)
- 把P(语音,对齐|模型)对所有对齐方式求和
- 动态规划算法:Forward algorithm (只考虑了输出概率GMM)
- 解码: 给定模型参数和语音,求最佳对齐方式
- 动态规划算法: Viterbi decoding
- 这是”动态弯”算法的升级版(考虑了输出概率GMM和转移概率HMM)
- 最佳对齐方式的概率,可以作为总概率的近似
- 训练: 给定语音和模型结构,求模型参数
EM训练算法
鸡生蛋蛋生鸡问题:
- 如果知道了对齐方式,则容易求模型参数
- 如果知道了模型参数,也容易求对齐方式
解决办法:
- 先瞎猜一种对齐方式(如均匀分割)
- 由此求出模型参数(M步)
- 然后更新对齐方式(E步)
- 可用Viterbi求最好的方式(只能求一个),实际用Forward-backward软判决(能求多个方式及其概率)
- 循环直至收敛
最然似然估计: 最大化P(训练语音|模型)
语音识别基本方程
W*=argmaxP(W|X)=argmaxP(X|W)P(W)/P(X)=argmaxP(X|W)P(W)
- W*:识别结果
- W: 任一单词
- X: 待识别的语音信号
- P(X|W): 声学模型(GMM+HMM)
- P(W): 单词的先验概率
连续语音识别
W=argmaxP(X|W)P(W)
W和W由单词变为了句子
- P(X|W):句子的声学模型
- P(W): 句子的先验概率–语言模型
语言模型
- 链式法则:
- P(皮卡皮卡丘)=P(皮)P(卡|皮)P(皮|皮卡)*P(卡|皮卡皮)…
- 根据半句话猜下一个词
- 最常见形式: n-gram
- 每个词至于前n-1个词有关
- Bigram(n=2): P(皮卡皮卡丘)=P(皮)P(卡|皮)P(皮|卡)*P(卡|皮)…
- Trigram(n=3): P(皮卡皮卡丘)=P(皮)P(卡|皮)P(皮|皮卡)*P(卡|卡皮)
- 容易训练和使用
- 其他形式: 最大熵\神经网络…
- Bigram是马尔科夫模型
- 下一个词只与当前词有关
- 模型是遍历的,不是单向的
- 可与单词的声学模型复合,得到一门语言的HMM
大量词汇语音识别
不能为每个单词训练单独的HMM
改成为每个因素训练一个HMM
HMM的复合
- 因素HMM按词典拼接成单词HMM
- 单词HMM与语言模型复合为语言HMM
训练
- 给定许多语音和对应的音素串,求模型参数
- 每个因素串的HMM是单向的,仍用EM算法 (多音字问题,可以用词法转移)
解码
- 给定一门语言的HMM和一条语音,求单词串
- 用Viterbi算法求最佳路径(beam search剪枝)
- 也可以得到n-best list 或lattice
语音识别系统结构
语音信号->特征提取->解码器(声学模型(GMM-HMM)\词典\语言模型(Bigram))->识别结果
评价标准:词错误率 (WER)
- 计算方法:
- 将标准答案与识别结果对齐
- 用插入+删除+替换错误/标准答案的长度
- 对齐是的错误数最少
- 最优对齐不一定唯一
- 对其不考虑单词读音的相似性
- WER可能高于100%
人类停歇的错误率范围2~4%
潘多拉魔盒
语音信号->特征提取->解码器(声学模型(GMM-HMM)\词典\语言模型(Bigram))->识别结果
打了很多补丁
上下文有关模型
两个ai不一样,分别是ai(f,v)和ai(n,n)
两个n不一样,取决于前后的单词
- 上下文聚类
- 上述方法状态会爆炸
- 聚类来缩小,ai(f,v)和ai(n,n)可能仍不同,但ai(m,n)与ai(n,n)可能就一样了.
英文保留几千个因素就可以了.
区分式训练
- EM算法是最大似然估计
- 最大化P(X|W),W是训练文本
- 但P(X|W‘可能更大了),W‘是W的竞争者
- 导致P(W|X)不一定最大化
- 区分式训练(discriminative training)
- 优化概率用MMI最大化互信息/优化次错误率
- 让P(X|W)大,同时让P(X|W‘)小
- 竞争者: 来自最大似然系统输出的n-best list 或lattice
说话人适应
- 说话人相关训练(speaker dependent training)
- 说话人适应(speaker adaptation) 是否可以用转移学习
- 在测试时,把模型参数或待识别语音的特征整体平移,使二者互相适应
- 模型参数可以不断更新,逐步适应说话人
- 说话人适应训练(speaker adaptive training)
- 再训练时,提取说话人的特征(i-vector:用比较短的向量,代表说话人的特点),与声学特征一同作为模型的输入
二次打分(解决语言模型问题)
- 解码器只能利用n-gram语言模型
- HMM的状态数随n指数增长
- 还要考虑编程复杂度
- 实际一般只用bigram
- 如何利用更好的语言模型
- 用bigram识别得n-best list或lattice
- 用更好的语言模型对这些句子重新打分,选出最优解
这些补丁确实降低了WER
但是
- 系统宾得复杂到难以驾驭
- 各模块是单独训练得,用力并不统一
天下大势分久必合
Kaldi
HCLG HMM Context Lexicon Gramma
MARK