728x90
반응형
🧩 임베딩(Embedding)이란?
임베딩은
“단어 같은 이산적(discrete) 데이터를 연속적(continuous) 수치 벡터로 변환하는 과정” 입니다.
즉, 텍스트나 카테고리 데이터를 딥러닝 모델이 이해할 수 있는 숫자 형태(벡터)로 표현하는 기술이에요.
💡 왜 임베딩이 필요할까?
- RNN이나 CNN은 숫자 벡터만 입력받을 수 있습니다.
- 하지만 텍스트 데이터는 문자열이죠.
- 따라서 단어를 숫자로 바꿔야 합니다.
단순히 “원-핫 인코딩(one-hot encoding)”을 쓰면?
| 단어 | 원-핫 인코딩 벡터 |
|---|---|
| cat | [1, 0, 0, 0] |
| dog | [0, 1, 0, 0] |
| apple | [0, 0, 1, 0] |
| car | [0, 0, 0, 1] |
이 방식의 문제점 👇
- 차원이 너무 커짐 (단어 수가 많을수록 벡터 길이 폭발)
- 단어 간 관계가 전혀 없음
- “king”과 “queen”은 전혀 다른 벡터
- “cat”과 “dog”의 유사성도 표현 불가
🧠 그래서 등장한 것이 “임베딩(Embedding)”
임베딩은 단어를 저차원 실수 벡터 공간에 매핑(mapping) 합니다. 이 공간에서는 의미가 비슷한 단어끼리 가까이 위치합니다.
예를 들어:
| 단어 | 임베딩 벡터 예시 |
|---|---|
| king | [0.8, 0.1, 0.9] |
| queen | [0.7, 0.2, 0.8] |
| man | [0.6, 0.3, 0.1] |
| woman | [0.5, 0.4, 0.2] |
📍 관계:
king - man ≈ queen - woman
➡️ 단어 간의 의미적 거리(semantic distance) 가 반영됨
🧮 Keras에서의 Embedding 층
from tensorflow.keras.layers import Embedding
Embedding(input_dim, output_dim, input_length)
| 매개변수 | 설명 |
|---|---|
input_dim |
단어(토큰)의 개수 (예: 5000개 단어 사전) |
output_dim |
임베딩 벡터의 차원 (보통 50~300) |
input_length |
입력 시퀀스의 길이 (RNN에 들어갈 단어 수) |
예시:
model = Sequential([
Embedding(input_dim=5000, output_dim=100, input_length=20),
SimpleRNN(64),
Dense(1, activation='sigmoid')
])
➡️ Embedding 층이 “원-핫 벡터”를 “100차원 의미 벡터”로 변환해 RNN에 전달함.
🔍 정리
| 구분 | 원-핫 인코딩 | 임베딩 |
|---|---|---|
| 차원 | 단어 수만큼 큼 | 수십~수백 차원 |
| 학습 | 고정된 벡터 | 학습을 통해 갱신 가능 |
| 관계 표현 | 불가능 | 유사한 단어끼리 가까이 위치 |
| 메모리 효율 | 매우 낮음 | 매우 효율적 |
| 예시 | [0,0,0,1,0,0] |
[0.45, -0.13, 0.72, ...] |
✨ 한 줄 요약
임베딩(Embedding)은 “단어를 의미적으로 표현하는 실수 벡터로 변환하는 과정”으로, RNN이나 LSTM이 문맥과 의미를 이해하도록 돕는 핵심 기술이에요.
728x90
반응형
'학습 > AI' 카테고리의 다른 글
| 한글 텍스트 전처리와 감성분류 (0) | 2025.11.15 |
|---|---|
| RNN 핵심 정리 (0) | 2025.11.14 |
| RNN( Recurrent Neural Network )의 개념 (0) | 2025.11.12 |
| 합성곱 신경망(CNN), 신경망 성능 개선, 전이학습 (0) | 2025.11.11 |
| [ 딥러닝 ] Batch의 개념을 비유하여 설명하기 (0) | 2025.11.10 |