언어 모델(language model)이란 자연어를 모델링하기 위한 모델이다. 이것은 통계에서부터 시작됐는데, 각 단어 시퀀스(문장)에 확률을 할당하면서 가장 높은 확률을 가지는 시퀀스를 찾아낸다.
예를들어, "나는 밥을 ???" 이라는 문장이 있다면, 각 단어들이 ???에 등장할 확률을 계산하여, 가장 ???에 적합한 단어를 찾는다. 이 경우 "먹는다"가 등장할 확률이 "때린다"보다는 높을 것이다. 이런식으로 가장 높은 확률을 가지는 단어를 찾는다면 이것이 언어를 모델링한다고 할 수 있을 것이다. 이 ???의 위치는 굳이 맨 뒤에 있을 필요가 없는데, "나는 ??? 먹는다" 처럼 중간에 있을 수도 있는 등, 어디든 위치할 수 있다.
그렇다면 그 등장할 확률이란 무엇일까? 바로 데이터로 부터 오는데, 이를 계산해보기 위해 지금까지 사람들이 내뱉은 모든 말들이 저장돼있는 책이 한 권 있다고 해보자.
이 책에서 "나는 밥을" 이 연속적으로 등장한 문장의 갯수를 모두 센 뒤, 이것을 count("나는 밥을")이라고 하고, "나는 밥을 먹는다"가 등장하는 모든 문장의 수를count("나는 밥을 먹는다")할 때,
p("나는 밥을") = count("나는 밥을")/count(모든문장) = p("나는", "밥을")
p("나는 밥을 먹는다") = count("나는 밥을 먹는다")/count(모든문장)
= p("나는", "밥을", "먹는다")
처럼 확률로 표현이 가능하고, 우리가 원하는 바인 "나는 밥을"이 등장 했을 때, "먹는다"가 뒤에 등장할 확률을 조건부 확률을 통해
P("나는", "밥을", "먹는다" | "나는", "밥을")로 표현할 수 있다. 이것이 통계적 언어 모델의 가장 단순한 이해이다.
하지만 이런 방식에는 현실적인 한계가 존재하는데, 먼저 시퀀스의 길이가 길어질 수록 문장 전체가 등장할 확률은 매우 적어질것이고, 또, 체인룰을 사용하더라도, 확률을 계산하는 것이 매우 어렵다. 그렇기 때문에 n-gram과 같은 기법들이 사용되곤 하는데, n-gram이란 ???를 예측하기 위해 ??? 앞의 n개의 단어만을 이용하여 확률을 계산하는 것을 의미한다.
시간이 지나면서 컴퓨터 성능이 향상됐고, AI(딥러닝)가 도입된 언어 모델이 개발되기 시작했다.
데이터의 부족 문제를 해결하기 위해 탄생한 워드 임베딩(단어를 Rn의 실수 공간으로 매핑하는 작업) 부터 시작하여,
단어의 순서 정보를 보존할 수 있도록 신경망을 학습시킬 수 있는 RNN의 도입,
RNN의 장기 의존성 문제를 보정하기 위한 attention 매커니즘의 탄생,
그리고, RNN 대신 attention만으로 모델을 구성한 transformer 등 다양한 시도와, 발전이 있었고 현재에는 이런 언어 모델에게 초대량의 데이터를 학습시켜, 막강한 성능을 갖게된 Large Language Model, LLM의 등장 까지 이르게 되었다.
위에 언급된 워드 임베딩, RNN, transformer 등은 매우 중요한 개념들로, 이후에 하나하나 다뤄 보고자 한다.