철지난 MC와 HMM을 왜 이제사 이해해야 하는가 싶을 것이다. 그런데 최첨단의 자연어처리를 이해함에 있어 과거의 유물을 아는 것은 현재의 알고리즘을 이해하는데 도움이 된다는 것을 알면 생각이 달라질 수 있다. 최첨단의 알고리즘은 기술적 복잡도가 상당히 올라갔기 때문에 본질을 이해하는데 어려움이 따를 수 있지만, 과거의 모델은 이런 점에서 비교적 단순하다. 왜냐하면 그 시절에는 그 알고리즘을 처리할 컴퓨터의 연산능력이 떨어졌었고, 이에 처리하는 데이터도 비교적 단순했기 때문이다. 그런데 어차피 예나 지금이나 자연어 처리 알고리즘의 본질은 같다. 과거와 현재를 비교하면 미래의 자연어처리 알고리즘이 어떤 식으로 흘러갈 지도 예상할 수 있을 것이다. 필자는 수식없이 대강의 논리만 설명하므로 구체적인 수식이 필요한 분은 다른 블로그를 참고하길 바란다.
0. 1+1=2
'1+1=2'를 기억하자. 앞선 글 https://brunch.co.kr/@geumjaelee/1에서 참고하기 바란다. MC와 HMM도 지도학습과 비지도학습의 두 방법으로 모두 학습시킬 수 있다.
1. MC(마르코프 체인)
MC 하면 가장 많이 보는 그림이다. 이건 간단히 그래프라고 생각하면 된다. 다만 기본 그래프에서 각 상태(A, B, C)에서 다른 상태로 가는 확률이 조사(훈련)된 것이 추가된 것이 마르코프 체인이다. 마르코프 체인의 대전제는 '마르코프 성질'이다. 현재의 상태는 과거의 1단계 상태에만 영향을 받는다는 것이다. 가령 상태 A에서 다른 상태로 가는 개별 확률의 총합은 1이다. 그림에서는 A → C : 0.2, A → B : 0.8이므로 A가 가지는 전이확률의 총합은 1이 맞다. B와 C도 마찬가지다.
근데 이거 뭐 할 때 쓸까? 어떤 패턴을 읽을 때 쓴다. 가령 날씨의 패턴이 '흐림 > 비 > 맑음 > 흐림 > 비 > 맑음'을 가지고 반복된다고 치자. 이는 가정이다. 실제로는 훨씬 복잡한 양상을 가진다. 이때 각 화살표가 가지는 확률을 구하고 이를 총합 1로 만들면 마르코프 체인이 된다. 이게 자연어처리에는 별로 쓸모 없어 보이는 게 당연하다. 하지만 초창기 구글의 검색기는 이를 기반으로 설계되었다. 페이지 랭크다.
물론 시퀀스 학습과 같은 자연어 처리에도 쓰일 수는 있다. 다만 현재는 RNN으로 대체 가능하므로 굳이 사용하지 않는다. 마르코프 체인은 단 한 단계의 맥락context만 학습 가능하며, RNN은 여러 단계의 체인을 학습할 수 있기 때문이다. 구체적인 것은 나중에 RNN을 다루는 글에서 이야기 하겠다.
2. HMM(은닉 마르코프 모델)
HMM은 기본 마르코프 체인의 단점을 보완하여 확장한 것이다. 마르코프 체인에서는 상태를 단순하게 '흐림, 비, 맑음'과 같이 정의했다면, HMM은 이를 공기중 수분 비율로 좀 더 구체적으로 규정한 것이다. 가령 '흐름:50%, 비:100%, 맑음:0%'과 같다. 상태 각각이 가지는 %는 수분처럼 근원 요소 둘 만으로 규정될 수도 있고, 그 이상으로도 정의될 수 있다. 마르코프 체인에서는 각 상태를 엔지니어가 직접 입력해야 했다면, HMM에서는 수분 비율만 측정하면 된다. 자동화 된 것이다.
MC가 HMM으로 발전하면 상당한 이점이 있다. 엔지니어가 할 일이 적어진다. 상태의 근원 요소만 정의하면 상태에 대한 일관적인 묘사를 할 수 있다. 가령 필기인식의 경우라면 각 상태를 특정 각도로 규정할 수 있다.
그리고 상태의 변화를 기록하고, 나중에 비슷한 패턴이 입력되면 그것을 인식하는 것이다. 이런 방법은 음성인식이나 형태소 분석기에도 사용할 수 있다. 이전 패턴(상태)이 현재 패턴에 영향을 주는 것이라면 모두 사용할 수 있는 것이다. 이때 각 상태는 피처라고 말할 수도 있다. 그리고 위의 그림에서 '2'는 타겟 혹은 레이블이 된다. 형태소 분석기의 품사태거에서도 마찬가지다. 이전 품사가 현재 품사의 패턴에 영향을 주기 때문에 사용된다.
3. 지도 학습과 비지도 학습의 관점
1) 비지도 학습
이러한 MC와 HMM을 비지도 학습의 관점으로 보면 단순히 어떤 상태가 주어졌을 때 다음 상태를 예측하는 것이 된다. 자연어처리에서도 마찬가지다. 마르코프 체인에 '나는'이라는 단어가 입력되면 다음에 나올 단어를 예측하는 것이다. 그런데 이런 식의 학습은 상당히 비효율적이다. '나는'이라는 단어 뒤에 올 수 있는 단어의 수가 너무 많다. 일일히 조사하려면 데이터의 크기가 너무 크다. 그래서 실제로는 사용되지 않는다. 가령 RNN은 '나는 오늘'이 입력되었을 때 '밥을'을 예측할 수 있다. 조건을 한 단계 이상 보는 것이다.
2) 지도 학습
지도학습은 일련의 패턴을 제 2의 개념에 연결시키는 것이다. '나는 오늘 학교에 갔다'='등교'라고 하는 식이다. '나는 오늘 학교에 갔다'가 입력되면 '등교'를 출력한다. 앞선 것과 뒤따르는 것을 짝지어 학습시킨다. 설계하기에 따라서 오늘 대신 어제가 올 수도 있다. 물론 개념적으로 이렇다는 거고, MC나 HMM이 실제로 여기에 사용되지는 않는다.