LLM은 인간의 언어를 어떻게 이해할까?
― 결국은 숫자로 바꿔서 학습한다
LLM이 사람처럼 말을 이해하는 것처럼 보이지만,
내부에서는 여전히 숫자(정수) 로 학습이 이루어집니다.
즉,
문장을 이해하는 것처럼 보이지만
실제로는 숫자의 패턴을 학습하고 있는 것입니다.
1. 모든 시작은 토큰화(Tokenization)
가장 먼저 하는 작업은 토큰화입니다.
토큰화란?
텍스트를 작은 단위로 나누는 과정
문장을 그대로 학습할 수 없기 때문에,
LLM은 먼저 문장을 쪼개는 작업부터 합니다.
2. 토큰화 방식의 종류
① 단어 단위 토큰화
- 예:
오늘은 / 기분이 / 좋다 - 장점: 직관적
- 단점:
- 새로운 단어에 약함
- 단어 수가 폭발적으로 증가
② 문자 단위 토큰화
- 예:
오 / 늘 / 은 / 기 / 분 / 이 - 장점: 새로운 문자도 학습 가능
- 단점:
- 문맥 이해가 매우 어려움
- 문장이 지나치게 길어짐
③ 부분 단어(Subword) 토큰화 ✅
- 단어를 의미 있는 조각으로 분해
- 새로운 단어도 기존 조합으로 처리 가능
- 현재 대부분의 LLM이 사용하는 방식
👉 ①, ②의 단점을 보완하기 위해
③ 부분 단어 토큰화가 표준처럼 사용됩니다.
3. 토큰을 숫자로 바꾸는 단계 (정수화)
토큰화가 끝났다고 바로 학습할 수 있는 것은 아닙니다.
각 토큰은:
- 고유한 정수 ID로 변환됩니다.
예를 들어:
오늘→ 10234기분→ 5872좋다→ 912
👉 이 단계에서 언어는 완전히 숫자로 변환됩니다.
4. 하지만 숫자만으로는 부족하다 → 임베딩
문제는 여기서 끝이 아닙니다.
단순한 정수는:
- 단어 간의 의미 관계
- 친숙도
- 유사성
을 전혀 표현하지 못합니다.
그래서 등장하는 것이 임베딩(Embedding) 입니다.
5. 임베딩이란?
임베딩은:
토큰(단어 또는 부분 단어)을
고정된 크기의 벡터(vector) 로 변환하는 과정입니다.
이 벡터에는:
- 단어의 의미
- 다른 단어와의 거리
- 사용 맥락의 유사성
이 숫자로 담깁니다.
즉,
- 의미가 비슷한 단어는 벡터 공간에서 가깝고
- 전혀 다른 단어는 멀리 위치합니다.
6. 단어 순서를 알려주는 포지셔널 인코딩
임베딩만으로는 또 하나의 문제가 남습니다.
“이 단어가 문장에서 몇 번째 위치에 있는지”
를 모델이 알 수 없습니다.
그래서 필요한 것이 포지셔널 인코딩(Positional Encoding) 입니다.
- 각 토큰에 위치 정보를 추가
- 단어 순서에 따른 의미 차이를 인식 가능
예:
- “개가 사람을 물었다”
- “사람이 개를 물었다”
👉 단어는 같지만,
👉 순서가 달라 의미가 완전히 달라집니다.
7. 전체 흐름 정리
LLM이 문장을 처리하는 순서는 다음과 같습니다.
1️⃣ 토큰화
→ 텍스트를 작은 단위로 분해
2️⃣ 정수화
→ 토큰을 숫자로 변환
3️⃣ 임베딩
→ 의미를 담은 벡터로 변환
4️⃣ 포지셔널 인코딩
→ 문장 내 위치 정보 추가
이 과정을 거쳐서야
모델은 “문맥”을 다룰 준비가 됩니다.
8. 문맥 이해의 핵심: 셀프 어텐션
그렇다면 문맥은 어떻게 이해할까요?
그 핵심이 바로
👉 트랜스포머의 셀프 어텐션(Self-Attention) 입니다.
셀프 어텐션은:
- 문장 속 모든 단어가
- 서로를 동시에 참고하면서
- “이 단어가 지금 중요한가?”를 판단
덕분에:
- 멀리 떨어진 단어 간의 관계도 파악
- 긴 문장에서도 문맥 유지 가능
👉 LLM이 문맥을 잘 이해하는 이유의 핵심입니다.
마무리 정리
- LLM은 여전히 숫자로 언어를 학습
- 토큰화 → 정수화 → 임베딩 → 포지셔널 인코딩
- 문맥 이해의 결정적 역할은 셀프 어텐션
- “이해하는 것처럼 보이는 이유”가 여기에 있다