简介
asr的实现可分为pipeline或者end2end思路,其中主要区别在于声学模型的识别单元上:
词模型
字发音模型
半音节模型
音素模型
模型识别单元大小(词发音模型、字发音模型、 半音节模型或音素模型)对语音训练数据量大小、 语音识别率,以及灵活性有较大的影响。对中等词汇量以上的语音识别系统来说,识别单元小,则计算量也小,所需的模型存储量也小,要求的训练数据量相对也小,所需的模型存储量也小,要求的训练数据量相对也少,但带来的问题是对应语音段的定位和分割困难,以及更复杂的识别模型规则。通常大的识别单元易于包括协同发音在模型中,这有利于提高系统的识别率,但要求的训练数据相对增加,当然,对于现在大数据处理技术来说,训练数据的增多问题不大。
传统方法最为常见的是音素级别,其次到字发音模型,词级别模型由于每个词都有足够多的训练样本,这往往难以做到,尤其是对于大词汇量语音识别比较少见。在深度学习中由于建模能力的加强,会偏向于使用拼音、字、词或者wordpiece模型,但也对数据产生较大的依赖。
模型
从目前ASR的发展来看,建议采用end2end的模型,其中有CTC、FSMN、encode-decode,甚至transformer。可以说涉及编码解码的模型都可以用来进行语音模型搭建。
简单说下怎么采用transformer做ASR,尤其我本身是做NLP的,所以对transformer比较熟悉,这里也推荐大家尝试采用transformer建模,其并行的训练优势确实比RNN要舒服得多,且性能也比RNN要好。那么怎么采用transformer做ASR呢,基本框架是保持不变,只需要将输入从文本切换成语音特征,较为常用的log mel-fbank,这样的话encode的词向量就是不需要的了,decode还是跟原transformer一样做文本输出,目前我采用transformer在中文ASR上能达到95%的准确率。详情大家也可以参考下这篇paper:
数据集
公开的中文数据集有:
thchs30
ST-CMDS-0001_1-OS
Aishell-1
Primewords Chinese Corpus Set
特征
目前语音识别的常用的特征有:
fft
log mel-fbank
mfcc
数据增强
通过0.9、1.1的速度扰动对数据进行增强处理
相关paper