NLP

Text Generation

토킹감쟈 2023. 1. 24. 13:14

Text Generation(Natural Language Generation : NLG)

자연어처리는 크게 NLG와 NLU로 나눌 수 있으며, 그중 NLG는 자연어 생성 자체를 목적으로 하는 것이다. NLU라는 것은 Natural Language Understanding으로, Token Classification 등이 있다.

 

NLG가 사용되는 분야로는

  • Machine Translation
  • Open-ended Generation (ex.Promt를 몇 개 주고 소설을 만드는 모델)
  • Summarization
  • Dialogue System
  • Question & Answering

Summarization에는 Extractive와 Abstractive Summarization이 있는데, 

Extractive는 source text에서 단어를 뽑아서 문장을 생성하는 방식으로 학습이 잘 이루어진다는 장점이 있고,

Abstractive는 생성하는 문장이 source text와 관련은 있지만 해당 text에서 단어를 뽑지 않고 새로운 단어로 요약문장을 생성하는 모델로, extractive에 비해 학습이 어렵다는 단점이 있다.

 

Dialogue System에는 GPT등을 이용한 챗봇이 있는데, 사람과 실제 대화를 나눌 때 주제를 유지하는 것이 컴퓨터의 입장에서는 가장 어려울 수 있다고 판단된다. 그전에 입력한 것에 대한 기억을 잃을 수 있기 때문이다. LSTM을 사용할 경우엔 기억을 오래 못할 수 있고 Transformer을 사용하면 text의 길이가 길어지면 메모리의 크기에 많은 영향을 끼치기 때문에 어려울 수 있다. 

 

 

Formulation & Training of Text Generation

text classification의 경우 예측의 클래스가 작다. 예를 들어 영화리뷰에 대한 감정을 분류한다고 하면 크게 긍정과 부정 두 가지로 나눌 수 있다. 하지만 text generation의 경우 출력할 수 있는 경우의 수가 classification과는 비교가 되지 않을 정도로 많다. 이러한 사이즈를 해결하기 위해 chain rule을 사용하여 조건부확률을 적용한다. 특정 output인 y를 출력하기 위해 source text인 X와 그전 time step에서 출력한 y들을 고려하는 것이다. 이것은 아래와 같은 수식으로 표현할 수 있다.

 

수학적으로 본다면, 인코딩 과정을 거쳐서 나온 context vector가 X자리에 들어가고 y에 들어가는 것들은 처음 입력되는 것과 그 전time step들에서 출력되는 output 값들이라고 할 수 있다.

기계번역 모델에서는 디코더에 "정답"을 넣어 학습시킬 수 없다는 문제가 있다. 따라서, Teacher forcing이라는 개념이 생겼다.

 

 

Teacher forcing

"정답"에 해당하는 ground-truth target word를 디코더의 다음 입력값으로 제공해 주는 것을 말한다. 정답이 아닌 다른 단어가 나와도 Teacher forcing으로 올바른 token을 다음 입력값으로 넣어줄 수 있다. 즉, 이전 time step의 예측은 다음 예측에 영향을 미치지 않는다는 것이다. 

이는 학습을 빠르고 안정적이게 하며, 효율적으로 진행한다는 장점이 있다. 하지만, test할 때에는 문제가 된다. Ground-truth가 없기 때문에 틀린 답이 다음 time step의 input으로 들어갈 수 있기 때문이다. 결과적으로 train과 test가 일치하지 않으며 이는 모델의 안정성과 수행력을 낮춘다. GT를 제공할 수 없다는 것을 Exposure Bias라고 하는데, 이를 줄이기 위해 Scheduled Sampling을 이용한다.

 

 

 

Scheduled Sampling

Scheduled Sampling은 모델의 학습 중 어느 단계에서 Teacher Forcing을 사용할 것인지를 결정하는 것이다. 

모델 학습 완전 초기에는 Teacher forcing없이는 학습을 진행할 수가 없다. 하지만 학습 중간쯤으로 갔을 때에는 절반정도 teacher forcing으로 gt를 제공하면서 학습을 진행하고, 절반은 gt를 제공받지 않고 이전 time step의 output을 해당 time step의 인코딩벡터로 사용한다. 학습의 끝에 가서는 teacher forcing을 모두 끈다. 

이 Scheduled Sampling은 2015년에 소개된 내용이다. 지금은 이러한 스케쥴링을 이용하지 않고 그저 모델을 학습시키는 도중엔 계속 teacher forcing을 사용한다. 

 

 

Decoding Strategy

먼저 decoding strategy를 분류해서 나타내보면 다음과 같다.

Likelihood base Decoding

  • Greedy decoding
  • Beam search

Sampling-based Decoding

  • Random sampling
  • Top-k sampling
  • Top-p sampling(nucleus sampling)

 

학습된 모델은 매 time step에서 새로운 단어를 생성한다. 또한, 생성된 이 단어는 다음 time step의 input으로도 사용된다.

위와 같은 디코딩 과정에서 가장 큰 문제는 바로 어떻게 output값을 결정하는 것이냐이다. <"좋은"이라는 단어를 어떻게 고를까?>가 가장 큰 문제라고 말할 수 있다. 이때 사용되는 것이 바로 Decoding Strategy이다. 어떠한 전략으로 output 값을 만들어내는지에 따라 다른 출력값을 낼 수 있다.

 

 

Greedy Decoding

그리디 알고리즘과 비슷한 맥락으로, "가장 높은 확률인 것을 고르겠다"라는 아이디어를 가지고 있다. RNN을 거치고 softmax를 거쳐 확률값이 나왔을 때 그 확률값들 중 가장 높은 단어를 생성하겠다는 것이다. 하지만 greedy decoding의 가장 큰 한계점은 optimal을 보장하지 않는다는 것이다. 최적의 문장을 고를 수 없을 수도 있다는 것인데, 좋은 단어(즉, 확률이 높은 단어)만을 고른다고 좋은 문장이 출력되지는 않는다. 

위의 그림을 보면, 각 time step마다 가장 높은 확률인 단어가 선택되어 최종적으로 The nice woman이라는 문장이 출력되었다. 하지만 결과적으로 보면 The dog has라고 출력되는 것이 가장 큰 확률값을 가지게 된다. 이러한 예시가 가장 적절한 선택을 하지 못했다는 것을 보여준다.

이러한 최적의 단어를 찾지 못한다는 한계를 보완하기 위해 나온것이 Beam Search이다.

 

Beam Search

Beam Search의 아이디어는 디코더의 매 time step에서 k개의 가장 높은 확률을 가지는 것을 쫓는다는 것이다. Greedy가 하나의 가설만을 가지고 단어를 선택하면 그 문장으로 확립해 나가는 것과는 다르게 Beam search는 k개의 가설을 가지는 것이다. 예를 들어 k=2라고 한다면, 아래와 같이 표현할 수 있다.

4개의 가설 중 2개를 선택해야 하는 상황이고, 이때 확률값이 큰 것으로 선택하는 것이다. 선택받지 못했다면 그 단어의 뒤에 나올 수 있는 단어는 이제 고려하지 않고 선택된 단어 뒤로 나올 수 있는 경우의 수만 생각하게 된다. 선택된 단어만 다시 디코더의 input으로 넣어 각각의 경우에서 나올 수 있는 output을 확인하고 다시 2개의 길로 좁히는 과정을 반복하는 것이다.

Beam search의 장점은 나와야 하는 단어가 얼마나 나왔는지를 표현하는 수치인 recall 값이 높다는 것이다. 하지만, 반복적인 sequence가 출력되기 쉽다는 단점이 있다.(이것은 greedy도 마찬가지) 한번 반복되기 시작하면 probability값이 높아지고 이는 긍정적인 feedback을 주는 것이므로 계속 특정단어를 반복하게 된다는 것이다. 또한, 문장이 너무 재미없게 생성될 수 있다. 사람은 실제로 말할 때 최적의 것들만을 찾지는 않는다. 항상 그럴듯한 단어만을 사용하는 것이 아니라 잘 쓰이지 않는 단어를 사용하기도 한다는 것이다. 하지만 Beam Search는 최적의 단어를 찾기 위한 과정이므로 완전히 사람의 언어적 습관과 같다고는 할 수 없다. 

위의 표는 사람은 각 token의 확률이 불규칙적인 것을 알 수 있지만, Beam Search는 확률의 폭이 넓지 않고 비교적 평탄하게 좋은 단어만을 고르고 있다는 것을 보여준다.

 

이러한 단점들을 보완하기 위해 고안된 것이 Sampling-based Decoding Strategy들이다. 확률값을 살짝 건드려 randomness를 마련했다고 할 수 있다.

 

Random Sampling

Random Sampling은 정말 말 그대로 random 하게 토큰을 선택한 것이다. output값이 다양해질 수는 있지만 너무 맞지 않는 단어, 즉 모델의 자연스러움(perplexity)를 해칠 정도로 작은 확률을 가지는 단어가 선택될 수도 있는 것이다.

이것은 큰 단점이 되므로 여기서 살짝 보완한 것이 Random Sampling with Temperature이다.

 

Random Sampling with Temperature

t라는 변수를 추가하여 확률값을 더 날카롭게 만들거나 평탄하게 만드는 것이다. 원래 디코더를 생각해 보면 결괏값으로 나온 logit에 softmax를 거쳐 probability를 결정짓는다.

파란색 하이라이트로 표시한 부분은 원래 softmax식이고, 그것을 각각 t라는 temperature변수로 나누어서 확률값을 조정한다. exponential로 표현하면 더욱 직관적으로 알 수 있는데,

 

softmax는 지수함수에 따라 움직이기 때문에 t의 크기에 따라 그 크기에 영향을 많이 받는다. 

t < 1 인 경우, 1/t가 뒤집히므로 원래의 지수값을 더욱 극대화한다는 것을 알 수 있다. 

반면, t > 1 인 경우에는, 원래의 지수값을 더 작게 만드므로 확률을 평탄하게 만든다는 것을 알 수 있다. 

 

t의 값이 클수록 확률값은 flat 해지고, 출력가능성이 다양해진다는 것을 의미한다. 다양하긴 하지만 이는 다른 말로 하면, 원래 나오지 않아야 할 단어들도 더 잘 나올 수 있음을 의미하므로 문법적으로 좋지 않아 질 수 있다(coherence↓). 반대로, t의 값이 작을수록 확률값은 sharp해지고, 출력 다양성은 줄어들지만 coherence값은 올라간다(recall↑).

확률이 평탄하다, 확률이 flat 하다는 것은 다음 token이 뭐가 나올지 잘 알 수 없다는 것을 의미하며 entropy가 높다고 이해할 수 있고, 확률이 날카롭다, 확률이 sharp 하다는 것은 차분해진다는 느낌으로, 나와야 할 단어들이 더 잘 나오게끔 만든 것이며 entropy가 낮다고 이해할 수 있다.

 

t의 값들을 극단적으로도 생각해 보자.

만약 t→0 이면 확률분포를 하나의 거대한 막대로 그리게 될 수 있다. 이것은 가장 큰 확률값을 출력하는 greedy decoding과 같다. 

t→∞ 이면 모든 token이 동일한 확률값을 갖게 되고 확률분포는 수평선으로 표현된다. 결과적으로 Uniform Sampling을 나타내게 된다.

 

Top-K Sampling

가능한 모든 token에 확률값 조정(temperature 변수 사용)을 하는 것이 아니라 가장 확률값이 높았던 k개의 단어 안에서만 샘플링을 진행하는 것이다. 확률이 너무 낮은 건 output값을 고민하는 데에 있어 고려대상으로 삼지 않겠다는 것을 의미한다. 하지만 고정된 개수의 단어만을 선택하는 것은 항상 좋은 것은 아니다. 가령 확률값에 별 차이가 없지만 어떤 단어는 sampling 대상이 되고 어떤 단어는 그렇지 않을 수도 있다. 이것이 top-k sampling의 단점이다. 확률값이 별 차이가 없다는 것은 distribution이 broad 하다는 것을 의미하고 이렇게 되면 선택이 임의적이게 될 수밖에 없다.

Top-k Sampling의 Broad Distribution

그렇다면 k를 고정하지 않은 방법을 고려해 볼 수 있는데, 그것이 Top-p sampling이다.

 

Top-p sampling(nucleus sampling)

top-k와 비슷하지만 k를 지정하지 않는다는 것이 특징이다. 대신 특정 임계값(p)을 정해놓고 확률값이 높은 단어부터 차례대로 확률값을 더해서 p를 넘게 되면 해당 단어까지 만을 sampling 대상으로 선정한다. 위의 그림처럼 확률이 broad 하면 k 개수가 늘어나게 된다.