本文记录在传统的语音识别中,训练GMM-HMMs声学模型过程中的公式推导过程。
Outline
首先假设这里的训练数据,都做好了音素层面标记的(Label),即utterance的音素边界是已知的。这样做是为了更好地说明和对应我们的HMM建模单元(monophone)。后面会介绍Embedded Training,训练数据只需要语音+对应utterance的标记就行了。
GMM表达式:
x 代表一帧语音对应的特征参数值, cjm , μjm , Σjm 分别为为第 j 个状态的第 m 个高斯的混合系数(mixing parameters),均值(mean),方差(variance), bj(x) 则为语音特征参数 x 属于状态 j 的概率。混合高斯模型,类似k均值聚类(k-means clustering)算法,属于一种迭代软聚类(soft clustering)算法。理论上,混合高斯模型能够表示特征空间上任何概率分布。混合高斯模型的参数可以通过EM算法训练得到,分Expectation-step、Maximization-step。
隐马尔科夫模型,是在马尔科夫链(Markov chain)的基础上,增加了观测事件(observed events);即把马尔科夫链原本可见的状态序列隐藏起来,通过一个可观测的显层来推断隐层的状态信息。其中,隐层映射到显层通过发射概率(emission probability)或观测概率(observation probability)来计算,隐层状态之间的转移通过转移概率(transition probability)获得。下图是一个HMM结构:
这也是在语音识别中常用的一种隐马尔科夫模型结构,也称为Bakis模型。一般我们对每一个音素建立一个HMM,其中包括三个emitting state,一个start state(non-emitting )和一个end state(non-emitting )。HMM的数学形式为:
所以,对于一个**给定结构的**HMM,我们需要通过训练获得它的A、B矩阵,即求解emission probability和transition probability。而在GMM-HMMs中,GMM作为HMM中的 bj(ot) ,即发射概率。下节则具体列出GMM-HMMs的推导公式。
(一大波公式来袭!)
在GMM-HMMs的传统语音识别中,GMM决定了隐马尔科夫模型中状态与输入语音帧之间的符合情况,和HMM用来处理在时间轴上的声学可变性(自跳转)。训练HMM需要用到Forward-backward算法(Baum-Welch算法),本质上是一种EM算法。
图为部分的状态-时间篱笆网络,为方便理解下面前向、后向概率。
前向概率 αt(j) 代表 t 时刻处于状态 i ,且之前的观测序列为 x1,⋯,xt 的概率,即
注: sI =initial state, sE =final state
后向概率 βt(j) 是 已知 t 时刻处于状态 j ,输出之后的观测序列为 xt+1,⋯,xT 的概率,即
EM算法训练single Gaussian-HMMs,在E-step计算Q函数中固定的数据依赖参数 γt(j) (for GMM), ξt(i,j) (for HMM transition);在M-step更新GMM,HMM模型参数。这里可能有点misnomer,因为这里并没有很明显的体现出expectation maximization的过程,是因为前人已经帮你计算出来了。具体怎么确定依赖参数,和如何重估出模型参数,可参看上一篇博客《EM算法和Baum Welch算法》。本文直接给出过程结果。
首先给出在E-step需要计算的依赖参数,状态占用概率(The State Occupation Probability) γt(j) 是在给定观测序列 X 和模型参数 λ 下,在时刻 t 处于状态 j 的概率。
和 ξt(i,j) 是在给定观测序列 X 和模型参数 λ 下,在时刻 t 处于状态 j ,时刻 t+1 处于状态 j 的概率
然后,EM算法的整体过程为选定一个flat-start(训练数据的均值、方差作为GMM初始均值和方差)或者K-means,和将HMM的forward和self-loop初始概率设置为0.75、0.25。具体如下:
E-step:
For all time-state pairs
1. 递归计算前向、后向概率: αt(j) , βt(j)
2. 计算the State Occupation Probability γt(j,m) 和 ξt(i,j)
M-step:
基于 γt(j) 和 ξt(i,j) ,重估single-Gaussian/HMM的均值、方差和转移概率:
进一步拓展到语料库(a corpus of utterances ),GMM作为HMM观测PDF。
E-step:
for all time-state pairs
1. 递归计算前向、后向概率: αrt(j) , βrt(j)
2. 计算the component-state occupation probabilities γrt(j,m) 和 ξrt(i,j)
M-step:
基于 γrt(j,m) 和 ξrt(i,j) ,重估GMM/HMMs的均值、方差、混合系数和转移概率:
这样迭代至收敛,就得到GMM-HMMs所有参数了。当然,如果我们建模单元是Triphone(三音素),那么就需要进行一系列优化,以解决训练数据稀疏性问题。
文章浏览阅读1k次。背景* 在MySQL 5.7.8中,MySQL支持由RFC 7159定义的本地JSON数据类型,它支持对JSON(JavaScript对象标记)文档中的数据进行有效访问.* MySQL会对DML JSON数据自动验证。无效的DML JSON数据操作会产生错误.优化的存储格式。存储在JSON列中的JSON文档转换为一种内部格式,允许对Json元素进行快速读取访问.MySQL Json类型支持通过虚拟列方式建立索引,从而增加查询性能提升.Json 索引创建Json索引表 jso._mysql 为json列中的某字段创建虚拟列
文章浏览阅读773次。Hi!大家好呀!我是你们努力的喵哥!OCR(光学字符识别)是我们日常很常用的人工智能技术。我们总会有从图片中提取文字的需求。你是不是有需要从图片复制文字的经历?手打是最低效的选择。我们可以使用 OCR 软件,直接将图片上的符号转化为对应的文字。那么,这里喵哥就要给大家推荐一个开源项目 EasyOCR。EasyOCR 并不是可以直接使用的软件(虽然它有一个演示网站),而是一个超级易于使用的 OCR ..._ocr 越南语 torch 模型
文章浏览阅读1.5k次,点赞3次,收藏7次。默认的VLC的播放时延是比较高的,一般是秒级别,默认配置的话,都是5秒左右,这种默认配置是为了利用缓存机制,使播放体验更加流畅,对于需要更低时延的播放测试的话,并不适合,需要调整一下配置项目,来降低时延:可以调整为50ms或网络质量好的话,直接调整为0ms。配置解码器的参数,或者使用gpu硬解或者cpu的解码线程数可以进一步降低时延!可以根据兴趣自行研究。若如上的时延是毫秒级别的,即可调整如上的vlc的配置,降低播放器引入的时延问题!// -analyzeduration 单位:微秒。工具->偏好设置->_vlc 缓冲时间设置
文章浏览阅读21次。学生通过注册、登录到系统前台,可以对首页、兴趣班、系统公告、个人中心、后台管理的功能进行查看及操作;系统功能结构图是系统设计阶段,系统功能结构图只是这个阶段一个基础,整个系统的架构决定了系统的整体模式,是系统的根据。任何用户只要进入网站不需登录也可浏览到的信息,后台管理是针对已登录的用户看到满意的选课信息而设计的。用户信息的添加和管理,以及对课程名称管理、兴趣班管理、选课信息管理、系统管理,这些都是管理员的功能。个人中心、学生管理、课程名称管理、兴趣班管理、选课信息管理、系统管理。
文章浏览阅读1w次。刚填写这个地址的时候,很多人都会一脸懵逼,不知道这个地址,怎么填写都不合法。不对。ios地址:这个简单:直接打开appstore 里面可以复制。或者登录Apple Developer打开appstore里面也可以复制。android地址:这个刚开始研究了很久,不知道是哪个地址, 后来才发现。对应的不同市场的地址获取方式如下:1、比如华为应用市场:在应用市场搜索你的应用。点击分享到微信,打开链接,然后复制链接。https://appgallery.huawei.com/app._抖音企业号应用下载,输入应用管理中心链接
文章浏览阅读174次。原文:Build a Regex Engine in Less than 40 Lines of Code作者:Nick Drane翻译:Diwei译者注:如何用不到40行的代码构建一个正则表达式引擎?作者在本文就将他本人的解决思路记录了下来,如果你也想挑战,不妨借鉴一下作者的思路,说不定你写的代码可能不到30行。以下为译文。无意之间我发现了一篇文章,Rob Pike用C语言实现了一个正则表达_正则表达式引擎 源码
文章浏览阅读1.8k次。在移动端h5中如何正确的使用 wx-open-launch-app 标签_vue3 wx-open-launch-app
文章浏览阅读440次。本章主要介绍程序和进程的区别,如何查看进行,有多种方式进行查看;进程的启动方式,有多种启动方式,前台运行还是后台运行,如何互相调用前后台运行;设置周期性任务,一次性任务还是周期性任务怎么设置,怎么删除;如何删除一个进行,怎么删除,批量删除还是强制删除。2、进程在CPU及内存中运行的程序代码动态执行的代码每个程序可以创建一个或多个进程3、线程负责功能的运行多线程可同时运行多个任务有三种状态①就绪状态:在创建线程后存在等待cpu过来的执行的时间称为就绪状态②运行状态:当cpu过来执行就会转_linux启动项和计划任务
文章浏览阅读2.1w次,点赞18次,收藏66次。色温(Kelvin)到RGB的转换:算法和样例据我所知,还不太可能找到从色温到RGB转换的一个可靠的公式。虽然,有很多算法实现了类似的功能,但是,大多是都是从色温转换到XYZ颜色空间。这之后你再可以根据需要从XYZ空间在转换到RGB颜色空间。这种算法的一种实现方式你可以在这找到。很不幸的是,这种方式并不是真正意义上的数学公式,只是一种美化的..._色温转rgb
文章浏览阅读126次。什么是 RPC?RPC 原理是什么?什么是 RPC?RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。比如两个不同的服务 A、B 部署在两台不同的机器上,那么服务 A 如果想要调用服务 B 中的某个方法该怎么办呢?使用 HTTP 请求 当然可以,但是可能会比较慢而且一些优化做的并不好。 RPC 的出现就是为了解决这个问题。RPC 原理是什么? 服务消费方(client)调用以本地调用方.._牛客的面经怎么下载
文章浏览阅读883次。5.是否Maven项目:是;1.权限,菜单都会缓存到redis中,如果redis无法连接,将会报空指针错误或登陆后首页会显示404,请确保能连接上redis数据库 2.如果有报此异常org/hyperic/sigar/SigarException,可以将WEB-INF/lib下的文件(根据你的系统以及位数选择)放在你的JDK/bin目录下 3.在发布出来前,由于隐私关系删除了部分登录帐号(客户经理),如果出现此客户找不到对应的客户经理,删掉此客户即可。课程设计,大作业,毕业设计,项目练习,学习演示等。
文章浏览阅读711次。idea配置自动拉取代码_idea自动拉取代码