NLP/cs224n

[cs224n] NLG(Natural Language Generation)

MINAIR 2024. 7. 6. 22:23

1. What is NLG?

NLG는 NLP의 한 종류로, 유창하고, 일관성 있고 유용한 언어를 생성하는 것에 초점을 맞춘다. Machine translation, digital assistant systems, summarization systems 등등에서 NLG가 활용된다. ChatGPT 역시 NLG 시스템이다. 

 

NLG 테스크에는 크게 두 가지 카테고리가 있다. 

  1. non-open-ended generation
    • machine translation이나 summarization처럼 입력에 대해 출력의 다양성이 한정되어 있는 경우
  2. open-ended generation
    • task-driven dialog, chichat dialog, story generation처럼 입력에 대해 출력의 다양성이 높은 경우

less open-ended일수록 낮은 entropy, more open-ended일수록 high entropy를 갖는다.

 

2. A review: neural NLG model and training algorithm

 

한 스텝에서의 output이 다음 스텝에서의 input이 되는 것을 autoregressive하다고 한다. 아래 그림에선 \(\hat{y_{t-1}}\)까지의 단어가 주어지면 \(\hat{y_{t}}\)가 생성되고 이것이 다음 단계의 input으로 사용된다. 이때 vocabulary 안에 있는 단어들에 대해 점수 S가 게산되는데, \(S_w\)는 vocabulary 안에 있는 단어 w의 점수이다. 이것에 softmax function 적용하면 확률 분포 P를 얻을 수 있다. 실제 단어 \(y_{t}\)가 나타날 확률을 최대화하는 것이다. 이때, 이런 autoregressive generation model은 미래의 단어를 참고해서는 안되므로 open-ended tasks에는 decoder만이 사용된다. (encoder는 bidirectional하다)

y_t를 예측할 때 단어들의 scores를 계산

이런 language model은 teacher forcing 방식으로 훈련된다. gold token(실제 토큰)을 입력으로 제공하고 각 스텝 별로 그 입력 단어 다음의 단어를 예측하도록 하는 것이다. 따라서 loss function은 아래와 같이 정의된다. 

이렇게 주어진 토큰들에 대해 다음 토큰의 확률 분포를 구했으면, 실질적으로 어떤 토큰을 다음 단어로 예측할 지 정해야 한다. 이 과정은 decoding algorithm에서 함수를 정의하여 수행되는데, 일반적으로 가장 높은 확률을 가지는 토큰을 고르는 greedy algorithm을 사용한다. 

이런 기본적인 training - decoding 과정을 더욱 발전시킬 수 있는 방법론들에 대해 알아보자.

  • Improve training
  • Improve decoding

3. Decoding from NLG models

open-ended generation의 decoding에서 나타내는 문제는 repetition문제다. 모델 내부적으로 같은 텍스트를 반복해서 출력하면 어쨌든 negative log-likelihood는 줄어들기 때문에 이런 문제가 발생하는 것인데, 이를 self-amplification effect라고 한다. repetition 문제는 아무리 많은 데이터로 학습시켜도 잘 해결되지 않는다. 

그렇다면 어떻게 repetition 문제를 해결할 수 있을까?

  • simple option
    • heuristic: don't use n-grams -> n-gram이 한 번 반복되면 더 이상 반복하지 않는다. 별로 좋지 않은 방법!
  • more complex
    • use a different training objective: 한 번 generate된 토큰에 대해서 penalize / prevent attention mechanism from attending to same tokens(같은 토큰에 집중하면 같은 단어가 generate되기 때문)
    • use a different decoding objective: search for string x that maximize log P_largeLM(x) - log P_smallLM(x) -> smallLM에서 generate되는 단어들은 반복적이고 단순하기 때문

그러나 more complex 방법은 고정적인 확률 분포를 내놓지만 실제 인간의 언어는 복잡하고 불확실하기 때문에 불일치가 일어난다. 

그럼 이제 random sampling을 생각해볼 수 있다. 확률 분포 P에 있는 아무 토큰이나 고를 수 있는 것이다. 그러나 당연히, 엄연히 확률 분포를 구해놨는데 적은 확률을 가진 토큰들에게도 확률을 부여하다 보면, 이것들이 쌓여서 별로 안 중요한 단어들에게도 선택될 기회가 생긴다. 

 

이 문제를 해결하기 위해 크게 두 가지 방법이 있다. 

  • top-k sampling
    • 가장 높은 확률을 가지는 k개의 토큰들 중에서만 랜덤으로 뽑는 것
    • 그러나 k를 지정해야 한다는 한계가 있다. k가 너무 크면 다양한 대신 적은 확률을 가진 토큰들이 뽑힐 수 있다. k가 너무 작으면 안전한 대신 생성되는 문장이 단조로워질 수 있다는 단점이 있다. 
    • 또한, 만약 확률 분포가 uniform한데 k가 정해져 있다면 확률 분포가 비슷한 다른 토큰들은 무시될 수 있다(cut off가 너무 빨리 일어난다). 반대로 확률 분포가 skewed되어 있는데 k가 정해져 있다면 cut off가 너무 느리게 일어난다. 

따라서 확률 분포에 따라 k를 다르게 지정해야 한다. 

  • top-p sampling
    • k는 확률 분포 P의 uniformity에 따라 정해진다.
    • 분포의 entropy에 따라 토큰들에게 가중치를 부여한다. -> entropy가 높으면 분포가 uniform하다는 것이므로 여러 확률에 가중치를 고르게 준다. entropy가 낮으면 분포가 치우쳐져 있다는 것이므로 치우쳐진 확률 토큰에 큰 가중치를 주고 sparse한 확률 토큰에는 낮은 가중치를 준다. 
    • 아주 낮은 확률은 아예 고려되지 못하도록 valid threshold를 설정한다. 

 

확률 분포 P는 temperature hyperparameter 타우를 통해 scaling될 수 있다. 

타우 > 1이면 확률 분포는 훨씬 uniform해지고(더 다양한 output) 타우 < 1이면 확률 분포는 훨씬 spiky(output이 몇 개 안됨)해진다. 

 

decoding을 발전시킬 수 있는 방법으로 re-ranking이 있다. re-ranking은 decoder가 나쁜 output을 냈을 때의 개선책이다. 

  • 하나의 입력에 대해 여러 개의 문장을 decoding한다. 
  • 문장의 quality에 따라 scoring을 매겨 re-ranking한다. 가장 심플한 방법은 perplexity(낮을수록 좋다)를 사용하는 것이다. 그러나 repetitive sequence 역시 낮은 perplexity를 가진다는 점에 유의해야 한다. 여러 개의 re-rankers를 이용해 더 좋은 품질의 문장을 고를 수 있다. 

4. Training NLG models

그렇다면 어떻게 NLG 모델을 훈련시킬 수 있을까? 앞서 teacher forcing을 사용한다고 했지만, 이는 exposure bias 문제를 발생시킨다. exposure bias는 training과 generation의 진행 방식의 차이로 인해 발생하는 불일치 문제이다. training은 gold context tokens를 주어 훈련하는 반면 generation은 한 스텝에서의 output이 다음 스텝에서의 input이 되므로 generation에서 training 때 겪지 못한 상황들이 많이 생길 수 있다. 

왼쪽은 training의 loss, 오른쪽은 generation의 loss

exposure bias를 해결하기 위한 몇 가지 해결책이 있다. 

  • scheduled sampling: gold token을 사용하기보다 generate token을 사용하되 training 때는 정답 토큰이 사용될 확률 p를 높게 하는 방법
  • dataset aggregation: training의 interval에서 발생한 sequence를 input으로 feed하는 방법 
  • retrieval augmentation: gold corpus를 검색해서 변형한 sequence를 학습하는 방법
  • reinforcement learning: reward를 사용해서 행동을 학습하는 방법
    • reward estimation: BLEU(MT), ROUGE(summarization)...
    • optimizing for the task > just maximizing the reward 가 되도록 해야 한다. 

5. Evaluating NLG systems

  • Content Overlap Metrics
    • generated text와 gold text 사이의 grammatical / overlap 일치성을 scoring함. 
    • N-gram overlap metrics: n-gram이 얼마나 겹치냐?
    • 그러나 의미론적인 방법이 아니라 그저 얼마나 겹치는 부분이 있냐? 를 보기 때문에 좋은 방법 아님. 특히 open-ended generation에서. 

generated text와 gold text의 의미를 고려하지 않아 false negative나 false positive의 문제가 발생.

  • Model-based Metrics: 텍스트 간의 의미론적 관계를 보기 위해 learned representations of words(word embedding)을 사용한다. embeddings은 pretrained된 것을 이용한다. 
    • Vector Similarity: 단어 임베딩을 사용하여, 두 텍스트의 단어 벡터들의 평균을 각각 구한 뒤 cosine 유사도를 이용해 두 텍스트를 비교한다. 
    • Word Mover's Distance: 단어 임베딩을 사용하여, 두 텍스트에서 이동 비용을 최소화하는 단어쌍을 찾고(즉, 의미론적으로 비슷한 단어쌍을 찾는다)최소 이동 비용을 계산해 유사도를 측정한다. 
    • BERTSCORE: pretrained BERT를 이용하여 각 텍스트의 단어별 contextual embedding을 구하고, pairwise cosine similarity를 구한다. 
    • Sentences Movers Distance: 문장 임베딩을 사용하여, 두 텍스트에서 이동 비용을 최소화하는 단어쌍을 찾고 최소 이동 비용을 계산해 유사도를 측정한다. 
    • BLEURT: BERT를 기반으로 한 회귀 모델로, generated text와 gold text 간의 grammatical & semantic 유사도에 대한 score를 계산한다. 
    • MAUVE: generated text와 gold text가 얼마나 유사한지 + generated text가 얼마나 다양한지를 측정한다. 
    • 모델 기반 평가를 평가하는 방법 -> 인간의 선호와 비교하는 방법
      • 모델 기반 평가는 인간의 선호를 따를 수 있지만, 그 동작 방식은 uninterpretable하다. 

왼쪽은 Word Mover's Distance, 오른쪽은 BERTSCORE
MAUVE: 양자화를 이용하여 continuous한 확률 분포(generated text와 gold text를 비교한 분포)를 이산적으로 만든다.

  • Human evaluation: 인간의 평가. 사실상 text generation에서 가장 중요한 평가 지표는 인간의 판단이다. 그러나 비싸고 느리고, 인간의 평가마저 일관적이지 않고, 반복 가능하지 않고, 비논리적이고.. 등등의 많은 문제가 있다. 

6. Ethical Considerations

  • filtering toxic content -> hacking을 통해 toxic content를 생성하게 할 수 있다. 
  • pretrained 될 때 harmful patterns, bias, negative stereotypes를 학습할 수 있다. 
  • adversial input는 toxic content를 발생시킬 수 있다. 
  • 무해해 보이는 prompt에도 toxic text를 발생시키도록 모델이 변질될 수 있다. 

🌟 NLG 모델을 deploy할 때는 모델이 유해하지 않은지, 제대로 text를 생성하는지 등을 철저히 확인한 후 해야 한다. 

 

 

이 포스팅은 Stanford CS 강의 11단원에 기반하여 작성되었습니다. 

'NLP > cs224n' 카테고리의 다른 글

[cs224n] Coreference Resolution  (0) 2024.07.08
[cs224n] Question Answering  (0) 2024.07.08
[cs224n] Prompting, RLHF  (0) 2024.07.05
[cs224n] Pretraining  (0) 2024.07.03
[cs224n] Self-Attention, Transformer  (1) 2024.07.03