语音识别-音素的上下文建模
人的发音其实是个渐变过程,在从一个音素转向另一个音素时,会存在协同发音现象,包括同一个音节内部和不同音节的过渡。
本博客主要看洪青阳教授写的《语音识别:原理与应用》而写的笔记。
协同发音
协同发音是指一个音受前后相邻音影响而发生变化。如”好好学习“的“好好”。因此同一个音素在不同位置,发音差异可能较大。
中文: 好 好
音节: hao3 hao3
音素:h ao3 h ao3
每个字都是一个音节,音节内部有发音衔接,音节之间也是有衔接的,其体现就是在语谱图过渡阶段存在交叉。
上下文建模
为了更好地匹配协同发音现象,需要对音素进行上下文建模。
双音子建模
针对普通话,单个音节只有声母和韵母,音节内部最多只能进行双音子建模,也就是只考虑音节(单个字)内部声母和韵母之间的关联,如“灯“的拼音deng,本来是分为d和eng两部分,可拆分成以下两种形式:
deng d+eng
deng d-eng
d+eng表示发音偏向于d,但后面衔接eng;
d-eng表示发音偏向于eng,但前面是d。
假设声母和韵母之间均可以两两组合,则普通话(不带声调)就有27(声母)x38(韵母)x2=2052个双音子,英语有28(辅音)x20(元音)x2=1120个双音子。
三音子建模
三音子建模比双音子建模多一个音子,其根据左右音素来确定发音,形成上下文相关的模型。如”打开灯光“的拼音,可转换为:
d-a+k
k-ai+d
d-eng+g
g-uang+sil
(sil为静音)
三音子可实现对音素上下文更精细的建模,但其数量巨大,例如:
- 普通话:27(声母)x 38(韵母) x 29(声母+sil/sp)=29754个
- 英语:28(辅音) x 20(元音)x 30(元音+sil/sp)=16800个
如果不考虑音素的先后顺序,则N个音素有N3N^3N3种组合,这还是没考虑声调的情况。
为了解决这一矛盾,可采用模型状态绑定,就是让不同的HMM状态共享模型参数,这样参数量就可大为减少。
绑定的目标就是把发音相似的音素聚在一起,对于普通话是相似的声母、韵母,而对于隐喻是相似的元音、辅音。
状态绑定方法一般使用决策树聚类。
决策树用于音素对音素或音素状态进行聚类
例如,我们给一个音素聚类的例子,输入是音素集合{g,d,t,b,p,k,m,n},通过判断是否为声母、鼻音、塞音,把该集合分成鼻音集合{m,n}和塞音集合{g,d,t,b,p,k}。
每一个叶子节点都是相近音素的集合。
而决策数的生成是基于问题集判断的,问题集说明了这些音素之间的相似性,只有相似才可能合并。
问题集
问题集可以手工设计,也可以通过数据驱动自动生成。
手工设计
需要语言学知识。总体原则是发音相似的,归为一类,尽可能精细化。下面是部分音母的分类。
然后用以下部分声母问题集,我们就可以对音素每个状态建立决策树。
而决策树的叶子节点是相似三音子的聚类,如第一个叶子节点包含d-a+m和b-a+n,均为音素a生成的三音子。同时上下文环境发音类似,它们的中间状态共用观察值概率分布。
以上决策数是只针对音素的中间状态建立的,其他状态需要另外的决策树。例如普通话单音子音素(对应三音子的中间音素)有65个,每个音素有3个状态,则需要195棵决策树。
自动生成
自动生成问题集,是一个无监督过程,完全依赖于训练数据。
基本思路:计算这些数据由聚类前后的状态集产生的似然概率差异,看是否有增益。
一开始,所有的三音子的所有状态都归为一类,并且假定每个状态的观察值概率都符合高斯分布。
设S={s1,s2,s3,...,sN}S=\{s_1,s_2,s_3,...,s_N\}S={s1,s2,s3,...,sN}为一个分类的状态集,N为所有的状态数,状态集整体的均值和方差为μs\mu_sμs和Σs\Sigma_sΣs。设X={x1,x2,x3,...,xT}X=\{x_1,x_2,x_3,...,x_T\}X={x1,x2,x3,...,xT}为训练数据集,T为所有的帧数。t时刻处于状态sns_nsn的概率为γt(sn)\gamma_t(s_n)γt(sn),γt(sn)\gamma_t(s_n)γt(sn)可在帧与状态对齐时,由前向后向算法得到,只需计算一次。
整个数据集X由状态集S产生的似然概率为:
L(S)=∑t[lnP(xt∣μS,ΣS)∑nγt(sn)]L(S)=\sum_t[lnP(x_t|\mu_S,\Sigma_S)\sum_n\gamma_t(s_n)] L(S)=t∑[lnP(xt∣μS,ΣS)n∑γt(sn)]
针对高斯概率魔都函数P(xt∣μS,ΣS)P(x_t|\mu_S,\Sigma_S)P(xt∣μS,ΣS),可展开如下:
lnP(xt∣μS,ΣS)=ln(1(2π)D21∣ΣS∣12exp{−12(xt−μS)ΣS−1(xt−μS)T})=−12(Dln(2π)+ln(∣ΣS∣)+(xt−μs)ΣS−1(xt−μS)T)lnP(x_t|\mu_S,\Sigma_S)=ln(\frac{1}{(2\pi)^{\frac{D}{2}}}\frac{1}{|\Sigma_S|^{\frac{1}{2}}}\exp\{-\frac{1}{2}(x_t-\mu_S)\Sigma_S^{-1}(x_t-\mu_S)^T\})\\ =-\frac{1}{2}(Dln(2\pi)+ln(|\Sigma_S|)+(x_t-\mu_s)\Sigma_S^{-1}(x_t-\mu_S)^T) lnP(xt∣μS,ΣS)=ln((2π)2D1∣ΣS∣211exp{−21(xt−μS)ΣS−1(xt−μS)T})=−21(Dln(2π)+ln(∣ΣS∣)+(xt−μs)ΣS−1(xt−μS)T)
ΣS\Sigma_SΣS可计算如下:
ΣS=∑t{(∑nγt(sn))(xt−μS)(xt−μS)T}∑t∑nγt(sn)\Sigma_S=\frac{\sum_t{\{(\sum_n\gamma_t(s_n))(x_t-\mu_S)(x_t-\mu_S)^T\}}}{\sum_t\sum_n\gamma_t(s_n)} ΣS=∑t∑nγt(sn)∑t{(∑nγt(sn))(xt−μS)(xt−μS)T}
进一步推导得到:
∑t{(xt−μS)ΣS−1(xt−μs)T∑nγt(sn)}=D∑t(∑nγt(sn))\sum_t\{(x_t-\mu_S)\Sigma_S^{-1}(x_t-\mu_s)^T\sum_n\gamma_t(s_n)\}=D\sum_t(\sum_n\gamma_t(s_n)) t∑{(xt−μS)ΣS−1(xt−μs)Tn∑γt(sn)}=Dt∑(n∑γt(sn))
其中,D是数据特征的维度。
因此,我们有:
L(S)=−12(D(1+ln(2π))+ln(∣Σs∣))∑t(∑nγt(sn))L(S)=-\frac{1}{2}(D(1+ln(2\pi))+ln(|\Sigma_s|))\sum_t(\sum_n\gamma_t(s_n)) L(S)=−21(D(1+ln(2π))+ln(∣Σs∣))t∑(n∑γt(sn))
把状态集S分成两类,得到SLS_LSL和SRS_RSR,分别计算新的均值和方差。
分类后的似然增益:
Δ=L(SL)+L(SR)−L(S)\Delta=L(S_L)+L(S_R)-L(S) Δ=L(SL)+L(SR)−L(S)
如果Δ>0\Delta > 0Δ>0,则说明状态集分类后有似然增益。
通过数据自动生成问题集的步骤如下:
- 计算统计量:对于每帧语音
语音识别-音素的上下文建模相关推荐
- MASTER:全局上下文建模大幅提高文本识别精度
点击我爱计算机视觉标星,更快获取CVML新技术 今天跟大家分享一篇昨天新出的场景文本识别方法MASTER,其发明了一种Multi-Aspect 全局上下文建模方法,有效改进了文本识别精度,在多个数据集 ...
- python语音识别分析_python数据建模分析 - 语音识别
Getting Started!首先,我们要知道语音的产生过程 voice.png 状态:由肺产生向外的气流,完全放松时声带张开,就是平时的呼吸.如果声带一张一合(振动)形成周期性的脉冲气流.这个脉冲 ...
- 传统语音识别介绍【五】—— 单音素和三音素
一.音素(单音素) 音素(phone),是根据语音的自然属性划分出来的最小语音单位,依据音节里的发音动作来分析,一个动作构成一个音素.音素分为元音与辅音两大类.如汉语音节 ā(啊)只有一个音素,ài( ...
- 基于类语言模型和令牌传递解码器的端到端上下文语音识别(论文翻译)
Title:END-TO-END CONTEXTUAL SPEECH RECOGNITION USING CLASS LANGUAGE MODELS AND A TOKEN PASSING DECOD ...
- 语音识别框架最新进展——深度全序列卷积神经网络登场
干货|语音识别框架最新进展--深度全序列卷积神经网络登场 2016-08-05 17:03 转载 陈杨英杰 1条评论 导读:目前最好的语音识别系统采用双向长短时记忆网络(LSTM,LongShort ...
- 带你认识传统语音识别技术
摘要:隐马尔可夫链HMM模型自从1980年代被用于语音识别以来,一直都是实际语音识别系统的主流方法. 本文分享自华为云社区<新手语音入门(四): 传统语音识别技术简介 | 隐马尔可夫链 | 声学 ...
- 干货|详解最新语音识别框架 深度全序列卷积神经网络
原标题:干货|详解最新语音识别框架 深度全序列卷积神经网络 导读:目前最好的语音识别系统采用双向长短时记忆网络(LSTM,LongShort Term Memory),但是,这一系统存在训练复杂度高. ...
- 语音识别技术突飞猛进
作者:Janie Chang 2011年国际语音通讯协会第12次年会(Interspeech 2011)于8月28日至31日在意大利佛罗伦萨举行.来自微软研究院的研究人员在会上发表了他们的研究成果,这 ...
- 语音识别十年来发展的历程
语音识别十年来发展的历程 在过去的十年中,语音识别技术取得了巨大的发展,连续语音和非特定人的实时语音识别系统已经在实验室之中被成功的开发和研制出来,正在迅速的投入商业应用,人们惊叹于这门科学的飞速发展 ...
最新文章
- LeetCode简单题之在既定时间做作业的学生人数
- jstat -gcutil 输出结果分析_JVM故障分析
- vue创建脚手架 cil
- mysql测试题汇总_总结:SQL练习【SQL经典练习题】
- ESP32串口API
- 网上的tensorflow和cnn教程汇总
- Idea设置炫酷主题+设置背景图片
- 虚拟化服务器杀毒软件,虚拟机需要安装杀毒软件吗
- android开发实现微博正文效果、顶部悬浮、ScrollView嵌套ListView
- Python—爬取全国城市名称案例(Xpath方法)
- Java~基于fluent-hc快速构建Http请求,结合failsafe实现异常重试
- 计算机桌面的图标怎么删除,桌面图标有蓝底怎么去掉,教您去掉电脑桌面图标蓝底的方法...
- GitHub建立个人网站(一)
- 关于清华大学C语言门事件
- ES异常 : Validation Failed: 1: no requests added
- Windows系统蓝屏代码分析
- 【第九篇】商城系统-商城首页功能
- 最全前端面试问题及答案总结
- 海康威视SDK控制台程序consoleDemo将实时码流保存为视频文件mp4
- KISSY基础篇乄KISSY之Node(1)
热门文章
- RLC并联谐振电路分析
- 笔记本电脑的鼠标触控面板问题
- 如何零成本实现微信公众号自助查券返利机器人(三)
- 看得懂的猪周期,牧原们却不一定跨得过
- GAME(A)性能测试过程模型
- TSCA你了解多少?什么产品需要做TSCA认证
- git仓库报错【 ! [rejected] master -> master (non-fast-forward)error: failed to push some refs to】
- linux 杂记 怎么解决 cuda 10.1 跑 cuda8下的代码 error
- Chrome snippets 小脚本
- Spark 1.6 SparkSQL实践
- MASTER:全局上下文建模大幅提高文本识别精度