Оглавление.

Введение. Общие вопросы компьютерного распознавания и порождения речи.

1. Программирование звука в Windows.

2. Основы цифровой обработки звуковых сигналов.

3. Определение параметров речевого сигнала.

4. Алгоритмы распознавания.

5. Использование Microsoft Speech API 5.1 для синтеза и распознавания речи.

6. Использование Microsoft Speech API 4.0 для синтеза речи.

Ссылки.

Об авторе.

Компьютерное распознавание и порождение речи

Глава 4. Алгоритмы распознавания.

Назад В начало главы Дальше

Введение в нейронные сети

Имея значения существенных параметров речевого сигнала, мы можем приступить к распознаванию звуков. Под существенными параметрами я здесь полагаю такие характеристики звука, которые образуют множество, по которому можно с высокой вероятностью отличить один вид (класс) звука от другого или прийти к заключению о том, что два звука принадлежат одному виду (классу).

Человеческий слуховой аппарат при распознавании звука ориентируется на частотный домен звукового сигнала, при этом, как уже упоминалось ранее, для него практически не имеет значения фаза сигнала. Существенным является лишь абсолютные значения амплитуд частот сигналов, точнее некие соотношения и сочетания абсолютных значений частот. Для программной реализации мы выберем ранее упоминавшееся распределение энергии сигналов по группам смежных частот (суммарная энергия сигнала в диапазоне частот мы вычисляем как сумму квадратов амплитуд частот, входящих в диапазон).

Для того, чтобы распознать звук, необходимо иметь образцы значений всех существенных параметров каждого из звуков речи и оценить, относится ли к какому-нибудь из них наш звук, сравнивая значения его параметров со значениями параметров образцов.

Наиболее часто употребляются два подхода к классификации и распознаванию.

В первом некая функция служит мерой близости параметров. Такая функция называется метрикой.

Второй подход не использует вспомогательных функций, но моделирует процесс распознавания в биологических системах. Такой подход использует технологии так называемых нейронных сетей. Для программной реализации мы выберем именно этот, представляющийся более перспективным в настоящее время, подход.

Итак, проведем краткий экскурс в предмет компьютерных нейронных сетей. Нейронные сети – это аппаратные или программные средства, моделирующие работу человеческого мозга. Как и всякая модель, они являются приближением. Но даже несмотря на то, что в подобных средствах имитируются лишь отдельные стороны биологического прототипа, они уже сейчас позволяют добиться определенных успехов во многих областях, в частности связанных с классификацией и распознаванием образов.

Как известно, нервная система человека состоит из огромного числа элементов, называемых нейронами, соединяемыми между собой нитеобразными отростками-дендритами. Возбуждение или торможение (возбуждение со знаком минус) передается от нейрона к нейрону по дендритам, где те принимают сигналы в точках соединения, называемых синапсами. Принятые синапсом входные сигналы передаются к телу нейрона, где суммируются. Если уровень возбуждения превышает некоторую пороговую величину, возбуждение передается из тела нейрона в выходную точку, называемую аксоном, откуда по дендритам поступает в другие нейроны.

Именно указанные выше характеристики и стали существенными при создании искусственных нейронных сетей.

Основу нейронной сети составляют как правило однотипные элементы, имитирующие работу биологического нейрона, и называемые обычно так же. Каждый из нейронов в каждый момент времени находится, как и биологический нейрон, в некотором текущем состоянии. Он имеет группу однонаправленных входных связей-синапсов, идущих от входа в сеть или от других нейронов. Кроме того он имеет одну однонаправленную выходную связь-аксон.

Схематически нейрон можно представить так:

Синаптические связи характеризуются весами wi. Текущее состояние S нейрона равно взвешенной сумме входов:
n
S = Xiwi
i=1

В векторном виде это можно записать как S=XW, то есть вектор S есть произведение вектора входных значений X на матрицу весов W, где строки соответствуют слоям, а столбцы – нейронам внутри каждого слоя.

Функция S далее преобразуется активационной функцией F и дает выходной сигнал Y нейрона.

Y=F(S) Активационная функция должна обладать свойством резко возрастать на коротком интервале аргумента в окрестностях порогового значения T, принимать приблизительно одно значение до этого интервала и приблизительно одно (большее) значение – после этого интервала. Этим требованиям соответствует, например функция Y, равная 1 при S>T, и 0 при S<=T. Эта функция называется также функцией единичного скачка.

Но, к сожалению, опыт показал, что многие алгоритмы нейронных сетей плохо работают или не работают с линейными функциями. К тому же эта функция содержит разрыв в точке T.

Самой распространенной в нейронных сетях активационной функцией является сигмоид или логистическая функция, вычисляемая как

F(S)=1/(1+e-s)

На самом деле, в общем виде формула логистической функции выглядит так:

F(S)=1/(1+e-αs)

где α –некоторая константа. При уменьшении ? логистическая функции становится более пологой, при α=0 принимая вид горизонтальной линии Y=0.5. При увеличении ? сигмоид приближается по внешнему виду к функции единичного скачка.

Еще одним весьма полезным свойством логистической функции является ее дифференцируемость при любых S и простота вычисления ее производной:

F/(S)= αF(S)(1-F(S))

Простейшей моделью нейронной сети является однослойный персептрон. Однослойность означает, что входной сигнал входов (x1,x2,…xn) подается на одну группу нейронов, именуемых слоем нейронной сети, а выходные сигналы этих нейронов поступают сразу на выход сети. Для двуслойной сети выходные сигналы подавались бы не на выход сети, а на вторую группу-слой нейронов, а оттуда на вход. Понятно, что трехслойный нейрон имеет уже три группы-слоя, N-слойный – N групп-слоев и т.д. (см.рисунок ниже).

Можно считать, что на вход первого слоя подаются сигналы со всех входов сети, просто веса некоторых синапсов равны нулю. Аналогично можно считать, что на входы всех слоев кроме первого подаются сигналы с выходов всех нейронов предыдущего слоя.

Но вернемся к однослойному персептрону. Он обнаружил ряд положительных свойств, которые и заставили многих ученых обратить свой взор на исследование нейронных сетей. Главными из обнаруженных свойств персептрона была способность к обучению и распознаванию. То есть оказалось возможным в ряде случаев установить то, как можно настроить веса синапсов персептрона, чтобы при различных комбинациях значений входов получать заранее установленные, “правильные” значения выходов. То есть однослойный персептрон оказался способным воспроизводить некоторые математические функции.

Однако эйфория по поводу этих открытий оказалась недолгой: были обнаружены

существенные ограничения в способностях однослойного персептрона к обучению и распознаванию.

Во-первых было доказана его неспособность воспроизводить некоторые простые функции, например ИСКЛЮЧАЮЩЕЕ ИЛИ.

Если Tj – пороговое значение j-го выхода, то однослойный персептрон описывается уравнениями:

n
Tj = xiw1,j,i
i=1

где n – число нейронов в слое. В n-мерном пространстве эти функции оказываются прямыми. Точки n-мерного пространства входов для значений дающих разные значения (0 или 1) выхода (то есть F>Tj или F<=Tj) должны лежать по разные стороны от таких прямых. Но для многих функций (например ИСКЛЮЧАЮЩЕЕ ИЛИ) это невыполнимо.

Все было бы очень грустно, если бы не существовало многослойных нейронных сетей. Уже при количестве слоев равном двум сеть описывается уравнениями:

nn
Tj = (xiw1,j,i)w2,j,i
i=1i=1

Теперь включая достаточное число нейронов во входной слой можно получить выпуклый многоугольник любой формы. Трехслойная же сеть есть еще более общий случай. В ней ограничения на выпуклость отсутствуют: нейрон третьего слоя принимает на вход выпуклые многоугольники, комбинация которых может быть уже невыпуклой.

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

Если в сети только один слой, процесс ее обучения довольно очевиден. Рассмотрим, например, алгоритм Кохонена.

1. Весовые коэффициенты wij, определяющие i-й вход j-го нейрона, устанавливаются в некоторые малые значения. Устанавливаются входы Xi .

2. Вычисляются значения вспомогательного вектора Rj для каждого входа по формуле:

n
Rj = (Xi-w1,j,i)2
i=1

где n – число нейронов в сети.

3. Определяется m, такое что

Rm= minRj
j

4. Пересчитать все wij для нейрона с номером m по формуле wim= wim + M(Xi-wij),

где 0.5<=M<=1.

5. Если решение не было достигнуто, переходим к шагу 2.

Существуют и другие алгоритмы для однослойной сети.


Распознавание речи. Обработка текстов на естественном языке.
Hosted by uCoz