Code-Switching论文笔记(二)网上资料

网上的资料

image-20220602152320592

如何构建中英文混合的语音识别模型?

知乎:https://www.zhihu.com/question/58195901/answer/167007697

构建基于HMM的中英文混合语音识别系统

kaldi的hkust

音子集的构建

知乎 https://www.zhihu.com/question/58195901/answer/167007697

音子集是建立词典以及声学模型所必须的,一个好的音子集能够对声学模型产生重要的影响。这部分也是建立中英文混合识别系统的关键所在。下面介绍三种音子集构建方案:

  • a) 音子集合并

把中英文各自的建模单元混合成一个大的建模词典

构建音子集最极端的方式就是将中文和英文语言所有的音子集全部放在一起,形成一个合并的音子集。尽管这种粗暴的方式在过去的系统中性能表现并不好,但是这种方式建立的音子集也并不是一点好处都没有。使用中英文所有的音子集能够保留每种语言各自音子集的上下文关系,即他们三音子的数量和跳转关系仍然由各自的语言来定义。而在其它方式形成的音子集中,这种三音子上下文关系将会被共享的音子扰乱。并且当训练数据中两种语言混合的语音数量增多的时候,中文和英文之间三音子的上下文关系也会得到训练和加强。因此将中文和英文所有的音子集合并也不失为一种好的方法,只是传统的实验往往受限于训练数据的规模以及解码方式。

此外,深度神经网络的描述能力比高斯混合模型要好很多,因此对中文和英文所有的音子集的三音子状态建模也合乎情理。

  • b) 音子集映射

构建音子集另外一种极端的方式是将一种语言的音子集完全用另外一种语言的音子集来表示。由于不同种类语言的发音方法不同,必然会有一些无法表示的情况,这是就需要用多个音子的组合来表示,当然也有很多是近似的表示。

工程里最快的方案是把英文用中文的音素标注下。学术上我觉得未来端到端方案可以解决,建模单元换成wordpiece这种就一起建模,但需要有足够得数据。这里数据堂之前举行了这个比赛,可以看看当时的ppt。

在中英文混合识别中,由于中文是主要的语言,英文仅仅会出现一些单词或简单的句子,因此可以将英文的音子集映射到中文音子集中,利用中文音子或是音子的组合来表示英文音子。尽管其中有些音子的表示较为牵强,但是使用这种方法能够在已有模型的基础上快速构建中英文混合语音识别的系统。例如已经在大规模的训练数据上建立了中文的连续语音识别系统,那么所有三音子状态都已经有了一个模型。在这种情况下,构建中英文混合语音识别无需重新训练声学模型。只要将待识别的英文单词用中文音子表示,并添加到识别词典当中,那么就能够识别到英文单词。如果想要在中文的句子中识别到出现的英文单词,只需对语言模型进行适当的调整就能实现。

另外,正如历史发展篇中所述,一旦系统变成一个通用的系统那么其性能必然会比专门的系统有所下降。因此,这种方法建立的中英文混合系统虽然对英文的识别率可能不高,但是它一定是对中文识别率影响最小的一个系统。考虑到中英文混合识别系统仍然是以识别中文为主,仅会识别个别的英文单词或简单英文句子,因此这样的一种音子集构建方式和混合语音识别系统搭建方式可以用作搭建一个基线系统。

  • c) 音子集融合

音子集的融合指是在简单的音子集合并的基础之上进行进一步处理,通常是将发音类似的音子合并成一个。这里既可以利用专家编撰的方法,也可以使用数据驱动的方法,比如基于混淆矩阵[P.-Y. Shih,2008]的方法。

数据准备

a)要训练中英文混合的语音识别系统,当然要有中英文混合的标注语音数据。当然音子集映射的方法可以不改变声学模型,因此没有声学训练用的标注语音数据也可以。而其他两种音子集形成的方式都离不开带标注的声学训练数据。

b)语言模型也必须包含中英文混合的数据。

c)词典自然要包含想识别出的所有汉字和单词,音子集就用上述方法构建得到的即可。

构建基于end-to-end的中英文混合语音识别系统

End-to-end的方法中,中文通常直接使用汉字来建模,而英文为了避免词巨大汇量带来的模型爆炸通常使用Gram-char进行建模,包括uni-char(就是字符),bi-char以及GRAM-CTC[Hairong Liu,2017]中这种数据驱动的Gram-char。对于这种结构的识别系统来说,有了带标注中英文混合语音数据和中英文混合文本数据就足够建立一个识别系统了。