[자연언어처리 개론] Text Generation
필자는 현재 NLP 개론 강의를 수강하고 있는데, 강의 자료가 다소 방대하고 산만하여 직접 정리할 필요성을 느꼈다. 그래서 해당 강의 자료 내용을 바탕으로 소개된 논문들의 초록을 훑으며 의의를 조금 더 정리해 보았다.
Text Generation
Generation은 기본적으로 미결된 텍스트에서 다음에 올 토큰을 예측하는 Classification task이다. 그러나, 단순한 classification 훈련 방식으로의 접근만으로는 한계가 있다. 다음에 올 수 있는 토큰으로 '여러 정답'이 있는 경우와, 정답이 아닌 토큰에도 일정 수준의 확률이 부여되는 hallucination(환각)이 이러한 문제의 예시이다. 이러한 문제들 중 주요한 몇 가지와 각 문제를 해결하기 위해 연구된 방법들에 대해 알아보겠다.
Major problems in text generation
- 정확성: 어떻게 환각의 발생을 낮추고 제약에 맞는 텍스트를 생성할 것인가?
- 창의성: 여러 정답이 있는 경우를 어떻게 고려하여 텍스트를 생성할 것인가?
- 속도: 어떻게 높은 성능을 유지하면서 텍스트를 빠르게 생성할 것인가?
Hallucination of LMs
Kalai와 Vempala(2023) [2]는 Transformer 기반 언어모델의 아키텍처나 훈련 데이터의 질과는 무관하게 언어모델이 환각을 일으킬 확률이 사실을 말할 확률과 유사함을 수학적으로 입증했다. 즉, Transformer 기반 모델이라는 패러다임 안에서는 generative pre-training에서 아무리 정확하고 좋은 데이터를 사용했다 해도, 환각을 방지하기 위해서는 별도의 post-training 과정이 필요한 것이다. RLHF나 RAG 등을 적용하면 이러한 환각을 개선할 수 있는데, 이들은 다른 포스팅에서 다루겠다. 본 글에서는 언어모델이 생성한 텍스트의 정확도를 높이는 데 사용하는 방법들 중 Beam Search, Contrastive Decoding, FUDGE, ARGS를 정리해 보겠다.
Enhancing Accuracy: Beam Search, Contrastive Decoding
Beam search는 autoregressive한 언어모델이 텍스트를 예측할 때 정확성을 높이는 방법으로, 한 번에 한 토큰씩 greedy하게 예측하는 것이 아니라 여러 '가능성'을 탐색하는 방법이다. 예를 들어, 텍스트를 생성할 때 A토큰과 B토큰 중 A토큰의 점수가 높다면 greedy한 모델은 A토큰을 취하고 B토큰은 버릴 것이다. Beam search는 이와 다르게 A토큰을 취해서도 텍스트를 계속 생성해 보고 (경로 1), B토큰을 취해서도 계속 생성해 본다 (경로 2). 이렇게 여러 갈래로 분기된 경로들 중 점수의 총합이 가장 높은 것을 최종 결과로 선택하는 방식이다. 이렇게 하면 언어모델이 '지금 당장은 알아보지 못하는' 좋은 텍스트 생성 결과물의 가능성들도 탐색할 수 있다.
물론 이런 방법으로는 탐색해야 할 경우의 수가 텍스트 길이에 따라 지수적으로 증가하기 때문에, 적당히 가지를 쳐 줘야 한다(pruning). Freitag와 Al-Onaizan (2017) [3]은 여러 pruning 방법을 도입해 beam search를 실용적으로 활용할 수 있게 개선하였다.
언어모델의 정확성은 얼마나 일관적인 텍스트를 생성하는지(coherency)도 포함한다. 언어모델은 기본적으로 자주 등장하고 자연스러운 단어의 흐름을 예측하도록 pretrain되기 때문에, 생성된 텍스트의 작은 흐름은 그럴 듯하지만 주제의 일관성이나 큰 흐름이 유지되지 못하는 경우가 많다. 예를 들어 "Barack Obama is born in Hawaii. He is born in ..." 이라는 미결된 텍스트가 주어졌을 때, 사람은 "... 1961 to a Kenyan father" 와 같은 흐름으로 완성해 나갈 것이다. 그러나 언어모델은 "Hawaii", "Honolulu", "Washington"과 같은 단어를 이어붙여, 문법적 관계는 맞지만 글의 구조에 맞지 않고 심지어는 완전히 틀린 텍스트를 만들 수도 있다. 언어모델의 규모를 늘리면 이러한 현상이 조금 나아지지만, 규모를 늘리는 것만으로는 이러한 문제를 해결하기 어려웠다.
Li et al (2023) [4]는 이 문제를 해결하기 위해 Contrastive decoding을 제시했다. 작은 모델(amateur LM)보다 큰 모델(expert LM)이 조금 더 일관성 있고 정확한 텍스트를 생성한다는 점에서 착안하여, 각 토큰의 대해 두 모델이 예측한 점수의 차이를 decoding에 활용한다. 저자들은 이러한 차이를 활용하는 이유를 다음과 같이 설명한다. amateur LM은 각 토큰이 '일반적인 통사관계에 맞는지'만을 위주로 점수를 부여하는 반면, expert LM은 '일반적인 통사관계에 맞는지'뿐만 아니라 '문맥에 맞는지'도 반영하여 점수를 부여할 수 있다. 즉, expert LM의 점수로부터 amateur LM의 점수를 뺀다면 '문맥에 맞는지'에 의해 매겨진 점수만 조금 더 선명하게 볼 수 있다. 이러한 이유로 contrastive decoding을 이용하면 일관적이고 정확한 텍스트를 효과적으로 생성할 수 있게 된다.
Aligning to Constraints: FUDGE, ARGS
언어모델을 유용하게 사용하려면 언어모델이 제약 조건(constraints)을 정확히 지켜 텍스트를 생성하도록 하는 방법이 필요하다. 형식적인 글, 특정 금기어를 사용하지 않는 글, GPT가 쓰지 않은 것처럼 보이는 글(??) 등을 생성하는 것이 이런 제약 조건의 예시이다.
Yang과 Klein (2021) [5]은 제약을 지켜 텍스트를 생성하는 방법으로 FUDGE(Future Discriminators for Generation)를 제시했다. 여기에선 일반적인 텍스트 생성 모델에 더해, Attribute predictor라는 별도의 작은 언어모델이 들어간다. 이 모델은 생성 모델에 의해 점수가 높게 예측된 토큰들이 제약 조건을 만족시키는지 여부에 따라 점수를 부여한다. 생성 모델이 예측한 점수와 Attribute predictor가 예측한 점수를 곱하여 각 토큰의 최종 점수가 정해지고, 이 결과에 따라 생성할 다음 토큰을 정하게 된다.
이와 유사한 또 다른 접근으로 Khanov, Burapacheep, Li (2024) [6]가 제시한 ARGS(Alignment as Reward-Guided Search)가 있다. 강화학습의 reward model을 decoding 시에 사용한다는 관점으로, reward model이 예측한 토큰들의 점수에 가중치를 곱하고 생성 모델의 점수와 더해 제약 조건에 맞는 텍스트를 생성하는 방식이다.
Enhancing Creativity: Top-k, Top-p (Nucleus), Temperature
텍스트 생성 과제에서 정답으로 볼 수 있는 토큰이 여러 개 있는 경우, 점수가 가장 높은 토큰만을 선택한다면 모델이 창의적인 텍스트를 생성하지 못할 것이다. 따라서 텍스트 생성 시에는 일반적으로 Top-k나 Top-p 방법을 통해 토큰을 샘플링한다.
Top-k sampling: 모델이 예측한 확률이 가장 높은 k개의 토큰들 중 무작위로 선택한다.
Top-p (nucleus) sampling: 확률이 가장 높은 토큰 순서대로, 앞에서부터 누적된 확률이 임계값을 넘지 않도록 하는 범위에서 무작위로 선택한다. 예를 들어 임계값이 0.9이고 토큰들의 확률이 0.6, 0.2, 0.1, 0.05, 0.03, ...이라면, 1번째부터 3번째 토큰까지를 범위로 잡고 이 범위에서 무작위 선택한다.
또한, 모델의 창의성을 높이기 위해 예측된 확률의 분포를 바꿀 수도 있는데, 이러한 접근에는 Temperature가 있다. Boltzmann distribution을 이용해 아래 그림처럼 확률들의 분포가 조금 더 일정해지도록 바꾸는 방법이다.
Enhancing Generation Speed: Speculative Decoding
거대 언어모델을 이용해 텍스트를 생성하는 것은 시간이 오래 걸린다. autoregressive한 Transformer 모델의 특성상 한 번에 한 토큰씩을 생성해야 하기 때문이다. 이를 개선하기 위한 방법으로 Leviathn, Kalman, Matias (2023) [7]은 Speculative decoding을 제시했다.
Speculative decoding의 아이디어는 거대 모델의 autoregressive prediction이 비효율적이니, 작은 모델로 autoregressive하게 텍스트의 '초안'을 생성한 뒤 거대 모델이 그것을 첨삭한다는 것이다. 거대 모델이 처음부터 텍스트를 생성하는 경우와 다르게, 초안을 검증하고 첨삭하는 경우엔 거대 모델을 이용해 여러 토큰을 병렬로 처리할 수 있다. 몇몇 토큰을 올바르게 생성하는 데는 큰 모델이 필요하지만, 대부분의 경우에는 작은 모델로도 충분히 올바른 토큰을 예측할 수 있다는 사실에 기반한 아이디어이다.
위 그림과 같이 speculative decoding에서는 먼저 작은 모델이 γ개의 '초안' 토큰과 distribution을 생성한 후, 대형 모델이 검증용 distribution을 병렬적으로 생성하여 비교한다. 비교 결과 accept된 토큰은 그대로 출력에 반영되며, 처음으로 reject된 토큰 이후의 모든 토큰은 자른 뒤 대형 모델이 생성한 토큰 하나를 이어붙인다. 이러한 방식으로 한 번의 speculative decoding으로 여러 개의 토큰을 효율적으로 생성할 수 있으며, 최악의 경우에도 최소한 하나의 토큰이 생성된다. 저자들은 이를 통해 기존 대형 언어모델보다 2~3배 빠른 텍스트 생성 속도를 달성했다고 한다.
References
- 황승원 교수님 강의노트
- Tauman Kalai, A., & Vempala, S. S. (2023). Calibrated Language Models Must Hallucinate. arXiv e-prints, arXiv-2311.
- Freitag, M., & Al-Onaizan, Y. (2017). Beam search strategies for neural machine translation. arXiv preprint arXiv:1702.01806.
- Li, X. L., Holtzman, A., Fried, D., Liang, P., Eisner, J., Hashimoto, T. B., ... & Lewis, M. (2023, July). Contrastive decoding: Open-ended text generation as optimization. In Proceedings of the 61st annual meeting of the association for computational linguistics (volume 1: Long papers) (pp. 12286-12312).
- Yang, K., & Klein, D. (2021). FUDGE: Controlled text generation with future discriminators. arXiv preprint arXiv:2104.05218.
- Khanov, M., Burapacheep, J., & Li, Y. (2024). Args: Alignment as reward-guided search. arXiv preprint arXiv:2402.01694.
- Leviathan, Y., Kalman, M., & Matias, Y. (2023, July). Fast inference from transformers via speculative decoding. In International Conference on Machine Learning (pp. 19274-19286). PMLR.