- •Краткие теоретические сведения
- •Частотно-временное представление речевого сигнала с помощью Фурье и вейвлет-преобразований
- •Методы представления речевого сигнала на основе кепстрального анализа и кодирования с линейным предсказанием
- •Методы формирования наборов признаков для распознавания речевых единиц
- •Содержание отчета
- •Лабораторная робота №2
- •Порядок выполнения работы
- •Оформить отчет по лабораторной работе. Краткие теоретические сведения
- •Содержание отчета
- •Лабораторная робота №3
- •Порядок выполнения работы
- •Оформить отчет по лабораторной работе. Краткие теоретические сведения Гауссовы смешанные модели (gmm)
- •Нейросетовой подход для решения задачи распознавания речи
- •Содержание отчета
- •Лабораторная робота №4
- •Порядок выполнения работы
- •Оформить отчет по лабораторной работе. Краткие теоретические сведения
- •Содержание отчета
Содержание отчета
Отчет должен содержать:
Постановку задачи.
Оценки эффективности работы классификаторов (% правильно распознанных фонем по каждому набору признаков распознавания) в виде таблицы:
% распознавания |
Номера наборов признаков согласно табл. 1.2 |
||||||||||||
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
|
р1 – GMM |
|
|
|
|
|
|
|
|
|
|
|
|
|
р2 – ИНС с функцией активации (3.1) |
|
|
|
|
|
|
|
|
|
|
|
|
|
р2 – ИНС с функцией активации (3.2) |
|
|
|
|
|
|
|
|
|
|
|
|
|
Скриншоты, иллюстрирующие работу программы.
Выводы. В выводах необходимо оценить эффективность работы классификатор в целом, а также указать наиболее информативный набор признаков для каждого классификатора.
Листинг программы.
Приложение к отчету – файл с базами данных, содержащими обучающую выборку и результаты обучения классификаторов.
Лабораторная робота №4
Тема: разработка системы распознавания речевых команд на основе DTW-алгоритма.
Цель: научиться строить распознаватель речевых команд методами динамического программирования, приобрести практические навыки использования алгоритма DTW для распознавания речевых команд малого словаря.
Порядок выполнения работы
Дополнить программу, созданную в ходе выполнения предыдущих лабораторных работ, инструментарием, реализующим алгоритм DTW.
Разработать инструментарий для создания/редактирования БД эталонов команд.
Создать обучающую выборку – БД, содержащую эталоны 10 команд по трем наборам признаков: 3, 4, 6 из таблицы 1.2. Количество эталонов каждой команды произвольно.
Протестировать и отладить работу DTW-алгоритма на обучающей выборке по трем наборам признаков.
Проверить эффективность алгоритма на контрольных данных, содержащих реализацию каждой команды не менее одного раза.
Оформить отчет по лабораторной работе. Краткие теоретические сведения
В системах распознавания речи, содержащих слова, распознавание требует сравнения между входным словом и различными словами в словаре. Эффективное решение проблемы лежит в динамических алгоритмах сравнения, целью которого является введение временных масштабов двух слов в оптимальное соответствие. Алгоритмы такого типа являются динамическими алгоритмами трансформации временной шкалы. В данной статье представлено два варианта реализации алгоритма предназначенные для распознавания отдельных слов.
Алгоритм динамического трансформирования времени (DTW) вычисляет оптимальную последовательность трансформации (деформации) времени между двумя временными рядами. Алгоритм вычисляет оба значения деформации между двумя рядами и расстоянием между ними.
Предположим, что у нас есть две числовые последовательности (a1, a2, …, an) и (b1, b2, …, bm). Как видим, длина двух последовательностей может быть различной. Алгоритм начинается с расчета локальных отклонений между элементами двух последовательностей, использующих различные типы отклонений. Самый распространенный способ для вычисления отклонений является метод, рассчитывающий абсолютное отклонение между значениями двух элементов (Евклидово расстояние). В результате получаем матрицу отклонений, имеющую n строк и m столбцов общих членов:
dij=|ai-bj|, i=1,…, n, j=1,…, m
Минимальное расстояние в матрице между последовательностями определяется при помощи алгоритма динамического программирования и следующего критерия оптимизации:
aij=dij+min(ai-1,j-1, ai-1,j, ai,j-1),
где aij — минимальное расстояние между последовательностями (a1, a2, …, an) и (b1, b2, …, bm).
Путь деформации – это минимальное расстояние в матрице между элементами а11 и anm, состоящими из тех aij элементами, которые выражают расстояние до anm.
Глобальные деформации состоят из двух последовательностей и определяются по следующей формуле:
,
где: wi – элементы, которые принадлежать пути деформации; p – их количество.
Пример расчетов для двух коротких последовательностей сведен в таблицу, в которой выделена последовательность деформации.
Существует три условия, налагаемых на DTW алгоритм для обеспечения быстрой конвергенции:
1. Монотонность – путь никогда не возвращается, то есть: оба индекса, i и j, которые используются в последовательности, никогда не уменьшаются.
2. Непрерывность – последовательность продвигается постепенно: за один шаг индексы, i и j, увеличиваются не более чем на 1.
3. Предельность – последовательность начинается в левом нижнем углу и заканчивается в правом верхнем.
Пример DTW-алгоритма на языке программирования Java:
public static void dtw(double a[],double b[],double dw[][], Stack<Double> w){
// a,b - the sequences, dw - the minimal distances matrix
// w - the warping path
int n=a.length,m=b.length;
double d[][]=new double[n][m]; // the euclidian distances matrix
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)d[i][j]=Math.abs(a[i]-b[j]);
// determinate of minimal distance
dw[0][0]=d[0][0];
for(int i=1;i<n;i++)dw[i][0]=d[i][0]+dw[i-1][0];
for(int j=1;j<m;j++)dw[0][j]=d[0][j]+dw[0][j-1];
for(int i=1;i<n;i++)
for(int j=1;j<m;j++)
if(dw[i-1][j-1]<=dw[i-1][j])
if(dw[i-1][j-1]<=dw[i][j-1])dw[i][j]=d[i][j]+dw[i-1][j-1];
else dw[i][j]=d[i][j]+dw[i][j-1];
else
if(dw[i-1][j]<=dw[i][j-1])dw[i][j]=d[i][j]+dw[i-1][j];
else dw[i][j]=d[i][j]+dw[i][j-1];
int i=n-1,j=m-1;
double element=dw[i][j];
// determinate of warping path
w.push(new Double(dw[i][j]));
do{
if(i>0&&j>0)
if(dw[i-1][j-1]<=dw[i-1][j])
if(dw[i-1][j-1]<=dw[i][j-1]){i--;j--;} else j--;
else
if(dw[i-1][j]<=dw[i][j-1])i--; else j--;
else if(i==0)j--; else i--;
w.push(new Double(dw[i][j]));
}
while(i!=0||j!=0);
}
