자연어처리(NLP) 6일차 (통계적 언어 모델)

정민수
6 min readJun 8, 2019

--

19.06.08

본 글은 https://wikidocs.net/book/2155을 참고하여 작성되었음을 밝힙니다.

핵심키워드

  • 조건부 확률(conditional probability)
  • 통계적 언어 모델(Statistical Language Model, SLM)
  • 카운트 기반
  • OOV문제

통계적 언어 모델(Statistical Language Model, SLM)

앞 챕터에서 언어 모델(Language Model)의 개념에 대해서 간략히 설명해봤다. 여기서는 언어 모델의 전통적인 접근 방법인 통계적 접근 방법으로 어떻게 다음 단어를 예측할 수 있는지 배워보도록 하자. 이러한 방식의 언어 모델을 통계적 언어 모델(Statistical Language Model, SLM)이라고 한다.

1. 조건부 확률

조건부 확률은 두 확률 P(A), P(B)에 대해서 아래와 같은 관계를 갖는다.

  • P(B|A) = P(A,B)/P(A)
  • P(A,B) = P(A)P(B|A)

더 많은 확률에 대해서 일반화해보자. 4개의 확률이 조건부 확률의 관계를 가질 때, 아래와 같이 표현할 수 있다.

P(A, B, C, D) = P(A)P(B|A)P(C|A,B)P(D|A,B,C)

이를 조건부 확률의 연쇄 법칙(chain rule0이라고 한다. 이제는 4개가 아닌 n개에 대해서 일반화를 해보자.

조건부 확률에 대한 정의를 통해 문장의 확률을 구해보았다.

2. 실제 문장을 통한 확률식 이해

An adorable little boy is spreading smiles 이라는 문장 하나에 대한 전체 확률식을 구해보자. 다시 말해 P(An adorable little boy is spreading smiles)를 계산한다.

각 단어는 문맥이라는 관계로 인해 이전 단어의 영향을 받아 나온 단어이다. 그리고 모든 단어로부터 하나의 전체 문장이 완성된다. 그렇기 때문에 문장 전체의 확률을 구하고자 조건부 확률을 사용한다. 앞서 언급한 조건부 확률의 일반화 식을 문장의 확률 관점에서 다시 적어보면 전체 문장의 확률은 각 단어들이 이전 단어가 주어졌을 때 다음 단어로 등장할 확률의 곱으로 구성된다.

위의 문장에 해당 식을 적용해보면 다음과 같다.

P(An adorable little boy is spreading smiles) =

P(An)×P(adorable|An)×P(little|An adorable)×P(boy|An adorable little)×P(is|An adorable little boy)×P(spreading|An adorable little boy is)×P(smiles|An adorable little boy is spreading)

전체 문장의 확률을 계산하기 위해서 각 단어에 대한 예측 확률들을 곱하낟.

3. 카운트 기반의 접근

전체 문장의 확률을 계산하기 위해서 다음 단어에 대한 예측 확률을 모두 곱하여 구한다는 것은 알았다. 그렇다면 SLM에서 실제 기계는 이전 단어로부터 다음 단어에 대한 확률은 어떻게 계산할까? 정답은 카운트에 기반하여 확률을 계산한다.

An adorable little boy가 나왔을 때, is가 나올 확률인 P(is|An adorable little boy) 계산한다고 해보자.

그 확률은 위와 같다. 예를 들어 기계가 학습한 코퍼스 데이터에서 An adorable little boy가 100번 등장했는 데 그 다음에 is가 등장한 경우는 30번이라고 하자. 이때 기계에게 P(is|An adorable little boy)를 묻는다면 기계는 30%라는 확률을 예측한다.

4. 카운트 기반 접근의 한계

언어 모델이 하는 일에 대해서 다시 재정의 해보자면, 실생활에서 사용되는 말의 정확한 확률분포를 근사 모델링하는 것이 언어 모델이다. 실제로 정확하게 알아볼 방법은 없겠지만 현실에서도 An adorable little boy가 나왔을 때 is가 나올 확률이라는 것이 존재한다. 이를 실제 자연어의 확률 분포, 현실에서의 확률 분포라고 명칭해볼 수 있다. 그리고 기계에게 많은 코퍼스를 훈련시켜서 언어 모델을 통해 현실에서의 확률 분포를 근사하는 것이 언어 모델의 목표이다. 그런데 카운트 기반으로 접근하려고 나다면 갖고 있는 코퍼스. 즉, 다시 말해 기계가 훈련하는 데이터는 방대한 양이 필요하다.

가령, An adorable little boy가 나왔을 때 is가 나올 확률을 계산하고 싶었지만, 기계가 훈련한 코퍼스에 An adorable little boy is라는 문장 자체가 없었다고 한다면 이 문장에 대한 확률을 계산할 수 없다.

단어 분리(Subword Segmentation) 챕터에서 배웠던 OOV 문제(Out-Of-Vocabulary)이다. 코퍼스에 해당 데이터가 없다는 것은 카운트 계산 시 분자 또는 분모가 0이 된다는 뜻이다. 그렇다면 이 확률을 0 또는 정의되지 않은 확률이라고 할 수 있을까? 아니다. 현실에선 An adorable little boy is 라는 단어의 나열이 분명히 존재하기 때문이다.

위의 문제를 완전히 해결할 수는 없지만, 그래도 완화하는 방법들이 있다. 바로 n-gram 언어 모델과 여러가지 SLM의 일반화(generalization) 기법이다. 미리 언급하면 n-gram 언어 모델과 여러 일반화 기법들도 딥 러닝을 이용한 언어 모델에 비해서는 결국 성능이 많이 뒤떨어진다. 하지만 n-gram도 여전히 자연어 처리에서 중요한 개념인 만큼, n-gram 언어 모델에 대해서 배워보고 딥 러닝을 이용한 언어 모델은 뒤의 딥러닝 챕터에서 배운다.

--

--

정민수
정민수

No responses yet