N-Gram Language Models
위 그림의 파란 문장은 아주 자연스러운 문장이다. 반면 빨간 문장은 틀린 문장이기도 하지만, 원어민 입장에서 뜻은 이해할 수 있는 수준의 조금 혹은 많이 어색한 문장이다.
이런 기능을 컴퓨터에서 구현한다고 했을때, 주어진 문장이 얼마나 자연스러운지를 [0, 1]사이의 정량적인 점수로 나타낼 수 있게 해주는 모델이 바로 Language model이다.
그렇게 문장의 자연스러움을 점수로 표현할 수 있다면, Machine translation에서 올바른 어순을 찾거나 더 자연스러운 단어를 찾을 수 있게 해준다. 그 외에도 자연스러운 speech를 생성하거나, 문장에서 오타를 감별하는 등 Language model의 효용성은 굉장히 넓고, NLP의 기본이라 할 수 있다.
대표적인 Language model은 N-gram과 신경망 모델이 있다고 할 수 있다. 물론 신경망 모델이 N-gram 모델보다 비슷하거나 조금 더 좋은 성능을 보이곤 하는데, N-gram 대비 모델의 복잡성, 구현의 어려움 등이 있어 아직까지 현장에서는 N-gram 모델이 많이 활용되고 있다.
N-gram model
N-gram 모델은 문장 혹은 단어의 나열의 점수를 확률로 나타내는 모델이다.
그리고 이 확률은 Chain rule에 따라 위와 같이 각 단어별로 나눠서 계산할 수 있는데, 각 단어의 확률은 앞서 출현한 단어의 길이가 길수록 계산하기가 매우 어렵다.
그래서 "현재 사건은 가까운 과거에만 영향을 받는다."라는 Markov assumption에 따라 n-1개의 history까지만 계산하는 모델이 바로 N-gram 모델이다. 그리고 각 확률이 곱해질수록 P(W)는 매우 작아지기 때문에 통상 log를 취해서 확률을 구해준다. (역으로 문장이 짧을 수록 확률이 높게 나오는 경향이 있다.) 아래는 1/2/3-gram 모델을 표현한 식이다.
※ 2-gram은 직전 1개 단어만 보는 모델이라 하여 1st-order Markov model이라고도 한다.
※ 현실적으로 4-gram 이상은 계산량이 너무 많아서 잘 사용하지 않는다.
※ 모든 N-gram 모델의 예외상황인 가장 첫 단어와 마지막단어를 구분하기 위해 special symbol <s>,</s>를 이용해 문장의 처음과 끝을 표현한다.
그리고 N-gram model은 counting 함수를 이용해 위와 같이 estimate할 수 있는데, 그 예를 살펴보자.
우리에게 주어진 말뭉치(corpus)가 3문장 있다고 하면, 2-gram 구현을 위한 각 conditional 확률을 위와 같이 모두 구할 수 있다. 이 것들을 모두 구해두면 어떤 문장이 주어진다 해도 확률을 쉽게 구할 수 있다.
N-gram model을 위해 해결할 문제점들이 몇가지 있긴 한데, 아래와 같이 다양한 완성형 N-gram model이 open되어 있으니 참고하도록 하자.
※ 참고로 KenLM이 가장 유명하다.
0 댓글