언어모델이란 문장과 같은 단어 시퀀스(sequence)에서 각 단어의 확률을 계산하는 모델이다.
전에 정리한 CBoW
와Word2Vec
등도 언어 모델 중 하나이다.
CBoW
는 주변 단어의 정보를 바탕으로 타겟 단어의 확률을 할당한다.
언어 모델도 언어를 구조적으로 분석하는 것이기 때문에 수식을 통해 이해해보고자 한다,
개의 단어로 구성된 문장은 아래처럼 나타낼 수 있다.
개의 단어로 구성된 문장 =
CBoW
가 타겟 단어(target word)를 예측할 확률 은 아래와 같이 조건부 확률로 나타낼 수 있다.
=
Word2Vec
이 나오기 전까지 많은 언어 모델은 목표 단어 왼쪽의 단어만을 고려하여 확률을 계산했다.
즉, 번째의 단어를 예측하기 위해서 0번째 부터 번째 까지의 모든 단어 정보를 사용하는 것이다.
언어 모델이 목표 단어 왼쪽의 단어만을 고려할 때 문장에서 번째의 단어를 예측할 확률은 아래와 같은 조건부 확률로 나타낼 수 있다.
목표 단어 왼쪽의 단어만을 고려할 때 문장에서 번째의 단어를 예측할 확률 =
개의 단어로 이루어진 문장이 만들어질 확률은 아래 식과 같아진다.
간단한 문장을 예시로 사용하여 위의 수식을 더 잘 이해해보고자 한다.
위의 언어 모델을 사용하여 "I am a student"라는 문장이 만들어질 확률을 구하면 아래와 같다.
이처럼 문장 속 단어의 어순대로 단어를 배열하는 것은 앞 단어들이 등장했을 때 특정 단어가 등장하는 것이므로 앞 단어들이 등장했을 때 특정 단어가 등장할 확률을 구하면 특정한 문장이 만들어질 확률과 같다. 이처럼 앞 단어가 등장했을 때 특정 단어가 등장할 확률은 조건부 확률로 구할 수 있다는 점에서 위와 같은 수식들로 표현할 수 있다.
언어 모델에 신경망이 적용되기 전부터 연구되어온 전통적인 언어 모델의 접근 방식이다.
통계적 언어 모델에서는 단어의 등장 횟수를 바탕으로 조건부 확률을 계산한다.
"I am a student"라는 문장의 경우 이 문장을 만들 확률을 조건부 확률로 표현하면 아래와 같다.
이 수식의 첫 번째 항인 의 경우 전체 말뭉치의 문장 중에서 시작할 때 "I"로 시작하는 문장의 횟수를 의미한다. 전체 말뭉치의 문장이 1000개이고 그 중 "I"로 시작하는 문장이 100개라면 이 된다.
이후, "I"로 시작하는 100개의 문장 중 "I" 다음에 "am"이 등장하는 문장이 50개라면 으로 계산할 수 있다.
이러한 방식으로 모든 조건부 확률을 구한 뒤 서로를 곱해주면 문장이 등장할 확률인 를 구할 수 있다.
⭐️ 통계적 언어모델의 한계점
통계적 언어모델은 횟수 기반으로 확률을 계산하기 때문에 희소성(Sparsity) 문제를 가지고 있다.
희소성(Sparsity)문제:
실제로 사용되는 표현임에도 말뭉치에 등장하지 않았다는 이유로 많은 문장이 등장하지 못하게 되는 문제
학습시킬 말뭉치에 '1 times', '2 times' 등의 표현은 있지만 '9 times'라는 표현이 없다면 이 말뭉치는 "I studied this subject for 9 times"라는 문장을 만들어낼 수 없다. 왜냐하면 9라는 단어가 등장한 뒤 times가 등장할 확률은 0이 되기 때문이다.
이러한 한계점을 개선하기 위해 N-gram
, Smoothing
, Back-off
등의 방법이 고안되었다.
(추가학습 필요❗️)
- N-gram
: 통계적 언어 모델을 고도화 하기 위한 방법
Smoothing
, Back-off
: 희소 문제를 보완하기 위한 장치 단어의 등장 횟수를 바탕으로 조건부 확률을 계산하는 통계적 언어모델과 달리 신경망 언어모델에서는 횟수 기반이 아닌 Word2Vec
이나 fastText
등의 출력값인 임베딩 벡터를 사용한다.
임베딩 벡터에서는 9라는 단어의 벡터가 1, 2,... 등의 단어와 유사한 곳에 위치하기 때문에 말뭉치에 9 times라는 표현이 등장하지 않더라도 이와 유사한 1 times, 2 times 등의 표현이 등장한다면 언어 모델은 "I studied this subject for 9 times"라는 문장을 만들어낼 수 있다.