为CMUSphinx训练声学模型教程手册

CMUSphinx训练声学模型手册

介绍

1.什么时候需要训练

2.当你不需要训练时

数据准备

1.编译所需的包

2.设置培训脚本

3.设置数据库音频的格式

4. 配置文件路径

5.配置模型类型和模型参数

6.配置声音功能参数

7.配置并行作业以加速培训

8.配置解码参数

训练

1.培训内部

2.转型矩阵培训(高级)

3.MMIE培训(高级)

测试

1.使用该模型

2.故障排除

介绍

CMUSphinx项目配有多种高品质声学模型。有麦克风和广播语音的美国英语声学模型以及电话语音模型。您还可以使用经过大量声学数据培训的法语或中文模型。这些模型经过精心优化,以实现最佳识别性能,并且几乎适用于所有应用。我们将多年的经验融入到完美中。大多数命令和控制应用程序甚至一些大型词汇应用程序都可以直接使用默认模型。

除了模型之外,CMUSphinx还提供了一些适应性方法,当需要更高精度时,这些方法应该足以满足大多数情况。当您使用不同的录音环境(近距离或远麦克风或电话频道),或者有不同的重音(英国英语或印度英语)或甚至是其他语言时,已知适应性能很好。例如,如果您需要通过将声学模型的电话机映射到带有字典的目标电话机来快速添加对某些新语言的支持,则适应性能很好。

但是,有些应用程序当前的模型不起作用。这些例子是对另一种语言的手写识别或听写支持。在这些情况下,您需要训练自己的模型,本教程将演示如何对CMUSphinx语音识别引擎进行培训。在开始培训之前,请确保您熟悉这些概念,并准备好语言模型。确保您确实需要训练模型,并且您有足够的资源来完成这项工作。

~~

什么时候需要训练

~~
在以下情况下,您需要训练声学模型:

您想为新语言或方言创建声学模型
或者你需要一个小型词汇应用程序的专用模型
你有足够的数据来训练:
单个扬声器的命令和控制记录1小时
为许多扬声器提供5个小时的200个扬声器录音,用于指挥和控制
单个发言人听写录音10小时
许多扬声器听写录制了200个扬声器50小时
而且你对语言的语音结构有所了解
你有时间训练模型并优化参数(约1个月)

当你不需要训练时

如果出现以下情况,则无需训练声学模型:

您需要提高准确性 - 改为进行声学模型调整
您没有足够的数据 - 改为进行声学模型调整
你没有足够的时间
你没有足够的经验
请注意,此处列出的数据量是培训模型所必需的。如果您的数据明显少于列出的数据,那么您不能指望培养出好的模型。例如,您无法使用1分钟的语音数据训练模型。

数据准备

训练员使用一组样本语音信号来学习声音单元模型的参数。这称为训练数据库。还将为您提供一系列已经过培训的数据库。

数据库包含以声学模型的形式从语音中提取统计数据所需的信息。

需要告诉培训师您希望它学习哪些声音单元的参数,以及至少它们在训练数据库中的每个语音信号中出现的顺序。该信息通过称为成绩单文件的文件提供给培训师。它包含与语音信号中出现的语音和非语音声音序列完全相同的顺序,后跟可用于将该序列与相应语音信号相关联的标签。

因此,除了语音信号和转录文件之外,训练者还需要访问两个词典:一个语言中的合法单词被映射到声音单元(或子单词单元)的序列,另一个是非单词。 - 语音声音被映射到相应的非语音或类似语音的声音单元。我们将前者称为语言语音词典。后者称为填充词典。然后训练者查看词典,以得出与每个信号和转录相关的声音单元序列。

训练后,必须运行解码器来检查训练结果。解码器采用模型,测试数据库的一部分并参考转录并估计模型的质量(WER)。在测试阶段,我们使用语言模型,并描述语言中可能的单词顺序。

要设置培训,首先需要设计培训数据库或下载现有培训数据库。例如,您可以从LDC购买数据库 。您必须将其转换为适当的格式。

数据库应该是您将要识别的语音的良好表示。例如,如果您要识别电话语音,则最好使用电话录音。如果您想使用移动语音,最好找到移动录音。各种录音频道的语音明显不同。广播新闻与电话不同。从mp3解码的语音与麦克风录音明显不同。但是,如果您在所需条件下没有录制足够的语音,您一定要使用其他任何语音。例如,您可以使用广播录音。有时通过电话编解码器流式传输以均衡音频是有意义的。通常也可以为训练数据添加噪音。

数据库应记录足够的扬声器,各种录音条件,足够的声学变化和所有可能的语言句子。如前所述,数据库的大小取决于您要处理的任务的复杂性。

数据库应具有上述两部分:培训部分和测试部分。通常测试部分大约是总数据大小的十分之一,但我们不建议您将超过4小时的记录作为测试数据。

获取新语言数据库的好方法是:

使用现有转录手动分割录音(播客,新闻等)
记录您的朋友,家人和同事
在Voxforge上设置自动收藏
您必须设计数据库提示并对结果进行后处理,以确保音频实际上与提示相对应。数据库的文件结构如下:

├─ 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:在your_db_train.fileids和your_db_test.fileids文件是文本文件,其中列出了录音的名称(话语IDS)一个接一个,例如:

speaker_1/file_1
speaker_2/file_2
A * .fileids文件包含文件系统中相对于wav 目录的路径。请注意,* .fileids文件不应在其内容中包含音频文件扩展名,而应仅包含名称。

  • .transcription:在your_db_train.transcription和 your_db_test.transcription文件是文本文件,列出每个音频文件转录:

hello world (file_1)
foo bar (file_2)
重要的是每行以#开头并以其结尾, 后跟括号中的id。另请注意,括号仅包含文件,不包含speaker_n目录。在* .fileids文件和* .transcription文件之间进行精确匹配至关重要。两者中的行数应相同。每行的文件ID (speaker1/file_1)和话语id 的最后一部分 file_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的,如果你培养了电话模型)单用一个单一的通道!

如果您使用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上使用基于单词的模型!

电话机文件(your_db.phone):每行应该有一部电话。手机的数量应与字典中使用的手机相匹配,加上特殊的SIL手机以保持静音:

AH
AX
DH
IX
语言模型文件(your_db.lm.DMP):应采用ARPA格式或DMP格式。在构建语言模型章节中查找有关语言模型的更多信息 。

填充词典(your_db.filler):包含填充手机(未被语言模型覆盖非语言声音,如呼吸,“嗯”或笑)。它可以只包含沉默:

SIL
SIL
SIL
它还可以包含填充手机,如果它们存在于数据库转录中:

+um+ ++um++
+noise+ ++noise++
用于培训的示例数据库可在a4数据库NIST的Sphere音频(.sph)格式中获得,您可以在以下部分中使用此数据库。如果您想玩大型示例,请下载TED-LIUM英语声学数据库。它目前包含约200小时的录音。

编译所需的包

培训需要以下包:

sphinxbase-5pr​​ealpha
sphinxtrain-5prealpha
pocketsphinx-5prealpha
还需要以下外部包:

perl,例如Windows上的ActivePerl
python,例如Windows上的ActivePython
此外,如果您下载带有.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您应该看到以下配置:

C F G W A V F I L E S D I R = " CFG_WAVFILES_DIR = " CFGWAVFILESDIR="CFG_BASE_DIR/wav";
$CFG_WAVFILE_EXTENSION = ‘sph’;
$CFG_WAVFILE_TYPE = ‘nist’; # one of nist, mswav, raw
如果以WAV格式,更改录制的音频sph到wav这里nist来 mswav:

C F G W A V F I L E S D I R = " CFG_WAVFILES_DIR = " CFGWAVFILESDIR="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

C F G D I C T I O N A R Y = " CFG_DICTIONARY = " CFGDICTIONARY="CFG_LIST_DIR/$CFG_DB_NAME.dic";
C F G R A W P H O N E F I L E = " CFG_RAWPHONEFILE = " CFGRAWPHONEFILE="CFG_LIST_DIR/$CFG_DB_NAME.phone";
C F G F I L L E R D I C T = " CFG_FILLERDICT = " CFGFILLERDICT="CFG_LIST_DIR/$CFG_DB_NAME.filler";
C F G L I S T O F F I L E S = " CFG_LISTOFFILES = " CFGLISTOFFILES="CFG_LIST_DIR/${CFG_DB_NAME}_train.fileids";
C F G T R A N S C R I P T F I L E = " CFG_TRANSCRIPTFILE = " CFGTRANSCRIPTFILE="CFG_LIST_DIR/${CFG_DB_NAME}_train.transcription"
如果您设置了如前所述的文件结构,则已经设置了这些值,但请确保您的文件确实以这种方式命名。

C F G L I S T D I R 变 量 是 / e t c 在 您 的 项 目 目 录 。 该 CFG_LIST_DIR变量是/etc在您的项目目录。该 CFGLISTDIR/etcCFG_DB_NAME变量是项目本身的名称。

配置模型类型和模型参数

要选择声学模型类型,请参阅“ 声学模型类型”一文。

KaTeX parse error: Expected 'EOF', got '#' at position 26: …PE = '.cont.'; #̲ Sphinx4, Pocke…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并确保设置以下配置:

D E C C F G D I C T I O N A R Y = " DEC_CFG_DICTIONARY = " DECCFGDICTIONARY="CFG_BASE_DIR/etc/$CFG_DB_NAME.dic";
D E C C F G F I L L E R D I C T = " DEC_CFG_FILLERDICT = " DECCFGFILLERDICT="CFG_BASE_DIR/etc/$CFG_DB_NAME.filler";
D E C C F G L I S T O F F I L E S = " DEC_CFG_LISTOFFILES = " DECCFGLISTOFFILES="CFG_BASE_DIR/etc/${CFG_DB_NAME}_test.fileids";
D E C C F G T R A N S C R I P T F I L E = " DEC_CFG_TRANSCRIPTFILE = " DECCFGTRANSCRIPTFILE="CFG_BASE_DIR/etc/${CFG_DB_NAME}_test.transcription";
D E C C F G R E S U L T D I R = " DEC_CFG_RESULT_DIR = " DECCFGRESULTDIR="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.

D E C C F G L A N G U A G E M O D E L = " DEC_CFG_LANGUAGEMODEL = " DECCFGLANGUAGEMODEL="CFG_BASE_DIR/etc/ C F G D B N A M E . l m . D M P " ; 如 果 您 正 在 使 用 a n 4 进 行 培 训 , 请 确 保 您 已 将 {CFG_DB_NAME}.lm.DMP"; 如果您正在使用an4进行培训,请确保您已将 CFGDBNAME.lm.DMP";使an4 {CFG_DB_NAME} .lm.DMP更改 为an4.ug.lm.DMP,因为在a4数据库中语言模型的名称不同:

D E C C F G L A N G U A G E M O D E L = " DEC_CFG_LANGUAGEMODEL = " DECCFGLANGUAGEMODEL="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文件中,您可以在浏览器中打开和读取该 文件。

有许多运作良好,经过验证的方法可以解决问题。例如,尝试减少训练集以查看出现问题的一半。

以下是一些常见问题:

警告:此电话(某物)出现在字典(字典文件名)中,但不出现在电话列表(电话文件名)中。

您的字典中包含错误,或者您在电话文件中遗漏了电话符号。您可能必须从字典文件中删除任何注释行。

警告:此单词(单词)在(词典文件名)中有重复的条目。检查重复项。

您可能必须对字典文件行进行排序才能找到它们。也许一个词以大写和小写形式定义。

警告:这个词:单词在成绩单文件中,但不在词典中(成绩单行)是否匹配?

确保成绩单中的所有单词都在字典中,并且在出现时它们具有匹配的大小写。此外,抄本中的单词可能拼写错误,一起运行或者是不在字典中的数字或符号。如果字典文件没有完美排序,则在查找单词时可能会跳过某些条目。如果您手动编辑了字典文件,请确保每个条目的格式正确。

您可能已在电话列表中指定了未在成绩单中的单词中表示的电话。培训师希望至少找一次每部手机的示例。

警告:CTL文件,音频文件name.mfc不存在或为空。

的.mfc文件是在阶段从输入音频文件转换的特征文件000.comp_feats。你跳过这一步吗?您是否添加了新的音频文件而未进行转换?培训过程需要一个特征文件,但事实并非如此。

识别准确度非常低

如果音频文件和训练参数不匹配,或者在训练和测试之间存在不匹配,则可能会发生这种情况。

错误:“backward.c”,第430行:无法将音频与转录本对齐:未达到搜索的最终状态。

有时,数据库中的音频与正确的转录不匹配。例如,转录文件具有“Hello world”行,但在音频中实际上“Hello hello world”发音。培训过程通常会在日志中检测到并发出此消息。如果有太多此类错误,则很可能意味着您错误配置了某些内容,例如您在转录重新排序时导致音频与文本不匹配。如果错误很少,您可以忽略它们。您可能希望编辑转录文件以输入发音的确切单词。在上面的例子中,你需要编辑转录文件并在相应的行上放置“Hello hello world”。您可能希望过滤此类提示,因为它们会影响声学模型的质量。在这种情况下,您需要在训练期间启用强制对齐阶段。为此,请编辑以下行sphinx_train.cfg:

$CFG_FORCEDALIGN = ‘yes’;
再次进行训练。它将执行第10和第11阶段,并将过滤您的数据库。

无法打开* / * - 1-1.match word_align.pl失败,错误代码为65280

发生此错误是因为解码器在训​​练后未正常运行。首先检查您的可执行文件是否正确PATH。pocketsphinx_batch如果正在使用的解码脚本是psdecode.pl由$DEC_CFG_SCRIPT变量in 设置的,则可执行文件应该是sphinx_train.cfg。在Linux上运行:

which pocketsphinx_batch
并查看它是否按预期定位。如果不是,则需要PATH 正确设置变量。同样在Windows上运行:

where pocketsphinx_batch
如果正确设置了解码可执行文件的路径,请读取日志文件 logdir/decode/以找出错误的其他原因。

寻求帮助

如果您想要求有关培训的帮助,请尝试提供培训文件夹或至少提供logdir。将文件打包到存档中并将其上载到公共文件共享资源。然后将链接发布到资源。请记住:您提供的信息越多,解决问题的速度就越快。

调整现有的声学模型
调整性能

联系我们
论坛
邮件列表
问题跟踪器
电报
链接
AlphaCephei
LinkedIn
饲料
帖子
由John Otander精心制作的Pixyll主题可在GitHub上获得。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本文档介绍Sphinx4在Windows下的中文训练过程及注意事项,与本文档配套的是我自己的训练实例bergtrain和用到的软件。 本文档编写日期 2013-04-23 1、为什么要训练sphinx4目前的版本中仅提供了英文等语音识别库。中文的库是PTM或semi类型的,在java版sphinx中无法使用。 2、Sphinx训练指哪些内容? 在Sphinx中有语言模型声学模型等概念,如果你不想了解这些,请参考以下内容: a1、中文每个字的标准发音已经有一个较为全面的文件进行了标注 这个文件就是zh_broadcastnews_utf8.dic(下称这类文件为发音字典),在sphinx网站上可以下载,我们也包含了它。 下面是该文件的片断,它用类似拼音的方式标注了每个字或词的发音。 昌 ch ang 昌北 ch ang b ei 昌必 ch ang b i 昌都 ch ang d u 昌赫 ch ang h e a2、需要告诉sphinx我们经常使用的字、词是哪些,它们出现的频率如何 由于开放式语音识别尚难实现,所以sphinx实际上只能较好的处理相对小的语言集合。 因此,针对特定的领域,告诉sphinx该领域的词汇和各词出现的频率将极大提高识别率。 a3、需要告诉sphinx每个字、词的真正读音 发音字典告诉sphinx每个字的标准读音,但面对的说话人往往不会以标准读音来朗读。 因此sphinx需要学习说话人的“口音”。 如果训练时的读者发音比较标准,则sphinx能“举一反三”,识别其他不那么标准的读者的语音。 推荐的做法是训练一些典型的口音:标准男、女声,童音,最后再考虑特定用户的口音。 3、如何准备训练内容所需的原料? 需要准备两大内容:1)文本语料文件,2)语料录音文件。 文本语料文件给出2.a2中需要的内容,在bergtrain的etc文件下的berginput.txt文件就是一个预料文件。 它以行为单位,给出了150个中文句子。 语料录音文件是根据文本语料文件,朗读它的每行/句话,保存到每一个语音文件即可。 语料文件中的语句应该尽量选择领域相关的,在覆盖领域内名词的前提下,覆盖尽可能多的通用词汇。 4、训练环境及注意事项 本文的训练软硬件如下: 硬件:T60P笔记本,机器自带录音设备;操作系统为Win7 32位。 软件:Sphinx cmuclmtk-0.7-win32.zip pocketsphinx-0.8-win32.zip sphinxbase-0.8-win32.zip sphinxtrain-1.0.8-win32.zip sphinx4-1.0beta6-bin.zip,用于编写java版的识别软件所需的库 脚本执行软件 ActivePerl-5.16.3.1603-MSWin32-x86-296746.msi ActivePython-2.7.2.5-win32-x86.msi 录音和处理软件 audacity-win-2.0.3rc1.zip,可进行录音和声音文件处理(如降噪),免费软件 FairStars.zip,可进行批量录音(V3.5绿色版) 文本编辑软件UltraEdit,UltraEdit-32.rar绿色版 注意: 文件格式 语料文件必须使用UltraEdit进行编辑, 在编辑后,使用 文件-转换-ASCII转UTF-8(UNICODE编辑),指定文件中的中文使用utf8编码。 在保存前,设置格式如下: 换行符:UNIX终束符 - LF 指定文件中的回车/换行符为编码0A的换行符 格式:UTF-8 - 无BOM 每个文件的末尾必须有一个回车! 这个回车将在保存时被替换为编码0A的换行符,训练脚本需要这个符号来确认文件的结束。 录音文件 如果你不希望去编辑训练中的配置文件,则在使用FairStars录音时作如下设定: 进入菜单和对话框 选项-显示录音选项-编码-WMA, 设定:采样率(16000Hz)、通道(单声道)、比特率(16Kbps) 5、训练步骤 下面逐步从零开始进行训练 5.1 软件环境的安装 将本文档所在的文件夹解压或拷贝到d:\,即本文档路径是d:\sphinxtrain\Sphinx中文训练教程.txt 1)点击安装ActivePerl-5.16.3.1603-MSWin32-x86-296746.msi和ActivePython-2.7.2.5-win32-x86.msi; 2)解压Sphinx中除sphinx4-1.0beta6-bin.zip外的压缩文件到d:\sphinxtrain
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值