목차
• What is NLG?
• Formalizing NLG: a simple model and training algorithm
• Decoding from NLG models
• Training NLG models
• Evaluating NLG Systems
• Ethical Considerations
01. What is NLG
- Natural Language Generation
NLG Tasks
-
Machine Translation
![](https://velog.velcdn.com/images/yoonene/post/c85e2a30-a990-4985-b172-77e0f5bc3db5/image.png)
-
Dialogue Systems
![](https://velog.velcdn.com/images/yoonene/post/e3ca8ad9-0eda-46cd-a480-500d49bfad49/image.png)
-
Summarization
![](https://velog.velcdn.com/images/yoonene/post/3c8ab9c7-eb49-4487-bfab-568965c065a4/image.png)
-
Data-to-Text Generation
![](https://velog.velcdn.com/images/yoonene/post/eb359197-a8a3-4b48-902f-aaf4eab6c798/image.png)
-
Visual Description
![](https://velog.velcdn.com/images/yoonene/post/cb3005b0-b761-4643-83b0-1ebb5c4d25c5/image.png)
-
Creative Generation
![](https://velog.velcdn.com/images/yoonene/post/fe6c6fa8-ed28-4903-858b-d2d12649f370/image.png)
02.Basics of NLG
-
Autoregressive 구조
t 시점의 단어 토큰을 예측하기 위해 이전 토큰들을 입력으로 사용한다.
![](https://velog.velcdn.com/images/yoonene/post/9a01529d-f577-40a0-8d68-2e4da30248c5/image.png)
-
각 스텝에서 각 단어들에 대한 score를 계산하고 이 점수들을 softmax에 통과하여 확률분포를 계산한다.
![](https://velog.velcdn.com/images/yoonene/post/2d49002d-aa55-40f5-8eae-2d2216f2343d/image.png)
-
negative loglikelihood를 최소화하는 방식으로 학습한다.
![](https://velog.velcdn.com/images/yoonene/post/e8be0e8c-7830-462d-933b-501e20c1b7c8/image.png)
-
teacher forcing
![](https://velog.velcdn.com/images/yoonene/post/60c7006c-47ee-4f2e-9d15-41329a3532cf/image.png)
예측한 토큰 대신 실제 문장의 토큰을 입력으로 사용하는 학습 방식이다.
초기에 잘못 생성된 단어로 인해 계속 잘못된 단어가 생성되는 것을 방지한다.
03. Decoding from NLG models
1) Argmax Decoding
![](https://velog.velcdn.com/images/yoonene/post/7ff48a90-4fc5-4753-a8d0-6926cb07e834/image.png)
단순하게 가장 큰 likelihood를 가지는 단어 토큰을 생성 토큰으로 선정한다.
2) Beam Search
![](https://velog.velcdn.com/images/yoonene/post/f98afbc0-1e8b-4339-81bd-b4093e0dd7bc/image.png)
매 스텝마다 loglikelihood가 높은 k개의 후보 중 선택을 반복하여 argmax보다 자연스러운 문장을 생성한다.
Greedy Methods의 문제점
![](https://velog.velcdn.com/images/yoonene/post/ad14e5f1-50ca-4850-a44f-44b876851d83/image.png)
비슷한 단어를 반복하여 생성하는 고질적인 문제가 있다.
![](https://velog.velcdn.com/images/yoonene/post/0a9eb1e8-345c-4884-a0c1-c5b4f4841492/image.png)
반복될수록 같은 말에 대한 negative loglikelihood가 낮아진다. => 점점 더 확신을 가지고 같은 말을 생성한다.
![](https://velog.velcdn.com/images/yoonene/post/80525d00-1226-4401-8b5b-2710c063f716/image.png)
Transformer 모델의 negative loglikelihood가 더 급격히 떨어지는 것을 확인할 수 있다. => 같은 말에 대한 confidence를 가진다.
이는 일반적인 Decoder 구조보다 이전 step들의 embedding을 더 잘 활용할 수 있는 구조이기 때문이다.
1. Random Sampling
![](https://velog.velcdn.com/images/yoonene/post/76bf7858-27ee-42bd-b2f8-aea94b1f04e0/image.png)
모델이 예측한 각 토큰의 확률을 가중치로 사용하여 샘플링하는 방식
2. Decoding: Top-k Sampling
![](https://velog.velcdn.com/images/yoonene/post/64a976de-fea8-41b6-8268-fc7f76c74ffb/image.png)
- 상위 k개 중 확률값을 가중치 두고 샘플링하는 방식
- k값은 일반적으로 5, 10, 15를 사용
- k가 클수록 다양한 문장이 생성되지만 부자연스러운 문장이 생성됨.
- k가 작을수록 한정된 문장이 생성되지만 자연스러운 문장이 생성됨.
3. Decoding: Top-p Sampling
![](https://velog.velcdn.com/images/yoonene/post/a1f5f210-ec7f-4db2-96c9-97d3aaa5781d/image.png)
- 누적 확률 P에 속하는 상위 토큰들 중 샘플링하는 방식.
- k가 클수록 다양한 문장이 생성되지만 부자연스러운 문장이 생성됨.
- k가 작을수록 한정된 문장이 생성되지만 자연스러운 문장이 생성됨.
4. Scaling randomness: Softmax temperature
![](https://velog.velcdn.com/images/yoonene/post/e91da9a4-909f-4b7d-b304-dcfc9b8193e2/image.png)
- Logit(S)에 일정한 상수 temperature(t)를 나눠 distribution을 scaling하는 방법.
- t가 클수록 분포가 고르게 되어 다양한 문장을 생성할 수 있다.
- t가 작을수록 분포의 차이가 커 일반적인 문장을 생성할 수 있다.
5. Improving decoding: re-balancing distributions
![](https://velog.velcdn.com/images/yoonene/post/59246ecd-391a-47d2-95ea-2dbb37656904/image.png)
- training contexts와 target data를 학습하면서 training contexts의 representations를 저장해 두었다가 inference 시에 모델 예측값을 보정할 목적으로 사용한다.
- 과정
- Test Context의 reprezentation vector와 저장된 Training context의 representation vector 간 거리를 구한다. 그 중 가장 거리가 가까운 k개의 training contexts를 선정한다.
- 이 샘플의 target에 해당하는 probability를 negative distance의 exponential 값으로 구한다.
- 중복되는 class는 서로 값을 더한다.
- 일반적인 예측 class에 이렇게 구한 값을 interpolation하여 최종 예측 분포를 구한다.
- 기존 모델의 decoding 방법만 수정하여 간단히 적용 가능하고 inference 시간을 단축할 수 있다.
6. Backpropagation-based distribution re-balancing
![](https://velog.velcdn.com/images/yoonene/post/f51e0362-f09f-462b-a34f-5ac392f17c4e/image.png)
- Plug & Play Language Model의 약어로, PPLM이라고 한다.
- 기존 모델의 구조 변경 없이 별도의 모델을 사용하여 성능을 개선한다.
- 과정
- 기존의 학습된 모델의 생성 토큰을 별도의 모델에 전달한다.
- 별도의 모델에서 계산된 결과에 대한 그레디언트는 기존 모델의 latent vector를 업데이트한다.
- 업데이트된 레이턴트 벡터를 통해 새로운 단어 토큰을 생성할 수 있게 된다.
04. Training NLG models
Unlikelihood Training
![](https://velog.velcdn.com/images/yoonene/post/35c5697f-040c-495c-b16c-7babb1ae401e/image.png)
![](https://velog.velcdn.com/images/yoonene/post/3c5f4018-79c9-486f-ab13-cd9896388709/image.png)
- 새롭게 생성된 토큰이 t 시점 이전까지 등장했던 토큰들을 중에 있다면 loss가 커지도록 하는 loglikelihood loss를 기존 mle loss에 추가로 사용하는 방식
- 텍스트를 다양하게 생성할 수 있다.
Exposure Bias Solutions
- 테스트 시에는 적용될 수 없기 때문에 teacher forcing이 Bias를 야기하는 문제에 대한 해결 방법
Scheduled sampling
- 특정한 시점에 teacher forcing을 사용할 확률인 p를 적용하는 방법.
- p값은 학습이 진행될수록 모델의 성능이 올라가기 때문에 점점 더 작은 값을 사용한다. -> 점점 모델의 예측 토큰을 다음 스텝의 입력으로 사용하여 테스트 시와 동일하게 만들어주어 바이어스르 낮춘다.
Sequence re-writing
- train dataset에서 추출한 프로토타입을 변형하여 문장을 생성하는 방법.
- 에디트 벡터는 샘플링된 프로토 타입을 adding, removing, modifying tokens 방법을 사용해서 변형한다.
Reinforcement Learning
![](https://velog.velcdn.com/images/yoonene/post/7f739511-2d06-43e6-9059-9e6a4c3dfc60/image.png)
- BLEU, ROUGE 스코어와 같은 metric을 reward로 사용할 수 있다.
- 하지만 의도하지 않은 shortcut을 학습하지 않도록 reward function을 잘 정리해야 한다는 문제점이 있다.