Viterbi algorithm

This is an old revision of this page, as edited by Ansible (talk | contribs) at 18:36, 16 March 2004 (revert a minor mistate). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

The Viterbi algorithm, named after its developer Andrew Viterbi, is a way to find the most likely sequence of hidden states (or causes) that result in a sequence of observed events. It was originally conceived as an error-correction scheme for noisy digital communication links, finding universal application in decoding the convolutional codes used in CDMA and GSM digital cellular, dial modems, satellite and deep-space communications, and 802.11 wireless LANs. It is now also commonly used in information theory, speech recognition and computational linguistics. For example, in speech-to-text speech recognition, the acoustic signal is treated as the observed sequence of events, and a string of text is considered to be the "hidden cause" of the acoustic signal. The Viterbi algorithm finds this hidden cause if it is given the acoustic signal.

The algorithm is not general; it makes a number of assumptions. First, both the observed events and hidden events must be in a sequence. This sequence often corresponds to time. Second, these two sequences need to be aligned, and an observed event needs to correspond to exactly one hidden event. Third, computing the most likely hidden sequence up to a certain point t must only depend on the observed event at point t, and the most likely sequence at point t-1.

More technically, the Viterbi algorithm is a dynamic programming algorithm to find the hidden sequence of observations given an observed sequence of observations in a hidden Markov model. The resulting path is called the Viterbi path.

Recently, the terms "Viterbi path" and "Viterbi algorithm" have been applied to related dynamic programming algorithms, such as parsing, as well.