构建openears兼容的语言模型

时间:2011-03-07 14:08:44

标签: iphone speech-recognition language-model

我正在对文本和文本到语音的语音进行一些开发,我发现OpenEars API非常有用。

这种基于cmu-slm的API的原理是它使用语言模型来映射iPhone设备收听的语音。所以我决定找一个大的英语语言模型来提供API语音识别器引擎。但是我无法理解与OpenEars一起使用的voxfourge英文数据模型的格式。

有没有人知道如何让英语语言的.languagemodel和.dic文件与OpenEars一起使用?

2 个答案:

答案 0 :(得分:5)

关于LM格式:

AFAIK大多数语言模型使用语言模型的ARPA标准。 Sphinx / CMU语言模型被编译成二进制格式。您需要源格式将Sphinx LM转换为另一种格式。大多数其他语言模型都是文本格式。

我建议使用HTK语音识别工具包;详细文档:http://htk.eng.cam.ac.uk/ftp/software/htkbook_html.tar.gz

这里还介绍了CMU的SLM工具包:http://www.speech.cs.cmu.edu/SLM/toolkit_documentation.html

以下是我在网上找到的ARPA格式的语言模型示例:http://www.arborius.net/~jphekman/sphinx/full/index.html

您可能希望先创建一个ARPA LM,然后根据需要将其转换为任何二进制格式。

一般情况:

要构建语言模型,您需要大量的训练数据 - 在观察到此时间点的当前输入后,确定词汇表中任何其他单词的概率。

您不仅可以通过添加想要识别的单词来“制作”语言模型 - 您还需要大量的训练数据(=运行语音识别应用程序时观察到的典型输入)。

语言模型不仅仅是单词列表 - 它估计输入中下一个标记(单词)的概率。 要估计这些概率,您需要运行一个训练过程,该过程将覆盖训练数据(例如历史数据),并在那里观察词频以估计上述概率。

对于您的问题,可能只是假设所有单词的频率/概率都相同。

  1. 创建一个包含您要识别的单词的字典(字典中的N个单词)

  2. 创建一个语言模型,每个单词的概率为1 / N(单语法模型)

  3. 然后,您可以使用HTK Toolkit将该单一语言模型(LM)与另一个LM插入更大的语料库

答案 1 :(得分:2)

老问题,但也许答案仍然很有趣。 OpenEars现在具有内置语言模型生成功能,因此您可以使用LanguageModelGenerator类在应用程序中动态创建模型,该类使用MITLM库和NSScanner来完成与上述CMU工具包相同的任务。 。在iPhone上处理包含> 5000个单词的语料库将需要很长时间,但您可以始终使用模拟器运行一次并从文档文件夹中获取输出并保留它。

此处解释了大词汇量识别的另一种选择:

Creating ARPA language model file with 50,000 words

话虽如此,我需要指出,作为OpenEars开发人员,CMU工具的5000字的限制与使用Pocketsphinx时可能在iPhone上具有良好准确性和处理速度的最大词汇量大小非常接近。所以,最后一个建议是重新定义你的任务,这样它就不会绝对需要大量的词汇识别(例如,因为OpenEars允许你动态切换模型,你可能会发现你不需要一个巨大的模型但是可以使用多个较小的可以在不同的上下文中切换的内容),或者使用可以在服务器上进行大量词汇识别的基于网络的API(或者在自己的服务器上创建自己的使用Sphinx4的API)。祝你好运!