命令词实验小结
总结训练的命令词模型实验
训练数据
两组训练数据:
- 负样本4000小时(370万),正样本550小时(92万条),正负时长比例1:7,正负数量比例1:4
- 负样本12000小时(1111万条),正样本2000小时(380万条),正负时长比例1:6,正负数量比例1:3
模型类似时(tdnn、5layer、256结点,左27右27拼帧、LF-MMI、1M参数):
- 训练数据1结果:
- 小源recall:70.5%(split1,1.2w);far:0.0504%(测试集 train_rp_320_2pairs_n_kVeryHigh,48w);
- 多命令词recall:75.98%(test1w,1w),far:0.9335%(测试集 train_rp_320_2pairs_n_kVeryHigh,48w)(左13右9模型)
- 训练数据2结果:
- 小源recall:70.7%(split1,1.2w);far:0.0279%(测试集 train_rp_320_2pairs_n_kVeryHigh,48w);(但在其他测试集far比1高)
- 多命令词recall:73.60%(test1w,1w),far:0.6293%(测试集 train_rp_320_2pairs_n_kVeryHigh,48w)
- 该结果是调节解码网络HCLG中G的权重,平衡recall和far后的结果,再提高recall会造成far显著提高,设置recall与1相同时,far略高于1的结果。
实验结果表明:
- 4000小时数据,对于tdnn、音素或音节建模,分类数800-1000,1M参数量,足够建模,每个分类建模单元(pdf)平均分到4-5小时,完全足够建模(只算类别不够,还要具体算到模型的每个参数有多少时长/帧数/样本),4000小时包含了足够的样本丰富性,对正样本的增广(速度扰动、用更多加噪的正样本数据(原先是从加噪数据抽样)),没有带来提升。
- 正负样本时长或数量比例影响到最终的识别率和误识别率,时长比例应不低于1:7,从而保证高识别率和低误识别率。
建模单元
两组建模单元:
- 音素(67个音素,1000个状态),2音素建模(聚类到1000个pdf)
- 音节(405个音节,808状态),单音素建模(每个音素对应2个pdf)
模型类似时(tdnn、5layer、256结点、LF-MMI、1M参数),1实验结果略优于2(差不多、略优于)
实验结果表明:
雷博说:对于多命令词来说:==分类数与识别效果的关系==:先增加后平稳后减少,一开始随着分类数的增加,是会改善效果的,随着分类数的继续增加,改善效果提升变得缓慢(雷博做实验,134类(67*2)与1000分类效果很接近,略差一点点),然后分类数越来越多,到几千后,可能由于分配到每个类别的特征少了,再加上分类数目太大,效果会降低。
对于该模型结构来说,说明该模型结果对于音节为建模单元就有点吃力了,因此对于越简单的模型,建模单元应该越小,减少模型的压力
实验结果与分类数有关,分类数为800或1000时,无论建模单元是音素或音节,结果比较接近
[TODO]:
- 增加建模单元状态数,训练模型
声学模型
Chain model
两组模型:
- tdnn、5layer、256结点、左27右27拼帧、LF-MMI、1M参数、808分类数、前向real-time factor assuming 100 frames/sec is 0.00387631
- tdnnf、8layer,432_48结点、左27右27拼帧、LF-MMI、800K参数、808分类数、前向real-time factor assuming 100 frames/sec is 0.00430389
模型实验结果(挑选的最好模型):
- 模型1结果:
- 小源recall:70.0%(split1,1.2w);far:0.025%(测试集 train_rp_320_2pairs_n_kVeryHigh,48w);
- 多命令词recall:73.91%(test1w,1w),far:0.6108%(测试集 train_rp_320_2pairs_n_kVeryHigh,48w)
- 模型2结果:
- 小源recall:70.5%(split1,1.2w);far:0.012%(测试集 train_rp_320_2pairs_n_kVeryHigh,48w);
- 多命令词recall:73.12%(test1w,1w),far:0.5783%(测试集 train_rp_320_2pairs_n_kVeryHigh,48w)
实验结果表明:
- 前向时间完全相同的模型,tdnnf声学模型比tdnn差(未展示),因此在很小模型的要求下,用tdnn优于tdnnf
- tdnnf前向时间略高于tdnn的声学模型下,tdnnf的建模能力高于tdnn,说明加深一定的网络层数会带来提升,使得声学模型建模能力提升。
- tdnnf的小源小源单唤醒词基本达到要求,在唤醒词后接命令词的系统中,该模型可以使用。
Chain model 和 CE model
两组模型:
- tdnn、5layer、256结点、左27右27拼帧、LF-MMI准则、1M参数、808分类
- tdnn、5layer、256结点、左39右27拼帧、CE准则、1M参数、67分类
模型实验结果(挑选的最好模型):
- 模型1结果:
- 小源recall:70.0%(split1,1.2w);far:0.025%(测试集 train_rp_320_2pairs_n_kVeryHigh,48w);
- 多命令词recall:73.91%(test1w,1w),far:0.6108%(测试集 train_rp_320_2pairs_n_kVeryHigh,48w)
- 模型2结果:
- 小源recall:77.1%(split1,1.2w);far:0.0172%(测试集 train_rp_320_2pairs_n_kVeryHigh,48w);
- 多命令词recall:76.8%(test1w,1w),far:0.227%(测试集 train_rp_320_2pairs_n_kVeryHigh,48w)
实验结果表明:
- CE模型在测试集上优于Chain模型,但是实测下没有达到,因为把语言模型权重调的很大,解码路径需要改动等等?
- CE模型的G.fst的权重需要精细调节
Alignemnt-Free LF-MMI和 LF-MMI
Alignment-Free当模型为tdnnf,13layer,80_20,参数量100K,状态数30时,很容易过拟合,说明模型太小时,不具备大建模单元(一个词用4状态表示)的建模能力;
训练
- epoch=4时,loss收敛了,变化小于0.01,但是当多训练一轮(epoch=5)时,效果有提升,再多训epoch,效果会下降,因此可以多设置epoch,选取不同的中间模型进行测试,从测试结果选出最好的模型
- 训好的模型,解码训练集,赋予该false alarm和false rejection样本更大的权重,对所有样本,用小学习率多训一轮,对于tdnn的其他命令词提升,由于false alarm和false rejection里唤醒词数据不多,反而造成唤醒词的效果有略微的下降,对于tdnnf未提升,因此赋予不同权重只有很小的提升,并且要保证数据比例(1.正负样本比例;2.正样本中唤醒词和命令词的比例)
- 训好的模型,解码训练集,对false alarm和false rejection样本在保证正负样本比例前提下多训练一轮,效果比单纯多训练一轮来得差,很容易训练偏
- 训练分母的phone lm从4gram到2gram,效果会提升,并且训练速度更快,训练中复杂的语言模型反而没有带来收益,推测原因:
- 1.简单的语言模型能让声学模型得到的信息更少,加重了声学模型的训练难度,使得声学模型训练得更不容易过拟合;
- 2.复杂的语言模型(适配训练集的语言模型)使得声学模型更容易过拟合;
- 3.训练中简单的语言模型与测试的1gram语言模型更接近;
解码
- 下图G.fst能降低误唤醒,实测也会降低当周围嘈杂时(触发VAD)时的唤醒率,实际不可用
·