728x90
반응형

1. 토크나이징 (Tokenization)

먼저 텍스트를 토큰 단위로 쪼갬.

"안녕하세요 반갑습니다"
→ ["안녕", "##하세요", "반갑", "##습니다"]  ← BPE/WordPiece 방식

한글은 영어보다 형태소가 복잡해서, 글자 단위나 음절 단위로 쪼개는 경우도 많아.


2. 토큰 → 벡터 매핑 

각 토큰은 모델 내부의 임베딩 테이블(lookup table) 에서 고정된 초기 벡터로 변환돼.

"안녕" → [0.23, -0.11, 0.87, ...]  (768차원 등)
"반갑" → [0.41,  0.03, 0.12, ...]

이건 네가 말한 "단어 매핑"이랑 거의 같아.


3. Transformer로 문맥 반영 (핵심 차이점!)

근데 여기서 끝이 아니야. 각 토큰 벡터가 주변 문맥을 보면서 서로 영향을 주고받아 (Self-Attention).

"사과가 맛있다"  → "사과" 벡터가 과일 방향으로
"사과드립니다"   → "사과" 벡터가 사죄 방향으로

같은 단어도 문맥에 따라 다른 벡터가 됨.


4. 문서 전체를 하나의 벡터로 압축

마지막으로 모든 토큰 벡터를 하나의 벡터로 풀링해서 문서 전체의 의미를 표현.

[CLS] 토큰 사용 또는 평균 풀링
→ 최종 문서 벡터: [0.15, 0.72, -0.33, ...]  (1536차원 등)

정리하면

단계 하는 일

토크나이징 텍스트 → 토큰 조각
임베딩 테이블 토큰 → 초기 벡터 (네 말한 매핑!)
Transformer 문맥 반영해서 벡터 보정
풀링 전체를 하나의 벡터로 압축

결국 벡터디비에 들어가는 건 "이 문서의 의미 전체를 압축한 좌표" 같은 거야. 검색할 때 쿼리도 같은 과정으로 벡터화해서, 벡터 공간에서 가까운 문서를 찾는 방식이지.

728x90
반응형

+ Recent posts