■ 문장은 단어 시퀀스 순서로 나열되는 특성을 가진다. 언어 모델은 이 특성을 모델링하고자 문장을 구성하고 있는 순서대로 나열된 단어 시퀀스에 확률을 부여해서, 확률적으로 가장 자연스러운 단어 시퀀스를 찾아내는 모델이다.
■ 언어 모델을 만드는 방법은 크게 통계를 이용한 방법과 인공 신경망을 이용(RNN, LSTM 등)한 방법으로 구분할 수 있다.
1. 언어 모델
■ 언어 모델은 단어 시퀀스에 확률을 부여해서 가장 자연스러운 단어 시퀀스를 찾아내는 작업을 하는 모델이다.
■ 단어 시퀀스에 확률을 부여하는 일반적인 방법은 이전 시점의 단어들이 주어졌을 때, 언어 모델이 다음 단어를 예측하도록 하는 것이다.
- 예를 들어, '나는 버스를'이라는 단어 시퀀스들이 순서대로 언어 모델에 들어왔고, 다음 시점에 등장할 단어를 언어 모델이 예측한다고 했을 때,
- '나는 버스를 탔다'처럼 자연스러운 단어를 예측하거나, '나는 버스를 태운다'처럼 부자연스러운 단어를 예측할 수 있다.
- 이때, 언어 모델은 단어가 순서에 맞춰 등장했을 때, 얼마나 자연스러운 단어 순선인지 확률로 평가한다.
- 이 예에서 언어 모델은 자연스러운 문장인 '나는 버스를 탔다'에 더 높은 확률을 부여하고 '나는 버스를 태운다'에 낮은 확률을 부여해서, 확률이 더 높은 쪽을 선택한다.
■ 이렇게 주어진 이전 시점의 단어들로부터 다음 단어를 예측하는 것을 조건부 확률로 표현할 수 있다.
■ 하나의 단어를 \( w \), 단어 시퀀스를 \( W \)라고 하자. \( n \)개의 단어가 등장하는 단어 시퀀스 \( W \)의 확률은 \( P(W) = P(w_1, w_2, \cdots, w_n) \)으로 표현할 수 있다.
■ 그리고 다음 시점에 등장할 단어의 확률은 조건부 확률로 표현할 수 있다. \( n - 1 \)개의 단어가 등장한 상태에서 다음 단어인 \( n \)번째 단어가 등장할 확률은 조건부 확률 \( P(w_n \mid w_1, w_2, \cdots, w_{n-1}) \)로 나타낼 수 있다.
■ 전체 단어 시퀀스 \( W \)의 확률은 모든 단어가 예측되고 나서야 알 수 있다. 즉, 전체 단어 시퀀스 \( W \)의 확률은 \( n - 1 \)개의 단어가 나열된 상태에서 \( n \)번째 단어의 확률뿐만 아니라, \( n - 2 \)개의 단어가 나열된 상태에서 \( n - 1 \)번째 단어의 확률, \( n - 3 \)개의 단어가 나열된 상태에서 \( n - 2 \)번째 단어의 확률, .... 이다. 조건부 확률의 연쇄 법칙(chain rule)을 이용하면
\( P(W) = P(w_1, \cdots, w_n) = P(w_n \mid w_1, \cdots, w_{n-1}) P(w_{n-1} \mid w_1, \cdots, w_{n-2}) \cdots P(w_3 \mid w_1, w_2) P(w_2 \mid w_1) P(w_1) = \displaystyle\prod_{i=1}^{n} P(w_i \mid w_1, \dots, w_{i-1}) \)
2. 통계적 언어 모델(Statistical Language Model, SLM)과 n-gram 언어 모델
■ 통계적 언어 모델은 통계 기반 언어 모델이다. 확률과 단어의 빈도 수(=카운트)에 기반한다.
2.1 조건부 확률을 활용한 언어 모델링
■ 이전 단어들이 주어졌을 때, 다음 단어를 예측하는 작업을 언어 모델링(Language Modeling)이라고 한다.
■ 통계적 언어 모델의 일반적인 언어 모델링은 조건부 확률을 이용하는 것이다.
■ 조건부 확률은 \( P(B \mid A) = \dfrac{P(A, B)}{P(A)} \)로 사건 \( A \)가 발생했을 때 사건 \( B \)가 발생할 확률을 의미한다.
사건 \( A \)가 발생했을 때 사건 \( B \)가 발생할 확률은 사건 \( A \)가 일어날 확률에서 사건 \( A \)와 \( B \)가 동시에 발생할 확률이 차지하는 비중으로, 집합 \( B \)의 원소들이 얼마나 많이 집합 \( A \)에도 해당되는지( = \( A \cap B) \)를 나타낸다.
- \( P(A, B) = P(A \cap B) \)
■ \( P(B \mid A) = \dfrac{P(A, B)}{P(A)} \Leftrightarrow P(A, B) = P(A) P(B \mid A) \)로 나타낼 수 있다. 이러한 관계를 '조건부 확률의 연쇄 법칙(chain rule)'이라고 한다. 이 관계를 이용하면, 더 많은 사건에 대해 조건부 확률을 나타낼 수 있다.
- \( P(A, B, C) = P(A) P( B \mid A) P( C \mid A, B) \)
이를 일반화하면 \( P(x_1, x_2, \cdots, x_n) = P(x_1) P(x_2 \mid x_1) P(x_3 \mid x_1, x_2) \cdots P(x_n \mid x_1, x_2, \cdots, x_{n-1} \)
■ 이러한 조건부 확률을 이용해 문장에 대한 확률을 계산하는 방법이 통계적 언어 모델 중 하나이다.
■ 예를 들어, ’An adorable little boy is spreading smiles’라는 문장이 있다고 했을 때, 이 문장에 대한 확률 \( P( \text{An adorable little boy is spreading smiles}) \)을 조건부 확률을 이용해 나타낼 수 있다.
■ 조건부 확률로 나타낼 수 있는 이유는, 문장은 단어로 구성되며 단어는 문맥이라는 관계에 따라 다음 시점에 등장할 단어는 이전 시점들의 단어에 영향을 받게 된다. 그리고 문맥에 맞는 모든 단어들이 모여야 하나의 문장이 완성된다. 그러므로, 문장의 확률은 조건부 확률로 나타낼 수 있다.
■ \( P(w_1, \cdots, w_n) = P(w_n \mid w_1, \cdots, w_{n-1}) P(w_{n-1} \mid w_1, \cdots, w_{n-2}) \cdots P(w_3 \mid w_1, w_2) P(w_2 \mid w_1) P(w_1) = \displaystyle\prod_{i=1}^{n} P(w_i \mid w_1, \dots, w_{i-1}) \)은 문장의 확률 관점에서 보면, 문장의 확률은 '이전 단어들이 주어졌을 때 다음 단어로 등장할 확률(=조건부 확률)'의 곱이 된다. 그리고 문장을 구성하는 단어가 \( n \)개라면, 문장의 확률은 첫 번째 시점의 단어가 등장할 확률인 \( P(w_1) \)에 대한 확률부터 \( n - 1 \)개의 단어들이 주어졌을 때, 다음 시점에 등장할 \( n \)번째 단어의 확률 \( P(w_n \mid w_1, w_2, \cdots, w_n) \)까지 모두 곱한 것이다.
■ 그러므로, 예시 문장의 확률 \( P( \text{An adorable little boy is spreading smiles}) \)는 다음과 같이 나타낼 수 있다.
\( P(\text{An adorable little boy is spreading smiles}) = \)
\( P(\text{An}) \cdot P(\text{adorable} \mid \text{An}) \cdot P(\text{little} \mid \text{An adorable}) \cdot P(\text{boy} \mid \text{An adorable little}) \cdot P(\text{is} \mid \text{An adorable little boy}) \)
\( \cdot P(\text{spreading} \mid \text{An adorable little boy is}) \cdot P(\text{smiles} \mid \text{An adorable little boy is spreading}) \)
■ 이렇게 문장의 확률은 문장에 속하는 각 단어가 등장할 확률(=예측 확률)들을 곱해서 계산할 수 있다.
2.2 단어의 빈도수(카운트)에 기반한 확률 계산
■ 문장의 확률을 구하기 위해 각 시점마다 다음 단어가 등장할 확률을 모두 곱해야 한다면, 이를 계산하기 위해서는 각 시점의 확률을 계산해야 한다. 각 시점의 확률(=이전 단어로부터 다음 단어가 등장할 확률)을 계산하는 가장 기본적인 방법은 단어의 빈도수(카운트)에 기반하여 확률을 계산하는 것이다.
■ 예를 들어, An adorable little boy까지 나왔을 때, 다음 단어인 is가 나올 확률 \( P(\text{is} \mid \text{An adorable little boy}) \)는 조건부 확률이다. 이 확률은 조건부 확률 정의에 따라 \( P(\text{is} \mid \text{An adorable little boy}) = \dfrac{P(\text{An adorable little boy , is})}{P(\text{An adorable little boy})}\)로 나타낼 수 있다.
■ 전체 표본공간이 말뭉치(corpus) 데이터라고 했을 때, 분모와 분자는 '확률'이므로 어떤 행위를 n 번 시행했을 때의 발생 빈도( f/n )이다.
■ 분모의 확률은 말뭉치 데이터에서 An adorable little boy가 등장한 횟수라고 볼 수 있다.
■ 분자의 확률은 말뭉치 데이터에서 An adorable little boy와 is가 함께 등장한 확률이다. 만약, 전체 말뭉치 데이터에서 An adorable little boy가 100번 등장했고, An adorable little boy 뒤에 is가 등장한 횟수(= An adorable little boy와 is가 함께 등장한 횟수)가 30번이라면, 분자의 확률은 0.3(=30%)이 된다
2.3 통계적 언어 모델의 희소성 문제
■ 2.2의 예시에서 \( P(\text{is} \mid \text{An adorable little boy}) = \dfrac{P(\text{An adorable little boy , is})}{P(\text{An adorable little boy})}\)를 계산하였고, 분모와 분자의 확률은 말뭉치 데이터라는 공간에서 An adorable little boy의 발생 빈도, An adorable little boy is의 발생 빈도로 계산해야 한다.
■ 이렇게 분자와 분모의 확률이 발생 빈도에 결정된다면, 말뭉치 데이터에 An adorable little boy is라는 단어 시퀀스가 아예 없는 경우 분자에 있는 확률은 0이 되는 문제가 발생한다. 또는 An adorable little boy라는 단어 시퀀스가 아예 없다면 분모의 확률은 0이 되는 문제가 발생한다.
■ 이렇게 충분한 데이터를 관측하지 못해서 발생하는 문제를 '희소(sparsity) 문제'라고 한다.
■ 통계적 언어 모델의 희소 문제를 완화하기 위해 n-gram 언어 모델이나 다른 기법이 등장했지만, 희소성 문제를 해결하지 못하였다. 이러한 한계로 언어 모델의 흐름은 인공신경망 언어 모델로 넘어가게 된다.
2.4 n-gram 언어 모델
■ n-gram 언어 모델도 카운트에 기반하는 통계적 언어 모델이다. 단, 모든 단어를 고려하는 것이 아니라 일부 단어만 고려한다. n-gram 언어 모델에서 고려하는 단어의 개수는 n의 값에 따라 달라진다.
- n-gram은 n개의 연속된 단어 그룹(조합)으로 나누는 방법이다
- 예를 들어 1-gram 언어 모델은 각 단어가 독립적으로 발생할 확률을, 2-gram 언어 모델은 2개의 연속된 단어 그룹들의 확률을 계산한다.
■ 단순히 단어의 빈도수(카운트)에 기반한 확률 계산 방법은 말뭉치에 해당 단어가 희소하거나 아예 없는 경우가 문제였다.
■ n-gram 언어 모델은 이런 한계를 완화하고자, 희소한 단어라도 카운트했을 때 그 확률을 높이고자 참고하는 단어들을 줄이는 방법을 사용한다.
■ 예를 들어 An adorable little boy is와 little boy is는 비슷한 흐름으로 해석할 수 있다. An adorable little boy까지 나왔을 때, 다음 단어로 is가 나올 확률 \( P(\text{is} \mid \text{An adorable little boy}) \)과 \( P(\text{is} \mid \text{little boy}) \) little boy까지 나왔을 때, 다음 단어로 is가 나올 확률을 비교한다면,
말뭉치에 ' An adorable little boy is' 보다 'little boy is'라는 더 짧은 단어 시퀀스의 빈도가 높을 수 있다. 그러므로 확률 \( P(\text{is} \mid \text{An adorable little boy}) \)보다 확률 \( P(\text{is} \mid \text{little boy}) \)가 더 높을 가능성이 있다.
■ 이렇게 모든 단어를 포함해서 카운트하는 것이 아니라, 임의의 \( n \)개 단어만 포함해서 카운트하여 확률 \( P(\text{is} \mid \text{An adorable little boy}) \)과 확률 \( P(\text{is} \mid \text{little boy}) \)을 근사하려는 것이 n-gram 언어 모델의 희소성 문제 완화 방법의 아이디어이다. 이렇게 하면 희소한 단어라도 말뭉치에 아예 없는 단어가 아니라면, 희소 단어를 카운트할 확률이 높아지기 때문이다.
■ n-gram은 \( n \)개의 연속적인 단어 나열을 의미한다. 말뭉치에서 \( n \)개의 단어씩 끊어 이를 하나의 토큰으로 간주한다. unigram은 토큰 1개로 이루어지며, 단어 그룹에는 단어 1개가 들어가므로 모든 단어를 독립적으로 분류할 수 있다. bigram은 토큰 2개, trigram은 토큰 3개, 4-gram은 토큰 4개로 이루어진다.
- 예를 들어 예시 문장 ’An adorable little boy is spreading smiles’에 대해 1-gram, 2-gram, 3-gram, 4-gram을 적용한다면
## 1-gram
[['An'], ['adorable'], ['little'], ['boy'], ['is'], ['spreading'], ['smiles']]
## 2-gram
[['An', 'adorable'], ['adorable', 'little'], ['little', 'boy'],
['boy', 'is'], ['is', 'spreading'], ['spreading', 'smiles']]
## 3-gram
[['An', 'adorable', 'little'], ['adorable', 'little', 'boy'],
['little', 'boy', 'is'], ['boy', 'is', 'spreading'], ['is', 'spreading', 'smiles']]
## 4-gram
[['An', 'adorable', 'little', 'boy'], ['adorable', 'little', 'boy', 'is'],
['little', 'boy', 'is', 'spreading'], ['boy', 'is', 'spreading', 'smiles']]
■ n-gram 언어 모델에서 \( n \)번째 등장할 단어는 \( n - 1 \)개의 단어에 의해 결정된다. 이를 확률로 나타내면 다음과 같다.
■ 이렇게 근사할 수 있는 이유는 마르코프(Markov) 가정을 따르기 때문이다., 이전 단어들인 \( n - 1 \)개의 단어를 고려하기 때문에 \( n - 1 \)차 마르코프 가정이라고도 부른다.
■ 마르코프 가정은 특정 시점(미래 시점)에서 어떤 사건은 과거에 대해 독립이며, 바로 직전의 사건에 대해서만 영향을 받는다는 가정이다.
■ 총 \( T \)개의 토큰으로 구성된 문장의 확률을 n-gram을 사용하여 나타내면 다음과 같다.
■ 예를 들어, 'An adorable little boy is spreading' 다음에 나올 단어를 예측한다고 했을 때, 4-gram을 사용한다면 이전 시점의 3개의 단어 boy is spreading을 조건부로 고려하게 된다. 즉, 다음과 같이 확률을 근사할 수 있다.
- 'An adorable little boy is spreading' 다음에 나올 단어를 \( w \)라고 하면
\( P( w \mid \text{An adorable little boy is spreading}) \approx P( w \mid \text{boy is spreading}) \)
이렇게 우변에 있는 확률 \( P( w \mid \text{boy is spreading}) \)로 근사할 수 있는 이유는 마르코프 가정 때문이다.
2.5 n-gram 언어 모델의 한계
■ n-gram언어 모델은 2-gram, 3-gram, 4-gram, 5-gram 이렇게 n개의 연속된 단어 그룹(조합)으로 나누고, \( n \)번째에 등장할 단어를 예측하기 위해 \( n - 1 \)개의 단어들만 고려하기 때문에 장기 의존성 부재로 인한 정확도가 떨어진다는 단점이 있다.
- 위의 'An adorable little boy is spreading' 다음에 나올 단어 예측 예시에서도 앞쪽의 문맥을 전혀 고려하지 않는 문제를 볼 수 있다.
■ 그리고 n-gram 기법으로 희소한 단어 시퀀스를 카운트할 수 있는 확률은 높아질 수 있지만, 결국 단어의 빈도수 자체가 말뭉치에 의존하기 때문에 여전히 희소성 문제가 존재한다.
■ n-gram 언어 모델을 사용할 때 n은 사용자가 정의해야 하는데, 상충 관계(trade-off)가 존재한다.
- 1-gram보다는 2-gram을, 2-gram보다는 3-gram을 사용해야 언어 모델의 성능을 높일 수 있다.
- 'An adorable little boy is spreading' 다음에 나올 단어를 예측한다고 했을 때
- 2-gram으로 설정해서 'spreading'만 고려하는 것보다 4-gram으로 'boy is spreading'을 고려하여 다음 단어인 'smiles'를 예측하는 것이 더 정확하기 때문이다.
- 하지만, n을 더 크게 선택하면 다시 희소성 문제가 발생할 확률이 높아지게 된다. n을 7, 8, 9, ....로 점점 크게 늘린다면, 결국 ' An adorable little boy is spreading'을 모두 고려해야 하기 때문이다.
- 또한 n이 커질수록 모델 사이즈가 커지게 된다.
- 말뭉치 데이터에 따라 적절한 n의 값은 달라질 수 있지만, 일반적으로 n은 최대 5를 초과하지 않는 것이 권장된다.
■ 이러한 n-gram 언어 모델의 문제를 완화하기 위한 방법으로 스무딩(Smoothing)과 백오프(Backoff)가 있다.
- 스무딩은 단어의 등장 횟수가 0이 되지 않도록 출현 빈도를 보정해주는 방법으로, 모든 단어의 시퀀스의 등장 횟수에 아주 작은 값을 더해준다.
- 백오프는 확률이 0이 되는 경우 n-gram의 order를 하나 내려서 계산하는 방법이다. 예를 들어, bigram을 사용했는데, 'little boy'의 확률이 0이라면, order를 하나 내려 unigram을 사용해서 'boy'의 확률을 계산한다.
3. 언어 모델의 평가 방법 - perplexity
3.1 perplexity
■ 언어 모델은 과거 단어로부터 다음에 출현할 단어의 확률분포를 출력하기 때문에 언어 모델들의 성능을 비교하기 위해 정확도를 사용한다면, 다소 시간이 많이 소요될 수 있다.
■ 언어 모델의 예측 성능을 평가하기 위한 척도 중에는 정확도를 사용했을 때보다 조금은 부정확할 수는 있어도, 테스트 데이터에 대해 빠르게 계산할 수 있는 평가 척도로 퍼플렉시티가 있다.
■ perplexity(혼란도)는 모델이 주어진 정보(과거 시점의 단어들)로 예측을 수행할 때, 얼마나 혼란을 겪는지를 측정한다. 그러므로 값이 낮을수록 언어 모델의 성능이 좋다는 것을 의미한다.
■ 문장 \( W \)의 길이가 \( N \)이라고 했을 때, 퍼플렉시티의 공식은 \( \text{perplexity} (W) = P(w_1, w_2, w_3, ..., w_N)^{-\frac{1}{N}} = \sqrt[N]{\dfrac{1}{P(w_1, w_2, w_3, ..., w_N)}} \)
■ 여기에 조건부 확률의 체인룰을 적용하면 다음과 같이 나타낼 수 있다. \( \text{perplexity} (W) = \sqrt[N]{\dfrac{1}{P(w_1, w_2, w_3, ..., w_N)}} = \sqrt[N]{\dfrac{1}{\prod_{i=1}^{N} P(w_i | w_1, w_2, ..., w_{i-1})}} \)
cf) 퍼플렉시티 공식에 n-gram의 체인룰을 적용할 수도 있다.
3.2 분기 계수(Branching factor)
■ 분기 계수는 다음 단어로 선택할 수 있는 단어의 후보 개수를 의미한다.
■ 예를 들어 퍼플렉시티 값이 10이 나왔다고 해보자. 이것은 언어 모델이 다음 단어를 예측하는 모든 시점마다 10개의 단어가 다음 단어의 후보 개수가 될 수 있음을 의미한다. 이렇게 되면 다음 단어 선택에 있어 혼란을 겪을 수 있다.
■ 그러므로 언어 모델을 퍼플렉시티 값으로 비교할 때, 퍼플렉시티 값이 더 낮은 언어 모델이 성능이 더 좋다고 볼 수 있다.
참고)
'자연어처리' 카테고리의 다른 글
유사도 (0) | 2025.02.28 |
---|---|
Bag of Words, DTM, TF-IDF (0) | 2025.02.27 |
텍스트 표준화, 토큰화, 어휘 사전(단어 집합) 인덱싱 (0) | 2025.02.24 |
텐서(Tensor) (0) | 2025.01.20 |
기본 용어 (1) (0) | 2025.01.01 |