(Winter 2021)|Lecture 12 Natural Language Generation
09 May 2022
Natural Language Generation과 관련되어 modeling, decoding, evaluation와 관련된 내용을 다룬 강의이다. 특히 decoding 파트에서 어떤 방식으로 알고리즘으로 짜느냐에 따라서, 생길 수 있는 문제가 달라진다. Inference할때는 학습데이터가 아닌 출력이 다시 입력으로 들어가는 auto-regressive한 구조 이기 때문에, 같은 말이 반복하는 문제가 생길 수 있다. 또한 모델이 text을 생성하는 과정이 사람이 말을할 때 생각하는 방식이 아닌, loss를 줄여 likelihood를 최대화 하는 방식으로 작동하기 때문에 문제가 생길 수 밖이 없다. Evaluation와 관련되서도 대부분 사용하고 있는 automatic-metric은 근사치 일뿐, text quality를 보증하지 못한다고 알려져있다. 이와 관련하여 다양한 evaluation에서도 다룬다.
NLG는 automatically coherent하고 useful한 piece of text를 생성하는 것에 focus를 먖춘다. 과거에는 훨씬 제한된 연구 분야였고, 현재에 와서 NLG problem이라고 불리는 것들이 실제로는 text production에 포함되지 않았다.
Machine Translation task도 classical example of NLG task라고 할 수 있다.
현재 dialogue system의 기반에 NLG task가 있기도 하다.
Summarization에도 많은 NLG task가 사용된다. Multiple source으로부터 정보들을 모으고, 가장 중요한 content를 rephrase하여 짧지만 의미있는 방법으로 요약한다. E-mail Summarization, Meeting Summarization가 위에 대한 예시이다.
단순히 text-in text -out (입력과 출력이 text)이 모든 입력, 출력이지는 않다. 고전적인 NLG 영역으로, Data - to Text Generation 영역이 있다.
Visual description에서 최근의 연구성과를 볼 수 있다. image, video content를 묘사하기 위해 언어를 사용하는 task이다. 최근에는 Much challenging description task에서 Visual description 문제를 다루고 있다. 다른 예시로, stream of visual content에 대한 description을 다루는 것도 있다.
Story generation과 같은 creative Generation도 있다. Ai가 짧은 story나 blog post 혹은 책 한권 전체 까지도 generate한다.
이전 슬라이드까지 NLG application으로써, 어떠한 종류의 task일지라도 production of text로 확장 가능하다. 각 task는 다른 알고리즘, 모델을 요구한다. 그 task들의 공통점은 deep learning을 이용한 NLG에서 새로운 generation을 거치고 있다는 것이다.
이제 deep learning을 이용한 NLG에서의 간단한 모델을 살펴보자.
Input sequence에 따른 다음 token을 생성하고, 그 다음 token이 다시 input으로 들어가는 auto-regressive 과정을 거친다.
$\hat y_t$을 출력할 때, 어떤과정을 거치는 알아야 이후의 autoregressive한 과정에 대해서도 이해할 수 있다.
Model의 low-level에서 일어나는 일들을 살펴보자. 각 time step에서 model은 vector의 score를 계산하는데, 이때 vector의 각 원소는 vocab에 있는 token에 대응되는 score값이다. 그다음 주어진 context에 대해 vocab에 있는 각 token의 score의 probability distribution을 softmax를 통하여 계산한다.
즉 model은 score로 이루어진 vector를 출력하고, 이 vector가 softmax를 거쳐 vocab에 있는 각 token의 distribution을 출력하게 된다.
Token을 generate하기 위해, decoding algorithm을 사용하게 된다. Vocab에 있는 token에 대한 Probability distribution peak을 이용하여 다음 token을 선택하게 된다. NLG에서 가장 보편적으로 Optimize하기 위해 사용하는 objective function은 negative log-likelihood (= maximum likelihood)이다. 이것은 사실 multi class classification task로써, vocab에 있는 token들이 다음 token으로 올 class를 예측 하는 것과 동일하다. 예측된 단어는 gold 또는 ground truth token이라고 불린다. 이러한 algorithm을 teacher forcing이라고도 불린다.
*
가 의미하는 바는 gold token을 의미한다. 그래서 negative logloss를 이용하여 예측된 gold token $y_0$에 대해 다음 gold token $y_1$을 예측하게 된다.
이런 과정을 여러번 반복하면 최종적으로 gold sequence를 얻게된다. 이러한 summed loss term으로 gradient를 구하여 모든 parameter를 업데이트하게 된다.
발표자님이 좋아하는 분야인 Decoding part로 넘어가자.
앞서 설명한 것 처럼, Decoding function은 induce된 확률분포애 대해 vocab에 있는 Token 중에 select하는 function이었다. 모델이 학습되었을때, distribution이 meaningful해야하고, sensible next token을 generate해야한다.
이러한 generated next token을 auto-regressive하게 모델에 넣는 과정을 반복하여 full sequence를 얻게된다.
Argmax decoding은 distribution에서 가장 높은 probability token을 선택하는 방법이다. 다른 방법으로는 Beam Search가 있는데, Greedy algorithm이지만 더 낮은 negative log likelihood를 갖는 subsequence를 찾는 것을 통해 후보군을 대해 더 넓게 search하는 방법이다.
이러한 greedy algorithm이 machine translation이나 summarization과 같은 task에서 꽤 좋은 성능을 보였지만, 다른 text generation task에서는 문제가 있었다. 가장 큰 문제 중 하나는 생성한 Text를 반복하는 문제였다. 이 repetition problem은 NLG에서 겪는 가장 큰 문제로, 최근에도 이 문제를 다루고 있다.
왜 이러한 repetition 문제가 생기는지 분석해보자. Model과 decoding algorithm의 상관관계를 보여주는 그래프이다. 2개의 LM model에 대한 Step마다의 negative log likelihood를 보여준다. 하나는 RNN을 이용한 것이고, 하나는 GPT라 불리는 transformer를 이용한 모델이다. 이러한 plot은 chat봇을 개발하고 있는 사람에게는 악몽같은 것이다 ㅋㅋ. Transformer가 RNN보다 더 신뢰성이 없는 것을 나타낸다.(y축이 negative loss이다.) 왼쪽 그림과 같이 같은 단어를 반복했을때 두개의 모델 모두 negative loss가 전체적으로 감소하는 것을 볼 수 있다.
Sequence가 길면 길어질 수록 이러한 현상을 보여준다. 즉, 같은 phrase를 계속해서 반복한다면, model은 더욱 더 confident해지고 다음 step에서도 같은 것을 말한다고 학습하게 된다. 왜 이것이 말이 되냐면, 만약 “I’m tired”라는 문장을 15번 반복해서 말했다면, 다음 문장 또한 같은 것을 말할 확률이 높기 때문이다.
이러한 문제가 Recurrent 계열에서는 transformer계열 보다 덜 problematic 하다. 그 이유는 RNN은 bottleneck 구조를 갖고 있어서 그렇다. Bottleneck을 제거한 transformer은 repetitive behavior를 할 경향이 더 있게된다.
이러한 문제를 해결하기 위해서는 어떻게 해야할까. 몇년 동안 제안 된 방법은, 다음과 같다. Inference time에서 같은 단어를 반복하지 않으면 된다 라는 휴리스틱한 해결법도 있다. Training할때 사용할 수 있는 해결책 또한 있다. 첫번째로, Different timestep에서의 hidden activation의 similarity를 최소화 하는 방법이 있다. Coverage loss로, same token에 대해 penalize하여 model이 different text를 generate하게 만드는 방법도 있다. 최근에 발표된 방법으로는 output에 same word가 나왔을때, penalize하는 방법이다.
Repetition에 대한 진짜 문제는 greedy algorithm에 있다. 실제 인간은 probability maximizing 하는 방법으로 말하지 않는다. 2020년에 Holtzman이 발표한 논문을 보면, Human text는 orange, beam search decoded text는 blue인데, Beam search의 그래프가 매우 높은 확률과 함께 매우 적은 variance를 보여주고 있다. 이러한 이유는 greedy algorithm 글자 그대로, 각 step마다 생성하는 sequence의 probability를 최대화하고 있기 때문이다.
Human error은 편차가 매우 높은데, low probability territory가 자주 등장한다. 만약 우리가 human text를 high probability로 예측한다면 우리는 다른 사람말을 들을 필요가 없다. 왜냐하면 무엇을 말할지 알기 때문이다 ㅋㅋ.
궁극적으로 우리가 하고 싶은 것은 human language pattern의 uncertainty를 text를 어떻게 decode하는지와 match하고 싶다. 그래서 많은 application에서 distibution에 대해 higher variability sampling을 시도 하고 있고, 이러한 방법이 creative generation task에서의 decoding 방법으로 사용되고 있다.
Sampling에 대해, model로 생성되는 Token distribution에 대해 각 token마다 부여된 each potentional option에 따라 random하게 sampling하게 된다.
이러한 방법은 generated token에 대해 좀더 의미있는 stochasticity를 부여한다. 여기서 생기는 문제점은 매우 큰 vocabulary에 대한 distribution이라는 것이고, 이로 인해 generate될 수 있는 확률이 큰 token들이 많아 질 것이다. 이러한 token들 중 많은 token이 현재의 text와 irrevent할 것이다. 각각에 대해 선택했을때는 선택되지 않을 token이었겠지만, group으로 선택했기 때문에 irrelevant token을 output할 수 있게 된다.
그래서 해결책으로, 새로운 알고리즘으로 이러한 distribution에 대해 inference time에서 pruning하는 방법이다. Top-k sampling이 이것을 하는 가장 obvious한 방법이다. Vocabulary에 있는 대부분의 token들이 선택될 확률이 없기 때문에, distribution에서 sample된 Token들을 truncate하는 방법으로 가장 높은 확률을 가진 token k개를 고르는 것이다.
Common value of k는 보통 5,10,20 up to 100까지 간다. 알야할 것 중 하나는 높은 k를 만들 수록, diverse한 output을 만들 확률이 높아진다. k를 감소시키면 위에서 언급한 long tail effect로부터 model이 safe할 수는 있지만 text가 지루하고 generic해진다. (더 greedy해지기 때문이다.)
Fixed k를 사용하는 것에 생기는 문제점이 slide에서 보여주고 있다. 첫번째 예시로 distribution이 flat할 경우 많은 sampled token들을 제거하지 않는 것이 합리적이고, 반대로 두번째 예시로 특정 token들만 suitable할 경우에는 작은 값의 k를 갖는 것이 합리적이다.
이러한 문제점에 대해서 Top-p (nucleus) sampling이라는 해결책이 있다. Fixed number of token으로부터 sampling하는 것이 아닌, fixed amount of probability mass로부터 sampling하는 방법이다. Distribution의 flatness에 따라 token의 개수를 정하게 된다. 즉, Dynamic chaning Dependnig on how that probability mass is spread across distribution.
위와 같이 묘사할 수 있는데, 세가지 다른 distribution이 있을때 각각은 다른 token의 개수를 prune하게 된다.
즉, flatness of distribution은 몇개의 token을 sampling 할지를 결정한다. 지금까지 사용한 단순한 softmax distribution은 이러한 종류의 sampling algorIthm을 사용하기에 적합하지 않다. Distribution이 너무 flat할 수도, 또는 너무 peaky할 수도 있다. 우리가 원하는 것은 distribution을 rescale하여 decoding algorithm에 더 fit하게 만드는 것이다. Temperature scaling이라는 방법으로 이를 구현할 수 있다. 각 token의 모든 score에 linear coefficient를 적용하고 나서 softmax를 통과시킨다. 모든 token에 적용하기 때문에 vocab을 dynamic하게 바꾸지 않는다. 결론적으로 그 값이 Softmax 함수에 의해 amplify된다. Coefficient가 1보다 크다면 probability distribution을 더 uniform하게 만든다(flatter). Temperature coefficient가 1보다 작다면, 이러한 score가 감소하여 distribution을 더 spiky하게 만들어 probability mass가 더 작아지게 된다.
Temperature Coefficient에 대해 알아야할 것은 decoding algorithm이 아니라, probability distribution을 rebalancing하는 방법이다. 앞서 설명했던 모든 sampling algorithm (greedy 포함)에 적용할 수 있다. Softmax를 사용하지 않는 Argmax 방법 또한 token들의 ranking은 변화시키지 않기 때문에 적용할 수 있다.
그러면 이제 model에 의해 생성되는 distribution을 어떻게 바꿀지 생각해봐야 한다. 만약에 model이 충분히 calibrate되지 않았다 해도, distribution을 더 relative한 magnitude로 바꿔야 하고, 각 token들이 더 relevant하게 끔 ranking도 바꿔야 한다. 만약에 우리의 model이 calibrate되지 않았다면, decoding할때의 outside info를 decoding할때 활용해야 한다. 즉, Inference time에서의 model의 prediction distribution을 바꾸도록 하는 새로운 종류의 method를 제안한다. (fixed static model에 의존하는 것이 아닌)
이것을 하는 좋은 방법이 작년에 나왔는데, k nearest neighbor language model을 사용하는 것이다. Large corpus로부터의 phrase statistics을 사용하여 output probability distribution을 recalibrate 하는 것이다. large database(cache)로부터 phrase의 vector representation을 initialize하고, decoding time때 database에서 가장 similar phrase를 사용하는 것이다. Model로부터의 context representation을 이용하여 모든 phrase의 representation에 대해 similarity function을 적용하는 것을 통해 similarity를 계산할 수 있다. 즉, 현재 context의 phrase에 대해 가장 similar한 phrase의 distribution을 계산할 수 있다. 그리고 그 다음 올 token에 대한 statistics을 distribution에 추가하여 이를 반복한다.
학생 질문 Q) cache에서는 어떤것이 일어나는것인가?
A) 관심있는 phrase에 대해 적절한 set of phrase가 cache에 유지하는 방법이 이 질문이 답일 것이다. 하지만 training corpus에 있는 every phrase를 cahce에 저장한 뒤, 매우 효율적인 알고리즘을 사용하여 representation similarity에 대해 search하여 가장 확률이 높은 것을 고를 것이다. 이러한 distribution을 만들기 위해 prune을 했다고 볼 수 있다.
Model의 성능이 좋지 못해도 model의 distribution을 rebalance할 수 있게 되었다. 그렇다면 학습한 LM model을 다른 behavior하게 끔 rebalance할 수 있을까? 예를 들어 wikipedia로부터 학습한 model을 새로운 domain에서 사용하는 것이다. 이러한 상황에서 phrase에 대한 좋은 database가 없는 상황일 수 도있다. 작년에 이것에 대해 gradient based 접근법으로 하는 해결책이 나왔다. External objective을 define하는 classifier(paper에서는 Attribute Model이라 부른다)를 만들었다. 이 classifier가 하는 일은 text에 대한 decode했을때 exhibit되길 원하는 어떠한 property를 approximate하는 것이다. 예를들어 dialogue model에서 sentiment classifier를 사용한다고 했을때, positive sounding comment를 encourage하고자 하는 것이다. Attribute model로 부터 text를 generate 하게되는데, discrete token이 아닌 tokens에 대한 distribution을 input으로 사용한다. Output으로 sequence score를 받게된다. 예를들어 sentiment classifier인 경우, sequence가 얼마나 positive한지 score를 출력하게 된다. 그리고 나서 그 property에 대해서 gradient를 계산 후에, text generation model로 back prop하게 된다. 하지만 parameter들을 update하는 게 아니라, intermediate activations를 update하게 되고, 새로 distribution을 계산하기 위해 forward propagate하게 된다. 이것은 neat trick으로써, real time distribution updating based on some outside discriminator라 할 수 있고, 이것은 internal representation of sequence를 업데이트 할 수 있게된다.
이러한 distribution rebalancing method는 nearest neighbor search 또는 다른 타입의 discriminator를 기저하여 만들어 졌고, computation관점에서 intensive하다. nearest neighbor search에서는 thousands of phrase들을 search하여 distribution을 rebalance한 방법이고, discriminator는 token이 특정 behavior를 하게끔 forward, backward하였다. 불행하게도, 두개의 경우 모두 distribution을 rebalance한 후에, generate하고나서 잘못된 token들을 인지를 확인할 수 있다.
Practice에서 sequence output을 개선하기 위해 re-ranker라는 것을 사용한다. Multiple sequence를 decode한 뒤에, 우리가 만든 sequence를 평가하기 위해 score를 정의할 수 있고, 그 다음 이 점수에 따라 re-rank를 진행하게 된다. Perplexity와 같은 것이 re-ranking에 적합한 function이다. 주의해야할 것은 repetitive sequences는 very low perplexity를 갖을 수 있다. ReRanker가 더 복잡한 behavior를 평가하게 할 수 있다. 앞서 설명한 Attribute model을 reranker로 사용하여 set of fixed seqeunce를 평가하여 back propagate할 수 도 있다. 그리고 또한 multiple reranker를 parallel하게 사용할 수 있다.
Recap) Decoding은 NLG에서 아직 까지도 challenging한 문제이다. 우리의 알고리즘은 여전히 사람이 말할때 단어를 선택하는 방법을 반영하지 못하고, 우리의 가장 좋은 접근법은 모델에 의해 생성되는 probability distribution을 calibrate하여 사람과 더 비슷한 Representative하게 만든 것이다.
학생 질문 Q) Rebalance한 distribtution이 더 좋은지 어떻게 평가하는가?
A) 단순히 probability를 통해 아는 것이 아닌, Reranker에 대한 어떠한 trust를 나타나내는 지표를 기준으로 사용한다. 만약에 reranker가 trust되지 못하는 성능이라면 사용하지 말아야한다. 이후 슬라이드에서, quality of text를 어떻게 다루는지 배울 것이다.
Training NLG model에대해 다뤄보자. 이전에 model을 학습시키고, 관심있는 property에 따른 decoding algorithm을 사용하라고 하였다. 사실은 decoding model과 training algorithm사이에 training하는 동안 어떠한 iteraction이 있다는 것이다. (지금 다루려는 내용은 아니다. ?!)
Sequence에서 다음 올 token의 negative log likelihood를 최소화하는 것을 통해 학습한다고 하였다. Auto-regressive model을 만들 때 꽤 잘 작동한다. 하지만 사실 이것은 몇개의 문제를 만든다. 다음 슬라이드들에서 생길 수 있는 issue들에 대해 다뤄볼 에정이다.
Training with Maximum likelihoods는 textual diversity를 discourage한다는 것이다. Greedy algorithm은 단순히 확률을 최대화 하는 방향으로 produce한다. 그래서 매우 repetitve하고 un-diverse하게 된다.
이전에 말했듯이, human language production은 likelihood를 maximize하는 것이 아니다. 이 문제를 어떻게 해결할까?
작년에 나온 흥미로운 접근법은 unlikelihood training이라는 것이다. 특정 context에서 particular token들에 대한 production을 discourage하는 방법이다. Teacher forcing 방식은 유지한다. Model은 training corpus로 부터 distribution은 학습하는 동시에, how to not say particular words에 대해서도 배운다. 이렇게 함으로써 repetition을 제한하고, 더 다양한 text를 생성하게 된다.
두번째로 정말 중요한 issue중에 하나이고, maximize likelihood로부터 야기되는 이 문제는 exposure bias라고 불린다. 우리가 다음 token을 generate할 수 있게 학습시킨 context것 과 generation time에서 generate하는 token들은 다르다는 것이다. → training에서는 gold document, human text로 부터 token을 받아 학습된다. Generation하는 동안 auto-regressive하게 output이 input으로 들어가게된다.
이것은 문제가 될 수 있다. 이전에 본 오른쪽 위 그래프처럼, model이 생성하는 text의 type들이 human language와 양상이 매우 다르다는 것이다.
이러한 exposure bias를 다루기 위한 여러가지 방법이 있다. semi-supervised learning이 있긴 하지만 다음 슬라이드만 설명.
Sequence re-writting : human-written prototype으로부터 sequence를 retrieve하고나서, 이 sequence를 add,remove,modify하는 방식이다.
Reinforcement Learning : 발표자께서 좋아하는 generate text하는 방법이라고 했다. Text Generation model을 Markov decision process라고 cast한다.
taking action = sampling words. Generate하는 token마다 어떠한 reward를 받는다. 그리고 이 reward로 loss function을 scale한다.
reward가 높으면 유사한 context에 대해 동일한 sequence를 generate할 확률이 증가한다.
text generation에서 특정 behavior를 encourage하기 위한 reward로 무엇을 사용할 수 있을까? Generation pipeline에 따라 달라진다. 최근의 common practice는 final evaluation에세 대해 reward를 set하는 것이다.
하지만 text generation에 대한 metric은 단지 approximation이었고, 이런 근사치에 optimize하는 것이 가장 좋은 방법이 아니었다. Google Machine Translation 논문에서느 RL with BLEU score가 사실은 translation quality를 향상시키지 못했다고 한다.
Reward 자체를 Neural Network을 사용하는 여러 방법들이 있다.
text geneate하는데 RL을 사용하는 것에 darkside가 있다. RL은 매우 unstable할 수 있다는 것이고, setup에 매우 정확한 tuning이 필요하다. RL으로 from scratch에서 학습할 수 없기 때문에, teach foring을 사용하거나 baseline reward와 같은 것을 정의하는 것이다. (예를들어 BLEU score경우 0이상의 reward를 부여하였다.)
여전히 Coherent text를 얻기 위해 teacher forcing을 사용한다. Diversity, Exposure bias는 문제이긴 하다.
이제 그 중요한 Evaluation에 대한 것이다.
3가지 종류의 evaluation metric에 대해 다룰 것이다.
- automatic evaluation metric.
- model-based의 automatic evaluation metric.
- Human evaluation.
Content overlap metric은 두가지 sequence에 대한 explicit similarity를 계산한다. 2가지 종류가 있다.
- N-gram overlap metric.
- Semantic overlap metric.
매우 빠르고 효율적이지만, 대부분의 N-gram overlap은 좋은 sequence quality의 approximation을 제공하지 않는다.
위 예시가 n-gram overlap evaluation의 잘못된 경우이다.
또한 Human judgement 양상과 매우 다르다.
open-ended task 중 하나인 story generation과 같은 경우, stopwords와 많이 matching되고 실제 content와 상관없는 story가 만들어질 수 있다.
또 다른 종류는 Semantic overlap metric이다. SPICE : generated text에 대한 graph를 만들어, reference caption과 비교한다.
open-ended task와 같은 task들에 대해서 content overlap metric의 한계가 보인다. 최근 몇년 동안, model-based metric에 focus되어 왔고, generated text에 대한 fidelity를 평가하게 된다.
Vector similarity는 Composition function을 정의하여, generated text와 거리를 계산하는 방식이다. Word Mover’s distance는 각각에 대응되는 word와의 거리를 계산한다. 작년부터 꽤 유명한 BERT-SCORE도 있다.
Sentence Movers Similarity는 Word mover의 확장 버전이다. 단순한 single sentnce가 아니라, 긴 여러 문장에 대해서 유사도를 계산한다. 작년에 BLEURT라는 BERT에 기반한 regression model이 나왔고, grammatical, meaning에 대한 점수를 반환한다.
기억해야할 것은 NLG system 성능에 대한 true mark는 human user에게 valuable한지가 가장 중요하다. human evaluation에 대한 score function으로써 새로운 machine learning model을 만들기도 한다.
이러한 Crietria를 정의했다면 사람들에게 generated text에 대해 평가하게 할 수 있다. 주의 해야할 것은 human evaluation을 다른 연구와 비교하면 안된다.
—
이후의 내용은 Ethical Consideration에 관한것이다.
첫번째는 text generation model에 bias가 있는 것이다.
두번째는 Hidden biases에 관한 것이다.