[EEVE] Efficient and Effective Vocabulary Expansion Towards Multilingual Large Language Models
1. 한국어 LLM의 필요성
GPT-4, Gemini, Claude 등의 LLM 모델들이 미쳐 날뛰고 있습니다. 정말 뭐든지 다 할 수 있는 인공지능이 등장한 것만 같은 느낌이 드는데요, 한가지 아쉬운 점은 이런 LLM들 대부분이 영어를 중심으로 학습되어 있다는 것입니다.
LLM들이 영어 문제만 잘 푸는 것도 아쉬운 점이지만, 한국어의 처리 속도가 느린 문제도 있습니다. 이는 토크나이저와 관련이 있는데 예를 들어 아래와 같은 예시를 봐보겠습니다.
위 예시를 보면 영어와 한글 둘 다 똑같은 문장임에도 불구하고, 영어 토큰으로는 8개, 한글 토큰으로는 26개로 문장이 구성됩니다. 그렇기 때문에 모델이 같은 의미의 문장을 처리함에도 한글 문장을 훨씬 느리게 처리하겠죠.
한국어 토큰을 보면 문장이 쓸데없는 토큰들로 길이가 불필요하게 늘어난 것을 알 수 있습니다. 따라서 위 모델을 한국어에도 잘 적용되도록 하기 위해선 한국어에 알맞은 토큰들을 새로 추가해서 불필요한 토큰들이 사용되는 것을 방지해야 합니다. 위 예시의 Expanded Tokenizer 부분을 보면, 한국어 토큰들을 추가하여 이전 26개의 토큰에서 9개 토큰까지 문장을 이루는 토큰 길이를 줄인 것을 확인할 수 있습니다.
이번에 소개드릴 EEVE 모델은 이 새로운 한국어 토큰들을 효율적으로 추가하는 방법에 대한 연구론입니다. 기존 모델에 새롭게 토큰을 추가하는 일은 세심하게 이뤄져야 합니다. 기존 모델의 성능을 해치지 않으면서 새로운 정보들을 추가하는 것이 쉽지 않기 때문입니다. EEVE도 이를 위해 7단계나 거쳐서 모델을 최대한 세밀하게 조정했습니다. EEVE는 'SOLAR-10.7B' 모델(big model)과 'Phi-2' 모델(small model)을 각각 fine-tuning하였으며, 7단계나 거쳐 세밀하게 조정한 결과, 모델이 기존에 갖고 있던 영어 문제를 푸는 능력을 해치지 않으면서, 한국어 문제를 푸는 능력을 크게 향상시킬 수 있었다고 합니다.
그럼 지금부터 어떤 방법으로 이런 문제를 해결했는지 알아 보도록 하겠습니다.
2. EEVE의 목표
EEVE 연구자들은 한 가지 가정을 세우고 이를 기반으로 모델 학습을 설계했습니다.
"LLM은 언어에 관계없이 언어 자체를 이해하는 능력을 갖고 있다."
사람을 예시로 들면, 저희는 한국인이지만 영어를 모르더라도 영어 질문을 번역해 주기만 하면 영어 질문에 답변이 가능합니다. "Where is the subway station?" 이라는 문장을 해석하지 못하더라도, 다른 사람이 이 질문의 뜻을 번역해 준다면, 저희는 이 질문에 대한 답을 생각해낼 수 있죠.
이는 LLM도 마찬가지라고 생각하는 겁니다. 비록 모델이 지금은 한글을 잘 모르지만, 질문을 이해하는 능력은 갖고 있기 때문에 영어를 한국어로 번역할 수만 있다면 질문에 답을 할 수 있는 능력은 이미 갖고 있다고 생각하는 겁니다.
그렇기 때문에 EEVE 학습을 통해 이뤄야 하는 목표는, 모델이 원래 갖고 있는 추론 능력을 해치지 않으면서 한국어 토큰들을 추가하는 것입니다.
3. EEVE 방법론
3.1. 토큰
EEVE-Korean-10.8B-v1.0 모델의 경우 SOLAR 모델을 기반으로 합니다. 이 때 원래 모델의 추론 능력을 유지하기 위해서 원래 갖고 있던 토큰들을 유지하고, 새로 한국어 토큰들을 추가해야 합니다. 새롭게 추가할 한국어 토큰들은 모델 학습을 위해 수집한 데이터셋들을 기반으로 추출했습니다.
한국어 학습에 사용한 데이터셋은 한국어 웹문서 텍스트, 영어 사전, AI hub의 parallel corpus입니다. 이 데이터들은 아래와 같은 필터링을 거칩니다.
- perplexity filtering : 문장의 perplexity를 계산해 일정 수치 이상인 문장들을 필터링한다.
- n-gram filtering : 두 문장 사이의 겹치는 단어 수를 체크해 겹치는 정도가 많을 경우 중복 방지를 위해 필터링한다.
- stopword filtering : 의미 없는 단어(불용어)들을 필터링한다.
이렇게 필터링 된 데이터는 총 320만 개의 텍스트 문서로 총 6.7GB 분량의 텍스트라고 합니다. 여기에 사용된 한국어 토큰의 수가 굉장히 많겠지만 효율을 위해 6,000번 이상 사용된 토큰들만 새로 추가합니다. SOLAR 모델의 토크나이저는 원래 32,000개의 토큰을 갖고 있는데, 여기에 새롭게 8,960개의 한국어 토큰을 추가해 토크나이저는 총 40,960개의 토큰을 갖게 됩니다.
3.2. 학습 방법
모델 구조는 transformer decoder의 구조를 갖겠죠. 이 구조는 크게 3부분으로 나눠 볼 수 있습니다.
우선 Embedding 부분은 입력되는 텍스트 토큰들의 embedding feature를 계산합니다. 그 뒤 attention으로 구성된 transformer layer들을 거친 뒤, 마지막 Linear 레이어(output embedding), LM Head를 거쳐 최종 output을 생성하게 됩니다.
여기서 Embedding 레이어와 LM head의 경우 tokenizer의 토큰 수개의 feature를 갖게 되는데, 여기에 새로운 한국어 토큰8,960개가 추가되므로 8,960개의 feature가 새로 추가되게 됩니다.
이렇게 새로 추가되는 feature들의 경우, 기존에 있던 feature들과 다르게 학습되어 있지 않기 때문에 굉장히 랜덤한 값을 갖게 될겁니다. 이를 그대로 학습에 이용할 경우, 기존에 있던 토큰의 feature들과 값이 크게 달라 모델이 혼란스러워하게 됩니다.
따라서 안정적인 학습을 위해서 새로 추가된 토큰 feature들의 값을 적절히 초기화(initialize)해줄 필요가 있습니다.
input embedding(Embedding)의 경우 기존의 단어 토큰 feature들의 평균 값으로 초기화해줍니다. 이 방식의 장점은 원래 모델에 있던 토큰 feature들의 값과 유사한 값을 갖기 때문에 모델이 상대적으로 안정적으로 이 새로운 토큰의 feature들을 받아들일 수 있게 됩니다.
output embedding(LM Head)의 경우 새롭게 추가되는 단어 토큰들을 이루는 첫번째 subword 토큰의 임베딩 값으로 초기화 합니다. 이는 새로운 토큰들의 output embedding 값들이 서로 연관되도록 하여 모델이 단어 예측을 수행할 때 이를 매끄럽게 학습할 수 있도록 하기 위함입니다. (이 부분은 정확하게 이해를 하지 못했습니다... 만약 '안녕하세요' 라는 토큰이 추가된다면 이를 이루는 기존에 있던 subword, '안녕'이라는 token의 output feature를 초기값으로 사용한다는 뜻으로 일단 이해했습니다.)
(원문)
Conversely, the output embeddings for the newly added tokens are initialized with the embeddings of the first subword token that comprises the new token. This strategy aims to align the new tokens’ output representations closely with the semantic characteristics of their constituent subwords, enabling a smoother integration into the model’s predictive framework.
3.3. EEVE의 7단계 학습법
학습 방법은 원래 모델의 pre-training 방식과 같은 방식으로 수행합니다. 입력 텍스트를 보고, 그 뒤의 텍스트를 예측하는 언어 모델 학습 방식으로 학습되는 겁니다.
1단계 : 새로 추가된 input embedding만 학습
1단계는 새로 추가된 한국어 토큰들의 input embedding만 학습하고 나머지 파라미터는 모두 동결(freeze)하는 겁니다. 주의할 점은 기존에 있던 단어 토큰들의 input embedding도 동결한다는 것입니다. 이를 통해 새로운 단어 토큰들을 학습하는 과정에서 원래 알고 있던 단어 토큰들의 정보도 활용할 수 있도록 합니다.
2단계 : 새로 추가된 output embedding만 학습
새로 추가된 한국어 토큰들의 output embedding만 학습하고 나머지 파라미터는 모두 동결합니다. 이 단계에선 모델이 새로 추가된 단어 토큰들을 생성해내는 연습을 하게 됩니다. 이런 식으로 일부 파라미터만 학습하고 나머지 파라미터를 동결하는 것은 학습을 안정화할 뿐만 아니라 학습시간도 상당히 절약하도록 도와줍니다.
3단계 : 새로 추가된 input embedding과 output embedding만 학습
이번엔 새로 추가된 한국어 토큰들의 input과 output embedding을 함께 학습합니다. 이제 모델은 새로 추가된 한국어 토큰들의 이해와 생성방법을 함께 학습하게 됩니다.
4단계 : 모든 output embedding 학습
이번엔 기존 토큰들도 포함하여 output embedding의 모든 파라미터를 학습합니다. 이는 새로운 토큰들의 output embedding을 학습하는 과정에서 이 파라미터 값들이 기존 토큰들의 output embedding들과 범위가 크게 달라지거나, 최적화가 덜 된 부분들을 보완하기 위함입니다. 이 과정을 통해 새로 추가된 토큰들의 output embedding들과 기존에 있던 토큰들의 output embedding들이 서로 더 잘 어우러지도록 하게 됩니다.
5단계 : 새로 추가된 input embedding과 전체 output embedding 학습
전체 output embedding과 함께 새로 추가된 한국어 토큰의 input embedding을 추가로 학습합니다. 이 단계의 학습 목적은 모델이 새로 추가된 한국어 토큰들을 보고 원래 알던 단어 토큰이든 새로 알게된 한국어 토큰이든 상관없이 모든 토큰을 생성해낼 수 있도록 하는 단계입니다. 즉, 새로 추가된 한국어 토큰을 보고 원래 알던 언어 지식과 새로 알게된 한국어 지식을 모두 발휘할 수 있도록 하는 것입니다.
6단계 : 전체 레이어 학습
이제 모든 레이어의 동결을 해제하고 전체 레이어를 함께 학습합니다. 이 단계에서는 QLoRA 테크닉을 활용해 모델의 원래 성능을 유지하면서 새로운 단어 토큰들을 효율적으로 학습할 수 있도록 합니다.
QLoRA는 fine-tuning을 적은 자원으로도 효율적으로도 수행할 수 있도록 하는 fine-tuning 기법입니다. 이는 LoRA를 발전시킨 방법인데, LoRA는 원래 모델의 weight들은 모두 고정한 상태에서, 적은 수의 새로운 파라미터를 추가하여 이 파라미터들만 학습시키는 방식입니다. QLoRA는 여기에 양자화(Quantizer) 기법을 추가한 것이고요. (LoRA와 QLoRA에 대한 자세한 내용은 나중에 기회가 되면 다뤄보겠습니다.)
어쨌든 QLoRA 기법을 이용해 전체 레이어를 학습하지만, 실제로는 전체 파라미터를 학습하는 것보다 훨씬 적은 파라미터를 효율적으로 학습을 한다는 것을 알 수 있습니다.
7단계 : transformer 레이어 학습
마지막으로, input embedding과 output embedding을 모두 동결한 뒤에 중간의 transformer 레이어만 학습합니다. 이 단계는 새로 추가되고 학습된 단어 토큰의 embedding 값들이 모델의 핵심 프로세스(attention 연산 과정)에 잘 녹아들도록 하기 위한 단계입니다.
4. 학습 결과
EEVE 모델의 성능 확인을 위해 KoBEST benchmark를 사용했습니다. KoBEST는 한국어 이해 능력과 추론 능력을 검증하는 benchmark로 아래의 외국어 task들을 한국어로 번역한 버전들을 포함하고 있습니다.
- BoolQ : Boolean QuestionAnswering
- COPA : Commonsense casual reasoning
- WiC : Context-sensitive word understanding
- HellaSwag : Commonsense reasoning
- SentiNeg : Sentiment negation recognition
또, EEVE의 원본 모델이 갖고 있던 영어 추론 능력도 검증하기 위해 BoolQ, COPA, HellaSwag의 원본 영어 benchmark를 이용했습니다.
결과에 대해 연구진들이 말하는 것은, 우선 한국어 task들에 대한 평균 점수가 다른 모델들보다 EEVE가 더 높다는 것을 말하고 있습니다. 이는 EEVE-10.8B 모델이나 2.8B 모델이나 같은 경향을 보입니다.
그리고 당연하지만, 영어 데이터셋으로 fine-tuning된 모델의 경우 영어 bencmark 성능은 향상되지만 한국어 benchmark에 대한 성능은 떨어지는 것을 확인할 수 있습니다. (* 표시 된 모델이 한국어로 학습된 모델.) 따라서 한국어 task에 대한 성능 향상을 위해선 당연하게도 한국어 중심의 데이터셋으로 학습을 해야한다는 것을 알 수 있습니다.
또, EEVE의 fine-tuning 방법의 효과도 확인할 수 있는데, OPEN-SOLAR-KO-10.7B 모델도 한국어 데이터셋으로 SOLAR 모델을 fine-tuning한 모델이지만, EEVE와 달리 영어 task들에 대한 점수가 떨어진 것을 확인할 수 있습니다. 반면에 EEVE의 경우 fine-tuning을 통해 한국어 task들의 점수가 향상되면서도, 영어 task들의 점수가 거의 떨어지지 않은 모습을 확인할 수 있습니다. 이는 EEVE의 학습 방법이 모델의 원래 추론 능력을 크게 해치지 않았다는 것을 입증합니다.
또한 EEVE의 학습 효율성에 대해서도 알 수 있습니다. 아래 표를 먼저 보겠습니다.
표를 보면 SOLAR나 Phi-2에 비해서 EEVE 모델 학습에 사용된 단어 토큰의 수가 훨씬 적은 것을 볼 수 있습니다. 큰 모델의 경우 SOLAR의 절반, 작은 모델의 경우 Phi-2 모델의 3분의 1도 안되는 양의 토큰으로 학습이 된 것을 확인할 수 있습니다. 이를 통해 EEVE가 기존 모델들보다 훨씬 적은 데이터셋으로도 좋은 성능을 내는 효율적인 모델이란 것을 알 수 있습니다.
또한 한 문장에 사용된 평균 토큰 길이의 경우에도 큰 모델은 SOLAR의 절반정도밖에 되지 않고, 작은 모델은 Phi-2의 3분의 1도 되지 않습니다. 평균 문장 길이가 짧다는 것은 모델의 추론 시간도 절약된다는 것이고, 이는 학습을 더 빠르게 할 수 있는 원동력이 됩니다.
5. 결론
이렇게 EEVE에 대해서 살펴봤습니다. EEVE가 필요한 배경으로는, 대부분의 LLM이 영어를 중심으로 학습되어 있기 때문에 한국어에서는 약한 모습을 보입니다. 따라서 한국어 LLM이 필요한데 영어 LLM처럼 대량의 한국어 데이터셋을 수집하고 모델을 학습하는 것보단 이미 학습되어 있는 영어 LLM을 한국어에 맞춰 fine-tuning하는 것이 훨씬 자원을 절약할 수 있는 효율적인 방법일 것입니다.
하지만 이 fine-tuning 방식은 잘못하면 원래 모델이 갖고 있던 추론 능력을 해쳐 성능을 나쁘게 하기 쉽기 때문에 굉장히 세심하게 이뤄져야 합니다. 또, fine-tuning이라고 할지라도 모델이 굉장히 거대하기 때문에 오래 걸린다는 사실은 변하지 않습니다.
따라서 영어 LLM을 한국어 LLM으로 변환시키기 위해선, 기존 모델의 성능을 해치지 않으면서도, 효율적으로 학습할 수 있는 방법을 찾아야 합니다. 그래서 연구한 결과가 EEVE 모델이죠. EEVE는 기존 모델에 새로운 한국어 토큰들을 추가로 학습시키는 방법입니다.
EEVE는 7단계에 걸쳐서 학습을 수행합니다. 각 단계마다 어떤 레이어를 동결하고, 어떤 레이어를 학습할지를 세밀하게 실험하고 결정한 결과 EEVE는 원래 모델의 성능을 해치지 않으면서도 한국어 task들에 대한 성능을 향상시킬 수 있었습니다.
NLP를 공부하는 입장에서 가장 큰 진입장벽은 모델을 학습하는 것이 너무 부담스럽다는 것입니다. 개인 PC로는 불가능에 가깝고, 비싼 컴퓨터나 서버를 사는 것도 부담스럽죠. 그래서 이런 연구들이 더 반가운 것 같습니다. 이런 다양한 방법들이 계속해서 연구되어 언젠가는 NLP도 훨씬 가볍고 누구나 학습할 수 있도록 발전했으면 좋겠습니다.