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

редактировать
Алгоритм поиска наиболее вероятной последовательности скрытых состояний

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

Алгоритм нашел универсальное применение при декодировании сверточных кодов , используемых как в CDMA, так и в GSM цифровой сотовой связи, dial-up модемы, спутниковая связь, связь в дальнем космосе и 802.11 беспроводные локальные сети. Сейчас он также широко используется в распознавании речи, синтезе речи, диаризации, выделении ключевых слов, компьютерной лингвистике и биоинформатика. Например, в преобразование речи в текст (распознавание речи) акустический сигнал обрабатывается как наблюдаемая последовательность событий, а строка текста считается «скрытой причиной» акустического сигнала.. Алгоритм Витерби находит наиболее вероятную строку текста с учетом акустического сигнала.

Содержание
  • 1 История
  • 2 Расширения
  • 3 Псевдокод
  • 4 Пример
  • 5 См. Также
  • 6 Ссылки
  • 7 Общие ссылки
  • 8 Реализации
  • 9 Внешние ссылки
История

Алгоритм Витерби назван в честь Эндрю Витерби, который предложил его в 1967 году в качестве алгоритма декодирования для сверточных кодов через зашумленные цифровые каналы связи.. Однако в его истории множество изобретений, по крайней мере, семь независимых открытий, включая открытия Витерби, Нидлмана и Вунша и Вагнера и Фишера.

" Путь Витерби »и« алгоритм Витерби »стали стандартными терминами для применения алгоритмов динамического программирования к задачам максимизации, связанным с вероятностями. Например, в статистическом анализе алгоритм динамического программирования может использоваться для обнаружения единственного наиболее вероятного контекстно-свободного вывода (синтаксического анализа) строки, который обычно называется «синтаксическим анализом Витерби». Другое приложение находится в слежении за целью, где вычисляется трек, который присваивает максимальную вероятность последовательности наблюдений.

Расширения

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

С помощью алгоритма, называемого итеративное декодирование Витерби, можно найти подпоследовательность наблюдения, которая лучше всего соответствует (в среднем) данной скрытой марковской модели. Этот алгоритм предложен Qi Wang et al. для работы с турбо-кодом. Итеративное декодирование Витерби работает, итеративно вызывая модифицированный алгоритм Витерби, переоценивая счет для наполнителя до сходимости.

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

Псевдокод

Этот алгоритм генерирует путь X = (x 1, x 2,…, x T) {\ displaystyle X = (x_ {1}, x_ {2}, \ ldots, x_ {T})}{\ displaystyle X = (x_ {1}, x_ {2}, \ ldots, x_ {T})} , которая представляет собой последовательность состояний xn ∈ S = {s 1, s 2,…, s K} {\ displaystyle x_ {n} \ в S = \ {s_ {1}, s_ {2}, \ dots, s_ {K} \}}{\ displaystyle x_ {n} \ в S = \ {s_ {1}, s_ {2}, \ dots, s_ {K} \}} , которые генерируют наблюдения Y = (y 1, y 2,…, y T) {\ displaystyle Y = (y_ {1}, y_ {2}, \ ldots, y_ {T})}{\ displaystyle Y = (y_ {1}, y_ {2}, \ ldots, y_ {T})} с yn ∈ O = {o 1, o 2,…, o N} {\ displaystyle y_ {n} \ in O = \ {o_ {1}, o_ {2}, \ dots, o_ {N} \}}{\ displaystyle y_ {n} \ in O = \ {o_ {1}, o_ {2}, \ dots, o_ {N} \}} , где N {\ displaystyle N}N - количество возможных наблюдений в пространстве наблюдения O {\ displaystyle O}O .

Две двумерные таблицы размером K × T {\ displaystyle K \ times T}{\ displaystyle K \ times T} составляются:

  • Каждый элемент T 1 [i, j] {\ displaystyle T_ {1} [i, j]}T_ {1} [i, j] of T 1 {\ displaystyle T_ {1}}T_ {1} сохраняет вероятность наиболее вероятного на данный момент пути X ^ = (x ^ 1, x ^ 2,…, x ^ j) {\ displaystyle { \ hat {X}} = ({\ hat { x}} _ {1}, {\ hat {x}} _ {2}, \ ldots, {\ hat {x}} _ {j})}{\ displaystyle {\ hat {X}} = ({\ hat {x} } _ {1}, {\ hat {x}} _ {2}, \ ldots, {\ hat {x}} _ {j})} с x ^ j = si {\ displaystyle {\ hat {x}} _ {j} = s_ {i}}{\ hat {x}} _ {j} = s_ {i} , который генерирует Y = (y 1, y 2,…, yj) {\ displaystyle Y = (y_ {1}, y_ {2}, \ ldots, y_ {j})}{\ displaystyle Y = (y_ {1}, y_ {2}, \ ldots, y_ {j})} .
  • Каждый элемент T 2 [i, j] {\ displaystyle T_ {2} [i, j]}T_ {2} [ i, j] из T 2 {\ displaystyle T_ {2}}T_ {2} хранит x ^ j - 1 {\ displaystyle {\ hat {x}} _ {j-1}}{\ hat {x}} _ {j-1} наиболее вероятного пути на данный момент X ^ = (x ^ 1, x ^ 2,…, x ^ j - 1, x ^ j = si) {\ displaystyle {\ hat {X }} = ({\ hat {x}} _ {1}, {\ hat {x}} _ {2}, \ ldots, {\ hat {x}} _ {j-1}, {\ hat {x }} _ {j} = s_ {i})}{\ displaystyle {\ hat {X}} = ({ \ hat {x}} _ {1}, {\ hat {x}} _ {2}, \ ldots, {\ hat {x}} _ {j-1}, {\ hat {x}} _ {j } = s_ {i})} для ∀ j, 2 ≤ j ≤ T {\ displaystyle \ forall j, 2 \ leq j \ leq T}\ forall j, 2 \ leq j \ leq T

записи таблицы T 1 [i, j], T 2 [i, j] {\ displaystyle T_ {1} [i, j], T_ {2} [i, j]}T_ {1} [i, j], T_ {2} [i, j] являются заполняется в порядке возрастания К ⋅ j + i {\ displaystyle K \ cdot j + i}K \ cdot j + i :

T 1 [i, j] = max k (T 1 [k, j - 1] ⋅ A ki ⋅ B iyj) {\ displaystyle T_ {1} [i, j] = \ max _ {k} {(T_ {1} [k, j-1] \ cdot A_ {ki} \ cdot B_ {iy_ {j}}) }}T_ { 1} [i, j] = \ max _ {k} {(T_ {1} [k, j-1] \ cdot A_ {ki} \ cdot B_ {iy_ {j}})} ,
T 2 [i, j] = argmax k ⁡ (T 1 [k, j - 1] ⋅ A ki ⋅ B iyj) {\ displaystyle T_ {2} [i, j] = \ operatorname {argmax } _ {k} {(T_ {1} [k, j-1] \ cdot A_ {ki} \ cdot B_ {iy_ {j}})}}{\ displaystyle T_ {2} [i, j] = \ operatorname {argmax} _ {k} {(T_ {1} [k, j-1] \ cdot A_ {ki} \ cdot B_ {iy_ {j}})}} ,

с A ki {\ displaystyle A_ { ki}}{\ displaystyle A_ {ki}} и B iyj {\ displaystyle B_ {iy_ {j}}}B_ {iy_ {j}} , как определено ниже. Обратите внимание, что B iyj {\ displaystyle B_ {iy_ {j}}}B_ {iy_ {j}} не обязательно должно появляться в последнем выражении, поскольку оно неотрицательно и не зависит от k {\ displaystyle k }k и поэтому не влияет на argmax.

Ввод
  • O = {o 1, o 2,…, o N} {\ displaystyle O = \ {o_ {1}, o_ {2}, \ dots, o_ {N} \ }}O = \ {o_ {1}, o_ { 2}, \ точки, o_ {N} \} ,
  • пространство состояний S = {s 1, s 2,…, s K} {\ displaystyle S = \ {s_ {1}, s_ {2}, \ dots, s_ {K} \}}S = \ {s_ {1}, s_ {2}, \ dots, s_ {K} \} ,
  • массив начальных вероятностей Π = (π 1, π 2,…, π K) {\ displaystyle \ Pi = (\ pi _ {1}, \ pi _ {2}, \ dots, \ pi _ {K})}{\ displaystyle \ Pi = (\ pi _ {1}, \ pi _ {2}, \ точки, \ pi _ {K})} такие, что π i {\ displaystyle \ pi _ {i}}\ pi _ {i} хранит вероятность того, что x 1 = si {\ displaystyle x_ {1} = s_ {i}}{\ displaystyle x_ {1} = s_ {i}} ,
  • последовательность наблюдений Y = (y 1, y 2,…, y T) {\ displaystyle Y = (y_ { 1}, y_ {2}, \ ldots, y_ {T})}{\ displaystyle Y = (y_ {1}, y_ {2}, \ ldots, y_ {T})} такие, что yt = i {\ displaystyle y_ {t} = i}{\ displaystyle y_ {t} = i} , если наблюдение в момент времени t {\ displaystyle t}t равно oi {\ displaystyle o_ {i}}o_ {i} ,
  • матрица перехода A {\ displaystyle A}A размером K × K {\ displaystyle K \ times K}K \ times K таким образом, что A ij {\ displaystyle A_ {ij}}A_ {ij} хранит вероятность перехода из состояния si {\ displ aystyle s_ {i}}s_ {i} для состояния sj {\ displaystyle s_ {j}}s_ {j} ,
  • матрицы выбросов B {\ displaystyle B}B из размер K × N {\ displaystyle K \ times N}K \ раз N такой, что B ij {\ displaystyle B_ {ij}}B_ {ij} хранит вероятность наблюдения oj {\ displaystyle o_ {j}}o_ {j} из состояния si {\ displaystyle s_ {i}}s_ {i} .
Output
  • Наиболее вероятная последовательность скрытых состояний X = (x 1, x 2,…, x T) {\ displaystyle X = (x_ {1}, x_ {2}, \ ldots, x_ {T})}{\ displaystyle X = (x_ {1}, x_ {2}, \ ldots, x_ {T})}
функция VITERBI (O, S, Π, Y, A, B): X {\ displaystyle (O, S, \ Pi, Y, A, B): X}{\ displaystyle (O, S, \ Pi, Y, A, B): X} для каждого состояния i = 1, 2,…, К {\ displaystyle i = 1,2, \ ldots, K}{\ displaystyle i = 1,2, \ ldots, K} doT 1 [i, 1] ← π i ⋅ B iy 1 {\ displaystyle T_ {1} [i, 1] \ leftarrow \ pi _ { i} \ cdot B_ {iy_ {1}}}{\ displaystyle T_ {1} [i, 1] \ leftarrow \ pi _ {i} \ cdot B_ {iy_ {1}} } T 2 [i, 1] ← 0 {\ displaystyle T_ {2} [i, 1] \ leftarrow 0}{\ displaystyle T_ {2} [i, 1] \ leftarrow 0} конец для для каждого наблюдения j = 2, 3,…, T {\ displaystyle j = 2,3, \ ldots, T}{\ displaystyle j = 2,3, \ ldots, T} doдля каждого состояния i = 1, 2,…, К {\ Displaystyle я = 1,2, \ ldots, K}{\ displaystyle i = 1,2, \ ldots, K} doT 1 [я, j] ← макс К (T 1 [k, j - 1] ⋅ A ки ⋅ B iyj) {\ displaystyle T_ {1} [i, j] \ получает \ max _ {k} { (T_ {1} [k, j-1] \ cdot A_ {ki} \ cdot B_ {iy_ {j}})}}{\ Displaystyle T_ {1} [i, j] \ получает \ max _ {k} {(T_ {1} [k, j-1] \ cdot A_ {ki} \ cdot B_ {iy_ {j}})}} T 2 [i, j] ← arg ⁡ max k (T 1 [k, j - 1] ⋅ A ки ⋅ B iyj) {\ displaystyle T_ {2} [i, j] \ gets \ arg \ max _ {k} {(T_ {1} [k, j-1] \ cdot A_ {ki} \ cdot B_ {iy_ {j}})}}{\ displaystyle T_ {2} [i, j] \ gets \ arg \ max _ {k} {(T_ {1} [k, j-1] \ cdot A_ {ki} \ cdot B_ {iy_ {j}})}} конец для конец для z T ← arg ⁡ max k (T 1 [k, T]) {\ displaystyle z_ {T} \ gets \ arg \ max _ {k} {(T_ {1} [k, T])}}z_ {T} \ gets \ arg \ max _ {k} {(T_ {1} [k, T])} x T ← sz T {\ displaystyle x_ {T} \ leftarrow s_ { z_ {T}}}{\ displaystyle x_ {T} \ leftarrow s_ {z_ {T}}} дляj = T, T - 1,…, 2 {\ displaystyle j = T, T-1, \ ldots, 2}{\ displaystyle j = T, T-1, \ ldots, 2} dozj - 1 ← T 2 [zj, j] {\ displaystyle z_ {j-1} \ leftarrow T_ {2} [z_ {j}, j]}{\ displaystyle z_ {j-1} \ leftarrow T_ {2} [z_ {j}, j]} xj - 1 ← szj - 1 {\ displaystyle x_ {j-1} \ leftarrow s_ {z_ {j-1}}}{\ displaystyle x_ {j-1} \ leftarrow s_ {z_ {j-1}}} конец для return X {\ displaystyle X}X end function
Объяснение

Предположим, мы заданы скрытая марковская модель (HMM) с пространством состояний S {\ displaystyle S}S , начальные вероятности π i {\ displaystyle \ pi _ {i} }\ pi _ {i} нахождения в состоянии i {\ displaystyle i}i и вероятности перехода ai, j {\ displaystyle a_ {i, j}}a_ {i, j} перехода из состояние i {\ displaystyle i}i в состояние j {\ displaystyle j}j . Скажем, мы наблюдаем выходы y 1,…, y T {\ displaystyle y_ {1}, \ dots, y_ {T}}y_ {1}, \ dots, y_ {T} . Наиболее вероятная последовательность состояний x 1,…, x T {\ displaystyle x_ {1}, \ dots, x_ {T}}x_ {1}, \ dots, x_ {T} , которая производит наблюдения, задается рекуррентными отношениями

V 1, k = P (y 1 | k) ⋅ π k, V t, k = max x ∈ S (P (yt | k) ⋅ ax, k ⋅ V t - 1, x). {\ displaystyle {\ begin {align} V_ {1, k} = \ mathrm {P} {\ big (} y_ {1} \ | \ k {\ big)} \ cdot \ pi _ {k}, \ \ V_ {t, k} = \ max _ {x \ in S} \ left (\ mathrm {P} {\ big (} y_ {t} \ | \ k {\ big)} \ cdot a_ {x, k} \ cdot V_ {t-1, x} \ right). \ end {align}}}{\ displaystyle {\ begin {align} V_ {1, k} = \ mathrm {P} {\ big (} y_ {1} \ | \ k {\ big)} \ cdot \ pi _ {k}, \\ V_ {t, k} = \ макс _ {х \ я n S} \ left (\ mathrm {P} {\ big (} y_ {t} \ | \ k {\ big)} \ cdot a_ {x, k} \ cdot V_ {t-1, x} \ right). \ end {align}}}

Здесь V t, k {\ displaystyle V_ {t, k}}V_ {t, k} - вероятность наиболее вероятной последовательности состояний P (x 1,…, xt, y 1,…, yt) {\ displaystyle \ mathrm {P} {\ big (} x_ {1}, \ dots, x_ {t}, y_ {1}, \ dots, y_ {t} {\ big)}}{\ displaystyle \ mathrm {P} {\ big (} x_ {1}, \ dots, x_ {t}, y_ {1}, \ dots, y_ {t} {\ big)}} отвечает за первые t {\ displaystyle t}t наблюдения, которые k {\ displaystyle k}k в качестве его конечного состояния. Путь Витерби можно получить, сохранив обратные указатели, которые запоминают, какое состояние x {\ displaystyle x}x использовалось во втором уравнении. Пусть P tr (k, t) {\ displaystyle \ mathrm {Ptr} (k, t)}\ mathrm {Ptr} (k, t) будет функцией, которая возвращает значение x {\ displaystyle x}x используется для вычисления V t, k {\ displaystyle V_ {t, k}}V_ {t, k} if t>1 {\ displaystyle t>1}t>1 или k {\ displaystyle k}k , если t = 1 {\ displaystyle t = 1}t = 1 . Тогда

x T = arg ⁡ max x ∈ S (VT, x), xt - 1 = P tr (xt, t). {\ Displaystyle {\ begin {align} x_ {T} = \ arg \ max _ {x \ in S} (V_ {T, x}), \\ x_ { t-1} = \ mathrm {Ptr} (x_ {t}, t). \ end {align}}}{\ displaystyle {\ begin {выровнено} x_ {T} = \ arg \ max _ {x \ in S} (V_ {T, x}), \\ x_ {t-1} = \ mathrm {Ptr} (x_ {t}, t). \ end {align}}}

Здесь мы используем стандартное определение arg max.

Сложность эта реализация имеет вид O (T × | S | 2) {\ displaystyle O (T \ times \ left | {S} \ right | ^ {2})}O (T \ times \ left | {S} \ right | ^ {2}) . Лучшая оценка существует, если максимум во внутреннем цикле вместо этого определяется путем итерации только тех состояний, которые напрямую связаны с текущее состояние (т.е. есть край от k {\ displaystyle k}k до j {\ displaystyle j}j ). Затем с помощью амортизированного анализа можно показать, что сложность O (T × (| S | + | E |)) {\ displaystyle O (T \ times (\ left | {S} \ right | + \ left | {E} \ right |))}{\ displaystyle O (T \ times (\ left | {S} \ right | + \ left | {E} \ right |))} , где E {\ displaystyle E}E - количество ребер в графе.

Пример

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

Врач считает, что состояние здоровья его пациентов действует как дискретная цепь Маркова. Есть два состояния: «Здоровое» и «Лихорадка», но врач не может наблюдать за ними напрямую; они скрыты от него. Каждый день есть определенная вероятность, что пациент скажет врачу, что он «нормальный», «холодный» или «головокружительный», в зависимости от состояния его здоровья.

Наблюдения (нормальное состояние, простуда, головокружение) вместе со скрытым состоянием (здоровье, лихорадка) образуют скрытую марковскую модель (HMM) и могут быть представлены следующим образом на языке программирования Python :

obs = ("нормальный", "холодный", "головокружительный") States = ("Здоровый", "Лихорадочный") start_p = {"Здоровый": 0,6, "Лихорадочный": 0,4} trans_p = {"Здоровый": { «Здоровый»: 0,7, «Лихорадка»: 0,3}, «Лихорадка»: {«Здоровый»: 0,4, «Лихорадка»: 0,6},} emit_p = {«Здоровый»: {«нормальный»: 0,5, «холодный»: 0,4, «головокружение»: 0,1}, «Лихорадка»: {«нормально»: 0,1, «простуда»: 0,3, «головокружение»: 0,6},}

В этом фрагменте кода start_pпредставляет мнение врача о том, в каком состоянии находится HMM при первом посещении пациента (все, что он знает, - это то, что пациент обычно здоров). Используемое здесь конкретное распределение вероятностей не является равновесным, которое (с учетом вероятностей перехода) составляет приблизительно {«Здоровый»: 0,57, «Лихорадка»: 0,43}. transition_pпредставляет изменение состояния работоспособности в базовой цепи Маркова. В этом примере вероятность того, что завтра у пациента поднимется температура, составляет всего 30%, если он здоров сегодня. Выброс_pпредставляет, насколько вероятно каждое возможное наблюдение, нормальное состояние, простуда или головокружение, с учетом их основного состояния, здоровья или лихорадки. Если пациент здоров, вероятность того, что он чувствует себя нормально, составляет 50%; если у него жар, то с вероятностью 60% он почувствует головокружение.

Графическое изображение данного HMM

Пациент посещает три дня подряд, и врач обнаруживает, что в первый день он чувствует себя нормально, на второй день ему холодно, на третий день у него кружится голова. У врача возникает вопрос: какова наиболее вероятная последовательность состояний здоровья пациента, которая могла бы объяснить эти наблюдения? На это отвечает алгоритм Витерби.

1 def viterbi (obs, states, start_p, trans_p, emit_p): 2 V = [{}] 3 для st in состояния: 4 V [0] [st] = {"prob": start_p [st] * emit_p [st] [obs [0]], "prev": None} 5 # Запускаем Витерби, когда t>0 6 для t в диапазоне (1, len (obs)): 7 V.append ({}) 8 для st в состояниях: 9 max_tr_prob = V [t - 1] [состояния [0]] ["проблема"] * trans_p [состояния [0]] [st] 10 prev_st_selected = состояния [0] 11 для prev_st в состояниях [1:] : 12 tr_prob = V [t - 1] [prev_st] ["prob"] * trans_p [prev_st] [st] 13, если tr_prob>max_tr_prob: 14 max_tr_prob = tr_prob 15 prev_st_selected = prev_st 16 17 max_prob = max_tr_prob * emit_p [st] [obs [t]] 18 V [t] [st] = {"prob": max_prob, "prev": prev_st_selected} 19 20 для строки в dptable (V): 21 print (line) 22 23 opt = 24 max_prob = 0.0 25 previous = None 26 # Получить наиболее вероятное состояние и его возврат 27 для st, data в V [-1].items (): 28 if data ["prob"]>max_prob: 29 max_prob = data ["prob"] 30 best_st = st 31 opt.append (best_st) 32 previous = best_st 33 34 # Следуйте по пути назад до первого наблюдения 35 для t in ra nge (len (V) - 2, -1, -1): 36 opt.insert (0, V [t + 1] [предыдущий] ["предыдущий"]) 37 предыдущий = V [t + 1] [предыдущий] ["prev"] 38 39 print ('Шаги состояний:' + ''.join (opt) + 'с наивысшей вероятностью% s'% max_prob) 40 41 def dptable (V): 42 # Распечатать таблицу шаги из словаря 43 дают "".join (("% 12d"% i) для i в диапазоне (len (V))) 44 для состояния в V [0]: 45 yield "%.7s:"% state + " ".join ("%. 7s "% ("% f "% v [state] [" prob "]) для v в V)

Функция viterbiпринимает следующие аргументы: obs- последовательность наблюдений, например ["нормально", "холодно", "кружится голова"]; состояния- набор скрытых состояний; start_p- вероятность начала; trans_p- вероятности перехода; и emit_p- вероятности выбросов. Для простоты кода мы предполагаем, что последовательность наблюдения obsне пуста и что trans_p [i] [j]и emit_p [i] [j]определено для всех состояний i, j.

В текущем примере алгоритм прямого / Витерби используется следующим образом:

viterbi (obs, состояния, start_p, trans_p, emit_p)

Результатом скрипта является

$ python viterbi_example.py 0 1 2 Здоров: 0,30000 0,08400 0,00588 Лихорадка: 0,04000 0,02700 0,01512 Шаги состояний - Здоровое Здоровое Лихорадка с наибольшей вероятностью 0,01512

Это показывает, что наблюдения ['нормальный', 'холодный', ' головокружение '], скорее всего, были вызваны состояниями [' Здоровый ',' Здоровый ',' Лихорадка ']. Другими словами, учитывая наблюдаемую активность, пациент, скорее всего, был здоров как в первый день, когда он чувствовал себя нормально, так и во второй день, когда ему стало холодно, а на третий день у него поднялась температура.

Работа алгоритма Витерби может быть визуализирована с помощью решетчатой ​​диаграммы. Путь Витерби, по сути, самый короткий путь через эту решетку.

См. Также
Ссылки
  1. ^Xavier Anguera et al., «Диаризация докладчика: обзор последних исследований ", получено 19. августа 2010 г., IEEE TASLP
  2. ^29 апреля 2005 г., Г. Дэвид Форни-младший: Алгоритм Витерби: личная история
  3. ^ Дэниэл Джурафски; Джеймс Х. Мартин. Обработка речи и языка. Pearson Education International. п. 246.
  4. ^Шмид, Гельмут (2004). Эффективный синтаксический анализ весьма неоднозначных контекстно-свободных грамматик с помощью битовых векторов (PDF). Proc. 20-я Международная конф. по компьютерной лингвистике (COLING). doi : 10.3115 / 1220355.1220379.
  5. ^Кляйн, Дэн; Мэннинг, Кристофер Д. (2003). Анализ A *: быстрый точный выбор синтаксического анализа Витерби (PDF). Proc. Конференция 2003 г. Североамериканского отделения Ассоциации компьютерной лингвистики по технологиям человеческого языка (NAACL). С. 40–47. doi : 10.3115 / 1073445.1073461.
  6. ^Stanke, M.; Keller, O.; Gunduz, I.; Hayes, A.; Waack, S.; Моргенштерн, Б. (2006). «АВГУСТ: Ab initio предсказание альтернативных транскриптов». Исследования нуклеиновых кислот. 34 (проблема с веб-сервером): W435 – W439. doi : 10.1093 / nar / gkl200. PMC 1538822. PMID 16845043.
  7. ^Quach, T.; Фарук, М. (1994). «Формирование трека максимального правдоподобия с помощью алгоритма Витерби». Труды 33-й конференции IEEE по решениям и контролю. 1 . С. 271–276. doi : 10.1109 / CDC.1994.410918. CS1 maint: несколько имен: список авторов (ссылка )
  8. ^Qi Wang; Lei Wei; Rodney A. Kennedy ( 2002). «Итеративное декодирование Витерби, формирование решетчатой ​​диаграммы и многоуровневая структура для высокоскоростной связи TCM с контролем четности». Транзакции IEEE по коммуникациям. 50 : 48–55. doi : 10.1109 / 26.975743.
  9. ^Быстрый декодер максимального правдоподобия для сверточных кодов (PDF). Конференция по автомобильным технологиям. Декабрь 2002 г., стр. 371–375. doi : 10.1109 / VETECF.2002.1040367.
  10. ^Xing E, слайд 11.
Общие ссылки
  • Viterbi AJ (апрель 1967 г.). «Границы ошибок для сверточных кодов и асимптотически оптимальный алгоритм декодирования». Транзакции IEEE on Теория информации. 13 (2): 260–269. doi : 10.1109 / TIT.1967.1054010.(примечание: алгоритм декодирования Витерби описан в разделе IV.) Требуется подписка.
  • Feldman J, Abou-Faycal I, Frigo M (2002). Быстрый декодер максимального правдоподобия f или сверточные коды. Конференция по автомобильной технике. 1 . С. 371–375. CiteSeerX 10.1.1.114.1314. doi : 10.1109 / VETECF.2002.1040367. ISBN 978-0-7803-7467-6.
  • Форни Г.Д. (март 1973 г.). «Алгоритм Витерби». Труды IEEE. 61 (3): 268–278. doi : 10.1109 / PROC.1973.9030.Требуется подписка.
  • Нажмите, WH; Теукольский С.А.; Феттерлинг, штат Вашингтон; Фланнери, ВР (2007). «Раздел 16.2. Декодирование Витерби». Числовые рецепты: искусство научных вычислений (3-е изд.). Нью-Йорк: Издательство Кембриджского университета. ISBN 978-0-521-88068-8.
  • Рабинер Л.Р. (февраль 1989 г.). «Учебник по скрытым марковским моделям и избранным приложениям в распознавании речи». Труды IEEE. 77 (2): 257–286. CiteSeerX 10.1.1.381.3454. doi : 10.1109 / 5.18626.(Описывает прямой алгоритм и алгоритм Витерби для HMM).
  • Шингал Р. и Годфрид Т. Туссен, «Эксперименты по распознаванию текста с помощью модифицированного алгоритма Витерби», IEEE Transactions on Pattern Analysis and Machine Intelligence, Vol. PAMI-1, апрель 1979 г., стр. 184–193.
  • Шингал Р. и Годфрид Т. Туссен, «Чувствительность модифицированного алгоритма Витерби к исходной статистике», IEEE Транзакции по анализу шаблонов и машинному интеллекту, т. PAMI-2, март 1980, стр. 181–185.
Реализации
Внешние ссылки
Последняя правка сделана 2021-06-18 04:10:58
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте