딥러닝을 이용한 자연어 처리 입문 교재를 바탕으로 작성되었습니다.
노션에 정리된 것을 거의 그대로 옮겨왔습니다.일부 텍스트 깨짐 등이 있을 수 있습니다.
03-01. 언어 모델(Language Model)이란?
- 언어 모델은 단어 시퀀스(문장)에 확률을 할당하는 모델이다.
- 통계를 이용한 방법, 신경망을 이용한 방법으로 구분할 수 있다. 최근에는 인공 신경망을 이용한 방법이 더 좋은 성능을 보여준다.
1. 언어 모델
- 확률 기반으로 가장 자연스러운 단어 시퀀스를 찾아내는 모델이다. 가장 보편적인 것은 이전 단어들이 주어졌을 때 다음 단어를 예측하는 것이다.
- 이후 배우게 될 BERT 모델과 같이 양쪽의 문맥을 통해 가운데의 빈 단어를 맞추는 유형도 있다.
- 언어 모델에 -ing가 붙은 언어 모델링(Language Modeling)은 주어진 단어로부터 아직 모르는 단어를 예측하는 작업을 말한다.
2. 단어 시퀀스의 확률 할당
- 확률을 통해 다음 시퀀스를 예측하는 원리로 다음과 같은 문제를 풀 수 있다.
1) 기계 번역
1
P(나는 버스를 탔다) > P(나는 버스를 태운다)
- 좌측의 문장 확률이 더 높다.
2) 오타 교정
1
2
아버지가 방에
P(들어가신다) > P(들고가신다)
- 좌측의 문장 확률이 더 높다.
3. 주어진 이전 단어로 다음 단어 예측하기
- 조건부 확률로 표현할 수 있다.
1) 단어 시퀀스의 확률
n개의 단어 w로 구성된 단어 시퀀스 W의 확률은 다음과 같다.
\[\\P(W) = P(w_1, w_2, w_3, w_4, w_5, ... ,w_n)\]
2) 다음 단어 등장 확률
- 단어를 순차적으로 하나씩 추가해가면서 다음 단어의 등장 확률을 알 수 있다.
예를 들어 W 4번째 단어의 등장 확률은 다음과 같이 조건부 확률로 나타낼 수 있다. \(\\P(w_4 | w_1, w_2, w_3)\)
|
기호는 조건부 확률을 의미한다.
- 즉 W의 확률은 모든 단어가 예측되고 나서야 알 수 있다.
4. 검색 엔진에서의 언어 모델
- 구글, 네이버의 자동 완성 기능이 이러한 다음 단어를 예측하는 언어 모델을 사용한다.
03-02 통계적 언어 모델(Statistical Languate Model; SLM)
- 통계학적 접근 방법의 언어 모델을 말한다.
1. 조건부 확률
A가 일어났을 때 B가 일어날 조건부 확률 : $$ P(B A) $$ - \[P(B|A) = P(A \cap B)/P(A)\]
- \[P(A \cap B) = P(B|A) * P(A)\]
- 사건이 더 많아지면 아래와 같이 표현할 수 있다.
- \[P(A \cap B \cap C \cap D) = P(A)P(B|A)P(C|A \cap B)P(D|A \cap B \cap C)\]
- 이렇게 조건부 확률이 연결되는 법칙을 확률의 연쇄 법칙이라고 한다.
2. 문장에 대한 확률
\(\) P(W) = P(w_1, w_2, w_3, w_4, w_5, … ,w_n) \ = P(w_1)P(w_1|w_2)P(w_3|w_1 \cap w_2)P(w_4|w_1 \cap w_2 \cap w_3) … \(\)
3. 카운트 기반 접근
- SLM은 전체 코퍼스 데이터에서 추출한 전체 단어와 각 단어의 카운트가 담긴 vocab을 만든다. 이 카운트를 바탕으로 확률을 계산한다.
- I like to drink 가 총 100번 나왔을 때, hot이 30번 나왔다고 하면,
P(hot|I like to drink) = 30%
이다.
4. 카운트 기반 접근의 한계
- 카운트 기반 SLM이 보다 높은 성능을 내기 위해서는 기계가 훈련하기 위해 정말 방대한 데이터가 필요하다.
- “I like to drink hot chocolate”이라는 문장을 만들고 싶은데, 학습한 코퍼스에서 “I like to drink”가 등장한 사례가 없으면
P(hot|I like to drink)
에서 분모가 0이되어 아예 확률을 도출할 수 없다.- 이러한 확률을 정의되지 않는 확률이라고 하고, 이러한 문제를 희소 문제(sparsity problem)이라고 한다.
- 희소 문제를 해결하기 위한 다양한 기법이 제시 되었으나 결국 근본적인 해결책은 되지 못했다.
03-03 N-gram 언어 모델(N-gram Language Model)
- n-gram 언어 모델은 SLM의 일종으로 이전에 모든 단어를 고려하는 대신, 이전의 n개의 단어만 고려하는 접근 방법을 사용한다.
1. 코퍼스에서 카운트하지 못하는 경우의 감소
- 전체 코퍼스 데이터에서
I like to drink
라는 문장보다to drink
라는 문장이 존재할 가능성이 더 높다. 즉 카운트 할 수 있는 가능성을 더 높일 수 있다. - 이렇게 하면 희소 문제에서 정의되지 않는 확률이 존재할 가능성을 낮출 수 있다.
2. N-gram
- n-gram에서 n은 이전에 n개까지의 단어 나열을 센다는 의미이다.
- unigrams(n=1) : I, like, to, drink
- bigrams(n=2) : I like, like to, to drink
- trigrams(n=3) : I like to, like to drink
- 4-grams(n=4) : I like to drink
I like to drink
다음에 올 문장을 예측할 때, 앞의 n-1개의 단어만을 고려하여 n개의 연속적인 단어 나열을 찾는다.n=3 인 경우 $$ P(\text{hot} \text{to drink}) = \frac{\text{count(to drink hot})}{\text{count(to drink)}} $$
3. N-gram 언어 모델의 한계
- n-gram은 n개 이전의 단어에 대해서는 완전히 잊어버린다는 문제가 있다.
- 예를 들어
I hate to drink
라는 문장을 완성하려 할 때, trigrams라면I like to drink
다음에 올 문장을 찾는 것과 차이가 없어지게 된다.
- 예를 들어
- 즉 희소 문제를 어느정도 해결할 수 있지만, 정확도는 전체 문장을 확인할 때보다 떨어진다.
1) 희소 문제
- 전체 문장을 확인하는 것보다는 희소 문제가 발생할 가능성이 낮지만, 여전히 희소 문제가 존재한다.
2) n의 trade-off 관계
- n이 커질수록 희소문제는 심각해지고, 모델 사이즈가 증가한다.
- 반면 n이 작아질수록 모델의 정확도가 감소한다.
4. 적용 분야(Domain)에 맞는 코퍼스 수집
- 특정 어플리케이션에 사용하기 위한 언어 모델이라면, 당연히 해당 도메인의 코퍼스를 사용해야 정확도가 증가할 것이다.
5. 인공 신경망 기반 언어 모델
- N-gram 언어 모델 역시 SLM의 본질적인 문제를 해결하지 못하였다, 이를 위한 대안으로 SLM보다 대체적으로 성능이 우수한 인공 신경망 기반 언어 모델을 많이 사용하고 있다.
03-04 한국어에서의 언어 모델
- 한국어는 특히 다음 단어를 예측하기가 까다롭다.
1. 한국어는 어순이 중요하지 않다.
- 한국어는 어순이 뒤바뀌어도 대략 의미가 통하기 때문에, 다음 단어로 어떤 단어든 등장할 수 있다.
- 어제 친구랑 밥을 먹으러 홍대에 갔다.
- 친구랑 어제 밥을 먹으러 홍대에 갔다.
- 어제 홍대에 친구랑 밥을 먹으러 갔다.
- 어제 홍대에 갔다. 친구랑 밥을 먹으러.
- 어제 친구랑 밥을 먹으러 갔다. 홍대에
- 이렇게 단어 순서가 뒤죽박죽으로 바뀔 수 있기 때문에 확률 기반의 언어 모델이 다음 단어를 예측하기 어렵다.
2. 한국어는 교착어이다.
- 한국어는 교착어이기 때문에 조사 등이 존재한다. 때문에 띄어쓰기인 어절 단위로 토큰화하면 발생 가능한 단어의 수가 굉장히 늘어난다.
- 친구가, 친구는, 친구랑, 친구를, 친구와, 친구의
- 때문에 한국어에서 접사와 조사를 분리하는 것은 중요한 작업이되기도 한다.
3. 한국어는 띄어쓰기가 제대로 지켜지지 않는다.
- 한국어의 띄어쓰기 문법은 현대에 정립되었으며, 심지어 외국인이 한국어 공부 책을 만들 때 영어와 대응하는 과정에서 시작되었다. 즉 한국어에서 띄어쓰기는 굉장히 생소한 개념이며, 띄어쓰기를 제대로 지킬 줄 아는 사람이 드물다.
- 이러다 보니 한국어 코퍼스는 띄어쓰기가 지켜지지 않는 경우가 많다. 이로 인해 토큰화가 잘 이루어지지 않으면 모델도 제대로 동작하지 않을 것이다.
03-05 펄플렉서티(Perplexity, PPL)
- PPL은 언어 모델의 성능을 수치화한 것이다.
1. 언어 모델의 평가 방법 : PPL
- Perplexed는 ‘헷갈리는’과 유사한 의미를 가진다. 즉 PPL은 헷갈리는 정도로 이해할 수 있다.
- PPL이 작을 수록 덜 헷갈리는, 즉 좋은 성능의 모델임을 의미한다.
- PPL은 문장의 길이로 정규화된 문장 확률의 역수이다.
\(\) PPL(W)=P(w_{1}, w_{2}, w_{3}, … , w_{N})^{-\frac{1}{N}}=\sqrt[N]{\frac{1}{P(w_{1}, w_{2}, w_{3}, … , w_{N})}} \(\)
- 예를들어 bigrams 언어 모델에서
I like to drink
의 문장 확률이 0.5라면, PPL(to drink) = sqrt(2) ≒ 1.414가 된다.
2. 분기 계수 (Branching factor)
- PPL은 특정 시점에서 평균 적으로 몇 개의 선택지를 선택할 수 있는지를 의미한다.
- 가령 어떤 테스트 데이터에 대한 모델의 PPL이 10이었다면, 해당 모델은 평균적으로 다음 단어를 예측하는 모든 시점에서 평균 10개의 단어를 두고 고민했다고 볼 수 있다.
- 만약 테스트 데이터가 같다면, PPL이 낮을 수록 해당 테스트 데이터에 대한 성능이 더 좋다고 할 수 있다. (모든 데이터에 해당하는 것이 아님을 유의)
- 만약 두 모델의 성능을 PPL을 통해 비교하고자 할 때는 동일한 테스트 데이터를 사용해야 신뢰도가 높다.
This post is licensed under CC BY 4.0 by the author.