Language Model(2) - HMM을 이용한 Part of Speech(POS) Tagging

2019. 2. 3. 23:13Udacity Nanodegree/Natural Language Processing

Part of Speech(POS) Tagging

시작하기 전에 한가지 질문을 해보려고 한다. POS Tagging이 왜 필요할까? 이를 알기 위해서 한가지 문장을 예시로 들어보자.

나는 학교에     .

여기서 밑줄에 들어갈 수 있는 단어는 뭐가 있을까? 몇가지 예시로 나열해보자.
  • 갔다
  • 간다
  • 가봤다
  • 갔었다
  • 돌아왔다
  • 들어갔다
  • 합격했다
  • 등등...

여러가지 단어가 들어갈 수 있겠지만, 들어갈 수 있는 형태는 '동사'라는 형태로 결정되어 있다. 이는 우리가 쓰는 언어에서 사용하는 구조가 정해져 있기 때문이다. 만일 그렇다면, 굳이 단어를 추측할 것이 아니라 들어갈 수 있는 형태가 어떤 것인가를 추측하는 것이 밑줄에 들어갈 수 있는 단어를 추측하는데 더 도움이 되지 않을까? 이러한 아이디어를 기반으로 사용되는 방식이 Part of Speech(POS) Tagging을 이용한 단어추측 방식이다.
지난 글에서 Bayesian Theorem과 Naïve Bayes에 대해 언급했다. 그렇다면 다음 단어가 어떤 단어가 될지 따지기 위해서는 어떤 정보가 필요한지에 대해 따져보자.

P(WORD | Position) ∝ P(Position | WORD)P(Position)

이렇게 계산할 수 있다면 POS가 주어지고 난 이후에는 단어에 대한 확률을 추측해 볼 수도 있을 것이다. 일단 다른건 추후에 다루더라도 POS Tagging이 어떤 것인지에 대해서만 알아놓자.


여기서는 일단 모든 단어를 3가지로 구분한다. 명사(Noun), 조동사(Modal Verb), 동사(Verb)로 구분하며, 이 형식을 유지하는 예시만 사용할 예정이다.


Lookup Table

일단 다음 몇가지의 예시를 Language Model을 학습시킬 데이터로 사용한다고 가정해보자.

  1. Mary saw Jane. (N - M - N)

  2. Jane saw Will. (N - M - N)

이 두 예제만 정리하면 각 단어가 어떤 포지션에서 쓰였는지 살펴보면 위와 같은 표를 통해 정리할 수 있다. 여기서 각 단어들에 대해 가장 높은 빈도수로 나온 POS가 예상 POS라고 설정해주면, 각 단어가 어떤 POS로 사용될 지에 대해 알 수 있다.

만약 'Will saw Mary.'와 같은 문장이 나왔다고 해보자. Will에서 가장 많이 사용된 POS는 명사(N), saw에서 가장 많이 사용된 POS는 동사(V), Mary에서 가장 많이 사용된 POS는 명사(N)이다. 따라서, 해당 예시는 N - V - N으로 Tagging을 할 수 있을 것이다.

하지만 Lookup Table에도 단점이 있다. 만약 단어의 POS가 하나가 아닌 여러개가 존재한다면, 그중 가장 높은 빈도수/확률을 보여주는 선택을 할 수 밖에 없다는 점이다. 이러한 점을 해결하기 위해 Bi-gram방식이 제시된다.

Bigram (ngram)

여기서 한번 예시의 종류를 늘려보자. 이번엔 3개의 문장을 기반으로 테이블을 만들 예정이다.

  1. Mary will see Jane. (N - M - V - N)
  2. Will will see Mary. (N - M - V - N)
  3. Jane will see Will. (N - M - V - N)
이렇게 3개의 문장을 기반으로 Bi-gram방식을 통한 테이블을 만들어보자.


Bi-gram방식은 단어를 하나씩만이 아닌 두개씩 본다는 점이다. 예를 들면, Mary-will의 조합이 얼마나 나왔는지, will-see의 조합이 얼마나 나왔는지를 각각의 POS 조합과 결합시켜서 본다. 이러한 방식은 단어가 문장 내 쓰임새에 따라 다른 POS를 고려할 수 있다는 장점이 있다.


하지만 Bi-gram방식도 장점만 있는 것이 아니다. 만약 확인하고자 하는 문장 내의 단어 조합이 Table안에 없을 경우 그 확률을 고려할 수 있을까? 분명 확인하지 못할 것이다. 이러한 점을 커버하기 위해 많은 데이터를 사용하는 시도가 있지만, 그럼에도 불구하고 모든 단어를 커버할 수 없는 확률이 존재한다는 점은 Language Model이 불안정하다는 의미가 된다.


Emission Probability

여기서 사용하는 예시의 종류를 조금 늘려보자. 이번에는 4개의 문장을 사용해보자. 각각의 문장은 다음과 같다.

  1. Mary Jane can see Will. (N-N-M-V-N)
  2. Spot will see Mary. (N-M-V-N)
  3. Will Jane spot Mary? (M-N-V-N)
  4. Mary will pat Spot. (N-M-V-N)
예시에서 사용하는 문장내의 각각의 단어에 대해 POS별로 확률을 계산해보면 아래와 같은 표가 나오게 된다.


이렇게 만들어진 확률들은 Emission Probability(출력 확률)이라고 불리며, 이는 특정 상태일 경우 각각의 요소에 대한 확률을 의미한다.



여기서는 4가지의 명사, 2가지의 조동사, 3가지의 동사로 구분되어있다. 각각의 확률은 모든 문장에 대해 각 단어가 해당 POS로서 나온 확률을 의미한다. 예를들어, 명사의 경우 다음과 같이 구분될 수 있다.

  • 전체 문장에서 명사의 갯수는 9개

    • 명사로써 Mary가 나온 횟수는 4회이므로 4/9

    • 명사로써 Jane이 나온 횟수는 2회이므로 2/9

    • 명사로써 Will이 나온 횟수는 1회이므로 1/9

    • 명사로써 Spot이 나온 횟수는 2회이므로 2/9

  • 전체 문장에서 조동사의 갯수는 4개

    • 조동사로써 Will이 나온 횟수는 3회이므로 3/4

    • 조동사로써 Can이 나온 횟수는 1회이므로 1/4

  • 전체 문장에서 동사의 갯수는 4개

    • 동사로써 Spot이 나온 횟수는 1회이므로 1/4

    • 동사로써 See가 나온 횟수는 2회이므로 2/4 (1/2)

    • 동사로써 Pat이 나온 횟수는 1회이므로 1/4


이러한 방식을 통해 POS가 정해진 경우, 각 단어가 나올 확률을 계산할 수 있다.

Transition Probability

다시 Bi-gram모델 이야기로 돌아가보자. Bi-gram에서는 각 단어 쌍이 나올 확률에 대해 계산을 했었다. 하지만, 우리가 일반적으로 다른 언어를 배우는 방식을 생각해봤을때, 각 단어가 나올 확률보다는 문법을 배우는 데 조금 더 집중하는 경향이 있다. 예를 들어, 영어의 기본 문법인 Subject-Verb, Subject-Verb-Objective부터 시작하여 여러 다양한 문법에 대해 익숙해진 후, 문장을 구성하는 방법에 따라 맞는 POS를 가지는 단어를 넣어주는 방식이다.

이런 방식으로 Language Model을 구성할 경우, POS가 주어진 후 다음으로 나올 POS가 필요해 지는데, 이러한 방식을 적용하기 위해 Transition Probability(전이 확률)이라는 개념이 필요해 지게 된다.


일단 문장의 POS는 그대로 유지하자. 여기서 추가할 것은 POS의 하나로써 문장의 시작부분을 표기하는 <S>와 문장의 끝부분을 표기하는<E>를 추가한다. 이렇게 문장은 항상 <S>로 시작하고 <E>로 끝나게 될 것이다. 우리가 여기서 구하고자 하는 것은, 각 POS에서 다음 POS가 특정 POS가 될 확률을 구하고 싶은 것이다. 예를 들면, 문장의 시작이 <S>가 될 것이므로 <S>가 입력으로 들어오면 다음 네종류의 확률을 구한다.


  1. 명사(N)일 확률: 4번의 <S>중 다음으로 N이 나올 확률 (3/4)

  2. 조동사(M)일 확률: 4번의 <S>중 다음으로 M이 나올 확률 (1/4)

  3. 동사(V)일 확률: 4번의 <S>중 다음으로 V이 나올 확률 (0/4)

  4. 문장의 끝(<E>)일 확률: 4번의 <S>중 다음으로 <E>이 나올 확률 (0/4)

여기까지가 <S>행에 나열된 확률에 대한 설명이다. 이와 동일한 방식으로 나머지 N, M, V에 대해서도 각각의 확률을 계산한다. 그렇게 계산을 거치고 난 후의 결과가 아래의 표다.


이렇게 계산한 확률은 POS가 주어졌을 때, 다음 POS가 어떤 것일지에 대해 결정하기 위해 사용된다. 이렇게 계산한 확률을 Transition Probability라고 부른다.

Hidden Markov Model


앞서 Transition Probability와 Emission Probability에 대해서 살펴봤다. 그렇다면 현재의 단어가 주어졌을때 다음 단어가 무엇일지에 대한 확률도 구할 수 있지 않을까? 여기서는 Hidden Markov Model(HMM)을 이용하여 이 확률을 구하고 있다.


HMM에서는 다음과 같은 순서로 문장 내 단어가 나올 확률을 구하고 있다.


  1. 시작 위치의 POS(<S>)에서 다음 특정 POS가 나올 확률을 구한다.

  2. 다음의 POS에서 각 단어가 나올 확률을 구한다.

  3. 위 1, 2번의 절차를 문장이 끝날 때까지 반복한다. (<E>까지)

위 절차를 그림으로 나타내면 아래와 같다.



그렇다면 각 문장에 대한 확률을 계산해보자. 위에서 계산한 Transition Probability와 Emission Probability를 그대로 사용한다면, 아래와 같은 절차를 통해 확률을 계산할 수 있다.



Jane will spot Will이라는 문장이 나올 확률을 계산해보자. (각 확률에 대한 상세 내역은 위 그림을 참고하자.)


3/4(Tran) * 2/9(Emis) * 1/3(Tran) * 3/4(Emis) * 3/4(Tran) * 1/4(Emis)

 * 1(Tran) * 1/9(Emis) * 4/9(Tran) = 1/2592 = 0.0003858...


과 같은 확률이 나오게 된다. (Tran: Transition Probability, Emis: Emission Probability)

이와같은 방식으로 특정 단어가 주어졌을때, 각 문장에 대한 확률을 계산해볼 경우, 가장 큰 확률을 가지는 모델이 문장의 예측 결과가 나온다.