Открыть сервис

Алгоритм Витерби

Алгоритм Витерби — это алгоритм динамического программирования, использующийся для нахождения наиболее вероятной последовательности скрытых состояний в модели скрытой марковской модели (HMM), заданной последовательностью наблюдений. Алгоритм был разработан американским инженером-электриком Эндрю Витерби в 1967 году для декодирования свёрточных кодов в системах цифровой связи. В настоящее время применяется в распознавании речи, биоинформатике, обработке естественного языка, машинном переводе и других областях, где требуется восстановление скрытого процесса по зашумлённым данным.

История

Алгоритм был предложен Эндрю Витерби, сотрудником корпорации Linkabit, в 1967 году в статье «Error Bounds for Convolutional Codes and an Asymptotically Optimum Decoding Algorithm», опубликованной в журнале IEEE Transactions on Information Theory. Первоначально он предназначался для декодирования свёрточных кодов с максимальным правдоподобием в системах радиосвязи. В начале 1970-х годов алгоритм начали применять для решения задач распознавания речи и записи последовательностей ДНК. В 1978 году его впервые применили к скрытым марковским моделям для распознавания изолированных слов. С развитием вычислительной техники алгоритм Витерби стал базовым инструментом во многих областях машинного обучения и цифровой обработки сигналов.

Постановка задачи

Пусть задана скрытая марковская модель, определяемая:

Необходимо найти последовательность состояний \( Q^* = q_1, q_2, \dots, q_T \), которая максимизирует вероятность \( P(Q | O) \), то есть наиболее вероятную скрытую цепочку, породившую наблюдаемую последовательность.

Устройство и принцип работы

Алгоритм использует метод динамического программирования. Он строит решётку (треллис), где по оси времени отложены моменты \( t = 1, 2, \dots, T \), а по другой оси — возможные состояния. Для каждого момента времени и каждого состояния вычисляется два значения:

Рекурсивные соотношения

  1. Инициализация (t = 1):

\[ v_1(i) = \pi_i \cdot b_i(o_1), \quad \text{ptr}_1(i) = 0. \]

  1. Рекурсия (для t = 2, ..., T):

Для каждого состояния j: \[ v_t(j) = \max_{i} [ v_{t-1}(i) \cdot a_{ij} ] \cdot b_j(o_t), \text{ptr}_t(j) = \argmax_{i} [ v_{t-1}(i) \cdot a_{ij} ]. \]

  1. Завершение (нахождение финального состояния):

\[ q_T^* = \argmax_i v_T(i). \]

  1. Обратный проход (восстановление последовательности):

Для t = T-1, ..., 1: \[ q_t^ = \text{ptr}_{t+1}(q_{t+1}^). \]

В результате получается последовательность \( Q^ = q_1^, q_2^, \dots, q_T^ \), соответствующая максимальной вероятности.

Вычислительная сложность

В базовой реализации сложность алгоритма составляет \( O(T \cdot N^2) \), где T — длина последовательности, N — число состояний. При разреженных матрицах переходов (например, в лево-правых HMM) сложность может быть ниже. Память требуется \( O(T \cdot N) \) для хранения решётки и обратных указателей.

Применение

Декодирование свёрточных кодов

Эндрю Витерби разработал алгоритм для использования в декодерах свёрточных кодов — помехоустойчивых кодов, применяемых в спутниковой связи, мобильных сетях (например, GSM) и глубоком космосе. Декодер Витерби находит наиболее правдоподобную кодовую последовательность на основе принятых зашумлённых данных.

Распознавание речи

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

Обработка естественного языка

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

Биоинформатика

В анализе биологических последовательностей алгоритм Витерби используется для выравнивания последовательностей ДНК или белков по профилям HMM, поиска генов, предсказания вторичной структуры РНК и классификации семейств белков.

Голосовое управление и синтез речи

В современных голосовых помощниках (например, «Алиса» от Яндекса) алгоритм Витерби применяется на этапе акустического моделирования и распознавания команд. Он позволяет с вероятностной точки зрения выбрать наиболее подходящий вариант распознанного текста.

Другие области

Сравнение с другими методами

Алгоритм Витерби является разновидностью алгоритма максимального правдоподобия для HMM. В отличие от прямого перебора всех \( N^T \) возможных последовательностей (что практически нереализуемо при больших T), он даёт точное решение за полиномиальное время.

Алгоритм dynamic programming (DTW, динамическая трансформация временной шкалы) решает похожую задачу — выравнивание последовательностей — но без вероятностной модели. Алгоритм Витерби даёт более формальное вероятностное обоснование.

Существуют также приближённые методы, например, жадный поиск (beam search) — он сокращает пространство при помощи порогов вероятностей, но не гарантирует глобальный оптимум. Витерби даёт точное решение при условии правильности модели HMM.

Ограничения и критика

Связь с другими алгоритмами

Интересные факты

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →