기존의 언어모델
[패스트 캠퍼스] 김기현의 딥러닝을 활용한 자연어생성 올인원 패키지 Online.
Ch 02. Language Modeling
03. n-gram
04. Smoothing and Discount
05. Interpolation and Back-off
06. Perplexity
강의를 듣고 작성하였다.
(혹시 본 포스팅이 저작권 등의 문제가 있다면 알려주세요. 바로 내리도록 하겠습니다.
개인 공부 후 언제든지 다시 찾아볼 용도로 작성하고 있습니다.)
n-gram
👉좋은 모델이란 Generalization을 잘하는 모델!
Training(seen) data를 통해서 test(unseen) data에 대해 훌륭한 prediction을 할 수 있는가?
이전에 배웠던 것처럼 n번째 이전의 단어가 주어졌을 때 n번째 단어가 나올 확률로 언어모델을 만든다고 생각하면..→ 이걸 counting word sequence 관점으로 보고 다시 수식으로 써보면
$P(x_n|x_{<n}) = {COUNT(x_1, ... , x_n) \over COUNT(x_1, ... , x_{n-1})}$ 이렇게 쓸 수 있다.
이때 분자가 0이 되면 $P(x_n|x_{<n})$이 존재할 확률이 0이 된다. 그렇지만, 이미 이렇게 확률로 나타낸다는 건 존재하는 문장이다. 확률이 0이 나오는 것은 너무 강력하다. 확률이 0이 되면 안된다. 또한 분모가 0이 되면 정의조차 할 수 없다.
Markov Assumption
Markov assumption을 적용하면, 앞에 있는 몇 개의 단어만 보고서도 $P(x_n|x_{<n})$을 근사할 수 있다.
- if k =2,
$P(x_n|x_{<n})\approx P(x_n|x_{n-1}, x_{n-2})$
$n = k+1$
k | n-gram | 명칭 | |
0 | 1-gram | uni-gram | 자기 자신만 봄 |
1 | 2-gram | bi-gram | 자기 자신까지 두개.. 앞에 한개만 보는 것 |
2 | 3-gram | tri-gram |
n이 커질수록 오히려 확률이 정확하게 표현되는데 어렵다. n이 너무 작아도 확률이 너무 커질 것이다.
보통 3-gram을 가장 많이 사용한다.
- 확률값을 근사하는 가장 간단한 방법은 코퍼스에서 빈도를 세는 것이다.
- 하지만 복잡한 문장일수록 코퍼스에서 출현 빈도가 낮아 부정확한 근사가 이루어질 것이다.
- 확률값이 0이 된다던지..
- Markov Assumption 도입하여 확률값을 근사하는 것을 생각해볼 수 있다.
- 그러면 학습 코퍼스에서 보지 못한 문장에 대해서도 확률값을 구할 수 있다.
그러나 여전히 문제가 있다.
⇒ Markov assumption해도 corpus에 아예 단어 자체가 없다면 확률이 0으로 나올 것이다.
Smoothing & Discounting
Markov assumption 적용하더라도 Training corpus에 없는 unseen word sequence의 확률은 0이 될 것이다.
count가 0이 되지 않도록 아주 작은 값을 분자 분모에 더해서 확률을 아주 작게라도 존재하게 만드는 것
Interpolation & Back-off
- Interpolation(보간법)
- 다른 Language Model을 linear하게 일정 비율로 섞는 것
- general domain LM + domain specific LM
- Back-off
- 희소성을 대처하는 방법
- 조건부 확률에서 조건부 word sequence를 줄여가면 언젠가는 확률을 구할 수 있다.
- 확률값이 0이 되는 현상을 막기 위한 것
- 전통적인 NLP에서는 단어를 discrete symbol로 보기 때문에 문제가 발생한다.
- 여러가지 방법을 통해 문제를 완화하려고 하지만 근본적인 해결책은 아니다!!
언어 모델 평가: Perplexity
👉좋은 언어 모델이란?
실제 사용하는 언어의 분포를 가장 잘 근사한 모델
- 실제 사용하는 언어 → 테스트 시 입력 문장들
- 분포를 잘 근사 → 문장의 likelihood가 높을 것
잘 정의된 테스트셋의 문장에 대해서 높은 확률을 반환하는 언어모델!
- Perplexity(PPL)
evaluation metric으로 이걸 많이 사용
- 테스트 문장에 대해서 언어모델을 이용하여 확률(likelihood)를 구하고
- PPL 수식에 넣어 언어모델의 성능 측정
- 문장의 확률을 길이에 대해서 normalization한다고 생각한다. 이것은 기하평균 구한다고 생각하면 됨
$= ^n\sqrt{1 \over {P(x_1, ... , x_n;\theta})}$ → 문장길이 n에 대해서 normalization
- 테스트 문장에 대해서 확률이 높을수록 좋은건데
역수 취한거니까 테스트 문장에 대한 PPL은 작을수록 좋다.
- Perplexity가 의미하는 것은?
- 선택할 수 있는 문장의 개수 (Time-step별 평균 가짓수)
- PPL이 낮을수록 확률 분포가 Sharp하다. : sharp하다는 건 높은 확률이 하나 존재하는 거니까 고를 수 있는게 적다.
- PPL이 높을수록 확률 분포가 Flat하다. : 고를수 있는게 PPL개, 확률이 다 비슷비슷해서 고를수가 없다. (no clue)
- 즉, 언어모델은 다음 단어를 찍는건데, 언어모델에서 PPL은 다음에 올 단어를 헷갈리고 있는 숫자를 의미한다. 그래서 작은 값일수록 좋고 이것이 의미하는 것은 매 time-step마다 평균적으로 헷갈리고(no clue)있는 단어의 수 이다.
'Deep Learning > NLP' 카테고리의 다른 글
[패캠] (Seq2Seq) seq2seq 모델 (0) | 2022.02.06 |
---|---|
[패캠] (LM) Neural LM (0) | 2022.02.05 |
[패캠] (LM) 언어모델 (0) | 2022.02.05 |
[패캠] 자연어 생성이란 (0) | 2022.02.05 |
[패캠] tokenization (0) | 2021.10.08 |
댓글