Алгоритм Витерби — различия между версиями
(→Псевдокод) |
Tindarid (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
== История == | == История == | ||
− | Алгоритм Витерби был представлен в 1967 году для декодирования сверточных кодов, поступающих через зашумленный канал связи. В 1969 году Омура (Omura) показал, что основу алгоритма Витерби составляет оценка максимума правдоподобия. | + | Алгоритм Витерби(англ. Viterbi algorithm) был представлен в 1967 году для декодирования сверточных кодов, поступающих через зашумленный канал связи. В 1969 году Омура (Omura) показал, что основу алгоритма Витерби составляет оценка максимума правдоподобия. |
== Описание == | == Описание == | ||
− | Алгоритм Витерби позволяет сделать наилучшее предположение о последовательности состояний [[Скрытые Марковские модели|скрытой Марковской модели]] на основе последовательности наблюдений. Эта последовательность состояний называется путем Витерби. | + | Алгоритм Витерби позволяет сделать наилучшее предположение о последовательности состояний [[Скрытые Марковские модели|скрытой Марковской модели]] на основе последовательности наблюдений. Эта последовательность состояний называется путем Витерби(англ. Viterbi path). |
{{Определение | {{Определение | ||
|id=def1. | |id=def1. | ||
Строка 43: | Строка 43: | ||
Алгоритм используется в CDMA и GSM цифровой связи, в модемах и космических коммуникациях. Он нашел применение в распознавании речи и письма, компьютерной лингвистике и биоинформатике, а также в алгоритме свёрточного декодирования Витерби. | Алгоритм используется в CDMA и GSM цифровой связи, в модемах и космических коммуникациях. Он нашел применение в распознавании речи и письма, компьютерной лингвистике и биоинформатике, а также в алгоритме свёрточного декодирования Витерби. | ||
− | == | + | == Источники информации == |
* [[wikipedia:Viterbi_algorithm|Wikipedia {{---}} Viterbi algorithm]] | * [[wikipedia:Viterbi_algorithm|Wikipedia {{---}} Viterbi algorithm]] | ||
* [http://www.cs.sfu.ca/~oschulte/teaching/726/spring11/slides/mychapter13b.pdf Презентация] | * [http://www.cs.sfu.ca/~oschulte/teaching/726/spring11/slides/mychapter13b.pdf Презентация] |
Версия 18:23, 30 марта 2018
История
Алгоритм Витерби(англ. Viterbi algorithm) был представлен в 1967 году для декодирования сверточных кодов, поступающих через зашумленный канал связи. В 1969 году Омура (Omura) показал, что основу алгоритма Витерби составляет оценка максимума правдоподобия.
Описание
Алгоритм Витерби позволяет сделать наилучшее предположение о последовательности состояний скрытой Марковской модели на основе последовательности наблюдений. Эта последовательность состояний называется путем Витерби(англ. Viterbi path).
Определение: |
Путь Витерби — наиболее правдоподобная последовательность скрытых состояний. |
Пусть задано пространство наблюдений , пространство состояний , последовательность наблюдений , матрица переходов из -того состояния в -ое, размером , матрица эмиссии размера , которая определяет вероятность наблюдения из состояния , массив начальных вероятностей размером , показывающий вероятность того, что начальное состояние . Путь — последовательность состояний, которые привели к последовательности наблюдений .
Алгоритм
Создадим две матрицы
и размером . Каждый элемент содержит вероятность того, что на -ом шаге мы находимся в состоянии . Каждый элемент содержит индекс наиболее вероятного состояния на -ом шаге.Шаг 1. Заполним первый столбец матриц
на основании начального распределения, и нулями.Шаг 2. Последовательно заполняем следующие столбцы матриц
и , используя матрицы вероятностей эмиссий и переходов.Шаг 3. Рассматривая максимальные значения в столбцах матрицы
, начиная с последнего столбца, выдаем ответ.Псевдокод
//функция возвращает вектор X — последовательность номеров наиболее вероятных состояний, которые привели к данным наблюдениям. viterbi(O, S,, Y, A, B): for i = 1..K TState[i, 1] = [i] * B[i, Y[1]] TIndex[i, 1] = 0 for i = 2..T for j = 1..K TState[j, i] = (TState[k, i - 1] * A[k, j] * B[j, Y[i]]) TIndex[j, i] = (TState[k, i - 1] * A[k, j] * B[j, Y[i]]) //функция arg max() ищет максимум выражения в скобках и возвращает аргумент (в нашем случае ), при котором достигается этот максимум. X[T] = (TState[k, T]) for i = T downto 2 X[i - 1] = TIndex[X[i], i] return X
Таким образом, алгоритму требуется
времени.Применение
Алгоритм используется в CDMA и GSM цифровой связи, в модемах и космических коммуникациях. Он нашел применение в распознавании речи и письма, компьютерной лингвистике и биоинформатике, а также в алгоритме свёрточного декодирования Витерби.