Краткий учебный курс по HTK

Урок 2

{Создание системы пофонемного распознавания отдельно произносимых слов с записью на русском языке}

----------------------------------------------------------------------------------------------------

{Краткая инструкция пользователя(пошаговая) в HTK }

Шаг 8.

----------

Запустить файл trn.bat - обучение распознаванию (вычисление параметров моделей фонем)

{(файл trn.bat прилагается, смотри содержимое данного файла)} :

mkdir hmm1 - создание директория hmm1 (команда command.com MS-DOS)

HERest -T 3 -C config -t 250.0 150.0 1000.0 -I phones10.mlf -S train.scp -H hmm0/hmmdefs -M hmm1 monophones >hmm1/lst1.txt

...

где:

config - файл конфигурации {(прилагается)},

phones10.mlf - описание файлов обучения,

train.scp - список файлов для обучения (в уроке 2 аналогичен уроку 1),

hmm0/hmmdefs - файлы результатов обучения предыдущего шага,

hmm1 - директорий, куда будут записываться результаты первого шага обучения (не путать с шагами данной инструкции)

monophones - список фонем,

lst1.txt - листинг для просмотра процесса обучения(на первом шаге), записывается соответственно в директорий hmm1.

Обучение производится 7 раз (рекомендовано авторами, минимум два). На каждом шаге обучения используются результаты предыдущего шага.



Шаг 9.

---------

Запустить файл tst.bat - распознавание {(файл tst.bat прилагается, смотри содержимое данного файла)} :

HVite -o ST -T 1 -l '*' -C config -a -H hmm1/hmmdefs -i hmm1/recout1.mlf -p 0.0 -s 5.0 -S test.scp -w wdnet dict.trn monophones

...

HVite -o ST -T 1 -l '*' -C config -a -H hmm7/hmmdefs -i hmm7/recout7.mlf -p 0.0 -s 5.0 -S test.scp -w wdnet dict.trn monophones

где:

config - файл конфигурации {(прилагается)},

hmm1/hmmdefs - файлы результатов обучения одного шага {(конкретно, после первого шага обучения, ибо после hmm стоит цифра 1)},

recout1.mlf - результат распознавания, записывается в директорию hmm1,

test.scp - список файлов для распознавания,

wdnet - сеть допустимых слов и выражений (в данном случае дискретная речь),

dict.trn - словарь распознавания,

monophones - список фонем.

{Результат распознавания тестовой выборки слов после первого шага обучения распознаванию записывается в файл recout1.mlf (файл будет находиться в директории hmm1) в виде последовательности распознанных слов после записи названия файла, если файл распознавания один, или в виде отдельных распознанных слов после записей названий файлов, если файлов распознавания несколько (смотри указания на шаге 6). При этом паузы между словами распознаются как самостоятельные слова-паузы (смотри файл слов dict.trn). Результаты распознавания тестовой выборки слов после второго, третьего и т.д. шагов обучения распознаванию записываются в файлы recout2.mlf-recout7.mlf (файлы будут находиться соответственно в директориях hmm2-hmm7). Результаты обучения, взятые на любом шаге обучения и записанные в файле hmmdefs, могут быть использованы для дальнейшей работы по распознаванию слов. Конкретный выбор остается за пользователем, и зависеть этот выбор должен от результатов распознавания так, чтобы достигалась хорошая надежность распознавания (если не наилучшая).}



Шаг 10.

----------

Запустить файл res.bat - оценка результата распознавания (в процентах)

{(файл res.bat прилагается, смотри содержимое данного файла)} :

mkdir results

HResults -I words_test.mlf monophones hmm1/recout1.mlf > results/output1

HResults -I words_test.mlf monophones hmm2/recout2.mlf > results/output2

HResults -I words_test.mlf monophones hmm3/recout3.mlf > results/output3

HResults -I words_test.mlf monophones hmm4/recout4.mlf > results/output4

HResults -I words_test.mlf monophones hmm5/recout5.mlf > results/output5

HResults -I words_test.mlf monophones hmm6/recout6.mlf > results/output6

HResults -I words_test.mlf monophones hmm7/recout7.mlf > results/output7

где:

recout1.mlf - результат распознавания после первого шага обучения, записанный ранее соответственно в директорию hmm1,

output1 - результат анализа распознавания, записывается соответственно в директорию results,

monophones - список фонем,

words_test.mlf - файл тестовых слов.

Файл тестовых слов words_test.mlf нужно сформировать вручную. Сначала,после строки #!MLF!#, нужно записать название файла, в котором записаны слова на распознавание - "'*'/10.lab", потом - последовательность произнесенных слов в файле 10.wav:

#!MLF!#
"'*'/10.lab"
оди+н
два+
три+
четы+ре
пя+ть
ше+сть
се+мь
во+семь
де+вять
де+сять
.
Следует помнить, что данная запись в файле words_test.mlf соответствует последней строке

sil [] sil

в файле dict.trn. Если же в файле dict.trn последняя строка будет иметь вид:

sil sil

то файл words_test.mlf должен содержать расширенную запись, а именно:

#!MLF!#
"'*'/10.lab"
sil
оди+н
sil
два+
sil
три+
sil
четы+ре
sil
пя+ть
sil
ше+сть
sil
се+мь
sil
во+семь
sil
де+вять
sil
де+сять
sil
.
В качестве шаблона можно использовать файл words.ml, в котором записано:

#!MLF!#

"'*'/ValN2000.lab"
оди+н
.
"'*'/ValN2001.lab"
два+
.
"'*'/ValN2002.lab"
три+
.
"'*'/ValN2003.lab"
четы+ре
.
"'*'/ValN2004.lab"
пя+ть
.
"'*'/ValN2005.lab"
ше+сть
.
"'*'/ValN2006.lab"
се+мь
.
"'*'/ValN2007.lab"
во+семь
.
"'*'/ValN2008.lab"
де+вять
.
"'*'/ValN2009.lab"
де+сять
.

Всю эту запись необходимо поменять на

#!MLF!#

"'*'/10.lab"

оди+н
два+
три+
четы+ре
пя+ть
ше+сть
се+мь
во+семь
де+вять
де+сять
.

или поменять только части ValN2 в названиях файлов на W0 (смотри указания на шаге 6).

Результаты анализа распознавания для каждого шага обучения отображаются в файлах output1-output7.

Например, для случая, когда файл распознавания один - 10.wav, в файле output1 записано:

====================== HTK Results Analysis =======================

Date: Wed Mar 23 12:23:29 2011

Ref : words_test.mlf

Rec : hmm1/recout1.mlf

------------------------ Overall Results --------------------------

SENT: %Correct=0.00 [H=0, S=1, N=1]

WORD: %Corr=80.00, Acc=80.00 [H=8, D=0, S=2, I=0, N=10]

===================================================================

Для информации о результатах распознавания нужна, фактически, последняя строка, поскольку паузы sil в уроке 2 не учитываются.

Здесь %Corr=80.00 - процент правильно распознанных именно Ваших (подчеркиваю) слов, без пауз, представляет величину H/N ; N=10 - количество слов в предложении (сколько должно быть, а не сколько получилось); H=8 - количество правильно распознанных слов в предложении; D=0 - количество пропущенных слов при распознавании; S=2 - количество замен слов(неправильно распознано); I=0 - количество вставленных слов, которых нет в предложении.

Процент правильно распознанных предложений

SENT: %Correct=0.00 [H=0, S=1, N=1]

есть, в данном случае, ноль, ибо два слова были распознаны неправильно, а, следовательно, само предложение не засчитывается.

Для случая, когда каждое слово записано в отдельный файл - w0000.wav-w0009.wav, в файле output1 будет записано:

====================== HTK Results Analysis =======================

Date: Wed Mar 23 12:16:33 2011

Ref : words_test.mlf

Rec : hmm2/recout1.mlf

------------------------ Overall Results --------------------------

SENT: %Correct=80.00 [H=8, S=2, N=10]

WORD: %Corr=80.00, Acc=80.00 [H=8, D=0, S=2, I=0, N=10]

===================================================================

Здесь результаты двух последних строк совпадают, ибо в данном случае предложений будет столько, сколько слов.

Желаем дальнейших успехов в освоении HTK!

с уважением, авторы:

1. Зам. зав. отделом "Розпізнавання та синтезу звукових образів" МННЦ ІТіС НАНУ старший научный сотрудник Пилипенко Валерий Васильевич. Светлая голова.

2. Научный сотрудник того же отдела Юхименко Александр Анатольевич. Просветленная голова.