IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

语音识别中声学模型得分计算优化方法

搜索研发部官方博客 2012-06-19 23:54:03 累计浏览 3,278 次
本机暂存

摘要

             语音是人们沟通交流最直接、最自然的交互方式。自计算机问世以来,人们就一直希望可以通过语音实现人和计算机之间的交互,而语音识别技术,目标就是通过把人类的语音中的词汇内容转换为相应的文本,架起了人机交互的桥梁。对于一个语音识别系统,速度和精度是两个核心指标,直接决定着系统是否可用。其中,识别速度的提升意味着可以降低成本,同时提供更多的语音服务,一直是语音识别技术研究的重点方向。在语音识别系统中,声学模型得分的运算量一般会达到整个系统的40%-70%,因此也是识别速度优化的重点模块。本文就来讲讲如何优化声学模型得分计算。

基本概念介绍

    特征向量:语音数据在识别前首先会被分成多帧数据,一般帧长为25毫秒,帧移为10毫秒。每一帧语音数据经过特征提取之后,会生成一帧特征,称之为一个特征向量或特征矢量原图已失效 ,其中n为特征向量的维数。

    HMM state:语音识别中的建模单元,简称为state,使用混合高斯模型(GMM)模型描述,每个GMM由多个高斯分量(mixture)组成,每个mixture服从正态分布原图已失效其中原图已失效为均值向量,原图已失效为协方差矩阵,是对角阵。

    似然值:特征向量O在state上的声学模型得分。其计算步骤分为两步:

    a)         计算O在每个mixture分量上的似然值,其计算公式为:

    原图已失效

    其中,j表示state的第j个mixture分量,原图已失效 是常量,原图已失效O在第j个mixture分量上的似然值。

    原图已失效

    其中,m为state中mixture分量的个数,原图已失效O在state上的似然值,等于各mixture的似然值在log域的相加,因而这步被称为logAdd操作。

优化方法

    下面先介绍三种无损识别精度的优化方法:

    1、  代码加速:使用SSE指令或者intel IPP加速库

    这种方法利用编程语言指令集的优化,通过减少CPU需要操作的指令数来达到加速。其中的intel IPP加速库直接提供了一套计算似然值的函数库,加速效果非常明显,可以达到40%。

    2、  硬件加速:使用GPU加速

    GPU一直以其强大的计算能力著称,十分适合矩阵相乘这类计算密集型的运算。为了能充分发挥GPU的加速效果,我们需要对似然值的计算公式略作改写:

     原图已失效

    经过转换之后,每个mixture都可以用一个行向量表示,m个mixture可以组成一个大矩阵M = (A1,A2,…,Am)T,同理n帧的特征矢量也可以组成一个矩阵F = (Z1,Z2,…,Zn)。这样同时求解多个mixture在多帧上的似然值就可以用两个矩阵的乘积来实现。而每个state各mixture分量的logAdd过程相互独立,因此这一步也可以在GPU上并行计算。一般情况下,GPU可以达到100倍以上的加速效果,也就意味着GPU可以将原来在语音识别中最耗时的声学得分计算所占比重降到低于1%。由于这种方法需要一个额外的硬件设备GPU,价格比较昂贵,因而并没有被大规模使用。

    3、  CPU cache加速:一次计算state在多帧特征上的似然值

    这种方法利用了语音识别的特点,在识别过程中一旦某个state被激活之后,在后面的连续几帧中这个state极有可能仍会处于活跃状态,即在处理后面的特征时还需要计算这个state的似然值。那么我们可以在第一次激活state时,同时计算这个state在从当前帧开始的连续多帧,也不会导致过多不必要的计算。另一方面却可以利用CPU cache,不用多次从内存中加载state的模型参数到CPU中,从而达到加速的目的。这种方法约有10%的加速效果,一般配合方法1使用。

    上面介绍的三种方法,都是对声学模型得分进行了精确计算,因此不会带来任何识别精度的下降。如果想做进一步优化,就需要对state的似然值计算公式做些调整。

    1、动态高斯选择法

    其思想是用似然值最大的mixture分量来近似logAdd:

    原图已失效

    那么如何来选出这个最大值呢?大家可能认为这还不简单?把每个mixture的似然值先计算出来,然后选个最大值就可以了。那接下来我们看看有没有更好的方法?仔细分析mixture似然值的计算公式:

     原图已失效

    我们会发现,这是一个随i增加而递减的函数。我们可以先计算出原图已失效 ,在计算其他的原图已失效时,在i从1增加的n的过程中,我们可以判断当前已经计算出来的值是否比原图已失效 小,如果已经比 原图已失效小,那们这个mixture一定不是最大的,因为随着i的增加,这个值会不断减小,因而这个mixture就可以直接跳过,从而减少计算量。这种方法约有15%的加速效果,但是会带来0.5个点左右的识别率损失。

    2、      高斯选择法

    动态高斯选择法可以认为是在state的mixture分量里挑出一个最好的,而高斯选择法认为在state的各个mixture中,只有一到两个占主导地位(dominant)的mixture,贡献了整个state的似然值。

    原图已失效

    动态高斯选择法是把所有的mixture都计算完了之后才知道哪个最好,和动态高斯选择法不同,高斯选择法是直接挑选dominant的mixture,并只计算这些mixture的似然值。其过程大致可以分为3个部分

    a)         将声学空间,即声学模型中所有state的所有mixture划分成若干个区域,每个区域称之为一个码本(codeword)

    b)         生成每个码本的shortlist,即如何把每个state中的mixture分配到各个码本中去。

    c)         在识别过程中,先将特征向量O映射到一个码本中去,state中落在码本shortlist的mixture就是dominant的mixture,对这些mixture进行计算。

    使用高斯选择法后,声学模型打分计算可以降到原来的20%左右,加速效果非常明显。但是高斯选择法对如何构建码本,以及码本的shortlist有很高要求。不同的构建方法效果会千差万别,一个好的高斯选择法带来的识别率损失非常小,可以做到0.2个点以内。

小结

    本文介绍了五种从不同的角度优化声学模型打分的方法,各自优缺点如下:

    1、代码加速法:简单实用有效,在实际语音识别系统中可谓是标配。

    2、硬件加速法:快!而且快的离谱!能将声学模型得分计算的负载降到接近0,缺点是成本高,一般只有对识别速度要求非常苛刻时才会使用。

    3、CPU cache法:利用了语音识别自身的特点,虽然和其他方法相比,加速效果显得一般,但优点是可以和其他方法结合使用。在实际使用中还需要谨慎选择每次连续计算的帧数,避免多余计算。

    4、动态高斯选择法:加速效果中等,对识别率影响较大,一般使用的比较少。

    5、高斯选择法:加速效果仅次于GPU,同时对识别率影响小,可以与代码加速法结合使用。缺点是这个方法技术难度较高,需要训练,依赖数据。如果不想花钱,又想达到GPU的效果,这个方法是不错的选择。

by qiansheng

同分类推荐文章

  1. 从”内容治理”到”行为治理”:中国智能体治理框架深度解析与绿盟科技实践 (2026-06-23 21:49:28)
  2. 美团海报生成 AIGC 技术创新与实践 (2026-06-22 15:34:28)
  3. AI Coding Agent 时代,我自己最常用的 4 个终端工具 (2026-06-22 08:00:00)

查看更多 AI 文章 →

建议继续学习

  1. 亲爱的用户,您真的满意吗? (累计阅读 4,914)
  2. 网站广告投放策略研究 (一) 轮播以及效用最大化 (累计阅读 3,371)
  3. 电子商务关键数字优化(线上部分,上) (累计阅读 3,009)
  4. 利用HTK工具包快速建立一个语音命令识别系统 (累计阅读 2,786)
  5. 交通优化 Vs 网站优化 (累计阅读 2,695)
  6. 两两接触的等粗且无限长的圆柱体 (累计阅读 2,629)
  7. 你需要更多的思考时间 (累计阅读 2,497)
  8. 电子商务关键数字优化(线上部分,下) (累计阅读 2,414)
  9. 浅析手机语音交互设计 (累计阅读 2,206)
  10. 趣题:两两间的距离都是整数的点集 (累计阅读 2,118)