자연어처리와 순환신경망
기계가 언어를 이해하는 법
기계에게 텍스트는 어떻게 보이는가
스팸 필터, 번역기, 챗봇 -- 모두 기계가 글을 '이해'해야 합니다. 하지만 컴퓨터는 숫자만 처리할 수 있습니다. "오늘 날씨가 좋다"라는 문장을 컴퓨터에게 전달하려면 먼저 텍스트를 숫자로 변환해야 합니다.
이 과정은 세 단계로 이루어집니다. 텍스트 -> 토큰 -> 숫자(인코딩) -> 벡터(임베딩). 그리고 언어에는 순서가 중요합니다. "개가 사람을 물었다"와 "사람이 개를 물었다"는 단어가 같지만 의미가 전혀 다릅니다.
이 장에서는 텍스트 전처리부터 단어 벡터, 감성 분류, 그리고 순서를 기억하는 RNN까지 자연어처리의 핵심 기법을 실습합니다.
토큰화: 텍스트를 조각으로 나누다
텍스트를 처리하는 첫 단계는 토큰화(tokenization)입니다. 문장을 의미 있는 단위(토큰)로 쪼개는 작업입니다. 한국어는 영어와 달리 공백만으로 단어를 구분하기 어려워, 형태소 분석이나 서브워드 분할이 자주 사용됩니다.
글자 단위: 각 글자를 하나의 토큰으로. 어휘가 작지만 의미 파악이 어렵다.
단어 단위: 공백/형태소 기준. 직관적이지만 어휘가 폭증할 수 있다.
서브워드 (BPE): 자주 나오는 글자 조합을 묶어 토큰으로. 현대 NLP의 표준.
실습 1: 한국어 토크나이저
한국어 문장을 입력하면 세 가지 토큰화 방식의 결과를 비교합니다. 토큰 수가 어떻게 달라지는지 관찰하세요.
글자 단위
단어(공백) 단위
서브워드(유사 BPE)
Bag of Words와 TF-IDF
토큰화된 텍스트를 벡터(숫자 목록)로 바꾸는 고전적 방법 두 가지를 배웁니다.
TF = 문서 d에서 단어 t의 빈도
IDF = log(전체 문서 수 / 단어 t를 포함하는 문서 수)
흔한 단어는 IDF가 낮아져 가중치가 줄어든다
실습 2: BoW vs TF-IDF 비교
두 문장을 입력하면 BoW 행렬과 TF-IDF 행렬을 나란히 비교합니다. 공통 단어(조사 등)가 TF-IDF에서 어떻게 억제되는지 관찰하세요.
Bag of Words
| 단어 | 문서 1 | 문서 2 |
|---|
TF-IDF
| 단어 | 문서 1 | 문서 2 |
|---|
단어 임베딩: 의미를 벡터에 담다
BoW와 TF-IDF는 단어 간의 의미적 관계를 포착하지 못합니다. "왕"과 "여왕"이 관련 있다는 것을 모릅니다. 단어 임베딩(Word Embedding)은 각 단어를 저차원 벡터로 표현하되, 의미가 비슷한 단어는 벡터 공간에서 가까이 위치하도록 학습합니다.
vec("왕") - vec("남자") + vec("여자") ≈ vec("여왕")
vec("서울") - vec("한국") + vec("일본") ≈ vec("도쿄")
실습 3: 단어 임베딩 탐색기
50개 한국어 단어가 2D 공간에 배치되어 있습니다. 의미가 비슷한 단어끼리 클러스터를 이루는 것을 관찰하세요. 벡터 산술도 시도할 수 있습니다.
실습 4: 한국어 감성 분류기
한국어 문장을 입력하면 긍정/부정을 분류합니다. 키워드 기반 모델이 어떤 단어에 반응하는지 하이라이트로 확인하세요. 실제 딥러닝 모델은 문맥까지 고려하지만, 여기서는 단어 감성 사전 기반의 간단한 모델을 사용합니다.
RNN: 순서를 기억하는 신경망
일반 신경망은 각 입력을 독립적으로 처리합니다. 하지만 언어와 시계열 데이터는 순서가 핵심입니다. 순환신경망(RNN)은 이전 단계의 정보를 "숨겨진 상태(hidden state)"에 저장하고, 다음 단계에 전달합니다.
h(t) = tanh(W_h * h(t-1) + W_x * x(t) + b)
h(t) = 현재 숨겨진 상태, h(t-1) = 이전 숨겨진 상태, x(t) = 현재 입력
실습 5: RNN 시퀀스 처리 시각화
숫자 시퀀스(예: 온도 변화)를 RNN이 한 단계씩 처리하는 과정을 관찰합니다. 각 시점에서 숨겨진 상태가 어떻게 변하는지, 그리고 다음 값을 어떻게 예측하는지 확인하세요.
입력 시퀀스와 예측
숨겨진 상태 변화
- 텍스트는 토큰화 -> 인코딩 -> 임베딩의 과정을 거쳐 숫자 벡터로 변환된다.
- BoW는 단어 빈도, TF-IDF는 문서 특이적 중요도를 반영한다.
- 단어 임베딩은 의미적 관계를 벡터 공간에 표현하여 유사 단어를 가까이 배치한다.
- RNN은 숨겨진 상태를 통해 시퀀스의 순서 정보를 유지한다.
- 기본 RNN은 장기 의존성 문제가 있으며, LSTM이 이를 개선한다.
다음 장 예고: RNN은 순서대로 처리하므로 병렬화가 어렵고 긴 문맥에 약합니다. 다음 장에서는 이 한계를 극복한 Transformer와, 이를 거대하게 확장한 GPT 같은 대규모 언어모델(LLM)을 배웁니다.