프롬프트(Prompt)란?
ChatGPT를 사용해 과제나 리포트 작성을 할 때, 원하는 방향으로 답변이 나오도록 여러가지 입력을 준 경험이 한 번씩 있다면, "프롬프트를 잘 줘야 ChatGPT가 대답을 잘해줘"라는 말을 들은 경험도 있을겁니다. 여기서 말하는 프롬프트(Prompt)란 무엇일까요? 위의 경험에 빗대어 생각해보면, ChatGPT 즉, 인공지능 모델에 넣어주는 입력값이라 볼 수 있을 것입니다.
조금 더 자세하게 살펴보기위해 프롬프트의 사전적 정의를 확인해보겠습니다.
" An act of assisting or encouraging a hesitating speaker."
그대로 번역하자면, "망설이는 화자(Speaker)를 돕거나(Assist) 격려(Encourage)하는 행동"이라는 뜻입니다. 이를 모델의 입력값, 프롬프트로 해석해보자면 돕거나 격려하는 행동이 프롬프트, 망설이는 화자는 모델, 그리고 이 행동을 취하는게 사용자(주로 사람)가 되겠습니다. 정리하면, 모델이 사용자가 원하는 답변을 내뱉기 위해 주는 적절한 입력값이 바로 프롬프트라고 할 수 있겠습니다.
이러한 프롬프트를 사용해서 모델의 추론/학습에 관여하는 프롬프트 엔지니어링(Prompt Engineering), 프롬프트 튜닝(Prompt Tuning) 분야도 활발히 연구되고 있는데요, 최근에 생긴 개념인만큼 연구마다 조금씩 다르게 정의하고 있습니다. 큰 틀에서 봤을 때, 두 개념 모두 모델이 원하는 답변을 줄 때까지 프롬프트를 계속 다듬는 과정이라고 볼 수 있습니다. 하지만, 프롬프트 엔지니어링은 모델의 추가적인 학습 없이 주로 사람이 적절한 프롬프트를 찾는 수동적인 작업을 의미하고, 프롬프트 튜닝은 모델을 이용해 적절한 프롬프트를 생성하거나, 랜덤하게 초기화된 프롬프트를 모델에 넣어주고 가중치 업데이트를 통해 학습하는 과정을 의미합니다.
프롬프트 러닝(Prompt Learning)이란?
그렇다면 프롬프트 러닝이란 무엇일까요? 앞서 소개한 프롬프트 엔지니어링, 프롬프트 튜닝처럼 프롬프트 러닝이 의미하는 바는 소개하는 글마다 조금씩 다를 수 있습니다. 본 글에서 다루는 프롬프트 러닝은 프롬프트 튜닝에 조금 더 가까운 개념으로, 크게 프롬프트 생성 방법과, 프롬프트를 이용한 학습 방법으로 이 두 가지 관점에서 다루고자 합니다.
1. 프롬프트 생성 방법:
먼저 프롬프트 생성방법에 따라 크게 👨🏻 Manual-Seach Prompt 혹은 🔄 Auto-Search Prompt 로 나눌 수 있습니다. 전자는 주로 사람이 직접 데이터에 맞는 적절한 프롬프트를 찾는 방식을 말하며, 후자는 주로 모델을 이용해 자동으로 찾아주는 방식을 말합니다.
👨🏻 Manual-Seach Prompt
초기에는 주로 매뉴얼한 방식으로 각 태스크마다 적절한 프롬프트를 찾아주었는데요, 대표적인 예로는 PET (Schick and Schutze., EACL'20) 에서 사용한 Verbalizer를 들 수 있습니다. 감정 분석(Sentiment Classification) 태스크를 BERT, RoBERTa와 같은 Masked Language Model(MLM) 기반의 사전학습 모델에서 수행한다고 할 때, 기존에는 "Best pizza ever!" 만을 가지고 긍정적인 감정(positive, +1)임을 학습해야 했습니다. 그러나, 본 논문에서는 기존 입력과 함께 "It was [MASK]"라는 탬플릿을 모델에게 주어 [MASK]에 등장해야하는 단어가 긍정 단어인 great로 예측될 확률을 높이며 학습하게 됩니다.
해당 논문에서는 great(positive, +1), bad(negative, -1)와 같이 태스크마다 레이블을 대표할 수 있는 단어를 Verbalizer라는 표현을 써 정의하고 있지만, 모델의 추가적인 입력으로 들어가기 때문에 앞에서 소개한 프롬프트와 같은 역할이다라고 보아도 무방합니다. 이 논문에서는 태스크에 따라 사람이 직접 매뉴얼하게 Verbalizer와 탬플릿을 정의하였으므로, 👨🏻Manual-Search Prompt에 해당합니다. 아래와 같이 데이터셋마다(태스크) 정의한 프롬프트를 사용하고 있습니다.
🔄 Auto-Search Prompt
앞서 소개한 👨🏻Manual-Search Prompt의 경우 직관적이고, 모델 학습에 효과적이지만 적절한 프롬프트를 찾기까지에 시간이 많이들고, 프롬프트를 생성하는 사람에 따라 편차가 크다는 문제점이 있습니다. 이에 자동적으로 프롬프트를 찾는 방법인 🔄 Auto-Search Prompt가 연구되기 시작했습니다.
대표적인 논문으로 AutoPrompt (Shin et al., EMNLP'20)가 있습니다. 감정 분석 태스크를 MLM 기반의 모델에서 수행한다고 할 때, PET 논문에서는 직접 사람이 태스크마다 프롬프트를 정의했지만, AutoPrompt에서는 정답 레이블의 확률이 가장 높아지는 토큰을 graident-guided search 방법으로 찾아 이를 프롬프트로 정의합니다. 토큰을 찾는 방식은 기존 연구인 UniversalTriggers(Wallace et al., EMNLP'19)에서 영감을 얻었는데요.,모델의 성능 하락(Attack 기법)을 목표로 하는 Trigger Token Search 방식을 역으로 이용해 정답 확률을 높이는 토큰을 찾아 프롬프트로 정의하였습니다. 위의 그림에서 기존 입력인 "a real joy." 뒤에 붙는 "atmosphere", "alot", "dialogue", "Clone", totally" 토큰들이 positive 확률을 가장 높이는 프롬프트에 해당합니다.
2. 프롬프트의 형태에 따른 학습 방법
🟦 Hard Prompt vs. 💧 Soft Prompt
프롬프트를 이용한 학습 방법에 대해 이야기 해보기 전, 우선 프롬프트의 형태에 대해 간단하게 알아보겠습니다. 프롬프트는 크게 🟦 Hard Prompt 와 💧 Soft Prompt로 나눌 수 있는데요, 전자의 경우 주로 자연어 형태의 이산적인(Discrete) 값을 가지며, 후자의 경우 실수(혹은 실수 값으로 구성된 벡터)로 이루어진 연속적(Continuous)인 값을 가집니다.
초기에는 사람이 직관적으로 이해할 수 있는 🟦 Hard Prompt 가 주로 연구되었습니다. 위의 그림에서와 같이 주로 자연어로 구성되며, 주어진 태스크에 맞게 사람 혹은 모델이 적절한 프롬프트를 찾는 과정을 거칩니다. 하지만, 이렇게 정의된 하드 프롬프트는 Suboptimal하다는 문제점이 있는데요, 인공지능 모델은 이산적인 값이 아닌 연속적인 값으로 학습되기 때문입니다. 이에 연속적이고, 조정가능한(Tunable) 💧 Soft Prompt 가 등장하였고, 관련 연구가 활발히 이루어졌습니다.
💧 Soft Prompt + ❄️Frozen Pre-trained Model
대표적인 연구로는 Prompt Tuning(Lester et al., EMNLP'21)과 Prefix Tuning(Li and Liang, ACL'21)이 있습니다. 두 논문 모두 💧 Soft Prompt를 이용해 기존의 파인튜닝 대비 효과적인 학습이 가능하다는 점을 주요 포인트로 하고 있습니다.
위의 그림에서 (A)를 먼저 보면, 사전학습모델(Pre-trained Model)을 이용하여 A, B, C 태스크를 수행한다고 할 때, 기존의 Model Tuning 방법과 제안 방법인 Prompt Tuning을 비교해서 보여주고 있는데요, 기존 방법의 경우 세 가지 태스크를 수행하기 위해 사전학습 모델 전체의 task-specific한 카피 본을 태스크 개수 만큼 만들고, 추론 역시 개별 batch에서 수행해야하는 문제점이 있습니다. (B)에서 역시 마찬가지로 다양한 태스크를 수행한다고 할때 기존 Fine-tuning 방법은 각 태스크마다 모델 전체 파라미터를 업데이트 해야한다는 문제점을 이야기하고 있습니다. 두 논문에서는 학습 가능한 💧 Soft Prompt 를 이용하여 태스크마다 개별로 모델 전체 파라미터를 업데이트 할 필요없이 프롬프트만 업데이트하여 효율적인 학습을 가능하게 했습니다.
'인공지능(AI) > 자연어처리(NLP)' 카테고리의 다른 글
[NLTK] 자연어 처리를 위한 패키지 (0) | 2023.10.24 |
---|---|
End-to-End Memory Networks, 엔드-투-엔드 메모리 네트워크 (0) | 2022.08.18 |
Prompt-Based Learning, 프롬프트 기반 학습 (0) | 2022.08.08 |
[LM 평가지표] Perplexity, PPL (0) | 2022.02.04 |
[NLP] 워드투벡터(Word2Vec) (2) | 2021.10.13 |