GMM-HMM声学模型实例详解(标贝科技)

2023-05-16

欢迎测试标贝科技AI开放平台 https://ai.data-baker.com/#/?source=qwer12

GMM-HMM声学模型实例详解

GMM-HMM为经典的声学模型,基于深度神经网络的语音识别技术,其实就是神经网络代替了GMM来对HMM的观察概率进行建模,建模解码等识别流程的格个模块仍然沿用经典的语音识别技术
接下来我将从GMM、最大似然估计到EM算法实例,再到最后使用一段语音介绍GMM-HMM声学模型参数更新过程

一、GMM (混合高斯分布)

1、正态分布(高斯分布)
如果你绘制出来的概率分布是一条钟型曲线,且平均值、众数和中位数都是相等的,那么随机变量X就服从正态分布,记为X~N(μ,σ2),正态分布概率密度函数:在这里插入图片描述
其中,μ是随机变量的均值,控制曲线的位置,σ^2控制曲线的陡峭程度
在这里插入图片描述

2、GMM (混合高斯分布):
假设一批数据由三个不同的高斯分布生成,将这批数据混在一起,该分布就称为高斯混合分布,从数学上讲,认为这批数据的概率分布密度函数可以通过加权函数表示:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

二、最大似然估计:

最大似然估计:使用概率模型,找到模型中的参数能够以较高概率产生观察数据;简单来说就是给定一组观察数据评估模型参数的方法。
比如:要统计全国成年人的身高分布情况,测量全部人口的身高耗费人力物力,假设身高服从正态分布,抽取1000人(抽取样本太少估计出的参数会不太准确),根据这1000人的身高分布估计全国人口的身高分布情况,已知身高服从正态分布,n个人的最大似然函数表示为:
在这里插入图片描述

(1)直接求L的最大值可能不太好求,等式两边同时取对数,根据对数的性质可以将乘除法法转变为加减法
在这里插入图片描述

(2)整理化简公式
在这里插入图片描述

(3)对包含未知数的函数求最大值,可以分别对未知数(μ、σ^2)求导后令其等于0
在这里插入图片描述

(4)最终求得μ也就是样本的均值、σ^2也就是样本的方差:
在这里插入图片描述

(5)根据1000人的身高信息分别求出μ、σ^2,
我们这里用10个人身高 做个示范,10个人身高分[150,155,180,165,170,156,170,183,160,185]
借用python代码计算:X~均值(μ=167.4)、方差(σ^2=137.24)、标准差(σ=11.71):

import numpy as np
student_height=np.array([150,155,180,165,170,156,170,183,160,185])
student_mean=np.mean(student_height)
print(student_mean)
print(np.var(student_height))
print(np.std(student_height))
>>167.4
>>137.24
>>11.71

(6)第五步中求出均值与方差,根据正态分布概率特点就可以计算出10W人(假设全国有10W人)的身高分布情况:
155.69——167.4(μ-σ~μ):=10000034.1%=34000人
167.4——179.11(μ~μ+σ):=100000
34.1%=34000人
经计算可知,10W个人中身高在155.69~167.4有34000人;在167.4——179.11有34000人
三、EM算法估计

  • 假设男女身高分别服从不同的正态分布,现在我想估计的更准确一些,用这10个人的身高[150,155,160,165,170,172,180,183,175,185]分别估计10W个人中男生、女生各自的身高分布情况
  • 这10个人中我们不知道哪些是男生的身高,哪些是女生的身高,这时候可以借助EM算法进行估计

EM算法分为四个步骤:

(1) 给出观测值
(2) 利用对隐藏变量的现有估计值,计算其最大似然估计值
(3) 最大化(M)在E步上求得的最大似然值来更新参数的值
(4) 重复(2)-(3)直到收敛,停止迭代
在上面的例子中,隐含变量就是10个人男女身高情况,如果知道了10个人中具体的男女身高情况,就能计算出各自的身高分布情况,下面具体看下EM算法是如何进行估计的:

  • 第一步,将10个人身高平均分配,假设前5个一个身高分布,后5个是一个身高分布
  • 第二步,根据最大似然估计方法分别估计这两个身高正态分布的均值方差,借助python计算

x1~(164.0,114)

import numpy as np
student_height=np.array([150,155,180,165,170])
student_mean=np.mean(student_height)
print(student_mean)
print(np.var(student_height))
print(np.std(student_height))
>>164.0
>>114.0
>>10.68

x2~(170.8,137.36)

import numpy as np
student_height=np.array([156,170,183,160,185])
student_mean=np.mean(student_height)
print(student_mean)
print(np.var(student_height))
print(np.std(student_height))
>>170.8
>>137.36
>>11.72
  • 第三步,根据这两个分布的参数,估计10个人身高分别属于哪个分布概率最大
    绘制x1~(164.0,114)的概率密度函数
import math
import numpy as np
import matplotlib.pyplot as plt
u = 164.0   # 均值μ
sig = math.sqrt(10.68)  # 标准差δ
x = np.linspace(u - 3*sig, u + 3*sig, 50)   # 定义域
y = np.exp(-(x - u) ** 2 / (2 * sig ** 2)) / (math.sqrt(2*math.pi)*sig) # 定义曲线函数
plt.plot(x, y, "g", linewidth=2)    # 加载曲线
plt.grid(True)  # 网格线
plt.show()  # 显示

在这里插入图片描述

绘制x2~(170.8,137.36)的概率密度函数

import math
import numpy as np
import matplotlib.pyplot as plt
u = 170.8   # 均值μ
sig = math.sqrt(11.72)  # 标准差δ
x = np.linspace(u - 3*sig, u + 3*sig, 50)   # 定义域
y = np.exp(-(x - u) ** 2 / (2 * sig ** 2)) / (math.sqrt(2*math.pi)*sig) # 定义曲线函数
plt.plot(x, y, "g", linewidth=2)    # 加载曲线
plt.grid(True)  # 网格线
plt.show()  # 显示

在这里插入图片描述

由正态分布函数图可知,随机变量越靠近均值概率越大,如第一个身高值150,与第一个分布均值的距离为14(164-150),与第二个分布均值的距离为20.8(170.8-150),故150属于第一个分布函数的概率更大,按此方法依次将10个数字分别归类
第一类分布:[150,155,165,156,160]
第二类分布:[180,170,170,183,185]

  • 第四步

重复第二三步骤,直到第一类、第二类分布中数据不再变化,就完成了EM算法的整个过程;(由于第二步中不知道具体哪些属于男生身高哪些属于女生身高,所以采取平均分配的方式对其进行初始化;第三步中估计出均值与方差后对10个人的身高重新进行归类,此时有了一定的数学依据,所以比第一次分配更准确,以此类推获得最终的结果)
在这里插入图片描述

四、GMM-HMM声学模型参数更新

  • 在声学模型中GMM主要的作用就是得到HMM中的发射概率(即GMM的均值和方差),HMM的作用就是根据各个概率得到最优的音素,单词以及句子序列
  • 总结来说HMM-GMM模型参数就是转移概率、混合高斯分布的均值、方差
  • EM算法嵌入到整个GMM-HMM中完成模型参数的更新

1、如何将一段语音转换为想要表达的意思?
先介绍两个概念:

  • 音素,汉语中一般使用声母与韵母作为音素集;
  • 状态,可以理解为比音素更小的语音单位,习惯上把音素分为三个状态(初始、稳定、结束)

假设下面为一段5s的语音,语音内容为 : 下一个路口 (标注:x ia ii i g e l u k ou),虽然已经给出这段语音的发音,但是对于哪些帧对应哪些音素(三个状态)的发音却是未知的,声学模型就是为了使声音信号对齐对应的音素(或音节),在这个过程中使用GMM对帧与状态之间的关系进行建模,下面介绍具体的细节:
在这里插入图片描述

(1)第一:将这段语音以帧长10ms进行分帧,1s的语音被分为100帧,然后对每一帧提取mfcc特征(一般为39维),这段语音就被表示成为(100,39)维的特征矩阵(截取前10帧)
在这里插入图片描述

(2) 第二:使用提取的mfcc特征训练GMM模型

  1. 给出观测值
    训练开始时使用平均分配的方式初始化GMM模型(这里与上面EM中平均分配的意思一样)
  • 以上面语音为例,语音被分为100帧,"x ia ii i g e l u k
    ou"为10个音素,平均分帧后每个音素为10帧,也就是"x"对应前10帧,"ia"对应10到20帧,依次分配:

在这里插入图片描述

  • 每个音素又有三个状态,也就是1-4帧为状态①,5-7帧为状态②,8-10为状态③
    在这里插入图片描述
  1. 利用对隐藏变量的现有估计值,计算其最大似然估计值,这里的隐藏变量就是状态
    为了计算简单取mfcc的前两个维度保留两位小数进行说明:
    状态①(1~4帧):[(13.10,-43.36),(13.43,-40.74),(13.73,-41.76),(13.73,-42.08)]
    状态②(5~7帧):[(13.70,-41.16),(14.49,-25.57),(15.58,-16.46)
    状态③(8~10帧):(15.97,-12.37)],[(15.98,-6.50),(16.11,-0.63)
    状态①: 均值(13.497,-41.985) 方差(0.06766875,0.875075)
    状态②: 均值(14.59,-27.73) 方差(0.59406667,104.01446667)
    状态③: 均值(16.02,-6.5) 方差(4.06666667e-03,2.29712667e+01)

根据前面所说EM算法,计算欧式距离后可重新分配帧数所属状态,15帧与均值(13.497,-41.985)距离更近,属于状态1,67帧属于状态2,8~10帧属于状态3(但在声学模型对齐过程中,还需要特征序列和标注文本(音素、状态)的对应关系,因此,需要对特征序列和标注文本对齐,所以实际训练过程中是将EM算法嵌入到GMM-HMM中,使用维特比或其他算法进行重新对齐)

  • 如此就将输入特征(mfcc)与所有状态进行对应

然后通过统计的方式得到状态转移概率统计从状态①->①的转移次数,状态①->②的转移次数,除以总的转移次数,就可以得到每种转移的概率
3) 重新对齐(最大化(M)在E步上求得的最大似然值来更新参数的值)
根据2)得到的参数(转移概率、均值、方差),重新对音频进行 【观察序列(特征)-状态序列】的对齐,2)初始化是通过均分进行了一次暴力对齐,3)的重新对齐是在2)得到的参数的基础上,使用算法对齐的。对齐方式有两种:采用viterbi算法的硬对齐,采用Baum-Welch学习算法(前向后向算法)的软对齐(这两个算法的实现细节,不在这里介绍了)
经过重新对齐后,每一帧对应的状态就会发生变化,GMM-HMM模型中的参数经重新计算后也会发生变化(对应EM算法中的M步)

4)重复2)-3)步多次,直至收敛,则该GMM-HMM模型训练完成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GMM-HMM声学模型实例详解(标贝科技) 的相关文章

  • 1.unity3d Astar pathfinding 第一个例子

    1 场景准备 先建立一个scene 添加一个plane xff0c 让其坐标处于 0 0 0 xff0c 并三方向scale都为10 添加一个新的layer xff0c 命名为Ground xff0c 并将上面建立的plane设置为Grou
  • [STM32]开源多功能DAP 脱机烧录器 DAPLink仿真下载器

    网上已经有很多开源脱机烧录器的了 xff0c XVIN1987的很小巧 xff0c 很有参考价值 xff0c 志明的很庞大 xff0c 源码较多较复杂 xff0c 于是自己在无线DAP的基础上 xff0c 添加了脱机烧录功能 xff0c u
  • 全志V3S 入门 RTL8723BS 连接wifi

    开发板 xff1a 荔枝派zero linux xff1a 5 10 rootfs xff1a buildroot 2017 8 1 使用最新的主线linux内核5 10 xff0c 主线5 10内核linux make ARCH 61 a
  • ESP32蓝牙 华为手机容易断连解决

    在长达两年的售后中 xff0c 收到华为手机连接ESP32蓝牙是最容易断开连接的 xff0c 一开始小米手机 苹果手机都没问题 xff0c 就只有华为 xff0c 一连上就断开 xff0c 所以我们认为是APP问题 xff0c 于是我们去找
  • ESP32-S3 LVGL http下载B站头像 JPG显示

    最近在用ESP32S3获取B站JPG头像进行显示 记录一下 xff0c 开发板链接 xff1a ESP32 S3 LVGL 开发板 人工智能语音识别 人脸识别 触摸 音频 淘宝网 taobao com 直接上代码 xff1a 第一种下载方式
  • Docker概述(二)(标贝科技)

    标贝科技 https ai data baker com source 61 qwer12 填写邀请码fwwqgs xff0c 每日免费调用量还可以翻倍 Docker概述 xff08 二 xff09 文章目录 Docker概述 xff08
  • 【串口通信】K210与STM32串口通信、K210与OpenMV串口通信

    串口通信 K210与STM32串口通信 K210与OpenMV串口通信 串口通信前言为何需要串口通信 K210如何进行串口通信K210串口配置K210串口发送相关定义K210串口发送测试K210串口接收相关定义K210串口接收测试 STM3
  • 【ESP32S3系列】1、使用ESP32S3开发板点亮WS2812

    开发板链接 xff1a ESP32 S3 LVGL 开发板BLE人工智能语音人脸识别触摸 音频芯片wifi 淘宝网 taobao com 板子上的LED是WS2812 xff0c 它的引脚分别是 xff1a VDD xff1a 电源 xff
  • win10 使用sonarqube扫描ESP32 C语言工程代码

    社区版的扫描不了C代码 xff0c 所以要找个破解的 项目场景 xff1a 最近项目上霍尼韦尔要求使用sonarqube来扫描代码得出漏洞报告 xff0c 网上找了一圈没有比较容易成功的 xff0c 总结下经验 电脑里要有visual st
  • ESP32 如何引入静态库lib.a

    只需要在Cmakelist txt里这样写 xff1a 如果这个lib正常运行的话需要用到json和lwip相关的函数 xff0c 那就添加一个PRIV REQUIRES 这个component的名字即可
  • OPENMV结合PIX飞控实现四轴定点 循迹 2017电赛

    本文章代码已上传Github xff1a https github com Kevincoooool 2017 Follow 有兴趣的可以加个STAR 自从17年国赛之后 xff0c 自己做了openmv xff0c 加了很多群 xff0c
  • 简易旋转倒立摆设计报告

    完整文档和源码 xff1a https github com Kevincoooool inverted pendulum 43 2017年成都信息工程大学 第六届 电协杯 电子设计竞赛 简易旋转倒立摆及控制装置 xff08 I题 xff0
  • OpenMV-IDE 免KEY提示 编译教程

    很多人在购买了OpenMV之后都没有购买key xff0c 虽然key作为一种捐赠开发者的形式存在 xff0c 但大多数人都是不愿意每次使用都看到那三个提示框的 xff0c 而且不愿意去购买key xff0c 附上我的编译教程 xff1a
  • OpenMV H7也就是OpenMV4来啦 最新

    17年开始做过了四个版本的openmv 可谓是电赛好帮手 开发了两年的openmv xff0c 我的目的就是让openmv变得便宜 目前官方的第四代openmv还在众筹中 xff1a https www kickstarter com pr
  • 开源一个安卓四轴上位机+配套ESP8266 UDP串口通信源码

    手机APP是由匿名四轴遥控器修改而来 xff0c 在原有基础上添加了双摇杆控制和单摇杆控制 数据通过UDP和ESP8266通信 协议可修改 安卓app源码 xff1a https github com Kevincoooool KSTC V
  • c++中函数屏蔽和函数参数屏蔽

    情况一 函数的屏蔽 例如 nbsp nbsp void Function int a int b nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp int c a b 若是不使用函
  • STM32串口之奇偶校验设置

    今天 xff0c 在调试rs485的时候出现了32芯片串口端可以正常发送数据 xff0c 485芯片数据输出端不能发送数据 xff0c 自己查了下485芯片手册 xff0c 发现485芯片有个引脚通过32芯片给出高低电平来控制它是接受还是发
  • 基于AudioQueue实现音频的录制和播放(标贝科技)

    标贝科技 https ai data baker com source 61 qwer12 填写邀请码fwwqgs xff0c 每日免费调用量还可以翻倍 基于AudioQueue实现音频的录制和播放 文章目录 基于AudioQueue实现音
  • webots建立四连杆机构模型

    webots建立四连杆机构模型 使用webots内置的插件构建四连杆机构建立robot形状参考文献 使用webots内置的插件构建四连杆机构 首先 xff0c 可以去官网下载最新的webots xff0c 网址 xff1a https ww
  • STM32使用FREERTOS获取系统时间

    使用CUBE MX生成带有free RTOS操作系统的工程 xff0c 我们经常会使用到系统相对时间 xff0c 尤其是使用其做数据采集的项目中经常需要给你数据打上时间的标签就需要实时获取系统的相对时间 当然 xff0c 我们可以单独开一个

随机推荐

  • 一个简单的C++工程管理的Makefile

    摘要 C C 43 43 代码都需要使用编译器来编译代码生成相应的目标文件 xff0c 在大部分的windows开发中 xff0c 开发者多用商用或开源的集成开发环境 xff08 IDE xff09 xff0c 比如 xff1a visua
  • STM32F4 使用SPI读取气压计MS5611的数据并转化为大气压强

    ms5611是同时支持I2C和SPI通信协议的气压计芯片 已经很普遍的被用在飞行器控制板上作为高度传感器 开发过stm32的朋友都知道它的硬件I2C是由bug的 xff0c 一般使用的都是自己编写的软件I2C通信协议 但是其硬件SPI通信却
  • DIY四旋翼(穿越机)软硬件设计

    今天教教大家怎么真正意义上的DIY四旋翼飞行器 xff0c 我将从机架入手DIY穿越机 下面是我的步骤 xff1a 1 设计机架三维图纸 xff1b 2 导出机架的二维图纸并做修改 xff1b 3 设计飞控板 xff1b 4 试飞 step
  • 磁力计校正和数据处理

    在飞控涉及到的几个传感器中磁力计因该是属于最简单的传感器 在飞控上一般使用的磁力计传感器芯片是HMC5883L HMC5983 MPU9250 MAG3110等 这些芯片利用的物理原理都相同 xff0c 只是在精度和数据接口上有些区别 下面
  • 在这个被欲望和利益所支配的世界里

    剩下的那点酒精再次滑过嘴角 xff0c 才感觉到一丝凉意 谁说酒精可以麻醉人的思维 xff0c 可以暂时忘掉想忘的一切 xff0c 骗人的 xff0c 都是骗人的 我依然很清醒 不可否认 xff0c 这的确是一个被欲望和利益所支配的世界 x
  • 写给夏燕第十一个男人

    悲哀 xff0c 李旧 xff09 是她第十一个男人 她想要什么呢 xff1f xff1f xff1f 很多男人吗 xff1f 很多是多少 xff1f 我是她第十个男人 xff0c 我原理她了 说自己以前走的路不可能回头了 xff0c 叫我
  • 美女登场

    不怕大家笑话 xff0c 我大学毕业时 xff0c 还是个处长 xff0c 所谓处长就是没有经过女人滋润的那种 xff0c 我想大家都知道我是什么意思的 其实 xff0c 上大学的时候我还是有些女人缘的 xff0c 毕竟在班上我的学习成绩还
  • 纠缠在回忆里的感伤

    一个身影从眼前晃过 xff0c 我本能的踩死了刹车 xff0c 车因为惯性向前使了一点后终于停了下来 xff0c 幸亏没有撞到那个骑车的老人 xff01 我尚惊魂未定 xff0c 额头冒出了冷汗 xff0c 好险 xff01 人在开车心却早
  • MySQL索引原理(标贝科技)

    标贝科技 https ai data baker com source 61 qwer12 填写邀请码fwwqgs xff0c 每日免费调用量还可以翻倍 什么是索引 xff1f 索引是帮助MySQL高效获取数据的数据结构 索引的本质就是数据
  • 最全最简单方法解决安装ROS的rosdep update超时错误

    最近利用虚拟机Ubuntu安装ROS xff0c 遇到了rosde update这一命令一直超时出错的问题 xff0c 在网上搜索很多资料 xff0c 终于解决 xff0c 所以总结一下解决方案 方法一 xff1a 手机开热点上网 不建议
  • c实现 udp通信

    1 创建对象 int udp socket 61 socket AF INET SOCK DGRAM 0 AF INET 网络通信协议 SOCK DGRAM 传输协议 属性默认 0 2 想接收信息就需要绑定地址信息 struct socka
  • 软件测试的生命周期及基本流程

    软件测试的基本流程 1 xff1a 需求分析 答 xff1a 仔细阅读需求文档 xff0c 理解需求文档 xff0c 主要是对业务的学习 xff0c 分析需求点 xff0c 参与需求评审会议 xff1b 2 xff1a 制定测试计划 答 x
  • 软件测试的分类有哪些?

    软件测试从整体来说分为开发阶段 测试单位阶段 测试技术阶段 开发阶段 xff1a 单元测试 集成测试 系统测试 验收测试 测试单位阶段 xff1a 内部测试 用户测试 第三方测试 测试技术阶段 xff1a 白盒测试 黑盒测试 灰盒测试 单元
  • 测试用例的八大设计方法

    从测试方法分为 xff1a 黑盒测试 等价类划分 边界值分析 因果图分析 错误测试 白盒测试 语句覆盖 判定覆盖 条件覆盖 判定 条件覆盖 多重条件覆盖 等价类划分 xff1a 答 xff1a 等价类划分是指某个输入域的子集合 xff0c
  • 软件测试中一个BUG的生命周期

    测试人员 发现BUG 提交BUG 指派前后端BUG 前后端开发确认BUG 不是BUG 关闭BUG 前后端开发修复BUG 回归验证BUG 二次开启BUG 是 关闭BUG BUG各种状态处理 答 xff1a 已指派 xff1a 测试人员已将BU
  • Fiddler抓取PC端微信小程序请求方法

    最近PC端的微信更新了 xff0c 在微信中也可以打开相对应的小程序了 xff0c 那么对于大多数测试同学来说要是可以在PC端打开小程序直接查看小程序发出的HTTPS请求报文 xff0c 那么定位问题也就太方便了吧 xff0c 我就是抱着这
  • 从Navicat切换到DBeaver的详细教程,一学即会。

    自从学会使用了Navicat xff0c 用一段时间发现Navicat有一些的问题缺陷 xff1a 1 需要购买花钱才能使用 xff0c 网上找的破解版也能使用 xff0c 但一些公司有版权限制 xff0c 又不能使用 xff1b 2 在连
  • VS code C/C++扩展包依赖cpptools-win32.vsix离线安装

    环境 xff1a 64位win10 xff0c VS code版本1 48 2 在visual studio code下自动安装C C 43 43 扩展包的依赖时 xff0c 可能会碰到如下异常和提示 xff1a 正在更新 C C 43 4
  • ROS错误:摄像头数据格式错误 wants topic /image/compressed to have datatype/md5sum

    ROS错误 摄像头数据格式错误 wants topic image compressed to have datatype md5sum 错误提示 xff1a ERROR 1260927377 348922000 Received erro
  • GMM-HMM声学模型实例详解(标贝科技)

    欢迎测试标贝科技AI开放平台 https ai data baker com source 61 qwer12 GMM HMM声学模型实例详解 GMM HMM为经典的声学模型 xff0c 基于深度神经网络的语音识别技术 xff0c 其实就是