Алгоритм Витерби — различия между версиями
Строка 34: | Строка 34: | ||
function viterbi <tex>(O,S,\pi\,\!,Y,A,B)</tex> | function viterbi <tex>(O,S,\pi\,\!,Y,A,B)</tex> | ||
for <tex>i=1..K</tex> | for <tex>i=1..K</tex> | ||
− | <tex>T_1[i,1]\longleftarrow\pi[i]\,\cdot B[i, | + | <tex>T_1[i,1]\longleftarrow\pi[i]\,\cdot B[i,Y[i]]</tex> |
<tex>T_2[i,1]\longleftarrow0</tex> | <tex>T_2[i,1]\longleftarrow0</tex> | ||
for <tex>i=2 .. T</tex> | for <tex>i=2 .. T</tex> | ||
for <tex>j=1..K</tex> | for <tex>j=1..K</tex> | ||
− | <tex>T_1[j,i]\longleftarrow \max_{1 \leqslant k\leqslant K} \limits {(T_1[k,i-1]\cdot A[k,j]\cdot B[j, | + | <tex>T_1[j,i]\longleftarrow \max_{1 \leqslant k\leqslant K} \limits {(T_1[k,i-1]\cdot A[k,j]\cdot B[j,Y[i]])}</tex> |
− | <tex>T_2[j,i]\longleftarrow\arg\max_{1 \leqslant k\leqslant K} \limits {(T_1[k,i-1]\cdot A[k,j]\cdot B[j, | + | <tex>T_2[j,i]\longleftarrow\arg\max_{1 \leqslant k\leqslant K} \limits {(T_1[k,i-1]\cdot A[k,j]\cdot B[j,Y[i]])}</tex> |
//функция arg max() ищет максимум выражения в скобках, возвращает аргумент (в нашем случае <tex>k</tex>), при котором достигается этот максимум. | //функция arg max() ищет максимум выражения в скобках, возвращает аргумент (в нашем случае <tex>k</tex>), при котором достигается этот максимум. | ||
<tex>X[T]\longleftarrow\arg\max_{1 \leqslant k\leqslant K} \limits {(T_1[k,T])}</tex> | <tex>X[T]\longleftarrow\arg\max_{1 \leqslant k\leqslant K} \limits {(T_1[k,T])}</tex> |
Версия 03:31, 14 января 2013
Содержание
История
Алгоритм Витерби был представлен в 1967 году для декодирования сверточных кодов, поступающих через зашумленный канал связи. В 1969 году Омура (Omura) показал, что основу алгоритма Витерби составляет оценка максимума правдоподобия.
Применение
Алгоритм используется в CDMA и GSM цифровой связи, в модемах и космических коммуникациях. Он нашел применение в распознавании речи и письма, компьютерной лингвистике и биоинформатике, а также в алгоритме свёрточного декодирования Витерби.
Описание
Алгоритм Витерби позволяет сделать наилучшее предположение о последовательности состояний скрытой модели на основе последовательности наблюдений. Эта последовательность состояний называется путем Витерби.
Определение: |
Путь Витерби — наиболее правдоподобная последовательность скрытых состояний. |
Пусть задано пространство наблюдений , пространство состояний , последовательность наблюдений , матрица переходов из -того состояния в -ое, размером , матрица эмиссии В размера , которая определяет вероятность наблюдения из состояния , массив начальных вероятностей размером , показывающий вероятность того, что начальное состояние . Путь — последовательность состояний, которые привели к последовательности наблюдений .
Скрытая марковская модель.
Модель представляет из себя марковскую цепь, для которой нам известны начальная вероятность и матрица вероятностей переходов. Скрытой она называется потому, что мы не имеем информации о ее текущем состоянии. Мы получаем информацию на основе некоторого наблюдения, в рассмотренном ниже алгоритме мы будем использовать просто натуральное число от 1 до
, как индекс наблюдаемого события. Для каждого состояния скрытой марковской модели задан вектор вероятности эмиссии, который характеризует вероятность наблюдени каждого события, когда модель находится в этом состоянии. Совокупность таких векторов образует матрицу эмиссии.Пример скрытой марковской модели.
Рассмотрим пример скрытой марковской модели. У Деда Мороза есть три мешка с подарками в разноцветной упаковке: красной, синей, зеленой и фиолетовой. Ночью Дед Мороз пробирается в квартиру и тайком выкладывает подарки под елкой в ряд, доставая по одному подарку из мешка. Наутро мы обнаруживаем упорядоченную последовательность из пяти подарков и хотим сделать наилучшее предположение о последовательности мешков, из которых он доставал эти подарки. Дед Мороз с мешками — скрытая марковская модель. При этом 4 цвета - пространство из
наблюдений, 3 мешка — количество состояний , 5 подарков — наши наблюдений, каждое из которых представлено цифрой — номером цвета — от 1 до 5. Мы знаем, каковы вероятности того, что Дед Мороз начнет доставать подарки из мешка с номером – вектор . Мы также знаем матрицу переходов , какова вероятность того, что от мешка с номером Дед Мороз переходит к мешку с номером . Мешки Деда Мороза бесконечны, но мы точно знаем, каково соотношение цветов подарков в кажом мешке ему загрузили на заводе в Великом Устюге. Это матрица вероятностей эмиссии .Алгоритм
Создадим две матрицы
и размером . Каждый элемент содержит вероятность того, что на -ом шаге мы находимся в состоянии . Каждый элемент содержит индекс наиболее вероятного состояния на -ом шаге.Шаг 1. Заполним первый столбец матриц
на основании начального распределения, и нулями.Шаг 2. Последовательно заполняем следующие столбцы матриц
и , используя матрицы вероятностей эмиссий и переходов.Шаг 3. Рассматривая максимальные значения в столбцах матрицы
, начиная с последнего столбца, выдаем ответ.Псевдокод
//функция возвращает вектор- последовательность номеров наиболее вероятных состояний, которые привели к данным наблюдениям. function viterbi for for for //функция arg max() ищет максимум выражения в скобках, возвращает аргумент (в нашем случае ), при котором достигается этот максимум. for return
Таким образом, алгоритму требуется времени.