Ngram语言模型

准备语言模型

需要一个语言模型来提高解码器的性能。我们为用户准备了两个语言模型(使用有损压缩)供下载和尝试。一个是英语,另一个是普通话。下载LM的bash脚本是例子的 local/download_lm_*.sh

例如,用户可以简单地运行此命令以下载准备好的普通话语言模型:

cd examples/aishell
source path.sh
bash local/download_lm_ch.sh

如果您希望训练自己更好的语言模型,请参考KenLM的教程。 在这里,我们提供一些提示,展示我们是如何准备我们的英语和普通话语言模型的。 您可以将其作为您训练自己模型时的参考。

英语语言模型

英语语料库来自于Common Crawl Repository,你可以从statmt下载它。我们使用部分en.00来训练我们的英语语言模型。在训练之前有一些预处理步骤:

  • 不在 ['A-Za-z0-9\s'] 中的字符 (\s 表示空白字符) 被移除,阿拉伯数字被转换为英文数字,例如1000被转换为one thousand。

  • 重复的空白字符被压缩为一个,并且开头的空白字符被移除。请注意,所有转录为小写,因此所有字符都被转换为小写。

  • 选择最常用的400,000个单词来建立词汇表,其余的用'UNKNOWNWORD'替换。

现在预处理已经完成,我们得到了一个干净的语料库来训练语言模型。我们发布的语言模型是用参数 '-o 5 --prune 0 1 1 1 1' 训练的。'-o 5' 意味着语言模型的最大阶数为 5。'--prune 0 1 1 1 1' 代表每个阶数的计数阈值,更具体地说,它将修剪阶数为二及更高的单例。为了节省磁盘存储,我们将 ARPA 文件转换为 'trie' 二进制文件,参数为 '-a 22 -q 8 -b 8'。'-a' 代表 'trie' 中指针的最大前导位数。'-q -b' 是概率和回退的量化参数。

普通话LM

不同于英语语言模型,普通话语言模型是基于字符的,其中每个标记是一个汉字。我们使用内部语料库来训练发布的普通话语言模型。语料库包含数十亿个标记。预处理与英语语言模型有微小的差异,主要步骤包括:

  • 开始和结尾的空格字符被删除。

  • 英语标点和中文标点被移除。

  • 在两个标记之间插入了一个空白字符。

请注意,发布的语言模型仅包含简体中文字符。在预处理完成后,我们可以开始训练语言模型。小型语言模型的关键训练参数是 '-o 5 --prune 0 1 2 4 4',大型语言模型是 '-o 5'。请参考上面的部分以了解每个参数的含义。我们还使用默认设置将ARPA文件转换为二进制文件。