Branch Log · Open in interactive viewer →

4 Hidden Markov Model(1)

Hidden Markov Model은 sequence processing을 위한 확률 모델이다.

e.g., Sentimental analysis: 예를 들어, 리뷰 문장이 긍정적인지 부정적인지 판단하는 문제


4.1 Markov Models

Markov Modelfinal state machine이다. 예를 들어, A와 B state가 있으며 state의 transition이 존재한다.

예시 특정 state에서 시작할 확률 랜덤하게 state가 변화할 확률
markov model P(q0=A)=πA=0.3
P(q0=B)=πB=0.7
P(AB)=P(qt+1=Bqt=A)=0.3
P(AA)=P(qt+1=Aqt=A)=0.7
P(BA)=P(qt+1=Aqt=B)=0.4
P(BB)=P(qt+1=Bqt=B)=0.6

예를 들어, 다음 예시는 A, B, C state에서 계속 변화하면서 생성된 sequence이다.

sequences

다음 예시에서 AABBABAB 문장이 생성될 확률을 구해보자.

markov model example

πA×P(q2=A|q1=A)×P(q3=B|q2=A)× =0.3×0.7×0.3×0.6×0.4×0.3×0.4×0.3

앞서 확률 계산을 수식으로 일반화하면 다음과 같다.

p(q1qt1qt)=πq1tp(qi|qi1)

AABBABAB에서, 가장 높은 확률의 다음 상태는?: B(0.6)


4.1.1 Markov Models: Some Questions

반대로 특정 state로 시작할 확률을 몰라도, 이미 생성된 문자열을 토대로 추론할 수 있다.

markov model example 2

(1) 6개 문장 중에서, A로 시작한 문장은 2개, B로 시작한 문장은 4개이다.

πA=1/3,πB=2/3

(2) A에서 A로 간 개수, A에서 B로 간 개수를 센다.

p(qt=A|qt1=A)=3/9,p(qt=B|qt1=A)=6/9

e.g., ABBBABA: ABBBABA 두 번

(3) B에서 A로 간 개수, B에서 B로 간 개수를 센다.

p(qt=A|qt1=B)=9/12,p(qt=B|qt1=B)=4/12

4.2 Hidden Markov Models

Hidden Markov Model(HMM)은 기계의 state를 관찰할 수 없다는 가정으로 시작한다. 즉, 지금 기계가 A state인지 B state인지 알 수 없다.

대신, 출력을 관찰할 수 있다. 만약 기계가 소문자 a를 출력했다면 state는 무엇일까?

markov model example 3

이처럼 qt 라는 state는 관찰할 수 없으며, 대신 확률적으로 출력되는 a, b만을 관찰할 수 있다.

hidden markov model

앞서 예시에서 abababab를 출력할 확률을 구하면 다음과 같다. (상수를 계속 곱하면 된다.)

p(o1o2ot|q1q2qt)=tp(oi|qi)

반대로 출력이 주어졌을 때(given) 역시, state transition 확률을 추정할 수 있다.

p(q1q2qt|o1o2ot)=p(o1o2ot|q1q2qt)p(q1q2qt)p(o1o2ot)

4.2.1 Formal Definition

일반적으로 HMM은 세 가지 파라미터를 포함한 λ=(A,B,π) 식으로 정의한다.

State = {s1,s2,,sn} , output = {o1,o2,,om}


4.2.2 Three Basic Problems for HMM

HMM에서 주로 계산하는 세 가지 문제는 다음과 같다.


4.3 Problem 1

문제: 출력 문장 Oλ 가 주어졌을 때, λ 가 출력 문장을 생성할 확률 P(O|λ) ?

먼저 HMM 내부에서 state transition에 주목한다.

P(O|λ)=qP(O|Q,λ)P(Q|λ)

(1) 예를 들어 ababab가 출력 문장이라고 하면, state q1 에서 o1 (a) 가 나올 확률, q2 에서 o2 (b) 가 나올 확률, ... 을 곱하면 된다.

P(O|Q,λ)=t=1TP(ot|qt,λ) =bq1(o1)bqr(or)

(2) state가 q1 에서 q2 로 transition할 확률, q2 에서 q3 로 transition할 확률, ... 을 곱하면 된다.

P(Q|λ)=πq1aq1q2aq2q3aqT1qT

앞서 두 계산을 합치면 다음 수식으로 정리할 수 있다.

P(O|λ)=q1qrπq1bq1(o1)aq1q2bq2(o2)aqT1qTbqT(oT)

그러나, q 의 개수에 주의해야 한다. 가능한 state transition 개수 N 이 얼마나 큰가에 따라, 연산이 지수적으로 증가한다.

예를 들어, 문장 길이가 10이며 가능한 state가 A, B로 2라면, 2^10 = 1024개 항을 모두 더해야 한다.


4.3.1 Forward Procedure

Dynamic Programming으로 확률을 구해가는 과정이 필요하다.

앞서 ababab를 출력했고 state는 A, B를 가졌다.

problem 1

먼저, 마지막 b를 출력한 state가 A라고 가정하고, 해당 가정의 확률을 구해보자.

이후 B인 경우의 확률도 구해서 더하면 된다.

p(ababab,q6=A|λ)=p(ababab,q5=A,q6=A|λ)+p(ababab,q5=B,q6=A|λ)

각 항을 변환하면 다음과 같다.

p(ababab,q5=A,q6=A|λ)=p(ababa,q5=A|λ)·p(q6=A|q5=A,λ)p(b|A,λ) p(ababab,q5=B,q6=A|λ)=p(ababa,q5=B|λ)·p(q6=A|q5=B,λ)p(b|A,λ) p(ababab,q5=A,q6=A|λ)=α5(A)aAAbA(b) p(ababab,q5=B,q6=A|λ)=α5(B)aBAbA(b)

전체 식을 정리하면 다음과 같다.

α6(A)=(α5(A)aAA+α5(B)aBA)bA(b)

요약하자면, q6=A 일 때 ababab 확률과 q6=B 일 때 ababab 확률을 더해주면 된다.

p(ababab|λ)=α6(A)+α6(B)

일반화한 수식은 다음과 같다.

p(O|λ)=i=1NαT(i)

forward variable

αt(i)=P(o1ot,qt=Si|λ)

(1) Initialization

αt(i)=πibi(o1)

(2) Induction

αt+1(j)=[i=1Nαt(i)aij]bj(ot+1)

(3) Termination

P(O|λ)=i=1NαT(i)


4.3.2 Backward Procedure

βt(i)=P(ot+1oT|qt=Si,λ)

3단계 절차는 다음과 같다.

(1) Initialization

βT(i)=1

(2) Induction

βt(i)=j=1Nαijbj(ot+1)βt+1(j)

(3) Termination

P(O|λ)=i=1Nπibi(o1)β1(i)

4.3.3 Combination of Forward and Backward

앞서 두 procedure를 결합할 수 있다.

P(O,qt=i|λ)&=P(o1,,oT,qt=i|λ)&=P(o1,,ot1,qt=i,ot,,oT|λ)&=P(o1,,ot1|qt=i,λ)×P(ot,,oT|o1,,ot1,qt=i,λ)&=P(o1,,ot1|qt=i,λ)×P(ot,,oT|qt=i,λ)&=αt(i)βt(i)

정리하면 다음과 같다.

P(O|λ)=i=1NαT(i)βT(i),1tT