딥러닝 모델이 텍스트를 이해하려면 먼저 문자 기반의 텍스트 데이터를 숫자 기반의 벡터로 변환해야 합니다. 이 과정을 임베딩(embedding)이라고 부르며, 보통 다음의 세 가지 단계를 거칩니다.
1. 토큰화 (Tokenization)
텍스트를 모델에 넣기 위해 가장 먼저 해야 할 일은 텍스트를 잘게 나누는 것, 즉 토큰화입니다. 이때 각 토큰에 고유한 숫자 ID를 부여하며, 이 정보를 사전(dict)에 기록합니다.
토큰화 방법은 다양하지만, 크게 다음 두 가지 방식이 있습니다:
- 큰 단위 토큰화: 예를 들어 단어 단위로 자르는 방식입니다. 의미 보존에 유리하지만, 새로운 단어가 등장했을 때 처리할 수 없는 OOV(Out-Of-Vocabulary) 문제가 발생합니다.
- 작은 단위 토큰화: 예를 들어 글자 단위로 자르는 방식입니다. OOV 문제는 줄지만, 의미가 잘려 나가 문장의 의미를 제대로 전달하기 어렵습니다.
그래서 최근에는 두 방식의 장점을 적절히 결합한 서브워드(Subword) 토크나이저를 많이 사용합니다. 이 방식은 자주 등장하는 단어는 그대로 유지하고, 드물게 등장하는 단어는 의미 있는 작은 조각으로 분해합니다. 대표적인 예로는 BPE(Byte Pair Encoding), WordPiece, SentencePiece 등이 있습니다.
2. 토큰 임베딩 (Token Embedding)
토큰화된 결과는 단지 정수 ID일 뿐, 단어의 의미를 표현하기엔 부족합니다. 따라서 각 토큰 ID를 다차원 벡터로 바꿔주는 임베딩 과정이 필요합니다. 이때 사용되는 것이 바로 딥러닝 프레임워크의 Embedding 레이어입니다. 파이토치(PyTorch)에서는 다음과 같이 사용할 수 있습니다.
import torch
import torch.nn as nn
embedding_dim = 16
embed_layer = nn.Embedding(len(str2idx), embedding_dim)
input_embeddings = embed_layer(torch.tensor(input_ids)) # (5, 16)
input_embeddings = input_embeddings.unsqueeze(0) # (1, 5, 16)
input_embeddings.shape
여기서 주의할점은 초기 임베딩 층은 토큰의 의미를 담는 것이 아니라 단순히 입력 토큰 아이디를 임의의 벡터로 변환할 뿐입니다. 임베딩 층이 단어의 의미를 효과적으로 표현하기 위해서는 딥러닝 모델이 학습 데이터로 훈련되어야 합니다. 딥러닝에서는 모델이 특정 작업을 수행하도록 학습하는 과정에서 데이터의 의미를 잘 담은 임베딩을 만드는 방법도 함께 학습합니다. 이것이 바로 딥러닝이 머신러닝과의 차별점 중 하나 입니다.
3. 위치 인코딩
RNN과 트랜스포머의 가장 큰 차이점은 입력 처리 방식에 있습니다. RNN은 입력을 순차적으로 처리하므로 순서 정보가 자연스럽게 유지되지만, 트랜스포머는 모든 입력을 동시에 처리하므로 순서 정보가 소실됩니다. 텍스트에서 순서는 중요한 정보이므로 위치 인코딩을 통해 이를 보완합니다.
초기에는 수식을 통해 위치 정보를 입력했지만, 최근에는 위치에 따른 임베딩 층을 추가해 학습 데이터를 통해 학습하는 방식을 많이 활용합니다.
절대 위치 인코딩은 구현이 간단하지만, 토큰 간의 상대적 위치 정보를 활용하지 못하고 긴 텍스트 추론 시 성능이 저하되는 단점이 있습니다. 이러한 단점을 보완하기 위해 최근에는 상대적 위치 인코딩도 함께 사용합니다.
4. 최종적인 입력 임베딩 생성 과정
최종적으로 모델에 입력되는 임베딩은 다음과 같은 과정을 거칩니다.
1) 텍스트를 토큰화하여 토큰 ID와 위치 ID를 생성합니다.
2) 각 ID를 각각 토큰 임베딩과 위치 임베딩으로 변환합니다.
3) 두 임베딩을 더해 최종 입력 임베딩을 만듭니다.
이 과정을 통해 모델은 단어의 의미뿐 아니라 단어가 문장에서 어떤 위치에 있는지까지 함께 고려할 수 있게 됩니다.
참고자료
LLM을 활용한 실전 AI 애플리케이션 개발 - 허정준
'DeepLearning' 카테고리의 다른 글
[Transformer] 어텐션 연산과 핵심 구성 요소 (0) | 2025.04.14 |
---|---|
[Transformer] RNN과 트랜스포머 아키텍처의 이해 (0) | 2025.04.10 |
[DeepLearning] 메모리 효율적인 딥러닝 (0) | 2025.04.08 |
[DeepLearning] 언어 모델 최적화 개념 정리 (0) | 2025.02.14 |
[DeepLearning] 용어 정리 (0) | 2025.02.12 |