精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
介绍
大方向:声学模型包含:wav文件列表、wav发音词列表、词拼音列表、wav文件。词拼音列表对蒙语比较复杂。
CMUSphinx项目配有多种高品质声学模型。有美国英语声学模型用于麦克风和广播语音,以及发音语音模型。您还可以使用经过大量声学数据培训的法语或中文模型。这些模型经过精心优化,可实现最佳识别性能,适用于几乎所有应用。我们将多年的经验用于完善它们。大多数命令和控制应用程序甚至一些大型词汇应用程序都可以直接使用默认模型。
除了模型之外,CMUSphinx还提供了一些适应性方法,当需要更高精度时,这些方法应该足以满足大多数情况。当您使用不同的录音环境(近距离或远麦克风或发音频道),或者有不同的重音(英国英语或印度英语)或甚至是其他语言时,已知适应性能很好。例如,如果您需要通过将声学模型的发音集合映射到带有字典的目标发音集合来快速添加对某种新语言的支持,则适应性能很好。
但是,有些应用程序当前的模型不起作用。这些例子是对另一种语言的手写识别或听写支持。在这些情况下,您需要训练自己的模型,本教程将演示如何对CMUSphinx语音识别引擎进行培训。在开始培训之前,请确保您熟悉这些概念,并准备好语言模型。确保您确实需要训练模型,并且您有足够的资源来完成这项工作。
什么时候需要训练
在以下情况下,您需要训练声学模型:
当你不需要训练时
如果出现以下情况,则无需训练声学模型:
请注意,此处列出的数据量是培训模型所必需的。如果您的数据明显少于列出的数据,那么您不能期望培养出好的模型。例如,您无法使用1分钟的语音数据训练模型。
数据准备
训练员使用一组样本语音信号来学习声音单元模型的参数。这称为训练数据库。还将为您提供一系列已经过培训的数据库。
该数据库包含以声学模型的形式从语音中提取统计数据所需的信息。
需要告诉培训师您希望它学习哪些声音单元的参数,以及至少它们在训练数据库中的每个语音信号中出现的顺序。该信息通过称为成绩单文件,它提供给培训师。它包含一系列单词和与语音信号序列完全相同顺序出现的非语音声音,后跟可用于将该序列与相应语音信号相关联的标签。
因此,除了语音信号和转录文件之外,教练还需要访问两个词典:一个语言中的合法单词被映射到声音单元(或子单词单元)的序列,另一个是非单词。 - 语音声音被映射到相应的非语音或类似语音的声音单元。我们将前者称为语言语音词典。后者称为填充词典。然后训练者查看词典,以得出与每个信号和转录相关的声音单元序列。
训练后,必须运行解码器检查训练结果。解码器采用模型,测试数据库的一部分并参考转录并估计模型的质量(WER)。在测试阶段,我们使用语言模型,并描述语言中可能的单词顺序。
要设置培训,首先需要设计培训数据库或下载现有培训数据库。例如,您可以从LDC购买数据库 。您必须将其转换为适当的格式。
数据库应该是您将要识别的语音的良好表示。例如,如果您要识别发音语音,则最好使用发音录音。如果您想使用移动语音,最好找到移动录音。各种录音频道的语音明显不同。广播新闻与发音不同。从mp3解码的语音与麦克风录音明显不同。但是,如果您在所需条件下没有录制足够的语音,您一定要使用其他任何语音。例如,您可以使用广播录音。有时通过发音编解码器流式传输以均衡音频是有意义的。通常也可以将噪声添加到训练数据中。
数据库应记录足够的扬声器,各种录音条件,足够的声学变化和所有可能的语言句子。如前所述,数据库的大小取决于您要处理的任务的复杂性。
数据库应具有上述两部分:培训部分和测试部分。通常测试部分大约是总数据大小的十分之一,但我们不建议您将超过4小时的记录作为测试数据。
获取新语言数据库的好方法是:
您必须设计数据库提示并对结果进行后处理,以确保音频实际上与提示相对应。数据库的文件结构如下:
├─ etc
│ ├─ your_db.dic (Phonetic dictionary字典文件句子的音节组成)
│ ├─ your_db.phone (Phoneset file)
│ ├─ your_db.lm.DMP (Language model)
│ ├─ your_db.filler (List of fillers)
│ ├─ your_db_train.fileids(List of files for training文本语音文件名,也叫控制文件)
│ ├─ your_db_train.transcription (Transcription for training脚本文件:中文句子和语音文件的相应)
│ ├─ your_db_test.fileids (List of files for testing文本语音文件名)
│ └─ your_db_test.transcription (Transcription for testing脚本文件)
└─ wav
├─ speaker_1
│ └─ file_1.wav (Recording of speech utterance)
└─ speaker_2
└─ file_2.wav
让我们浏览文件并描述它们的格式和准备方法:
* .fileids(wav文件列表):在your_db_train.fileids和your_db_test.fileids文件是文本文件,其中一个接一个列出了录音的名称(话语IDS),例如:
speaker_1/file_1
speaker_2/file_2
* .fileids文件包含文件系统中相对于wav 目录的路径。请注意,* .fileids文件的内容不应包含音频文件扩展名,而应仅包含名称。
* .transcription(wav发音词列表):在your_db_train.transcription和 your_db_test.transcription文件是文本文件,列出每个音频文件转录:
<s> hello world </s> (file_1)
<s> foo bar </s> (file_2)
重要的是每行开头<s>和结尾,</s> 然后是括号中的id。另请注意,括号仅包含文件名,不包含文件的目录。在* .fileids文件和* .transcription文件之间进行精确匹配至关重要。两者中的行数应相同。每行的文件ID (speaker1/file_1)和最后一部分话语idfile_1必须相同。
下面是上述转录文件的错误 * .fileids文件的示例。如果你遵循它,你会讨论得到一个错误 在这里:
speaker_2/file_2
speaker_1/file_1
// Bad! Do not create *.fileids files like this!
录音(* .wav文件):您的录音应包含训练音频,该音频应与您最终要识别的音频相匹配。如果不匹配,您可能会遇到有时甚至是精确度下降的情况。这意味着如果您想识别连续语音,您的训练数据库应记录连续语音。对于连续语音,录音的最佳长度在5秒到30秒之间。很长的录音使训练更加困难。如果要识别短隔离命令,则训练数据库还应包含具有短隔离命令的文件。最好将数据库设计为从一开始就识别连续语音,而不是将时间花在命令上。最后你还是不断说话。
录制文件必须采用MS WAV格式,具有特定采样率 - 16 kHz,16位,单声道用于桌面应用,8kHz,16位,单声道用于手机应用。这是关键的音频文件有特定的格式。Sphinxtrain支持多种采样率,但默认情况下,它配置为以MS WAV格式训练16khz 16位单声道文件。
所以,请确保您的录音是16千赫的samplig率(或8 kHz的,如果你培养了手机模型)mono,单一的通道!
如果您使用8 kHz模型进行训练,则需要确保正确配置了特征提取。请注意,您无法对音频进行反采样,这意味着您无法使用8 kHz数据训练16 kHz模型。
音频格式的不匹配是最常见的训练问题 - 确保您消除了这些问题的根源。
拼音词典(your_db.dict)(词拼音列表):每个单词应该有一行,拼音后跟单词:
HELLO HH AH L OW
WORLD W AO R L D
如果您需要查找语音字典,请查看维基百科或阅读有关语音的书籍。如果您使用现有的拼音字典,请不要使用区分大小写的变体,如“e”和“E”。相反,即使在不区分大小写的变体中,您的所有发音也必须不同。Sphinxtrain不支持某些特殊字符,如“*”或“/”,并支持大多数其他字符,如“+”,“ - ”或“:”。但是,为安全起见,我们建议您使用仅限字母数字的发音集合。
用字母数字替换发音中的特殊字符,如冒号,破折号或波浪号。例如,将“a~”替换为“aa”,使其仅为字母数字。如今,即使是手机也有数GB的内存。试图用神秘的特殊字符来节省空间是没有意义的。
这里有一件非常重要的事情。对于大型词汇数据库,语音表示或多或少已知; 这是任何一本书中描述的简单发音。如果你没有语音书,你可以使用单词的拼写,它也会给你很好的结果:
ONE O N E
TWO T W O
对于小词汇量,CMUSphinx与其他工具包不同。通常建议为数字等小型词汇数据库训练基于单词的模型。然而,这只有在您的HMM可以具有可变长度时才有意义。
CMUSphinx不支持单词模型。相反,您需要使用依赖于单词的发音词典:
ONE W_ONE AH_ONE N_ONE
TWO T_TWO UH_TWO
NINE N_NINE AY_NINE N_END_NINE
这实际上相当于基于单词的模型,有时甚至可以提供更好的准确性。不要在CMUSphinx上使用基于单词的模型!
这个文件中文示例如下:
以句子为单位,就是以下这样,才行,注意以下标红的这几个,和我们平时的拼音有点不一样:
你确定吗 n i q uxe d ing m a
打开我的电脑,确定还是取消 d a k ai w o d e d ian n aoq uxe d ing h ai sh ibq ux x i ao
关闭计算机,退出浏览器 g uan b i j i s uan j i t ui ch u l iu l an q i
你好吗?能够退出程序吗 n i h ao m a k e y i t ui ch u ch engx ux m a
返回上一页还是返回主菜单 f an h ui sh ang y i y e h aish ib f an h ui zh u c ai d an
放大还是缩小页面 f ang d a h ai sh ib s uo x iao y e m ian
发音集合文件(your_db.phone):每行应该有一个发音。发音的数量应该与字典中使用的发音相匹配,加上特殊的SIL发音用于静音:
AH
AX
DH
IX
语言模型文件(your_db.lm.DMP):应采用ARPA格式或DMP格式。在构建语言模型章节中查找有关语言模型的更多信息 。
填充词典(your_db.filler):包含填充发音(未被语言模型覆盖非语言声音,如呼吸,“嗯”或笑)。它可以只包含沉默:
<s> SIL
</s> SIL
<sil> SIL
它还可以包含填充发音,如果它们存在于数据库转录中:
+um+ ++um++
+noise+ ++noise++
用于培训的示例数据库可在a4数据库NIST的Sphere音频(.sph)格式中获得,您可以在以下部分中使用此数据库。如果您想玩大型示例,请下载TED-LIUM英语声学数据库。它目前包含约200小时的录音。
编译所需的包
培训需要以下包:
还需要以下外部包:
此外,如果您下载带有.gz后缀的软件包,则需要 gunzip或使用等效的工具来解压缩它们。
在可执行文件路径中的某处安装perl和python包,如果它们不存在的话。
我们建议您在Linux上进行培训:这样您就可以使用sphinxtrain的所有功能。您也可以使用Windows系统进行培训,在这种情况下,我们建议您使用ActivePerl。
有关进一步的下载说明,请参阅下载页面。
基本上,你需要把一切都变成一个单一的根文件夹,解压缩和解压它们,运行configure和make并make install在每个包文件夹。将数据库文件夹也放入此根文件夹中。完成此操作后,您将拥有一个包含以下内容的教程目录:
└─ tutorial
├─ an4
├─ an4_sphere.tar.gz
├─ sphinxtrain
├─ sphinxtrain-5prealpha.tar.gz
├─ pocketsphinx
├─ pocketsphinx-5prealpha.tar.gz
├─ sphinxbase
└─ sphinxbase-5prealpha.tar.gz
您需要以管理员身份安装该软件root。安装软件后,您可能需要更新系统配置,以便系统能够找到动态库,例如:
export PATH=/usr/local/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/lib
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
如果您不想安装到系统路径中,可以在主文件夹中安装软件包。在这种情况下,您可以将以下选项附加到autogen.sh脚本或configure脚本:
--prefix=/home/user/local
显然,该文件夹可以是任意文件夹,只需记住在修改其名称后更新环境配置。如果您的二进制文件无法加载带有错误消息的动态库failed to open libsphinx.so.0 no such file or directory,则表示您未正确配置环境。
设置培训脚本
要开始培训,请转到数据库文件夹并运行以下命令:
在Linux上:
sphinxtrain -t an4 setup
在Windows上:
python ../sphinxtrain/scripts/sphinxtrain -t an4 setup
不要忘记用您的任务名称替换an4。
这会将所有必需的配置文件复制到数据库文件夹的etc /子文件夹中,并准备数据库以进行培训。安装后的目录结构如下所示:
├─ etc
└─ wav
在培训过程中,将创建其他数据文件夹,以便您的数据库目录应如下所示:
├─ etc
├─ feat
├─ logdir
├─ model_parameters
├─ model_architecture
├─ result
└─ wav
完成此基本设置后,我们需要编辑etc / 文件夹中的配置文件。有许多变量,但要开始,我们只需要改变几个。首先,找到该文件etc/sphinx_train.cfg。
设置数据库音频的格式
在etc/sphinx_train.cfg你应该看到以下配置:
$CFG_WAVFILES_DIR = "$CFG_BASE_DIR/wav";
$CFG_WAVFILE_EXTENSION = 'sph';
$CFG_WAVFILE_TYPE = 'nist'; # one of nist, mswav, raw
如果以WAV格式,文本sph改为wav,nist改为mswav:
$CFG_WAVFILES_DIR = "$CFG_BASE_DIR/wav";
$CFG_WAVFILE_EXTENSION = 'wav';
$CFG_WAVFILE_TYPE = 'mswav'; # one of nist, mswav, raw
配置文件路径
在etc/sphinx_train.cfg文件中搜索以下行:
# Variables used in main training of models
$CFG_DICTIONARY = "$CFG_LIST_DIR/$CFG_DB_NAME.dic";
$CFG_RAWPHONEFILE = "$CFG_LIST_DIR/$CFG_DB_NAME.phone";
$CFG_FILLERDICT = "$CFG_LIST_DIR/$CFG_DB_NAME.filler";
$CFG_LISTOFFILES = "$CFG_LIST_DIR/${CFG_DB_NAME}_train.fileids";
$CFG_TRANSCRIPTFILE = "$CFG_LIST_DIR/${CFG_DB_NAME}_train.transcription"
如果您设置了如前所述的文件结构,则已经设置了这些值,但请确保您的文件确实以这种方式命名。
该$CFG_LIST_DIR变量是/etc在您的项目目录。该$CFG_DB_NAME变量是项目本身的名称。
配置模型类型和模型参数
要选择声学模型类型,请参阅“ 声学模型类型”一文。
$CFG_HMM_TYPE = '.cont.'; # Sphinx4, Pocketsphinx
#$CFG_HMM_TYPE = '.semi.'; # PocketSphinx only
#$CFG_HMM_TYPE = '.ptm.'; # Sphinx4, Pocketsphinx, faster model
只需取消您需要的内容即可。对于资源有效的应用程序,使用半连续模型,以获得最佳精度使用连续模型。默认情况下,我们使用PTM模型,在精度和速度之间提供良好的平衡。
$CFG_FINAL_NUM_DENSITIES = 8;
如果您正在训练大型词汇表的连续模型并且具有超过100小时的数据,请在此处输入32。它可以是2:4,8,16,32,64的任何倍数。
如果您正在训练半连续或PTM模型,请使用256高斯。
# Number of tied states (senones) to create in decision-tree clustering
$CFG_N_TIED_STATES = 1000;
此值是模型中要训练的senone数。模型具有的传感器越多,它就能越精确地区分声音。另一方面,如果你有太多的句子,那么该模型将不够通用,无法识别看不见的语音。这意味着WER在看不见的数据上会更高。这就是为什么重要的是不要过分夸大模型。如果有太多看不见的句子,警告将在下面第50阶段的标准日志中生成:
ERROR: "gauden.c", line 1700: Variance (mgau= 948, feat= 0, density=3,
component=38) is less then 0. Most probably the number of senones is too
high for such a small training database. Use smaller $CFG_N_TIED_STATES.
下表提供了连续模型的近似语音数和密度数:
词汇 |
数据库中的音频/小时 |
句音 |
密度 |
例 |
20 |
五 |
200 |
8 |
Tidigits数字识别 |
100 |
20 |
2000 |
8 |
RM1命令和控制 |
5000 |
三十 |
4000 |
16 |
WSJ1 5k小听写 |
20000 |
80 |
4000 |
32 |
WSJ1 20k大听写 |
60000 |
200 |
6000 |
16 |
HUB4广播新闻 |
60000 |
2000 |
12000 |
64 |
费希尔发音转录 |
对于半连续和PTM模型,使用固定数量的256个密度。
当然,您还需要了解只有在转录中存在的senone才能被训练。这意味着如果你的转录不够通用,例如,如果它是10.000个扬声器所说的相同的单个单词10.000次,无论你录制了多少小时的演讲,你仍然只有几个句子。在这种情况下,你只需要在模型中使用几个senones,而不是数千个。
虽然看起来多样性可能会改善模型并非如此。不同的语音需要一些人为的语音提示,这会降低语音的自然度。人工模型对现实解码没有帮助。为了构建最好的数据库,您需要尝试尽可能多地重现真实环境。收集更多语音以尝试优化数据库大小甚至更好。
重要的是要记住,最佳数字取决于您的数据库。要正确训练模型,您需要尝试不同的值并尝试选择能够为开发集创建最佳WER的值。你至少可以试验一下senones的数量和高斯混合的数量。有时,尝试使用发音或估算迭代次数也是值得的。
配置声音功能参数
Sphinx中使用的声音文件的默认值是每秒16,000个样本(16 KHz)。如果是这种情况, 将使用建议值自动生成etc / feat.params文件。
如果您使用采样率为8 kHz(发音音频)的声音文件,则需要更改etc / sphinx_train.cfg中的某些值。较低的采样率还意味着声音频率范围的变化和用于识别语音的滤波器的数量。建议值是:
# Feature extraction parameters
$CFG_WAVFILE_SRATE = 8000.0;
$CFG_NUM_FILT = 31; # For wideband speech it's 40, for telephone 8khz reasonable value is 31
$CFG_LO_FILT = 200; # For telephone 8kHz speech value is 200
$CFG_HI_FILT = 3500; # For telephone 8kHz speech value is 3500
配置并行作业以加速培训
如果您在多核计算机或PBS群集中,则可以并行运行培训。以下选项应该可以解决问题:
# Queue::POSIX for multiple CPUs on a local machine
# Queue::PBS to use a PBS/TORQUE queue
$CFG_QUEUE_TYPE = "Queue";
将类型更改为“Queue :: POSIX”以在多核上运行。然后更改要运行的并行进程数:
# How many parts to run Forward-Backward estimation in
$CFG_NPART = 1;
$DEC_CFG_NPART = 1; # Define how many pieces to split decode in
如果您在8核机器上运行,请在训练期间启动大约10个部件以完全加载CPU。
配置解码参数
打开etc/sphinx_train.cfg并确保设置以下配置:
$DEC_CFG_DICTIONARY = "$CFG_BASE_DIR/etc/$CFG_DB_NAME.dic";
$DEC_CFG_FILLERDICT = "$CFG_BASE_DIR/etc/$CFG_DB_NAME.filler";
$DEC_CFG_LISTOFFILES = "$CFG_BASE_DIR/etc/${CFG_DB_NAME}_test.fileids";
$DEC_CFG_TRANSCRIPTFILE = "$CFG_BASE_DIR/etc/${CFG_DB_NAME}_test.transcription";
$DEC_CFG_RESULT_DIR = "$CFG_BASE_DIR/result";
# These variables are used by the decoder and have to be defined by the user.
# They may affect the decoder output.
$DEC_CFG_LANGUAGEMODEL = "$CFG_BASE_DIR/etc/${CFG_DB_NAME}.lm.DMP";
如果您正在使用an4进行培训,请确保您已将$ {CFG_DB_NAME} .lm.DMP更改 为an4.ug.lm.DMP,因为在a4数据库中语言模型的名称不同:
$DEC_CFG_LANGUAGEMODEL = "$CFG_BASE_DIR/etc/an4.ug.lm.DMP";
如果一切正常,您可以继续进行培训。
训练
首先,转到数据库目录:
cd an4
要训练,只需运行以下命令:
在Linux上:
sphinxtrain run
在Windows上:
python ../sphinxtrain/scripts/sphinxtrain run
它将经历所有必需的阶段。训练需要几分钟。在大型数据库中,培训可能需要长达一个月的时间。
最重要的阶段是第一个检查所有内容是否配置正确且输入数据是否一致的阶段。
不要忽略第一个00.verify_all步骤中报告的错误!
解码过程中的典型输出如下:
Baum Welch starting for 2 Gaussian(s), iteration: 3 (1 of 1)
0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
Normalization for iteration: 3
Current Overall Likelihood Per Frame = 30.6558644286942
Convergence Ratio = 0.633864444461992
Baum Welch starting for 2 Gaussian(s), iteration: 4 (1 of 1)
0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
Normalization for iteration: 4
这些脚本处理训练模型所需的所有步骤。完成后,培训完成。
培训内部
本节详细介绍了培训期间发生的情况。
在scripts目录(./scripts_pl)中,有几个目录从00到99顺序编号。每个目录都有一个名为的目录,slave*.pl或者它有一个扩展名的文件.pl。该脚本按顺序遍历目录并执行 slave*.pl单个.pl文件,如下所示。
perl scripts_pl/000.comp_feat/slave_feat.pl
perl scripts_pl/00.verify/verify_all.pl
perl scripts_pl/10.vector_quantize/slave.VQ.pl
perl scripts_pl/20.ci_hmm/slave_convg.pl
perl scripts_pl/30.cd_hmm_untied/slave_convg.pl
perl scripts_pl/40.buildtrees/slave.treebuilder.pl
perl scripts_pl/45.prunetree/slave-state-tying.pl
perl scripts_pl/50.cd_hmm_tied/slave_convg.pl
perl scripts_pl/90.deleted_interpolation/deleted_interpolation.pl
这些脚本在您的计算机上启动作业,并且每个作业都需要几分钟才能运行。
在运行任何脚本之前,请记下当前目录的目录内容。每次运行后slave.pl再次查看内容。将创建几个新目录。这些目录包含在培训过程中生成的文件。此时您不需要知道这些目录的内容,尽管某些目录名称可能是不言自明的,如果您感到好奇,可以浏览它们。
当前目录中显示的文件之一是.html 文件,名为an4.html,具体取决于您使用的数据库。该文件将包含已执行作业的状态报告。验证您启动的作业是否已成功完成。然后才以指定的顺序启动下一个 slave.pl。重复此过程,直到在所有目录中运行slave.pl。
请注意,在从00到90的过程中,您将生成几组声学模型,每个声学模型都可用于识别。另请注意,只有创建半连续模型才需要执行某些步骤。如果在创建连续模型时执行这些步骤,则脚本将无助于执行任何操作。
在阶段中000.comp_feat,提取要素文件。该系统不直接使用声学信号。首先将信号变换成特征向量序列,其用于代替实际声学信号。
该脚本slave_feat.pl将为由Mel频率倒谱系数(MFCC)组成的每个训练话语计算一系列13维向量(特征向量)。请注意,波形文件列表包含一个列表,其中包含音频文件的完整路径。由于数据都与工作目录位于同一目录中,因此路径是相对的,而不是绝对的。如果数据的位置不同,您可能需要更改此位置以及an4_test.fileids文件。MFCC将自动放置在一个名为的目录中feat。请注意,在本教程之外,您从用于训练和识别的语音信号计算的特征向量的类型不仅限于MFCC。您可以使用任何合理的参数化技术,并计算MFCC以外的功能。CMUSphinx可以使用任何类型或维度的功能。MFC格式页面上描述了这些功能的格式。
一旦启动的作业20.ci_hmm运行完成,您将训练字典中子字单元的上下文无关(CI)模型。
当从30.cd_hmm_untied目录启动的作业运行完成时,您将训练 具有解除状态的上下文相关子字单元(三音素)的模型。这些被称为 CD-untied模型,并且是构建决策树以便绑定状态所必需的。
作业40.buildtrees将为每个子字单元的每个状态构建决策树。
这些工作45.prunetree将修剪决策树并将各州联系起来。
在此之后,这些工作50.cd-hmm_tied将训练你训练语料库中三音素的最终模型。这些被称为CD绑定模型。CD绑定模型经过多个阶段的培训。我们从1个高斯每状态HMM开始,然后训练2个高斯每状态HMM,依此类推,直到每个状态的所需数量的高斯训练。这些工作50.cd-hmm_tied将自动训练所有这些中级CD绑定模型。
在任何阶段结束时,您都可以使用模型进行识别。请记住,即使您正在进行训练,也可以进行解码,前提是您确定已越过生成要解码的模型的舞台。
转型矩阵培训(高级)
如果您选择运行它们,将启动一些其他脚本。这些额外的训练步骤在计算上可能是昂贵的,但是提高了识别率。
在某些情况下,变换矩阵可能有助于培训和识别过程。
如果指定,将运行以下步骤
$CFG_LDA_MLLT = 'yes';
在文件中sphinx_train.cfg。如果指定'no'(默认值),则步骤将不执行任何操作。步骤01.lda_train将估计LDA矩阵,并且该步骤02.mllt_train将估计MLLT矩阵。
反过来,Perl脚本设置并运行Python模块。这些步骤的最终产品是feature_transform您model_parameters目录中的文件。有关详细信息,请参阅LDA和MLLT培训页面。
MMIE培训(高级)
最后,如果您通过设置指定MMIE训练,将再运行一步:
$CFG_MMIE = "yes";
默认值为"no"。这将运行步骤60.lattice_generation,61.lattice_pruning,62.lattice_conversion和65.mmie_train。有关详细信息,请参阅SphinxTrain中有关MMIE培训的页面。
测试
这是关键的测试训练的数据库的质量,以选择最佳参数,了解你的应用程序如何执行和优化性能。为此,需要测试解码步骤。解码现在是训练过程的最后阶段。
您可以使用以下命令重新启动解码:
sphinxtrain -s decode run
此命令将使用您训练的声学模型和您在etc/sphinx_train.cfg文件中配置的语言模型启动解码过程。
MODULE: DECODE Decoding using models previously trained
Decoding 130 segments starting at 0 (part 1 of 1)
0%
当识别作业完成时,脚本计算识别字错误率(WER)和句子错误率(SER)。这些费率越低,您的认可就越好。对于典型的10小时任务,WER应该在10%左右。对于一项大型任务,它可能会达到30%。
在an4数据上你应该得到类似的东西:
SENTENCE ERROR: 70.8% (92/130) WORD ERROR RATE: 30.3% (233/773)
您可以在解码result 后创建的文件夹中找到解码的确切详细信息,例如与参考转录的对齐,速度和每个文件的结果。我们来看看文件an4.align:
p I T t s b u r g H (MMXG-CEN5-MMXG-B)
p R EIGHTY t s b u r g EIGHT (MMXG-CEN5-MMXG-B)
Words: 10 Correct: 7 Errors: 3 Percent correct = 70.00% Error = 30.00% Accuracy = 70.00%
Insertions: 0 Deletions: 0 Substitutions: 3
october twenty four nineteen seventy (MMXG-CEN8-MMXG-B)
october twenty four nineteen seventy (MMXG-CEN8-MMXG-B)
Words: 5 Correct: 5 Errors: 0 Percent correct = 100.00% Error = 0.00% Accuracy = 100.00%
Insertions: 0 Deletions: 0 Substitutions: 0
TOTAL Words: 773 Correct: 587 Errors: 234
TOTAL Percent correct = 75.94% Error = 30.27% Accuracy = 69.73%
TOTAL Insertions: 48 Deletions: 15 Substitutions: 171
有关WER的描述,请参阅我们 的语音章节的基本概念。
使用该模型
训练后,声学模型位于
model_parameters/`<your_db_name>`.cd_cont_`<number_of senones>`
或者在
model_parameters/`<your_db_name>`.cd_semi_`<number_of senones>`
您只需要该文件夹。该模型应具有以下文件:
mdef
feat.params
mixture_weights
means
noisedict
transition_matrices
variances
取决于您训练的模型类型。要在PocketSphinx中使用该模型,只需使用以下-hmm选项指向它:
pocketsphinx_continuous -hmm `<your_new_model_folder>` -lm `<your_lm>` -dict `<your_dict>`.
要在Sphinx4中使用训练的模型,您需要在Configuration对象中指定路径 :
configuration.setAcousticModelPath("file:model_parameters/db.cd_cont_200");
如果模型在资源中,您可以使用以下内容引用它resource:URL:
configuration.setAcousticModelPath("resource:/com/example/db.cd_cont_200");
有关详细信息,请参阅Sphinx4教程。
故障排除
故障排除不是火箭科学。对于所有问题,你可能会责备自己。你很可能是失败的原因。仔细阅读logdir文件夹中的消息,其中包含每个已执行操作的详细日志。此外,消息将复制到your_project_name.html文件中,您可以在浏览器中打开和读取该 文件。
有许多运作良好,经过验证的方法可以解决问题。例如,尝试减少训练集以查看问题出现的一半。
以下是一些常见问题:
您的字典中包含错误,或者您在发音文件中遗漏了发音符号。您可能必须从字典文件中删除任何注释行。
您可能必须对字典文件行进行排序才能找到它们。也许一个词以大写和小写形式定义。
确保成绩单中的所有单词都在字典中,并且在出现时具有匹配的大小写。此外,抄本中的单词可能拼写错误,一起运行或者是不在字典中的数字或符号。如果字典文件没有完美排序,则在查找单词时可能会跳过某些条目。如果您手动编辑了字典文件,请确保每个条目的格式正确。
您可能在发音列表中指定了未在成绩单中的单词中表示的发音。培训师希望至少找一次每部发音的示例。
的.mfc文件是在阶段从输入音频文件转换的特征文件000.comp_feats。你跳过这一步吗?您是否添加了新的音频文件而未进行转换?培训过程需要一个特征文件,但事实并非如此。
如果音频文件和训练参数不匹配,或者在训练和测试之间存在不匹配,则可能会发生这种情况。
有时,数据库中的音频与正确的转录不匹配。例如,转录文件具有“Hello world”行,但在音频中实际上“Hello hello world”发音。培训过程通常会在日志中检测到并发出此消息。如果有太多此类错误,则很可能意味着您错误配置了某些内容,例如您在转录重新排序时导致音频与文本不匹配。如果错误很少,您可以忽略它们。您可能希望编辑转录文件以输入发音的确切单词。在上面的例子中,您需要编辑转录文件并在相应的行上放置“Hello hello world”。您可能希望过滤此类提示,因为它们会影响声学模型的质量。在这种情况下,您需要在训练期间启用强制对齐阶段。为此,请编辑以下行sphinx_train.cfg:
$CFG_FORCEDALIGN = 'yes';
并再次进行训练。它将执行第10和第11阶段,并将过滤您的数据库。
发生此错误是因为解码器在训练后未正常运行。首先检查您的PATH。中是否存在正确的可执行文件。pocketsphinx_batch如果正在使用的解码脚本是psdecode.pl由$DEC_CFG_SCRIPT变量in 设置的,则可执行文件应该是sphinx_train.cfg。在Linux上运行:
which pocketsphinx_batch
并查看它是否按预期定位。如果不是,则需要PATH 正确设置变量。同样在Windows上,运行:
where pocketsphinx_batch
如果正确设置了解码可执行文件的路径,请读取日志文件 logdir/decode/以找出错误的其他原因。
如果您想要求有关培训的帮助,请尝试提供培训文件夹或至少提供logdir。将文件打包到存档中并将其上载到公共文件共享资源。然后将链接发布到资源。请记住:您提供的信息越多,解决问题的速度就越快。