CMU Sphinx4 - 自定义语言模型

CMU Sphinx4 - Custom Language Model

我有一个非常具体的要求。我正在开发一个应用程序,该应用程序允许用户在应用程序中说出格式为 HN56C12345(任何字母数字字符序列)的员工编号。我已经完成了 link: http://cmusphinx.sourceforge.net/wiki/tutoriallm 但我不确定这是否适用于我的用例。

所以我的问题有三个方面:

  1. Sphinx4 真的可以像我的 emp 号码那样高精度地识别字母数字序列吗?
  2. 如果是,谁能给我指出一个具体的示例/参考页面,其中有人从头开始在 Sphinx4 中构建自定义语言支持。我还没有找到详细的分步文档。有人研究过基于字母数字序列的词典或语言模型吗?
  3. 如何为这种场景建立声学模型?

为此您不需要新的声学模型,而是自定义语法。请参阅 http://cmusphinx.sourceforge.net/wiki/tutoriallm#building_a_grammar and http://cmusphinx.sourceforge.net/doc/sphinx4/edu/cmu/sphinx/jsgf/JSGFGrammar.html 了解更多信息。如果您将字符 space 分隔在语法中,Sphinx4 可以很好地识别字符:

#JSGF V1.0
grammar jsgf.emplID;
<digit> = zero | one | two | three | four | five | six | seven | eight | nine ;
<digit2> = <digit> <digit>   ;
<digit4> = <digit2> <digit2> ;
<digit5> = <digit4> <digit>  ;
// This rule accepts IDs of a kind: hn<2 digits>c<5 digits>.
public <id> = h n <digit2> c <digit5> ;

关于准确性,有两种方法可以提高它。如果员工人数不是太多,你可以只用所有可能的员工 ID 来制作语法。如果这不是您的情况,那么拥有通用语法是您唯一的选择。尽管可以制作一个自定义记分器,该记分器将使用上下文信息比通用算法更好地预测员工 ID。这种方式需要一些 ASR 和 CMU Sphinx 代码方面的知识。