이번 lecture는 지난 lecture의 transformer에 이어 어떻게 pretraining을 할 수 있을지를 알아본다.
아 그 전에, 모든 자료는 http://web.stanford.edu/class/cs224n/index.html#schedule
cs224n 공식 홈페이지로 부터 2023년 Winter 자료를 사용하고 있다. 그동안 안 적었어서 표기하였다.
subword modeling
각 단어는 자기만의 임베딩을 가지고, 학습된다.
하지만 알다시피 인터넷 상의 글이나, 일상의 말에선 잘못 spell되거나, 새로운 신조어가 생겨나는 등 다양한 기본형의 변형이 존재할 수 있다.
이러한 변형을 생각안하고 전부 하나의 단어로 임베딩을 학습한다면, 사실 같은 단어를 뜻하지만 전혀 다르게 임베딩이 학습될 수 있다. (다양한 데이터를 쓰다보면 분명히 잘못된 데이터가 존재할 것,.)
이를 어느정도 방지 및, 새로운 단어에 대한 임베딩 학습을 쉽게 하기위해 우리는 단어를 subword라는 단위로 한번 더 쪼개게 된다.
제일 처음에는 아예 character단위로 임베딩을 학습하다, 어느정도 빈도수가 채워지면 더 긴 subword로 임베딩을 합하여 학습하는 것이다.
이를테면 위 그림처럼, 기본형의 경우 가장 frequent하게 나오기에 그대로 word embedding을 계산.
하지만 taaaasty처럼 tasty의 변형의 경우 rare하게 데이터에서 발견되기에, subword단위로 학습되어 3개의 subword로 쪼개져 embedding이 계산된다.
물론 최악의 경우 한 character씩 나눠지는 등 너무 subword 수가 많아지는 현상도 보여질 수 있다.
Pretraining
다시 pretraining으로 돌아오면, 우리는 transformer를 통해 단어의 임베딩을 학습할 수 있다.
이 때, 쓰이는 데이터셋은 뉴스를 모은 데이터일 수 있고, 일상 대화를 모은 데이터일 수도 있고 다양할 것이다.
가장 중요한 것은, 단어의 뜻은 항상 문장 내 주변 context에 의해 결정된다는 사실이다.
즉, 어떤 단어의 뜻은 해당 단어가 나타나는 context가 많을 수록 더욱 더 명확해질 것이다.(잘 학습될 것)
그래서 어떠한 task, 여기선 예시로 문장 내 감정 분류 task를 해결하려 한다 하자. 이를 해결하기 위해서는 얼마나 많은 데이터를 학습해야 할까?
보편적인 경우 정답은 많으면 많을 수록 해당 단어가 나타나는 context수 가 많아져, word embedding이 더욱 정확해지기에 해당 감정 분류 task도 모델이 더 잘 푼다는 것이다.
이 때문에 우리는 미리 정말 큰 corpus에 대해 모델을 pretraining, 미리 학습한다.
word embedding을 미리 정말 큰 corpus로 학습을 해놓으면, 해당 모델이 뽑는 word embedding은 다른 여타 적은 데이터로 학습한 것보다 훨씬 정확할 것이다.
또한 대부분의 NLP task들은 word embedding을 활용하며,
분류 문제를 풀고 싶다면 decoder마지막에 word embedding을 받아와 주어진 label에 대해 classify하는 linear 층을 넣어 학습(이를 fine-tuning이라 한다)하면 되고,
MT를 하고 싶다면 학습된 word embedding을 넘겨 받아 새로운 decoder(번역할 언어에 대해 pretrain된)에 대하여 학습하면 바로 사용할 수 있을 것이다.
이렇게 word embedding을 위한 pretraining은 LM을 학습하는 것과 비슷하게 학습된다. 이유는 간단한데, LM이 애초에 원하는 것이 다음으로 올 word의 확률분포이기에 분포 내 word의 위치를 찾는 것이 곧 word embedding을 구하는 것이기 때문이다.
좀 더 이해를 돕기위해, 어릴 때 영어를 배울 때를 생각해보자. 가장 처음 영어를 배울 때 보통 간단한 영어 단어를 배우고, (apple이라던지..) 곧이어 나오는 시험문제는 대부분 문장 빈칸 채우기 문제일 것이다.
이러한 문장 빈칸 채우기는, 해당 빈칸 단어에 대한 context가 주어진 상태에서 단어의 뜻을 알아 맞히는 것과 굉장히 비슷한 맥락이다. 즉 이러한 과정으로 해당 단어의 뜻을 우리의 뇌가 학습하는 것이다.
쉽게 설명하려 했는데 결국 나만 알아듣게 설명한....느낌이지만 어쨌든, 이러한 빈칸 채우기 방식 학습은 이후 가장 기본적이고 대표적 LM이 된 BERT의 학습방식에 제대로 도입되게 된다.
이야기가 조금 샜지만 이렇게 LM방식으로 pretrain된 모델은, 이전에 설명된 것처럼 특정 task에 대해 fine-tune되어 사용된다.
How to Pretraining
실제로 model을 pretraining하는 데엔 transformer 기준 3가지 방법이 쓰인다. 위 그림을 참고하면서 하나씩 보자.
- Decoder
가장 기본적인 학습은 Decoder 학습이다. transformer decoder는 단방향으로 진행되는 masked scaled dot product attention을 활용하기에, LM의 원초적 주제 '다음 단어로 적절한 것은?'에 가장 적합한 모델이다.
또한 특성상 마지막 hidden state에 모든 input의 정보가 쏠리기에, 요약이나 문장 분류(뜻 일치도, 선택등..)와 같은 task에 강하다.
decoder 학습을 통한 대표적 모델은 GPT가 있다. 굉장히 유명한 GPT-3도 굉장히 많은 transformer decoder를 굉장히 많은 corpus data로 pretrain하여, 정말 정확한 word embedding을 뽑는 것이다. 실제로 크기가 클수록, 데이터가 많을수록 좋은 성능을 내고 있다.
- Encoder
그 다음으로 떠오른 것은 encoder 학습이다. encoder의 경우 masking이 없고, 양방향으로 학습이 진행된다. 이는 원하는 단어의 future 정보를 참조할 수 있다는 점이 특징으로, 이 탓에 기본적인 방법으로 LM pretraining을 쓸 수 없다. 이미 다음 단어로 뭐가 나올지 알고 있기 때문에.
그래서 아까 주저리주저리했던 문장 빈칸 채워넣기 방법을 pretraining에 활용하게 된다. input 단어 중 한 단어를 random하게 masking하여, output에서 해당 단어를 맞추는 방식으로 word embedding을 학습하는 것이다.
이러한 방법의 모델을 masked LM이라 부른다.
가장 유명한 모델은 BERT : Bidirectional Encoder Representations of Transformers 이다. 구체적 BERT 설명은 가볍게 skip하도록 하겠다. 사실 간단하게 masked LM으로 학습되며, 여러 NLP task에서 정말 좋은 성능 냈다. 정도면 충분하다. masked LM이 실제로 어떻게 동작하는지 코드로 이해하면 제일 좋고.
물론 masked LM은 한 단어씩 주변 context를 보고 예측하기에, decoder와 달리 parallel하게 문장내 여러 단어를 예측할 수 없다는 단점이 존재한다.
BERT 역시, 많은 데이터, 많은 학습으로 성능을 더 끌어올릴 수 있다. (RoBERTa, SpanBERT...)
- Encoder-decoder
마지막으로 둘 다를 활용하는, transformer 자체를 활용하는 방법을 알아보자.
이 경우 문장을 자르거나, 두 문장을 활용하여 encoder/decoder의 장점들을 잘 합칠 수 있는 방법만 있다면 좋은 성능을 기대할 수 있을 것이다.
T5라는 논문에선, original text에서 masked LM과 비슷하게 몇 부분을 masking하여 encoder에 넣고, decoder output을 통해 해당 masking된 부분을 찾도록 모델을 학습하였다.
이는 실제로 여러 NLP task들에서 강점을 보였고, 특히 질답 분야에서 큰 성능을 보였다. 이를테면
input으로 When was Obama born?을 묻는다면,
T5는 하던 것처럼 Obama born _. 에서 _에 들어갈 단어를 찾는 문제로 바꾸어서 생각한다고 볼 수 있다.
이 경우 미리 학습한 데이터로부터 오바마가 태어난 년도를 찾아 잘 답변할 수 있을 것이다.
끝내기 전에 GPT-3을 더 들여다보자.
위의 encoder-decoder 모델의 대표주자 T5는 11 billion의 parameter를 가진다.
GPT-3? 175 billion parameter다.
이렇게 굉장히 큰 모델의 경우, fine-tuning시에 별도로 gradient step을 두지 않더라도 단순히 몇 가지 context example들만 제공하면, 해당 모델이 관련된 example들을 제공하여 손쉽게 모델을 복잡한 학습과정없이도 사용할 수 있다.
이를 In-context learning이라 하는데, 이는 네이버 클로바에서나 여러 AI 사이트에서 제공하는 서비스에서도 엿볼 수 있다.
https://engineering.clova.ai/posts/2022/08/hyperclova-novel-part-1
클로바 스튜디오 - HyperCLOVA 언어 모델의 도움으로 소설을 쓰다 (1/2) | CLOVA Engineering Blog
하이퍼클로바 언어 모델의 문장 창작 능력과 소설 쓰기에 활용되었던 경험을 공유합니다.
engineering.clova.ai
관련 기사 하나를 가져 왔는데, 여기선 굉장히 많은 한국어 데이터를 학습한 초거대 모델 hyperCLOVA를 통해, 자신이 원하는 task에 대한 몇가지 예시, 단어들을 던져주면 알아서 모델이 완성해주는, 클로바스튜디오를 설명해주고 있다.
이러한 것이 가능한 것도, 초거대모델 pretraining의 덕인 것이다.
'모아 읽은 보따리 > cs224n' 카테고리의 다른 글
L8: Transformers (1) | 2023.02.04 |
---|---|
L7: Attention (0) | 2023.02.04 |
L6: LSTMs, NMT (0) | 2023.02.03 |
L5: Language Modeling, RNN (0) | 2023.02.02 |
L4: Dependency Parsing (0) | 2023.02.01 |