Skip to main content
Summary

이 장에서 배울 것

지난 장에서는 LLM이 문장을 통째로 이해하는 것이 아니라, 다음에 올 가능성이 높은 조각을 예측하며 학습한다는 점을 살펴보았다. 이번 장에서는 그 "조각"이 무엇인지 자세히 본다.

이 장의 목표는 텍스트가 LLM 안에서 어떻게 숫자로 바뀌는지 이해하는 것이다. 사람은 문장을 글자와 단어로 읽지만, 모델은 문장을 토큰으로 나누고, 각 토큰을 토큰 ID라는 번호로 바꾼다. 그다음 이 번호는 임베딩이라는 벡터, 즉 여러 개의 숫자로 이루어진 좌표로 변환된다.

이 흐름을 이해하면 LLM의 비용, 문맥 길이, 검색 품질, 한국어 성능 문제를 훨씬 현실적으로 판단할 수 있다.

토큰과 임베딩

왜 이 주제가 중요한가

LLM을 사용할 때 우리는 보통 "글자 수"나 "페이지 수"를 먼저 생각한다. 하지만 모델 입장에서 중요한 단위는 글자 수가 아니라 토큰 수다. 같은 한 문장이라도 어떤 언어로 쓰였는지, 어떤 토크나이저를 쓰는지에 따라 토큰 수가 달라진다.

토큰 수는 세 가지와 직접 연결된다.

첫째, 비용이다. 많은 LLM API는 입력과 출력 토큰 수를 기준으로 비용을 계산한다. 같은 내용을 넣어도 한국어가 더 많은 토큰으로 쪼개지면 비용이 늘 수 있다.

둘째, 문맥 길이다. 모델이 한 번에 처리할 수 있는 최대 토큰 수에는 한계가 있다. 보고서 30쪽을 그대로 넣을 수 있을 것 같아도, 토큰 수로 환산하면 한도를 넘을 수 있다.

셋째, 검색 품질이다. RAG에서 문서를 잘 찾으려면 문장을 의미 벡터로 바꾸는 임베딩이 중요하다. 임베딩이 엉뚱하게 만들어지면 질문과 관련 없는 문서가 검색될 수 있다.

핵심 개념 설명

토큰은 모델이 읽는 최소 조각이다

토큰은 LLM이 텍스트를 처리하기 위해 나눈 조각이다. 토큰은 반드시 단어와 같지 않다. 어떤 경우에는 단어 하나가 하나의 토큰이 되지만, 어떤 경우에는 단어 하나가 여러 토큰으로 나뉜다. 또 공백, 문장부호, 특수기호도 토큰이 될 수 있다.

예를 들어 "인공지능을 배운다"라는 문장을 사람은 대략 "인공지능 / 을 / 배운다"처럼 읽을 수 있다. 하지만 모델은 사용하는 토크나이저에 따라 "인공 / 지능 / 을 / 배 / 운다"처럼 더 잘게 나눌 수도 있고, "인공지능 / 을 / 배운 / 다"처럼 나눌 수도 있다.

토큰화 방식에는 여러 종류가 있다.

  • 문자 단위 토큰화: 한 글자씩 나눈다. 단순하지만 문장이 길어질수록 토큰 수가 너무 많아진다.

  • 단어 단위 토큰화: 띄어쓰기 기준으로 단어를 나눈다. 이해하기 쉽지만 처음 보는 단어나 변형된 단어를 처리하기 어렵다.

  • 하위 단어 토큰화: 자주 나오는 조각은 크게 묶고, 드문 단어는 작게 나눈다. 현대 LLM에서 널리 쓰이는 방식이다.

BPE나 SentencePiece 계열 토큰화는 하위 단어 토큰화의 대표적인 접근이다. 핵심 아이디어는 간단하다. 자주 함께 등장하는 글자 조합은 하나의 조각으로 묶고, 낯선 표현은 더 작은 조각으로 나눈다. 그래서 "internationalization" 같은 긴 영어 단어도 몇 개의 하위 조각으로 나뉠 수 있고, 한국어의 조사나 어미도 별도의 조각으로 분리될 수 있다.

토큰 ID는 토큰에 붙은 번호다

토큰화가 끝나면 각 토큰은 사전에 등록된 번호로 바뀐다. 이 번호를 토큰 ID라고 한다. 예를 들어 어떤 모델의 사전에서 "AI"가 1234번이고 "학습"이 5678번일 수 있다. 실제 번호는 모델과 토크나이저마다 다르다.

중요한 점은 토큰 ID 자체에는 의미가 없다는 것이다. 1234번이 5678번보다 더 크다고 해서 더 중요한 단어라는 뜻은 아니다. 토큰 ID는 단지 사전에서 해당 조각을 찾기 위한 색인이다.

모델은 이 번호를 그대로 계산하지 않는다. 번호는 다음 단계에서 임베딩 벡터를 찾기 위한 키처럼 사용된다.

임베딩은 의미를 담은 좌표다

임베딩은 토큰이나 문장을 숫자 벡터로 표현한 것이다. 벡터는 여러 개의 숫자로 이루어진 목록이라고 생각하면 된다.

예를 들어 어떤 단어가 다음과 같이 표현된다고 상상해 보자.

  • 고양이: [0.8, 0.2, 0.1, 0.7]

  • 강아지: [0.7, 0.3, 0.2, 0.6]

  • 자동차: [0.1, 0.9, 0.8, 0.2]

실제 임베딩은 이보다 훨씬 많은 숫자로 이루어지지만, 원리는 비슷하다. 의미가 비슷한 항목은 벡터 공간에서 가까운 위치에 놓이도록 학습된다. 그래서 "고양이"와 "강아지"는 비교적 가깝고, "자동차"는 상대적으로 멀 수 있다.

LLM 내부에서는 토큰 ID가 임베딩으로 바뀐 뒤 계산이 시작된다. 즉 모델은 글자를 직접 보는 것이 아니라, 토큰에 대응하는 숫자 좌표들을 입력으로 받아 다음 토큰을 예측한다.

문장 임베딩은 의미 검색에 쓰인다

RAG에서 자주 사용하는 임베딩은 보통 토큰 하나가 아니라 문장이나 문서 조각 전체를 하나의 벡터로 바꾼 것이다. 이를 문장 임베딩 또는 문서 임베딩이라고 부른다.

예를 들어 사용자가 "휴가 신청 절차가 어떻게 되나요?"라고 묻는다고 하자. 문서에는 "연차 사용을 원하는 직원은 사내 시스템에서 근태 신청서를 제출해야 한다"라고 쓰여 있을 수 있다. 두 문장은 단어가 많이 겹치지 않지만 의미는 가깝다. 임베딩 검색은 이런 의미적 가까움을 이용해 관련 문서를 찾는다.

이것이 키워드 검색과 다른 점이다. 키워드 검색은 같은 단어가 등장하는지를 중요하게 본다. 임베딩 검색은 표현이 달라도 의미가 비슷하면 가까운 벡터로 배치하려고 한다.

쉬운 비유 또는 사례

토큰화는 긴 종이를 작은 레고 블록으로 자르는 과정과 비슷하다. 모델은 문장 전체를 한 번에 쥐고 이해하지 않는다. 문장을 여러 블록으로 나누고, 그 블록들을 순서대로 보며 다음 블록을 예측한다.

임베딩은 그 블록들을 지도 위에 배치하는 과정과 비슷하다. 동물과 관련된 블록은 동물 구역에, 회사 업무와 관련된 블록은 업무 구역에 놓인다. 물론 실제 지도처럼 2차원은 아니다. 수백 차원 또는 그 이상의 숫자 공간에 놓인다. 하지만 직관은 같다. 의미가 가까운 것은 가깝게, 의미가 먼 것은 멀게 배치하려고 한다.

한국어 사례를 보자.

"회의록을 정리해 주세요"라는 문장은 짧아 보인다. 하지만 토크나이저에 따라 "회의 / 록 / 을 / 정리 / 해 / 주세요"처럼 여러 조각으로 나뉠 수 있다. 반면 영어 "Please summarize the meeting notes"는 다른 방식으로 나뉜다. 어느 쪽이 항상 더 많다고 단정할 수는 없지만, 한국어는 조사, 어미, 복합어, 띄어쓰기 변동 때문에 예상보다 많은 토큰을 사용할 때가 있다.

예를 들어 "사용자권한관리화면"처럼 붙여 쓴 복합어는 사람에게는 하나의 업무 용어처럼 보인다. 그러나 모델에는 "사용자 / 권한 / 관리 / 화면" 또는 더 작은 조각으로 나뉠 수 있다. 여기에 "사용자 권한 관리 화면", "사용자권한 관리화면", "사용자 권한관리 화면"처럼 띄어쓰기가 달라지면 토큰화 결과도 달라질 수 있다.

직접 해보는 실습

이번 실습의 목표는 같은 의미의 한국어와 영어 문장을 토큰화해 보고, 토큰 수가 어떻게 달라지는지 기록하는 것이다.

실습 1: 문장별 토큰 수 비교하기

다음 문장을 준비한다.

구분문장
한국어 1인공지능 모델은 문장을 토큰으로 나누어 처리한다.
영어 1An AI model processes sentences by splitting them into tokens.
한국어 2휴가 신청 절차와 승인 기준을 알려 주세요.
영어 2Please explain the vacation request process and approval criteria.
한국어 3사용자권한관리화면에서 오류가 발생했습니다.
영어 3An error occurred on the user permission management screen.

사용할 수 있는 토크나이저 도구나 간단한 코드 환경이 있다면 같은 모델의 토크나이저로 위 문장을 모두 변환한다. 중요한 점은 비교할 때 같은 토크나이저를 사용해야 한다는 것이다. 모델마다 토큰 사전이 다르므로 서로 다른 토크나이저 결과를 그대로 비교하면 안 된다.

기록표는 다음처럼 만든다.

문장글자 수토큰 수눈에 띄는 분리 방식메모
한국어 1
영어 1
한국어 2
영어 2
한국어 3
영어 3

관찰할 질문은 세 가지다.

  1. 한국어와 영어의 토큰 수 차이가 있는가?

  2. 한국어 조사나 어미가 따로 분리되는가?

  3. 붙여 쓴 복합어가 예상보다 많이 쪼개지는가?

실습 2: 띄어쓰기 변화 비교하기

다음 세 문장을 비교한다.

  • 사용자권한관리화면을 확인하세요.

  • 사용자 권한 관리 화면을 확인하세요.

  • 사용자 권한관리 화면을 확인하세요.

사람에게는 거의 같은 뜻이지만, 토큰화 결과는 달라질 수 있다. RAG에서 문서를 쪼개고 검색할 때 이런 차이가 누적되면 검색 품질에 영향을 줄 수 있다. 특히 사내 문서, 법률 문서, 기술 문서처럼 복합 명사가 많은 영역에서는 띄어쓰기 규칙을 어느 정도 통일하는 것이 좋다.

실습 3: 임베딩 검색 결과 관찰하기

간단한 문서 조각을 세 개 만든다.

  • A: 연차 휴가는 사내 근태 시스템에서 신청한다.

  • B: 비밀번호는 보안 설정 메뉴에서 변경할 수 있다.

  • C: 회의실 예약은 캘린더에서 원하는 시간을 선택해 진행한다.

질문은 "휴가를 쓰려면 어디에서 신청하나요?"로 둔다. 임베딩 검색이 잘 작동하면 A가 가장 가깝게 나와야 한다. 그다음 질문을 "쉬는 날 등록하는 법"처럼 바꾸어 보자. 단어가 달라져도 A가 계속 검색되는지 확인한다.

이 실습의 핵심은 정답을 외우는 것이 아니라, 표현이 달라도 의미가 가까우면 검색될 수 있다는 점을 관찰하는 것이다.

흔한 실수와 오류 분석

실수 1: 토큰 수를 글자 수나 단어 수와 같다고 생각한다

토큰 수는 글자 수와도 다르고 단어 수와도 다르다. 특히 한국어에서는 조사, 어미, 복합어, 띄어쓰기 때문에 예상과 다른 결과가 자주 나온다. LLM 비용이나 문맥 길이를 계산할 때는 반드시 실제 토크나이저 기준으로 확인해야 한다.

실수 2: 한국어는 항상 불리하다고 단정한다

한국어 문장이 영어보다 더 많은 토큰을 쓰는 경우가 많을 수는 있다. 하지만 항상 그런 것은 아니다. 모델의 토크나이저가 어떤 데이터로 학습되었는지, 한국어 토큰을 얼마나 잘 포함하는지에 따라 결과가 달라진다. 중요한 것은 막연한 인상이 아니라 실제 측정이다.

실수 3: 임베딩 유사도를 정답률로 착각한다

임베딩 검색에서 유사도가 높다는 말은 "의미상 가까워 보인다"는 뜻이지 "정답이다"라는 뜻이 아니다. 예를 들어 "퇴사 절차"와 "입사 절차"는 둘 다 인사 업무와 관련되어 가까울 수 있지만, 답변 관점에서는 완전히 다른 문서다.

따라서 RAG에서는 검색된 문서가 정말 질문에 답하는지 다시 확인해야 한다. 이후 장에서 다룰 평가와 hallucination 관리가 필요한 이유도 여기에 있다.

실수 4: 짧은 질문과 긴 문서를 그대로 비교한다

사용자 질문은 보통 짧고, 문서 조각은 상대적으로 길다. 짧은 질의 하나와 긴 문단 하나를 임베딩으로 비교하면 핵심이 흐려질 수 있다. 문서 조각이 너무 길면 여러 주제가 섞여 검색 품질이 떨어진다. 반대로 너무 짧게 자르면 문맥이 사라진다.

RAG를 설계할 때는 문서 분할 크기, 제목 포함 여부, 메타데이터 사용 여부를 함께 조정해야 한다.

실수 5: 고유명사, 신조어, 오탈자를 가볍게 본다

사내 서비스명, 제품명, 사람 이름, 약어, 신조어는 토크나이저와 임베딩 모델이 잘 처리하지 못할 수 있다. "GenAI팀", "정산봇", "권한매트릭스" 같은 표현은 일반 문장보다 더 불안정하게 쪼개질 수 있다. 오탈자가 섞이면 검색 품질은 더 떨어진다.

실무에서는 자주 쓰는 고유명사를 문서에 일관되게 표기하고, 필요한 경우 별칭 사전이나 키워드 검색을 임베딩 검색과 함께 사용하는 것이 좋다.

요약

토큰은 LLM이 텍스트를 처리하기 위해 나눈 조각이다. 토큰은 단어와 같지 않으며, 문자보다 클 수도 있고 단어보다 작을 수도 있다. 현대 LLM은 자주 등장하는 조각은 크게 묶고, 낯선 표현은 작게 나누는 하위 단어 토큰화를 주로 사용한다.

토큰은 토큰 ID로 바뀌고, 토큰 ID는 다시 임베딩 벡터로 변환된다. 임베딩은 의미가 비슷한 항목을 가까운 위치에 놓는 숫자 좌표라고 이해할 수 있다.

한국어에서는 조사, 어미, 복합어, 띄어쓰기, 한자어, 외래어, 고유명사 때문에 토큰화 결과가 예상과 다를 수 있다. 이 차이는 비용, 문맥 길이, RAG 검색 품질에 영향을 준다.

임베딩 검색은 의미가 비슷한 문서를 찾는 데 유용하지만, 유사도가 높다고 항상 정답은 아니다. 검색 결과는 평가와 검증 과정을 거쳐야 한다.

퀴즈

  1. 토큰과 단어가 항상 같지 않은 이유를 설명해 보세요.

  2. 토큰 ID 자체가 의미를 갖지 않는 이유는 무엇인가요?

  3. 한국어 문장이 예상보다 많은 토큰으로 나뉠 수 있는 이유를 두 가지 이상 말해 보세요.

  4. 임베딩을 "의미 좌표"라고 비유할 수 있는 이유는 무엇인가요?

  5. 임베딩 유사도가 높아도 답변에 사용할 문서가 아닐 수 있는 사례를 하나 들어 보세요.

체크리스트

  • 토큰, 토큰 ID, 임베딩의 차이를 설명할 수 있다.

  • 단어 단위 토큰화와 하위 단어 토큰화의 차이를 말할 수 있다.

  • 한국어에서 조사, 어미, 복합어가 토큰 수에 영향을 줄 수 있음을 이해했다.

  • 같은 의미의 한국어·영어 문장을 토큰화해 비교해 보았다.

  • 임베딩 검색이 키워드 검색과 어떻게 다른지 설명할 수 있다.

  • 임베딩 유사도가 정답을 보장하지 않는다는 점을 이해했다.

다음 장 연결

이번 장에서는 텍스트가 토큰으로 나뉘고, 토큰 ID와 임베딩 벡터로 바뀌어 모델이 계산할 수 있는 형태가 되는 과정을 살펴보았다.

다음 장에서는 이렇게 만들어진 벡터들이 Transformer 안에서 어떻게 서로 영향을 주고받는지 살펴본다. 특히 "attention"이라는 개념을 중심으로, 모델이 문장 안의 어떤 부분을 더 중요하게 보는지 직관적으로 이해할 것이다.

책 목록

AI 교육 4권 : LLM 이론과 응용: 구조를 이해하고 검증 가능한 한국어 RAG 시스템 만들기

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기