컴퓨터에게 "초파리"는 처음부터 숫자다. 글자마다 정해진 번호(유니코드)가 있고, 그 번호를 바이트로 저장한다. 신경망에 넣으려면 문장을 토큰으로 나누고, 토큰마다 번호를 붙이고, 번호를 의미가 담긴 벡터(임베딩)로 바꾸고, 순서 정보를 더해야 한다. 36문장짜리 작은 말뭉치로 모든 단계를 직접 계산한다.
한글 음절 번호 = 0xAC00 + (초성 × 21 + 중성) × 28 + 종성유니코드 표준 3.12절
글자 단위로 나누면 토큰이 너무 많아지고, 단어 단위로 나누면 처음 보는 단어를 다루지 못한다. BPE는 말뭉치에서 가장 자주 붙어 나오는 두 조각을 하나로 합치기를 되풀이해 그 중간을 찾는다.
BPE를 60번 합친 뒤 말뭉치에 나오는 토큰을 모으면 사전이 된다. 토큰마다 사전의 칸 번호가 붙는다. 사전에 없는 토큰은 "모름" 번호를 받는다.
번호 54와 55는 이웃 번호지만 뜻은 아무 상관이 없다. 그래서 번호마다 여러 칸짜리 벡터를 붙인다. 비슷하게 쓰이는 단어끼리 가까운 좌표를 갖게 하는 것이 목표다. 여기서는 "같은 문장 ±2칸 안에서 함께 나온 횟수"로 단어 55개마다 8칸짜리 벡터를 만들었다.
"함께 나오는 단어가 비슷하면 뜻도 비슷하다"는 생각은 오래되었다. 단어와 문서의 출현 표를 특잇값 분해로 줄여 숨은 의미 구조를 찾는 잠재 의미 분석(LSA)이 대표적인 초기 방법이다 [R2]. 이 페이지는 단어끼리 함께 나온 횟수 표에 log(1 + 횟수)를 취하고 고윳값 분해로 8칸을 뽑았다. 오늘날의 언어 모델은 임베딩을 다음 토큰 맞히기 학습의 일부로 함께 배운다. 섹션 5의 위치 정보도 이 벡터에 더한다.
토큰을 순서 없이 주머니에 담아 세면(토큰 주머니) 순서가 사라진다. 한국어는 조사가 역할을 알려 주어 어순이 바뀌어도 뜻이 같을 때가 많지만, 늘 그렇지는 않다.
글 → 토큰 → 번호 → 벡터(+위치) → 트랜스포머(3-8) → 다음 토큰의 확률. 가장 단순한 언어 모델은 바로 앞 단어만 보고 다음 단어를 센다. 이 말뭉치로 직접 계산해 보고, 트랜스포머가 무엇을 더 하는지 본다.
두 코드 모두 Colab에 기본으로 설치된 라이브러리만 쓴다. "노트북(.ipynb) 내려받기" 후 Colab에서 파일 → 노트북 업로드로 열거나, 복사해서 새 노트북 칸에 붙여 넣는다.
유니코드·UTF-8, 한글 자모 공식, BPE 학습과 적용, 토큰 번호, 함께 나온 횟수로 만든 임베딩, 바로 앞 단어 확률을 라이브러리 없이 계산한다. 내 데이터로 바꾸려면 CORPUS를 바꾼다.
실무 라이브러리로 문장을 "문장 × 토큰" 행렬로 바꾸고, 단어 단위와 글자 조각 단위를 비교하고, TF-IDF와 잠재 의미 분석으로 비슷한 문장을 찾는다.
ChatGPT, Qwen, Claude 같은 AI 도우미에 붙여 넣는 프롬프트다. "복사"를 누르면 프롬프트 뒤에 고른 코드가 함께 붙는다. 〔 〕 안을 내 상황으로 바꿔 쓰면 된다.
AI의 답은 출발점일 뿐이다. 제안된 논문·수치·라이브러리 함수는 반드시 원문과 공식 문서로 확인한다. 공모전·논문에 AI 도움을 받았다면 주최 측과 학술지의 규정에 따라 사용 사실과 범위를 밝힌다.
본문의 노란 점선 밑줄과 같은 사전이다. 시리즈 전체에서 같은 표기를 쓴다. 섹션 이름을 누르면 처음 나온 곳으로 간다.
비유는 이해의 첫걸음이지만 오해의 씨앗도 된다. 초파리·뇌 비유에는 강도를 표시했다. 직접 실제로 같은 일을 한다는 근거가 있음 · 부분 일부 성질만 닮음 · 없음 대응하는 것이 알려지지 않음
| 개념 | 일상 비유 | 초파리·뇌 비유 | 비유가 틀리는 지점 |
|---|---|---|---|
| 유니코드 | 전 세계 글자에 붙인 주민등록번호 | 없음 | 번호는 글자를 구별할 뿐, 글자끼리 얼마나 비슷한지는 알려 주지 않는다 |
| BPE | 자주 함께 쓰는 단어를 줄임말로 만들기 ("초파리" 한 덩어리) | 없음 | 줄임말은 사람이 뜻을 보고 만들지만, BPE는 횟수만 보고 합친다. 뜻과 상관없는 조각도 생긴다 |
| 토큰 번호 | 도서관 책의 청구 번호 | 없음 | 청구 번호는 주제별로 모이지만, 토큰 번호는 가나다순이나 등장 순서일 뿐이다 |
| 임베딩 | 지도 위 좌표: 가까운 동네끼리 비슷하다 | 부분 초파리 버섯체는 냄새를 여러 케니언 세포의 활성 패턴(벡터)으로 나타낸다 | 버섯체는 냄새를 넓게 퍼뜨려 구별하기 쉽게 만들지만(희소), 임베딩은 몇백 칸에 촘촘히 담는다. 만드는 방법도 다르다 |
| 토큰 주머니 | 문장을 낱말 카드로 잘라 봉투에 넣기 | 없음 | 봉투에서 카드를 꺼내도 원래 순서는 알 수 없다. 한국어는 조사 카드가 일부 단서를 준다 |
| 다음 토큰 확률 | 끝말잇기에서 다음에 올 말 짐작하기 | 부분 뇌도 다음에 올 말소리를 예측한다는 연구가 있다 | 뇌의 예측은 뜻·상황·몸의 경험과 얽혀 있다. 모델은 글자 조각의 통계만으로 계산한다 |
E-1 저자 소개 · E-2 학술 레퍼런스 · E-3 그림 참고 자료
강사, 실무 OJT 담당자, 튜터를 위한 운영 안내다. 시간은 예상치이므로 실제 수업에 맞춰 조정한다.
| 대상 | 고객 문의·리뷰·문서 같은 글 데이터를 다루려는 대학생·실무자. 언어 모델이 글을 어떻게 받아들이는지 궁금한 사람 |
|---|---|
| 선수 지식 | 벡터와 코사인 유사도의 개념. 3-8의 위치 정보를 알면 섹션 5·6이 쉽다 |
| 학습 목표 | ① 글자 → 유니코드 → 바이트를 설명한다 ② BPE가 토큰 사전을 만드는 과정과 처음 보는 단어를 다루는 방법을 설명한다 ③ 번호 · 임베딩 · 위치 정보가 각각 왜 필요한지 설명한다 |
| 예상 시간 | 읽기 35~45분 · 시연 20분 · Colab 실습 25분 (코드 1 15분, 코드 2 10분) |
도입 5분(섹션 1 이모지 4바이트) → 섹션 2 BPE 15분 → 섹션 3·4 15분 → 섹션 5 dog bites man 5분 → 섹션 6 5분 → 확인 문제 5분.
우리 팀 문서 30문장으로 말뭉치 만들기 15분 → 코드 1의 CORPUS 바꿔 BPE·임베딩 다시 계산 30분 → 코드 2로 비슷한 문의 찾기 25분 → "모름" 토큰과 개인정보 처리 토론 20분.
입문자는 섹션 1·2·4만. 중급자는 BPE 합치기 세 번을 손으로 해 보게 한 뒤(단어 빈도 세기 → 가장 잦은 쌍 찾기) 섹션 2의 규칙 목록과 대조한다.
| 섹션 | 멈춰서 물어볼 질문 | 조작 팁 |
|---|---|---|
| 1 유니코드 | "같은 글자 수라도 저장 크기가 다른 이유는?" | 한글 문장 → "Hello 초파리" → 이모지 문장 순서 |
| 2 토큰 나누기 | "왜 어미 '한다'가 가장 먼저 합쳐졌을까?" | 0 → 60번, 이어서 처음 보는 단어 문장 |
| 3 토큰 번호 | "54번이 5번보다 크다는 게 뜻이 있을까?" | "AI가 꽃을 본다"에서 "모름" 토큰을 짚는다 |
| 4 임베딩 | "'곤충'을 가르친 적이 없는데 왜 곤충끼리 모였을까?" | 초파리는 → 신경망은 순서로 이웃의 성격을 비교한다 |
| 5 위치 정보 | "한국어는 어순이 자유로운데 위치 정보가 왜 필요할까?" | 세 비교를 차례로 누른다 |
| 6 모델 처리 | "앞 단어 하나만 보는 모델의 약점은?" | "초파리는"과 "꿀벌은"의 확률을 비교한다 |
| 오해 | 바른 설명 | 보여 줄 장면 |
|---|---|---|
| 토큰 = 단어 | 토큰은 말뭉치에 따라 정해지는 조각이다. 글자일 수도, 단어일 수도, 그 중간일 수도 있다 | 섹션 2 |
| 한글 한 글자는 1바이트 | UTF-8에서 한글 음절은 3바이트다 | 섹션 1 |
| 토큰 번호가 가까우면 뜻도 가깝다 | 번호는 사전의 칸 위치일 뿐이다. 뜻은 임베딩에 담긴다 | 섹션 3·4 |
| 임베딩이 가까우면 동의어다 | 함께 쓰이는 단어도 가까워진다. "비슷함"의 뜻은 만드는 방법에 달려 있다 | 섹션 4 "신경망은" |
| 모델은 글을 사람처럼 이해한다 | 번호와 벡터로 다음 토큰의 확률을 계산한다. 이해했는지는 따로 따져야 할 문제다 | 섹션 6 |
0xAC00 + (0 × 21 + 0) × 28 + 1 = 0xAC01.
한글 3자 × 3 + 공백 1 + 이모지 4 = 14바이트.
말뭉치의 모든 단어에서 이웃한 두 조각의 쌍을, 그 단어가 나온 횟수만큼 세어 더한다. 가장 큰 쌍을 하나로 합친다.
단어 단위에서는 사전에 없어 통째로 "모름"이 된다. BPE에서는 ["초파리", "들", "이"]처럼 아는 조각으로 나뉜다.
둘 다 {dog:1, bites:1, man:1}로 같다. 순서를 구별하려면 위치 정보가 필요하다.
코드 1의 CORPUS에 "나비는 꽃을 좋아한다", "나비는 날개가 있다"를 더해 다시 실행한다. "나비는"의 가장 가까운 단어를 확인하고, 섹션 4의 설명과 연결해 이유를 쓴다.
코드 1의 bpe_train에서 합치기 횟수를 10·30·60·100으로 바꿔 가며 사전 크기와 문장당 평균 토큰 수를 표로 만든다. 사전 크기와 토큰 수의 맞바꿈을 설명하고, 업무 문서라면 어느 값을 고를지 근거를 쓴다.
| 입문자 | 섹션 1의 자모 공식과 섹션 3은 건너뛰어도 흐름이 끊기지 않는다 |
|---|---|
| 심화 | BPE 말고 다른 토큰 나누기 방법(유니그램 언어 모델, 형태소 분석기 기반)을 조사해 비교하게 한다. 조사한 논문은 원문으로 확인한다 |
| 더 배우기 | 안상선, 「비즈니스를 위한 데이터 과학」 강의안 (데이터 과학 전반) · STEP [K-디지털] 인공지능 자연어 처리 (이 편과 직접 연결) · STEP [K-디지털] 핀테크 데이터 분석 기초 (3-6과 연결) |
| 강사용 자료 | 확인 문제의 채점 기준과 과제 예시 답안은 교육자용 정답 페이지 (3-5)에서 볼 수 있다 |
「3-5 텍스트」 편을 끝까지 읽었어요. 연구실 식구들이 한마디씩 정리해 드립니다.