CMU Sphinx 语音识别入门:构建拼音字典
简介
拼音字典(phonetic dictionary,我自己是这么翻译的,可能不准确,能力所限,勿喷_)为语音识别系统提供了语音音素向词汇表的映射。大致形式如下:
hello H EH L OW
world W ER L D
拼音字典可以同时包含多音字,这种情况下,可以用括号中的数字来指定多音字。例如:
the TH IH
the(2) TH AH
语音拼音有多种表示方式,如:IPA和SAMPA。CMUSphinx 不需要我们去使用任何高级的语音表示方式,它更倾向于单纯使用字母而不是特殊字符来表示。这样可以简化一下处理算法。
在语音识别实际应用中,拼音字典应该包含所有我们感兴趣的单词,否则这些单词将不能被识别出来。当然,仅仅在拼音字典中囊括这些单词也是不行的,因为识别器会同时从拼音字典和语音模型中进行检索,如果该单词不在语音模型中,即使这个单词在拼音字典中,也不能被识别出来。当然,我们也不需要为了节约存储空间而将拼音字典中不需要识别的单词移除,这样做其实对提升性能没有任何太大的意义,因为多余的单词并不影响识别的准确率。
使用现有模型
CMUSphinx提供了大量可以支持的语言的拼音字典,包括US English, French, German, Russian, Dutch, Italian, Spanish and Mandarin(中文)。除了上述的拼音字典外,CMUSphinx提供了构件新的拼音字典或扩展现有字典的方法。
使用g2p-seq2seq扩展拼音字典
目前有许多工具可以用于扩展现有的拼音字典或构建新的拼音字典,Phonetisaurus 和 Sequitur是其中的两个,这里推荐使用CMU最新版本的g2p-seq2seq。它是目前转换精度最好的基于神经网络实现的tensorflow框架。
查看G2P工具如何工作的,可以使用交互模式:
g2p-seq2seq --interactive --model model_folder_path
> hello
HH EH L OW
用训练好的G2P模型生成单词列表的发音的命令如下:
g2p-seq2seq --decode your_wordlist --model model_folder_path
单词列表的格式为每行一个单词或文字。为了训练G2P模型,需要一个拼音字典,然后用以下命令进行训练:
g2p-seq2seq --train train_dictionary.dic --model model_folder_path
最后,至于拼音字典如何生成,每个语音有不同的生成方式,一般都跟发音方式有关。具体的可以去百度或者维基百科搜索。