페이지

2021년 1월 25일 월요일

컴퓨터가 문장에 있는 단어의 품사를 어떻게 알아낼까? -2편

 문장의 단어가 늘어날 경우의 품사 결정

이전 호의 뉴스레터에서 컴퓨터가 자연어처리를 하는데 있어 품사를 어떻게 부여하는지에 대한 기초적 단계를 살펴보았고 품사 전이 상태와 bigram 간의 참조 테이블을 설명하였다. 만약 조동사(Modal)나 동사(Verb) 가 더 늘어나면, 즉 단어가 더 늘어나면 품사(POS)를 어떻게 예측할 수 있을까?

문장의 품사 부여는 단어들 주위의 문맥 들로부터 단어의 구문 범주를 결정하는 프로세스이다. 이는 높은 정확도로 빠르게 수행 되어야함으로 자연 언어 구문의 차이를 구별하도록 도움을 주는데 주로 사용된다.

아래의 그림은 품사전이의 변화를 마르코프 체인으로 표시해본 것이다. Markov model 은 어떠한 날씨, 주식가격 등과 같은 어떠한 현상의 변화를 확률 모델로 표현한 것이다. Hidden Markov model (HMM)은 이러한 Markov model에 은닉된 state와 직접적으로 확인 가능한 observation을 추가하여 확장한 것이다. HMM observation을 이용하여 간접적으로 은닉된 state를 추론하기 위한 문제를 풀기 위해 사용된다. 이 두가지 개념에 대한 설명은 위의 링크를 통해 간단한 유튜브 설명을 참조하시기 바란다.


                        (그림1. 
품사전이 및 품사별 단어 출현 빈도에 대한 마르코프모델)

예를 들어, 아래 표와 같이 명사, 조동사, 동사별로 문장 속의 각 단어들이 각각 언급되는 빈도를 가지고 있다고 가정해보자. 즉 명사(N) 컬럼을 보면 Mary는 전체 9번의 언급된 명사 범주중에, 4번 나타나고 있음을 알 수 있다. 즉 아래와 같이 우리가 관측(observation)한 품사별 언급이 있고, 이를 이용하여 간접적으로 은닉(hidden)된 상태 즉, 입력된 문장에 대해 최적화된 품사 구성을 추론하는 문제로 Hidden Markov Model을 통해 답을 구할 수 있다.

            

 (그림 2. 표출 확률(emission probabilities) 테이블)

우선 아래와 같이 관련 라이브러리들을 import 한다. 파이썬의 확률모델 중 hidden markov model을 손쉽게 다룰 수 있는 pomegranat를 사용한다. 설치는 pip install pomegranate 로 된다.

그리고 아래와 같이 품사별 표출 확률들을 pomegranate에 입력해준다.


이러한 상태들이 HMM모델에 추가된다.


그리고 이제 아래와 같은 전이(transition) 확률을 고려해본다. 각각의 품사가 시작(<S>)에서 출발하여 종착점(<E>)을 향하여, 다음 품사로 전이해갈 확률을 표시하면 아래와 같은 표로 나타낼 수 있다.


                                                             (그림 3. 전이 확률 표)

그리고 이러한 전이 확률을 아래 그림과 같은 마르코프 사슬(Markov Chain) 로 표현할 수 있다.


                                               (그림 4. 전이 확률과 마르코프 사슬)

전이확률들을 model에 추가해주고 모델을 완성한다.

여기에 model.bake() 를 통해 모델을 완성하고 모델 상태의 끝에 “<E>”를 그리고 시작에 “<S>”추가 한 후, 모델을 시각화 해본다. 위의 그림 4를 위아래 뒤집어 놓은 그림이 출력됨을 확인함으로써 모델이 성공적으로 수립되었음을 확인한다.


자 그럼 아래와 같은 문장이 있다고 할 때,

위에서 주어졌던 표출 확률들을 기반으로 문장의 품사를 어떻게 예측할 수 있을까?

아래의 그림에서 ① 은 왼쪽 위의 테이블에 나타난 바와 같이, will M의 상태일 경우에 값이 3/4 임을 가리키고 있으며, ② 는 오른쪽 위의 테이블에 표시된 바와 같이, 품사가 <s>에서 시작하는 방향에서 M에서 V 로 이전하는 상태일 경우 3/4 임을 가리키고 있다.  오른쪽 위 상태전이 테이블에서 <S> 로부터 시작하여 그 옆의 N 그리고 M -> V 로 한 단계씩 나아가는 과정에서 가장 큰 값을 선택해가면 아래 그림 하단의 굵은 화살표 표시에 나타난 값들이 선택된 것이라는 것을 알 수 있다. 이렇게 선택된 경로가 우리가 구하는 최적화된 품사 예측이다.

결국, pomegranate.HiddenMarkovModel() 의 연산을 통해 Jane will spot Will 이라는 문장의 POS

'<S>', 'noun', 'modal', 'verb', 'noun', '<E>' 이라고 찾아낸다.

Pomegranate model.viterbi 함수를 통하여

HMM 은 아래와 같은 품사값을 예측해낸다.

결언

이전 뉴스레터 1편에서 자연어 문장의 품사(Part of Speech)를 결정하고 화면에 출력된  Tokens bigram 쌍들과 N-M, M-V, V-N 등의 품사 전이 컬럼들로 참조 테이블을 구성하는 방법을 살펴보았다

지난 뉴스레터에 이어 2편에서는, 단어가 더 늘어나면 품사(POS) 부여가 단어들 주위의 문맥 들로부터 단어의 구문 범주를 결정한다는 점에서 더욱 복잡한 양상을 띄게 된다우리가 관측(observation)한 품사별 언급 즉, 명사, 조동사, 동사와 같은 문장 속의 각 단어들이 각각 언급되는 빈도를 가지고 있다고 가정할 경우, 이를 이용하여 간접적으로 은닉(hidden)된 상태 즉, 입력된 문장에 대해 최적화된 품사 구성을 추론하는 문제로 Hidden Markov Model을 통해 답을 구하는 방법을 살펴보았다.

 명사(Noun), 조동사(Modal), 동사(Verb) 상호간에 전이표와 언급 횟수를 기반으로 히든마르코프모델을 통한 최적화된 전이확률 발견을 통해 품사를 부여하는 방법을 살펴보았다