• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

《kaldi语音识别》阅读笔记特征变换

武飞扬头像
v-space
帮助2

一、无监督特征变换

1.1 归一化

语音识别中,归一化经常被称为倒谱均值方差归一化(CMVN)。这是由于语音识别特征通常为倒谱系数,在其基础上进行均值和方差归一化,称为CMVN。CMVN将输入特征规整为均值为0向量,方差为单位矩阵。
存在全局归一化(global CMVN)和说话人归一化(Speaker CMVN)。

# 估计CMVN系数
compute-cmvn-stats scp:data/train/feats.scp \
  ark,scp:data/train/cmvn.ark,data/train/cmvn.scp

如果提供uttspk,则进行说话人归一化,否则进行全局归一化。
aishell实例:
学新通

# 应用CMVN进行特征变换
apply-cmvn scp:data/train/cmvn.scp scp:data/train/feats.scp \
  ark,scp:data/train/feats_cmvn.ark,data/train/feats_cmvn.scp

1.2 差分

在一定窗长内,计算前后帧的差分特征补充到当前帧后边。如一个M维的特征做D阶差分后特征维度变为(D 1)*M。

# kaldi
add-deltas scp:data/train/feats.acp \
  ark,scp:data/trainfeat_delta.ark,data/train/feats_deltas.scp

1.3 拼帧

在一定窗长内,将前后指定帧拼成一帧特征。

# kaldi
splice-feats scp:data/train/feats.scp \
  ark,scp:data/train/feats_splice.ark,data/train/feats_splice.scp

常用的两种特征处理流程
(1)差分特征
MFCC->CMVN->差分
特征管道构建
如steps/train_mono.sh中63行:

feats="ark,s,cs:apply-cmvn $cmvn_opts --utt2spk=ark:$sdata/JOB/utt2spk scp:$sdata/JOB/cmvn.scp scp:$sdata/JOB/feats.scp ark:- | add-deltas $delta_opts ark:- ark:- |"

(2)LDA特征
MFCC->CMVN->拼帧->LDA
特征管道构建
如steps、train_sat.sh中98行:

sifeats="ark,s,cs:apply-cmvn $cmvn_opts --utt2spk=ark:$sdata/JOB/utt2spk scp:$sdata/JOB/cmvn.scp scp:$sdata/JOB/feats.scp ark:- | splice-feats $splice_opts ark:- ark:- | transform-feats $alidir/final.mat ark:- ark:- |"

二、有监督特征变换

借助标注信息估计的一组变换系数,增强输入特征的表征能力。
该类变换通常将输入乘以一个变换矩阵。
特征变换估计方法主要可分为: 线性判别分析(LDA)和最大似然线性变换(MLLT)。

2.1 线性判别分析(LDA)

通过变换来减小同类特征之间的方差,增加不同类特征之间的方差。这里的类指的是声学模型的状态。

2.2 最大似然线性变换(MLLT)

这是一类变换的统称,包括均值最大线性似然回归(MeanMLLR)、方差最大线性似然回归(VarMLLR)、半协定方差(STC)和特征最大似然线性回归(fMLLR)。
其中,MeanMLLR和VarMLLR是针对模型参数的变换方法;STC和fMLLR是针对特征的变换方法。

2.2.1 STC

也被称为MLLT,用于全局特征变换。
由于是全局变换。因此解码时,只需要使用训练过程中估计的矩阵进行特征变换。
STC估计输出一个矩阵。
基于此训练的脚本为:steps/train_lda_mllt.sh
aishell调用实例
学新通
相比train_deltas.sh多了LDA MLLT变换。

2.2.2 fMLLR

用于说话人特定的特征变换。
由于是基于说话人的变换,因此解码时需要重新进行估计。先使用未变换的特征进行解码,再根据解码的对齐结果估计fMLLR系数,在进行特征变换。见steps/decode_fmllr.sh
在估计fMLLR时,如果不提供utt2spk,则按句估计fMLLR。
输出是按说话人索引的若干矩阵。
基于此的训练脚本为:steps/train_sat.sh。且默认基于LAD MLLT变换后的特征及强制对齐的结果进行。
aishell调用实例
学新通
如有问题或建议欢迎私信。
严禁私自转载,侵权必究
参考
[1] 《kaldi语音识别实战》[book]

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfijgah
系列文章
更多 icon
同类精品
更多 icon
继续加载