자연어 처리(NLP) 모델, 특히 BERT나 GPT 논문을 보면 Token Embedding, Position Embedding, 그리고 Segment Embedding이라는 세 가지 임베딩이 자주 등장합니다. Token Embedding은 단어 뜻을, Position Embedding은 단어 순서를 알려주는 것이라 비교적 직관적이지만, Segment Embedding은 처음 보면 조금 헷갈릴 수 있죠. 이번 글에서는 Segment Embedding이 무엇이고, 왜 필요한지, 어떻게 학습되는지 깔끔히 정리해 드립니다.
Segment Embedding은 간단히 말하면 문장 구분자 역할을 합니다.
Transformer 기반 모델들은 한 번에 한 문장만 다루는 게 아니라 두 문장 이상의 관계도 동시에 고려합니다. 예를 들어 BERT는 두 문장이 이어져 있는지(next sentence prediction) 혹은 문맥상 연관성이 있는지 등을 판단할 수 있습니다.
이때 같은 문서에 여러 문장이 포함될 경우:
이 정보를 토큰마다 알려주기 위해 사용하는 것이 바로 Segment Embedding입니다.
BERT 입력 예시:
[CLS] 문장 A [SEP] 문장 B [SEP]
👉 이때 [CLS]
와 문장 A의 토큰은 Segment ID 0,
[SEP]
뒤 문장 B의 토큰은 Segment ID 1.
모델은 토큰 임베딩 + 위치 임베딩 + Segment 임베딩을 모두 더해서 최종 임베딩을 만듭니다.
즉, 같은 단어라도 문장 A에 있을 때와 문장 B에 있을 때 서로 다른 Segment Embedding이 더해져 문맥 차이를 반영합니다.
네!
Segment Embedding도 Token Embedding처럼 학습 가능한 파라미터입니다.
즉, Segment ID = 0
에 대응하는 벡터와 Segment ID = 1
에 대응하는 벡터를 학습 데이터에서 파라미터로 최적화합니다.
구성요소 | 역할 |
---|---|
Token Embedding | 단어 의미 |
Position Embedding | 단어 순서 |
Segment Embedding | 문장이 어디에 속하는지 |
이 세 가지가 합쳐져 Transformer가 문장 안의 토큰, 문장 순서, 문장 간 관계까지 모두 이해할 수 있게 되는 거죠!