자연어처리(NLP) 6일차 (한국어에서의 언어 모델 / 펄플렉서티)

정민수
6 min readJun 8, 2019

--

19.06.08

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

핵심키워드

  • 펄플렉서티(Perplexity)
  • 외부 평가(extrinsic evaluation)
  • 내부 평가(Intrinsic evaluation)
  • 크로스 엔트로피(Cross-entropy)

한국어에서의 언어 모델(Language Model for Korean Sentences)

지금까지 확률을 바탕으로 한 언어 모델에 대해서 배워봤다. 그런데 영어나 기타 언어에 비해서 한국어는 언어 모델로 다음 단어를 예측하기가 훨씬 까다롭다. 사실, 대부분은 이미 토큰화에서 언급했던 내용인데, 적절한 토큰화가 언어 모델에서 필수적이기 때문이다.

1. 한국어는 어순이 중요하지 않다.

한국어에서는 어순이 중요하지 않다. 그래서 이전 단어가 주어졌을때, 당므 단어가 나타날 확률을 구해야하는데 어순이 중요하지 않다는 것은 어떤 단어든 나타나도 된다는 의미이다.

예를 들어보자.

ex)

(1) 나는 운동을 합니다 체육관에서.

(2) 나는 체육관에서 운동을 합니다.

(3) 체육관에서 운동을 합니다.

(4) 나는 운동을 체육관에서 합니다.

4개의 문장이 전부 의미가 통하는 것을 볼 수 있다. 심지어 ‘나는’ 이라는 주어를 생략해도 말이 된다. 이렇게 단어 순서를 뒤죽박죽으로 바꾸어놔도 한국어는 의미 전달이 되기 때문에 확률에 기반한 언어 모델이 제대로 다음 단어를 예측하기가 어렵다.

2. 한국어는 교착어이다.

한국어는 교착어이다. 이는 한국어에서의 언어 모델 작동을 어렵게 만든다. 띄어쓰기 단위로 토큰화를 할 경우에는 문장에서 발생 가능한 단어의 수가 굉장히 늘어난다. 대표적인 예로 교착어인 한국어에는 조사가 있다. 영어는 기본적으로 조사가 없다. 하지만 한국어에는 어떤 행동을 하는 동사의 주어나 목적어를 위해서 조사라는 것이 있다.

가령, ‘그녀’라는 단어 하나만 해도, 그녀가, 그녀를, 그녀의, 그녀와 등과 같이 다양한 경우가 존재하기 때문에, 한국어에서는 토큰화를 통해 접사나 조사를 분리하는 것이 중요한 작업이 되기도 한다.

3. 한국어는 띄어쓰기가 제대로 지켜지지 않는다.

한국어는 띄어쓰기를 제대로 하지 않아도 의미 전달이 되며, 띄어쓰기 규칙 또한 상대적으로 까다로운 언어이기 때문에 자연어 처리를 하는 것에 있어서 한국어 코퍼스는 띄어쓰기가 제대로 지켜지지 않는 경우가 많다. 이 경우에는 토큰이 제대로 분리 되지 않아 언어 모델이 제대로 동작되지 않는다.

펄플렉서티(Perplexity)

두 개의 모델 A, B가 있을 때 이 모델의 성능은 어떻게 비교할 수 있을까? 두 개의 모델을 오타 교정, 기계 번역 등의 평가에 투입해볼 수 있다. 그리고 두 모델이 해당 업무의 성능을 누가 더 잘했는지를 비교하면 된다. 그런데 두 모델의 성능을 비교하고자, 일일이 모델들에 대해서 실제 작업을 시켜보고 정확도를 비교하는 작업은 공수가 너무 많이 드는 작업이다. 만약 비교해야하는 모델이 두 개가 아니라 그 이상의 수라면 시간은 비교해야하는 모델수만큼 늘어날 수 있다.

이러한 평가를 외부 평가(extrinsic evaluation)라고 하는데, 이러한 평가보다는 어쩌면 조금은 부정확할 수는 있어도 테스트 데이터에 대해서 빠르게 식으로 계산되는 더 간단한 평가 방법이 있다. 바로 모델 내에서 자신의 성능을 수치화하여 결과를 내놓는 내부 평가(Intrinsic evaluation)에 해당되는 펄플렉서티(Perplexity)이다.

1. 언어 모델의 평가(Evaluation)의 방법. PP.

펄플렉서티(Perplexity)는 언어 모델을 평가하기 위한 내부 평가 지표이다. 보통 줄여서 PPL 또는 PP라고 표현합니다. PP를 처음 배울 때 다소 낯설게 느껴질 수 있는 점이 있다면, PP는 수치가 높을수록 좋은 성능을 의미하는 것이 아니라, ‘낮을 수록’ 언어 모델의 성능이 좋다는 것을 의미한다는 점이다.

PP는 선택할 수 있는 가능한 경우의 수를 의미하는 분기계수(branching factor)이다. PP는 이 언어 모델이 특정 시점에서 평균적으로 몇 개의 선택지를 가지고 고민하고 있는지를 의미한다.

가령, 언어 모델에 어떤 테스트 데이터를 주고 측정했더니 PP가 10이 나왔다고 해보자. 그렇다면 해당 언어 모델은 테스트 데이터에 대해서 당므 단어를 예측하는 모든 시점(time-step) 마다 평균적으로 10개의 단어를 가지고 어떤 것이 정답인지 고민하고 있다고 볼 수 있다. 같은 테스트 데이터에 대해서 두 언어 모델의 PP를 각각 계산 후에 PP의 값을 비교하면, 두 언어 모델 중 어떤 것이 성능이 좋은지도 판단이 가능하다. 당연히 PP가 더 낮은 언어 모델의 성능이 더 좋다고 볼 수 있다.

단, 평가 방법에 있어서 주의할 점은 언어 모델의 PP는 테스트 데이터에 의존하기 때문에, 두 개 이상의 언어 모델을 비교할 때는 정량적으로 양이 많고, 또한 도메인에 알맞은 테스트 데이터를 사용해야 신뢰도가 높다는 점이다.

2. 펄플렉서티(Perplexity)의 수식

펄플렉서티(Perplexity)는 아래와 같은 수식으로 정의된다.

여기서 x는 선택가능한 경우의 수 중 하나이며, p(x)는 x의 확률을 나타낸다. 만약 모든 x의 확률이 1/x로 같다면, 즉, 정답 후보의 확률이 모두 같다면 PP는 x가 된다. 하지만 모든 x 중에서 하나의 x의 확률이 1이고, 나머지 x의 확률이 0이라면 PP는 1이 된다. 이 경우에는 수식상으로는 언어 모델이 다음 단어를 말할 때마다 100% 정답임을 확신하고 고민조차 않는다는 뜻이 될 것이다. 하지만 주의할 점은 PP의 값이 낮다는 것은 테스트 데이터 상에서 높은 정확도를 보인다는 것이지, 사람이 직접 느끼기에 좋은 언어 모델이라는 것을 반드시 의미하진 않는다는 점이다.

PP는 또한 크로스 엔트로피(Cross-entropy)와 다음과 같은 식의 관계를 가진다.

3. 기존 언어 모델 VS. 딥 러닝을 이용한 언어 모델.

PP의 실제 사용 사례를 확인해보자. 페이스북 AI 연구팀은 우리가 앞서 배운 n-gram 언어 모델과 이후 배우게 될 딥 러닝을 이용한 언어 모델에 대해서 PP로 성능 테스트를 한 표를 공개한 바있다.

표에서 맨 위의 줄의 언어 모델인 n-gram을 이용한 언어 모델이며 PP가 67.6으로 측정되었다. 5-gram을 사용하였으며, 이 책에서는 별도 설명을 생략하겠다고 했던 일반화(generalization) 방법이 사용된 모델이다. 반면, 그 아래의 모델들은 딥 러닝을 이용한 언어 모델들로 페이스북 AI 연구팀이 자신들의 언어 모델을 다른 언어 모델과 비교하고자 하는 목적으로 기록했다. 아직 RNN과 LSTM 등이 무엇인지 배우지는 않았지만, 딥 러닝을 이용한 언어 모델들은 대부분 n-gram을 이용한 언어 모델보다 더 좋은 성능 평가를 받았음을 확인할 수 있다.

--

--

정민수
정민수

No responses yet