17

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

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

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

4

2 回答 2

5

关于 LM 格式:

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

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

这里也是对 CMU 的 SLM Toolkit 的描述: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(uni-gram 语言模型)

然后,您可以使用 HTK Toolkit 将该 uni-gram 语言模型 (LM) 与另一个 LM 进行插值以获得更大的语料库

于 2011-04-19T17:41:46.783 回答
2

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

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

创建 50,000 字的 ARPA 语言模型文件

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

于 2011-07-18T19:28:43.973 回答