Word Embedding: 컴퓨터는 단어를 어떻게 이해할까?
1. 기본 개념: 단어를 좌표로 바꾸기
컴퓨터는 "고양이"라는 글자를 모릅니다. 숫자만 이해할 수 있습니다.
그렇다면 "고양이"를 어떻게 컴퓨터에게 이해시킬까요?
임베딩(Embedding)은 단어를 다차원 공간의 좌표로 바꾸는 마법입니다.
비유: 지도 위의 위치
- 고양이:
[0.8, 0.2, 0.9](동물 지역, 귀여움 지구, 털복숭이 거리) - 강아지:
[0.7, 0.3, 0.9](동물 지역, 활발함 지구, 털복숭이 거리) - 자동차:
[-0.5, -0.8, 0.1](기계 지역, 빠름 지구, 금속 거리)
"고양이"와 "강아지"는 좌표가 비슷합니다 = 의미가 비슷합니다!
2. One-Hot Encoding vs Embedding
| 방식 | 표현 방법 | 장점 | 단점 |
|---|---|---|---|
| One-Hot Encoding | 고양이 = [1, 0, 0, 0]강아지 = [0, 1, 0, 0] |
간단함 | 의미 표현 불가 차원 폭발 (단어 수만큼) |
| Embedding | 고양이 = [0.8, 0.2, 0.9]강아지 = [0.7, 0.3, 0.9] |
의미 보존 적은 차원 (50~300) |
학습 필요 |
One-Hot의 문제점: 사전에 단어가 10만 개라면, 각 단어마다 10만 차원 벡터가 필요합니다. 게다가 "고양이"와 "강아지"의 유사도는 0입니다. (모든 단어가 동등하게 멀어요)
3. Word2Vec: "비슷한 문맥 = 비슷한 의미"
Word2Vec은 2013년 구글이 발표한 임베딩 학습 알고리즘입니다.
핵심 아이디어
"같은 맥락에서 자주 등장하는 단어들은 의미가 비슷하다."
예시:
- "고양이가 생선을 먹는다"
- "강아지가 사료를 먹는다"
- "앵무새가 모이를 먹는다"
→ "생선", "사료", "모이"는 모두 "먹는다" 근처에 나타나므로, AI는 이들을 비슷한 좌표에 배치합니다.
4. CBOW vs Skip-gram: 두 가지 학습 방법
| 방식 | 학습 방향 | 비유 | 특징 |
|---|---|---|---|
| CBOW (Continuous Bag of Words) |
주변 단어 → 중심 단어 | "빈칸 채우기" "고양이가 ___ 먹는다" |
빠름 자주 쓰이는 단어 학습 |
| Skip-gram | 중심 단어 → 주변 단어 | "연상 게임" "생선"을 보면 "고양이", "먹다" 예측 |
느림 희귀 단어도 잘 학습 |
비유: 퍼즐 vs 연상 게임
- CBOW: "나는 ___을 좋아해" → 정답은 "사과"구나!
- Skip-gram: "사과"가 주어졌을 때 → "빨갛다", "과일", "맛있다"를 예측해봐!
5. 벡터 연산의 마법: 의미의 산술
임베딩의 가장 놀라운 특징은 벡터 연산으로 의미를 조작할 수 있다는 것입니다.
유명한 예시
왕(King) - 남자(Man) + 여자(Woman) = 여왕(Queen)
설명:
왕의 좌표:[5.0, 9.0, 1.0](권력=5, 지위=9, 성별=남성)남자빼기:-[0.0, 0.0, 1.0](성별의 남성 성분 제거)여자더하기:+[0.0, 0.0, -1.0](성별의 여성 성분 추가)- 결과:
[5.0, 9.0, -1.0]→ 가장 가까운 단어는여왕!
더 많은 예시
도쿄 - 일본 + 프랑스 = 파리걷다 - 현재형 + 과거형 = 걸었다삼성 - 한국 + 미국 = 애플
6. 코사인 유사도: 방향이 비슷하면 의미도 비슷하다
벡터의 거리가 아니라 방향(각도)을 비교합니다.
왜 거리가 아니라 방향일까?
- "좋다":
[0.5, 0.5] - "매우 좋다":
[1.0, 1.0]
거리로 재면 멀지만, 방향은 같습니다! (둘 다 긍정의 의미)
코사인 유사도 공식
cos(θ) = (A · B) / (|A| × |B|)
- 1: 완전히 같은 방향 (의미 동일)
- 0: 직각 (무관계)
- -1: 정반대 (반대 의미)
예시:
cos(고양이, 강아지) = 0.85(매우 유사)cos(고양이, 자동차) = 0.12(거의 무관)
7. 차원 축소 (t-SNE, PCA): 100차원을 2D로 보기
단어는 보통 50~300차원의 벡터로 표현됩니다.
하지만 사람은 3차원까지밖에 시각화할 수 없습니다.
차원 축소 알고리즘
- PCA (Principal Component Analysis): 가장 중요한 2~3개 축만 남기고 나머지 버리기
- t-SNE (t-Distributed Stochastic Neighbor Embedding): 비슷한 것끼리 뭉치도록 2D로 압축
시각화 예시
100차원 공간:
고양이 = [0.1, 0.2, 0.3, ..., 0.9] (100개 숫자)
PCA 적용 후:
고양이 = [0.8, 0.2] (2D 평면에 표시 가능!)
시뮬레이션에서 볼 수 있는 것:
- 동물 단어들끼리 모여있는 클러스터
- 국가와 수도가 평행사변형을 이루는 패턴
8. 실무 활용 사례
8.1 추천 시스템
- YouTube: "이 영상을 본 사람은 이것도 봤어요" → 영상 제목을 임베딩하고 유사도 계산
- 넷플릭스: 영화 줄거리를 벡터로 바꿔서 "비슷한 영화" 추천
8.2 검색 엔진
- 구글: 검색어 "사과"를 입력하면 → "애플", "아이폰"도 연관 검색어로 표시
- 의미 검색: "배가 아파"를 검색하면 → "복통", "위장병" 문서도 찾아줌
8.3 기계 번역
- 한국어 임베딩: "안녕" =
[0.5, 0.8] - 영어 임베딩: "Hello" =
[0.5, 0.8] - 두 언어의 임베딩 공간을 정렬하면, 번역이 가능해집니다!
8.4 감성 분석
- 리뷰 분석: "이 영화 정말 감동적이에요" → 긍정 벡터 공간
- 악플 탐지: "쓰레기 같은" → 부정 벡터 공간
Q&A: 자주 묻는 질문
Q1. 단어가 아니라 문장도 임베딩할 수 있나요?
A. 네! Sentence-BERT, Universal Sentence Encoder 등의 기술이 있습니다.
Q2. 한국어에도 Word2Vec이 통할까요?
A. 물론입니다. 형태소 분석 후 학습하면 됩니다. (예: "먹었다" → "먹", "었", "다")
Q3. ChatGPT도 임베딩을 쓰나요?
A. 네! GPT 모델은 훨씬 발전된 형태의 임베딩(Transformer 기반 Contextual Embedding)을 사용합니다.
Q4. 임베딩 벡터의 차원은 어떻게 정하나요?
A. 보통 50~300차원을 씁니다. 차원이 클수록 정확하지만, 학습 시간과 메모리가 많이 필요합니다.
Q5. 동음이의어는 어떻게 구분하나요?
A. Word2Vec은 문맥을 고려하지 않는 한계가 있습니다. 이를 해결한 것이 BERT, ELMo 같은 문맥 임베딩입니다.
정리
| 개념 | 설명 | 핵심 아이디어 |
|---|---|---|
| Embedding | 단어 → 숫자 좌표 변환 | 의미를 보존하는 벡터화 |
| Word2Vec | 임베딩 학습 알고리즘 | "비슷한 맥락 = 비슷한 의미" |
| CBOW | 주변 단어로 중심 단어 예측 | 빈칸 채우기 |
| Skip-gram | 중심 단어로 주변 단어 예측 | 연상 게임 |
| 코사인 유사도 | 벡터 간 유사도 측정 | 방향(각도)을 비교 |
| 차원 축소 | 고차원을 2D/3D로 압축 | 시각화를 위한 변환 |