포스트

LLM 시각 가이드 Part 1 - 토크나이제이션과 임베딩

목차

  1. 개요
  2. LLM의 입력 파이프라인 구조
  3. 토크나이제이션
  4. 토큰 ID 할당
  5. 임베딩
  6. 위치 임베딩
  7. 입력 파이프라인 전체 예시
  8. 특수 토큰
  9. 결론
  10. Reference

개요

이 글은 Awesome Neuron의 “A Visual Guide to LLMs (Part 1)” 아티클을 기반으로 작성되었습니다. LLM(Large Language Model)이 인간의 언어를 어떻게 숫자로 변환하여 처리하는지, 입력 파이프라인의 핵심 구성 요소인 토크나이제이션과 임베딩을 시각적으로 설명합니다. 이 시리즈의 Part 1은 입력 파이프라인에 집중하며, Part 2에서는 트랜스포머 블록 내부 동작과 출력 생성을 다룰 예정입니다.

LLM의 입력 파이프라인 구조

LLM은 크게 세 단계로 동작합니다.

단계설명
입력 파이프라인텍스트를 숫자로 변환
트랜스포머 블록변환된 숫자를 처리
출력 파이프라인다음 토큰 생성

LLM은 토큰을 순차적으로 예측합니다. 예측된 각 토큰은 이전 입력과 결합되어 다음 예측의 맥락(context)을 형성합니다. 예를 들어 “Every moment is a beginning”을 예측할 때, 모델은 한 번에 하나의 토큰씩 예측하며 각 단계에서 이전 토큰들을 누적하여 활용합니다.

텍스트에서 숫자로

컴퓨터는 텍스트를 직접 처리하지 못합니다. 따라서 LLM은 텍스트를 숫자 형식으로 변환하는 과정이 반드시 필요합니다. 이 변환은 토크나이제이션과 임베딩의 두 단계로 이루어집니다.

토크나이제이션

토크나이제이션은 입력 텍스트를 작은 단위인 토큰으로 분리하는 과정입니다. 토크나이제이션 방식은 크게 세 가지로 분류됩니다.

단어 기반 토크나이제이션

공백과 구두점을 기준으로 텍스트를 분리하는 방식입니다. “Every moment is a beginning”은 [“Every”, “moment”, “is”, “a”, “beginning”]으로 분리됩니다. 구현이 단순하지만 어휘집에 없는 미등록 단어(unknown word)를 처리하기 어렵다는 단점이 있습니다.

문자 기반 토크나이제이션

텍스트를 개별 문자 단위로 분리하는 방식입니다. 매우 유연하게 임의의 텍스트를 처리할 수 있지만, 시퀀스 길이가 매우 길어진다는 단점이 있습니다.

서브워드 기반 토크나이제이션

단어 기반과 문자 기반의 장점을 결합한 방식으로, 현대 LLM의 표준으로 사용됩니다. 학습 데이터에서 자주 등장하는 단어 조각(subword)을 학습하여 어휘집을 구성합니다. 예를 들어 “unbelievable”은 [“un”, “believe”, “able”]로 분리될 수 있으며, 이를 통해 모델은 학습 중 보지 못한 새로운 단어도 익숙한 구성 요소들의 조합으로 처리할 수 있습니다.

대표적인 알고리즘으로 BPE(Byte Pair Encoding)가 있습니다. BPE는 자주 등장하는 문자 또는 서브워드 쌍을 반복적으로 병합하여 목표 어휘 크기에 도달할 때까지 진행합니다. 실습 도구로는 tiktokenizer를 활용할 수 있습니다.

토큰 ID 할당

토크나이제이션이 완료되면, 각 고유 토큰에는 고유한 숫자 ID가 부여됩니다. 아래는 “Every moment is a beginning” 예시의 토큰 ID입니다.

토큰토큰 ID
Every15745
moment4205
is382
a261
beginning10526

이 숫자 ID는 어휘집(vocabulary) 내에서 해당 토큰의 위치를 가리키는 단순한 인덱스입니다. 숫자 자체에는 의미나 관계 정보가 포함되어 있지 않습니다.

임베딩

토큰 ID만으로는 단어 간의 의미적 관계를 표현할 수 없습니다. 임베딩(Embedding)은 각 토큰을 고차원 벡터로 변환하여 토큰의 특성과 관계를 수치적으로 표현합니다. 아티클에서는 “LLM의 임베딩은 토큰에 대한 수백 개의 암묵적 질문에 답하는 긴 숫자 목록”이라고 설명합니다. GPT-3의 경우 임베딩 차원이 12,288에 달합니다.

의미적 유사성

의미적으로 유사한 토큰은 임베딩 공간에서 수치적으로 가까운 위치를 갖습니다. 예를 들어 “King”과 “Queen”의 벡터는 고차원 공간에서 서로 가까이 위치합니다.

관계 산술

임베딩은 단어 간의 관계를 수학적으로 표현할 수 있습니다. “King”의 임베딩에서 “Man”의 임베딩을 빼고 “Woman”의 임베딩을 더하면, 결과값이 “Queen”의 임베딩에 근사합니다. 이는 임베딩이 단순한 식별자가 아니라 의미 공간을 구조적으로 표현함을 보여줍니다.

위치 임베딩

토큰 임베딩만으로는 단어의 순서 정보를 표현할 수 없습니다. “The dog jumps on the cat”과 “The cat jumps on the dog”은 동일한 단어를 포함하지만 의미가 완전히 다릅니다. 트랜스포머 아키텍처는 본질적으로 순서를 고려하지 않기 때문에, 위치 정보를 별도로 주입해야 합니다.

위치 임베딩(Positional Embedding)은 각 위치에 대한 추가 벡터로, 토큰 임베딩에 더해집니다. 이는 마치 좌석 번호처럼 기능하여, 동일한 단어가 다른 위치에 등장할 경우 서로 다른 수치 표현을 갖게 됩니다.

입력 파이프라인 전체 예시

“Every moment is a beginning”에 대한 전체 입력 파이프라인은 다음과 같습니다.

3차원 예시의 토큰 임베딩 값입니다.

토큰차원 1차원 2차원 3
Every-0.58800.34860.6603
moment-0.2196-0.37920.7671
is-1.19250.6984-1.4097
a0.17941.89511.3689
beginning-1.6033-1.32500.1784

3차원 예시의 위치 임베딩 값입니다.

위치차원 1차원 2차원 3
1-0.91780.9045-2.0975
21.1558-1.21570.1295
31.09370.20663.1815
40.09671.40860.1915
5-0.15620.24464.0124

최종 입력 임베딩은 각 위치에서 토큰 임베딩과 위치 임베딩의 합으로 계산됩니다. 이 최종 벡터는 해당 토큰의 의미(meaning)와 위치(position) 정보를 모두 인코딩한 고유한 수치 표현입니다. 이 벡터들이 트랜스포머 블록의 입력으로 전달됩니다.

특수 토큰

LLM은 일반 텍스트 토큰 외에 구조적 목적을 위한 특수 토큰도 활용합니다. |im_start|, |im_sep|, |im_end| 등의 특수 토큰은 메시지의 경계와 구조적 구분을 모델이 인식하도록 돕습니다. 이러한 특수 토큰은 시스템 프롬프트, 사용자 메시지, 모델 응답 등을 구분하는 데 사용됩니다.

결론

LLM의 입력 파이프라인은 텍스트를 서브워드 단위로 토크나이즈하고, 각 토큰에 고유한 ID를 부여한 뒤, 고차원 임베딩 벡터로 변환하는 과정으로 구성됩니다. 여기에 위치 임베딩을 더함으로써 모델은 각 토큰의 의미와 시퀀스 내 위치를 동시에 파악할 수 있습니다. 이렇게 준비된 입력 임베딩은 트랜스포머 블록으로 전달되어 자기 주의(self-attention) 등의 메커니즘을 통해 처리됩니다. Part 2에서는 트랜스포머 블록의 내부 동작, 인과적 주의(causal attention), 마스크된 멀티헤드 어텐션, 피드포워드 네트워크, 토큰 선택 과정 등을 다룰 예정입니다.

Reference