콘텐츠로 이동

자연어 처리(NLP)와 단어 임베딩의 이해

🚀 개요

컴퓨터는 텍스트를 직접 이해하지 못합니다. 인간의 언어를 컴퓨터가 계산할 수 있는 '숫자'로 변환하는 과정이 자연어 처리의 첫걸음입니다. 이 포스트에서는 텍스트 전처리부터 현대 NLP의 핵심인 단어 임베딩(Word Embedding)에 대해 다룹니다.

💡 텍스트 전처리: 토큰화와 인덱싱

텍스트를 신경망에 넣기 전, 가장 먼저 작게 쪼개는 과정인 토큰화(Tokenization)가 필요합니다.

from tensorflow.keras.preprocessing.text import Tokenizer

docs = ['먼저 텍스트의 각 단어를 나누어 토큰화합니다.',
       '텍스트의 단어로 토큰화해야 딥러닝에서 인식됩니다.']

token = Tokenizer()
token.fit_on_texts(docs)
print(token.word_index)
- 결과: 각 단어에 고유한 정수 인덱스가 부여됩니다. (예: {'텍스트의': 1, '딥러닝에서': 2, ...})

🛠 원-핫 인코딩의 한계

초기에는 정수 인덱스를 원-핫 벡터로 변환하여 사용했습니다. - 문제점 1 (유사도 부재): "강아지"와 "고양이" 벡터 간의 내적이 0이 되어, 의미적 연관성을 찾을 수 없습니다. - 문제점 2 (차원의 저주): 단어 사전이 커질수록 벡터의 길이도 기하급수적으로 늘어나 메모리 낭비가 심해집니다.

🚀 임베딩(Embedding): 의미를 벡터 공간에 압축하기

단어를 고정된 크기의 실수 벡터로 변환하여, 비슷한 문맥에서 등장하는 단어들이 가까운 위치에 있게 만듭니다.

임베딩 층(Embedding Layer) 설정

# word_size: 전체 단어 수, 8: 임베딩 차원, input_length: 문장 길이
model.add(Embedding(word_size, 8, input_length=4))
- 동작 원리: 내부적으로 가중치 행렬(Lookup Table)을 가지고 있으며, 입력된 단어 인덱스에 해당하는 행(row) 벡터를 추출합니다.

어떻게 학습되는가?

임베딩은 고정된 값이 아니라 훈련을 통해 학습되는 파라미터입니다. 1. 순전파: 단어 인덱스가 벡터로 변환되어 모델을 거쳐 예측값 출력. 2. 역전파: 예측 오류(Loss)가 발생하면, 오차의 기울기(Gradient)가 임베딩 층까지 전달됩니다. 3. 업데이트: 해당 단어의 벡터 값이 오차를 줄이는 방향으로 미세하게 조정됩니다. 이 과정을 반복하면 비슷한 의미의 단어들이 벡터 공간에서 서로 모이게 됩니다.

📐 아키텍처: 긍정/부정 리뷰 예측 모델

graph LR
    Input[문장 인덱스] --> Emb[Embedding Layer]
    Emb --> Flat[Flatten]
    Flat --> Dense[Dense Layer / Sigmoid]
    Dense --> Output[긍정/부정 확률]

📝 배운 점 및 결론

  • 의미의 공간화: 단어 임베딩을 통해 "왕 - 남자 + 여자 ≈ 여왕"과 같은 연산이 가능해진다는 점이 놀랍습니다.
  • 효율성: 원-핫 인코딩보다 훨씬 적은 차원으로 단어의 풍부한 의미를 담아낼 수 있습니다.
  • 확장성: Word2Vec, GloVe를 넘어 최근의 BERT와 같은 모델들은 문맥에 따라 임베딩 값이 변하는 동적 임베딩을 사용하여 성능을 극대화하고 있습니다.

작성자: kim-hyunjin 작성일: 2026-04-21