N-gram
- 이전에 등장한 모든 단어를 고려하는 것이 아니라 일부 단어만 고려하는 접근 방법을 사용한다.
- 이때 일부 단어를 몇 개 보느냐를 결정하는데 이것이 n-gram에서의 n이 가지는 의미이다.
- n-gram은 n개의 연속적인 단어 나열을 의미한다.
- 갖고 있는 코퍼스에서 n개의 단어 뭉치 단위로 끊어서 이를 하나의 토큰으로 간주한다.
장점 | 단점 |
- 쉽게 대형 시스템에 적용 가능하다. - n-gram 훈련 및 추론 방식이 굉장히 쉽고 간편하다. |
- 등장하지 않은 단어 조합에 대처가 미흡하다. (단어를 discrete symbol로 취급하기 때문에 비슷한 단어에 대한 확률을 이용하지 못함) - 멀리 있는 단어에 대해 대처가 불가하다. - n이 커질수록 용량도 커진다. |
Neural Language Model
n-gram | Neural Network Language Model |
- 단어를 discrete symbol로 취급한다. - generalization issue가 발생하게 된다. - 빠른 연산과 쉽고 직관적인 장점이 있다. |
- Word embedding을 통해, unseen sequence에 대해 대처가 가능하다. - Generation task에서 특히 강점을 보인다. - 연산량이 많다는 특징이 있다. |
- Neural Language Model의 구조
문장이 각 토큰별로 embedding 레이어를 통과하면 여러층의 RNN에 들어가게 된다.
output이 나오면 softmax 레이어에 넣어서 다음 단어를 예측하게 된다.
첫번째 단계를 예를 들어 보게되면, x0을 넣어서 x1을 예측하게 된다.
이러한 구조를 통해 유사한 단어에 대해서도 추측이 가능하게 된다.
D = N개 만큼의 문장을 모아 데이터셋에 저장
Neural Network의 가중치 파라미터 =
데이터셋에 대한 log-likelihood를 maximize 하도록 하는 세타 값을 찾아냄
negative log-likelihood를 minimize하는 값을 찾는 것은 cross entropy를 minimize하는 것과 같다.
Perplexity and Entropy
Perplexity
- 매 time-step마다 모델이 동등하게 헷갈리고 있는 평균 단어 수를 의미한다.
(헷갈리는 단어가 적을수록 좋은 것 == lower is better)
- 문장의 확률에 역수의 기하평균으로 나타낼 수 있으며, 값이 낮을수록 좋다.
(문장의 likelihood가 높을수록 좋은 것 == lower is better)
- 분포로 나타냈을 때, Perplexity가 높을수록 헷갈리는 것을 의미하므로 Flat한 것을 확인할 수 있다
- 분포로 나타냈을 때, Perplexity가 낮을수록 sharp한 것을 확인할 수 있다.
Entropy
- 정보이론에서 엔트로피는 어떤 정보의 불확실성을 나타낸다.
- 불확실성은 일어날 것 같은 사건(likely event)의 확률을 의미한다.
1) 자주 발생하는(일어날 확률이 높은) 사건은 낮은 정보량을 가진다.
2) 드물게 발생하는(일어날 확률이 낮은) 사건은 높은 정보량을 가진다.
- 불확실성이 높다는 것은 확률이 낮다는 것을 의미하며, 확률이 낮으면 정보량이 높다는 것을 의미한다.
- 정보량 : -log 때문에, 확률이 0에 가까워질수록 높은 정보량을 가진다.
I(x) = - log P(x)
- 언어모델 관점 : 흔히 나올 수 없는 문장(확률이 낮은 문장)일수록 더 높은 정보량을 가진다.
- Perplexity에 log를 취하면 cross entropy이다.
- Cross Entropy에 exponential을 취하면 Perplexity가 된다고 할 수 있다.
- Perplexity minimize = cross entopy minimize = minimizing negative log-likelihood
- negative log-likelihood를 minimize하는 값을 찾는 것은 cross entropy를 minimize하는 것과 같다.
Auto - regressive & Teacher Forcing
1) Non-autoregressive (Non-generative)
- 현재 상태가 앞/뒤 상태를 통해 정해지는 경우이다.
- Bidirectional RNN 사용을 권장한다.
2) Autoregressive(Generative)
- 현재 상태가 과거 상태에 의존하여 정해지는 경우이다.
- One-to-many case에 해당되며 Bidirectional RNN 사용이 불가하다.
Auto-regressive
- 과거 자신의 상태를 참조하여 현재 자신의 상태를 업데이트한다.
Teacher Forcing
- 왼쪽 방법대로 한다면 loss를 구할 수 없기 때문에 학습을 못한다.
- Auto-regressive 속성을 가진 모델링을 할 때는, 오른쪽과 같이 Teacher Forcing을 활용한다.
- 이전 timestep의 예측값이 아닌 실제 정답을 입력으로 넣어줌으로써 Loss를 구한다.
- Auto-regressive task에서는 보통 이전 time-step의 모델의 출력을 다음 time-step의 입력으로 넣어준다.
(이전 time-step의 출력에 따라 현재 모델의 state가 바뀌게 됨)
- 적절한 학습을 위해서는 학습 시에는 이전 time-step의 출력 값이 아닌, 실제 정답을 넣어준다.
- 따라서 학습과 추론을 위한 방법이 다르게 되어 문제가 발생하게 된다.
(학습을 위한 코드와 추론을 위한 코드를 따로 짜야하고 학습과 추론 방법의 괴리가 발생하여 성능이 저하될 수 있음)
'Study > AI' 카테고리의 다른 글
[머신러닝/딥러닝] Language Modeling 1 (언어모델) (0) | 2021.10.11 |
---|---|
[머신러닝/딥러닝] 이미지 어그멘테이션 (Image Augmentation) (0) | 2021.08.03 |
[머신러닝/딥러닝] GAN 요약 정리 (0) | 2021.07.13 |
[머신러닝/딥러닝] 풀링 계층 (Pooling Layer , CNN) (0) | 2021.05.17 |
[머신러닝/딥러닝] 합성곱 신경망(Convolutional Neural Network , CNN) (0) | 2021.05.17 |