brunch

문장에서 다음에 나오게 될 단어를 예측하려면?

언어 모델링에 대해서 알아보기

by 별똥별 shooting star


들어가며

언어 모델링이란 문장의 확률을 나태 내는 모델로 이를 통해서 문장 자체의 출현 확률을 예측하거나 이전 단어들이 주어졌을 때 다음 단어를 예측할 수 있다. 따라서 해당 문장이 얼마나 자연스럽고 유창한 표현인지를 계산할 수 있다. 예를 들어 보겠다. "나는 수박을 자주 ~" 이다음에 올 단어는 무엇일까? 한국인이라면 자연스럽게 "먹는다."라는 단어가 나올 것이다. 이처럼 해당 언어에 대한 이해를 하는 모델을 언어 모델링 즉, LM이라고 한다. 이번 포스팅은 이러한 언어 모델링에 대해서 살펴보는 것을 목표로 한다.


언어 모델


문장의 확률적 표현

언어 모델을 이해하기 위해선 가장 먼저 문장을 확률적으로 표현된다는 사실을 알아야 한다. 만일 n개의 단어가 주어진다면 문자의 확률을 어떻게 나타낼 수 있을까? 아래의 수식과 같이 나타낼 수 있다. 아래의 수식을 풀어보면 w1이 나타날 확률과 w1이 주어졌을 때 w2가 나타날 확률 그리고 w1, w2가 주어졌을 때 w3가 주어질 확률, w1,w2,•••,wₙ₋₁이 주어졌을 때 wₙ이 나타날 확률을 곱하는 것이다. 이렇게 하여 문장에 대한 확률과 단어와 단어 사이의 확률을 정의할 수 있는 것이다.


image.png

연쇄법칙으로 이를 표현하면 다음과 같이 표현할 수 있다.


P(BOS,나는,사과를,먹는다,EOS) = P(BOS),P(나는|BOS)P(사과를|BOS,나는)P(먹는다|BOS,나는, 사과를)P(EOS|BOS,...,먹는다)


하지만 문장이 길어지면 연산이 더 빠른 덧셈이 유리하다. 그리고 곱셈이 거듭되면 확률이 매우 낮아져서 정확한 표현이 어려워진다. 그리고 log를 취하여 덧셈으로 바꿔 더 효과적으로 계산할 수 있다.


image.png


마지막으로 정리하자면 언어 모델링은 주어진 단어가 있을 때 다음 단어의 likelihood를 최대화하는 파라미터를 찾는 과정이라고 할 수 있다.


n-gram

이번에 알아볼 개념은 n-gram이다. n-gram은 위에서 본 전체 단어를 조합하는 대신 n의 일부 단어 조합의 출현 빈도만 계산하여 확률을 추정하는 방법이다. 이로써 모든 단어를 조합하면 생기는 메모리 문제, 불가능한 조합으로 인하여 0이 되는 희소성 문제 등을 보완하여 효과적으로 확률을 구할 수 있을 것이다. 그렇다면 이제 본격적으로 n-gram에 대해서 알아보도록 하겠다.


image.png


n-gram을 이해하기 위해서는 마르코프 가정을 알아야 한다. 마로코프 가정이란 특정 시점의 상태 확률은 단지 그 직전 상태에만 의존한다는 논리로 모든 단어를 살펴볼 필요 없이 앞의 k개의 단어만 보고 다음 단어의 출현 확률을 구하는 것이다. k가 0일 때는 1-gram으로 uni-gram, k가 1일 때는 2-gram으로 bi-gram, k가 2일 때는 3-gram으로 tri-gram으로 부른다. 여기서 k가 1일 경우에는 앞 단어 1개를 참조하여 다음 단어 확률을 근사하여 나타낸다. 실제 훈련에는 3-gram이 가장 적당하다고 한다. 물론 실험을 통해서 더 좋은 결과가 있다면 그것을 선택해야 할 것이다.


image.png


위의 수식은 3-gram의 가정이다. 3개의 단어의 출현 빈도와 앞 2개 단어의 출현 빈도를 구하면 xᵢ의 확률을 근사할 수 있을 것이다.


일반화 능력 향상 기법

좋은 모델은 훈련 데이터에서 학습하지 못한 샘플에 대한 예측 능력이 뛰어난 모델이다. 다시 말해 일반화 능력이 뛰어나야 하는 것이다. 그렇기 때문에 지금부터는 일반화 능력을 향상 킬 수 있는 방법들을 간략하게 살펴보도록 하겠다.


스무딩과 디스카운팅

훈련 코퍼스에서 전혀 보지 못한 단어 조합 때문에 확률이 0이 되면 문제가 생긴다. 그래서 빈도값이나 확률값을 다듬어 주어야 한다. 이러한 작업을 스무딩과 디스카운팅이라고 한다. 가장 간단한 방법은 모든 단어 시퀀스의 출현 빈도에 1을 더하여 확률값이 0이 되는 것을 막아주는 것이다.


image.png


물론 1보다 더 작은 값으로 대체할 수도 있을 것이다.


image.png


Kneser-Ney 디스카운팅

KN 디스카운팅은 단어 w가 다른 단어 v의 뒤에 출현할 때 얼마나 다양한 단어 뒤에서 출현하는지 알아내는 것이다. 즉, 앞에 등장한 단어의 종류가 다양할수록 해당 확률이 높을 것이라는 아이디어이다.


인터폴레이션

인터폴레이션은 다수의 언어 모델 사이의 선형결합이다. 그래서 다른 LM을 linear 하게 일정 비율로 섞어준다. 이는 일반 LM의 도메인에 특정한 도메인의 영역을 결합하여 주기 때문에 도메인 강화를 해줄 수 있는 것이다. 서로의 장단점을 결합하는 작업인 셈이다.


백오프

백오프 방식은 n-gram의 n보다 더 작은 시퀀스에 대해 확률을 구하여 인터폴레이션을 하는 것이다. 이를 통해서 희소성 문제를 방지할 수 있다. 하지만 확률값이 매우 낮아져 버린다는 단점도 있다.



마치며

이번 시간은 언어 모델링에 대해서 간단하게 살펴보는 시간이었다. 이번 포스팅은 NLP basic theory의 다른 포스팅과는 다르게 "김기현의 자연어 처리 딥러닝 캠프(파이토치 편)"을 많이 참고하였기에 수식적으로 조금 더 디테일하게 들어가게 되었다. 원래는 수식은 전혀 안 보고 코드만 보고 싶었지만 인공지능을 공부하다 보니 결국 수식적인 부분을 더 깊게 알고 싶은 욕심이 생기게 되었다. 그래서 NLP basic theory 시리즈를 다 끝냈음에도 이 부분을 추가하게 된 것이다. 이번 포스팅을 시작으로 수식에 대한 이해가 점점 더 깊어지고 이를 기반으로 논문을 구현할 수 있는 실력까지 올라갔으면 좋겠다.


keyword
매거진의 이전글워드 임베딩의 편향성 알아보기