임베딩(Embedding)
임베딩의 정의
임베딩은 텍스트와 같은 이산적 데이터를 고차원 공간의 연속적인 수치 벡터로 변환하는 방법입니다. “Embed”는 “포함시키다” 또는 “깊숙히 박다”라는 의미를 가집니다.
주요 특징
1. 벡터 공간 표현
- 이산적 데이터를 벡터 공간에 포함
- 데이터 간 유사도를 수치적으로 표현
- 예: 과일(딸기, 사과, 용과) 간 언어적 유사도 표현
2. 밀집 표현 (Dense Representation)
- 원-핫 인코딩과 달리 요소의 값이 0이 아닌 연속값으로 존재
- 벡터의 각 요소가 의미 있는 값을 가짐
목적
데이터 간 유사성을 수치적으로 찾아내는 것
임베딩의 장점
1. 차원 축소
- 원-핫 인코딩에 비해 낮은 차원의 벡터 사용
- 메모리 효율성 증가
- 계산 비용 감소
2. 의미적 유사도 표현
1
2
# 예시: 단어 간 유사도
similarity("사과", "딸기") > similarity("사과", "자동차")
3. 연속적인 벡터 공간
- 단어 간의 관계를 수학적으로 표현
- 벡터 연산을 통한 의미 조작 가능
임베딩 vs 원-핫 인코딩
| 특징 | 원-핫 인코딩 | 임베딩 |
|---|---|---|
| 차원 | 높음 (단어 수만큼) | 낮음 (일반적으로 50-300) |
| 표현 | 희소 벡터 (Sparse) | 밀집 벡터 (Dense) |
| 유사도 | 표현 불가 | 표현 가능 |
| 메모리 | 비효율적 | 효율적 |
활용 분야
- 자연어 처리 (NLP)
- 추천 시스템
- 이미지 분류
- 유사도 검색
- 감성 분석
대표적인 임베딩 기법
1. Word2Vec
- CBOW (Continuous Bag of Words)
- Skip-gram
2. GloVe
- Global Vectors for Word Representation
3. FastText
- 서브워드(subword) 기반 임베딩
4. Transformer 기반
- BERT
- GPT
- RoBERTa
실전 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from gensim.models import Word2Vec
# 학습 데이터
sentences = [
['사과', '과일', '맛있다'],
['딸기', '과일', '달다'],
['자동차', '탈것', '빠르다']
]
# Word2Vec 모델 학습
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1)
# 유사도 계산
similarity = model.wv.similarity('사과', '딸기')
print(f"사과와 딸기의 유사도: {similarity}")